{
  "version": 3,
  "sources": ["../../../_sentry-release-injection-stub", "../../../node_modules/mri/lib/index.js", "../../../packages/dev-tools/cli/prettier.ts", "../../../packages/dev-tools/common/constants.ts", "../../../node_modules/sisteransi/src/index.js", "../../../node_modules/picocolors/picocolors.js", "../../../node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js", "../../../node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js", "../../../node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js", "../../../node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js", "../../../node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js", "../../../node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js", "../../../node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js", "../../../node_modules/@clack/core/src/utils/settings.ts", "../../../node_modules/@clack/core/src/utils/string.ts", "../../../node_modules/@clack/core/src/utils/index.ts", "../../../node_modules/@clack/core/src/prompts/prompt.ts", "../../../node_modules/@clack/core/src/prompts/confirm.ts", "../../../node_modules/@clack/core/src/prompts/group-multiselect.ts", "../../../node_modules/@clack/core/src/prompts/multi-select.ts", "../../../node_modules/@clack/core/src/prompts/password.ts", "../../../node_modules/@clack/core/src/prompts/select.ts", "../../../node_modules/@clack/core/src/prompts/select-key.ts", "../../../node_modules/@clack/core/src/prompts/text.ts", "../../../node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js", "../../../node_modules/@clack/prompts/src/index.ts", "../../../packages/dev-tools/common/ast/transform.ts", "../../../node_modules/which-pm-runs/index.js", "../../../packages/dev-tools/common/utils.ts", "../../../packages/dev-tools/common/fs.ts", "../../../packages/dev-tools/common/typescript.ts", "../../../packages/dev-tools/cli/version.ts", "../../../packages/dev-tools/core/detect-frameworks.ts", "../../../packages/dev-tools/common/cache.ts", "../../../packages/dev-tools/common/dotenv.ts", "../../../packages/dev-tools/core/adapters/next/next-api-key.ts", "../../../packages/dev-tools/types.ts", "../../../packages/dev-tools/common/ast/convert-values.ts", "../../../packages/dev-tools/common/ast/component-input-types.ts", "../../../packages/dev-tools/common/ast/component-info.ts", "../../../packages/dev-tools/core/adapters/next/next-component-info.ts", "../../../packages/dev-tools/common/ast/ensure-imports.ts", "../../../packages/dev-tools/common/ast/exported-statements.ts", "../../../packages/dev-tools/common/ast/utils.ts", "../../../packages/dev-tools/common/ast/app-dependencies.ts", "../../../packages/dev-tools/common/ast/imported-statements.ts", "../../../packages/dev-tools/core/adapters/react/react-components.ts", "../../../packages/dev-tools/core/adapters/next/next-components.ts", "../../../packages/dev-tools/common/ast/normalize-statements.ts", "../../../packages/dev-tools/core/adapters/next/next-registry-parse.ts", "../../../packages/dev-tools/common/ast/remove-unused-imports.ts", "../../../packages/dev-tools/common/ast/component-registry.ts", "../../../packages/dev-tools/core/adapters/react/react-ts-program.ts", "../../../packages/dev-tools/common/ast/ensure-array-statement.ts", "../../../packages/dev-tools/core/adapters/next/next-registry.ts", "../../../packages/dev-tools/core/adapters/next/next-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/react/react-builder-sdk-setup.ts", "../../../packages/dev-tools/core/adapters/next/index.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-api-key.ts", "../../../packages/dev-tools/common/ast/ensure-comments.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-components.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-component-source-inputs.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-registry-parse.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-ts-program.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-registry.ts", "../../../packages/dev-tools/core/adapters/qwik-city/index.ts", "../../../packages/dev-tools/core/adapters/remix/remix-api-key.ts", "../../../packages/dev-tools/core/adapters/remix/remix-components.ts", "../../../packages/dev-tools/core/adapters/remix/remix-registry-parse.ts", "../../../packages/dev-tools/core/adapters/remix/remix-registry.ts", "../../../packages/dev-tools/core/adapters/remix/remix-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/remix/index.ts", "../../../packages/dev-tools/core/adapters/react/react-api-key.ts", "../../../packages/dev-tools/core/adapters/react/react-component-info.ts", "../../../packages/dev-tools/core/adapters/react/react-registry-parse.ts", "../../../packages/dev-tools/core/adapters/react/react-registry.ts", "../../../packages/dev-tools/core/adapters/react/react-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/react/index.ts", "../../../packages/dev-tools/core/adapters/angular/angular-api-key.ts", "../../../packages/dev-tools/core/adapters/angular/angular-components.ts", "../../../packages/dev-tools/core/adapters/angular/angular-app-module-imports.ts", "../../../packages/dev-tools/core/adapters/angular/angular-app-routes-update.ts", "../../../node_modules/json5/lib/unicode.js", "../../../node_modules/json5/lib/util.js", "../../../node_modules/json5/lib/parse.js", "../../../node_modules/json5/lib/stringify.js", "../../../node_modules/json5/lib/index.js", "../../../packages/dev-tools/core/adapters/angular/angular-fix-tsconfig.ts", "../../../packages/dev-tools/core/adapters/angular/angular-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/angular/angular-registry-parse.ts", "../../../packages/dev-tools/core/adapters/angular/angular-registry.ts", "../../../packages/dev-tools/core/adapters/angular/index.ts", "../../../packages/dev-tools/core/adapters/vue/vue-api-key.ts", "../../../packages/dev-tools/core/adapters/vue/vue-components.ts", "../../../packages/dev-tools/core/adapters/vue/vue-registry.ts", "../../../packages/dev-tools/core/adapters/vue/vue-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/vue/index.ts", "../../../node_modules/compress-json/dist/debug.js", "../../../node_modules/compress-json/dist/number.js", "../../../node_modules/compress-json/dist/encode.js", "../../../node_modules/compress-json/dist/config.js", "../../../node_modules/compress-json/dist/memory.js", "../../../node_modules/compress-json/dist/core.js", "../../../node_modules/compress-json/dist/helpers.js", "../../../node_modules/compress-json/dist/index.js", "../../../packages/dev-tools/core/import-export-registry.ts", "../../../packages/dev-tools/common/builder/builder-sdks.ts", "../../../packages/dev-tools/core/find-dependencies.ts", "../../../packages/dev-tools/core/create-dev-tools.ts", "../../../packages/dev-tools/types/connection-tracker.ts", "../../../packages/dev-tools/common/path.ts", "../../../packages/dev-tools/common/mem-sys.ts", "../../../packages/dev-tools/core/adapters/next/next-ensure-config-plugin.ts", "../../../packages/dev-tools/core/adapters/remix/remix-ensure-config-plugin.ts", "../../../packages/dev-tools/core/adapters/vite/vite-ensure-config-plugin.ts", "../../../packages/dev-tools/core/adapters/webpack/webpack-ensure-config-plugin.ts", "../../../packages/dev-tools/core/adapters/angular/angular-ensure-config-plugin.ts", "../../../packages/dev-tools/core/ensure-config-plugin.ts", "../../../packages/dev-tools/core/client-script.ts", "../../../packages/dev-tools/core/index.ts", "../../../node_modules/highlight.js/es/languages/arduino.js", "../../../node_modules/highlight.js/es/languages/bash.js", "../../../node_modules/highlight.js/es/languages/c.js", "../../../node_modules/highlight.js/es/languages/cpp.js", "../../../node_modules/highlight.js/es/languages/csharp.js", "../../../node_modules/highlight.js/es/languages/css.js", "../../../node_modules/highlight.js/es/languages/diff.js", "../../../node_modules/highlight.js/es/languages/go.js", "../../../node_modules/highlight.js/es/languages/graphql.js", "../../../node_modules/highlight.js/es/languages/ini.js", "../../../node_modules/highlight.js/es/languages/java.js", "../../../node_modules/highlight.js/es/languages/javascript.js", "../../../node_modules/highlight.js/es/languages/json.js", "../../../node_modules/highlight.js/es/languages/kotlin.js", "../../../node_modules/highlight.js/es/languages/less.js", "../../../node_modules/highlight.js/es/languages/lua.js", "../../../node_modules/highlight.js/es/languages/makefile.js", "../../../node_modules/highlight.js/es/languages/markdown.js", "../../../node_modules/highlight.js/es/languages/objectivec.js", "../../../node_modules/highlight.js/es/languages/perl.js", "../../../node_modules/highlight.js/es/languages/php.js", "../../../node_modules/highlight.js/es/languages/php-template.js", "../../../node_modules/highlight.js/es/languages/plaintext.js", "../../../node_modules/highlight.js/es/languages/python.js", "../../../node_modules/highlight.js/es/languages/python-repl.js", "../../../node_modules/highlight.js/es/languages/r.js", "../../../node_modules/highlight.js/es/languages/ruby.js", "../../../node_modules/highlight.js/es/languages/rust.js", "../../../node_modules/highlight.js/es/languages/scss.js", "../../../node_modules/highlight.js/es/languages/shell.js", "../../../node_modules/highlight.js/es/languages/sql.js", "../../../node_modules/highlight.js/es/languages/swift.js", "../../../node_modules/highlight.js/es/languages/typescript.js", "../../../node_modules/highlight.js/es/languages/vbnet.js", "../../../node_modules/highlight.js/es/languages/wasm.js", "../../../node_modules/highlight.js/es/languages/xml.js", "../../../node_modules/highlight.js/es/languages/yaml.js", "../../../node_modules/lowlight/lib/common.js", "../../../node_modules/highlight.js/lib/core.js", "../../../node_modules/highlight.js/es/core.js", "../../../node_modules/lowlight/lib/index.js", "../../../node_modules/lowlight/index.js", "../../../node_modules/emphasize/node_modules/chalk/source/vendor/ansi-styles/index.js", "../../../node_modules/emphasize/node_modules/chalk/source/vendor/supports-color/index.js", "../../../node_modules/emphasize/node_modules/chalk/source/utilities.js", "../../../node_modules/emphasize/node_modules/chalk/source/index.js", "../../../node_modules/emphasize/lib/index.js", "../../../node_modules/emphasize/index.js", "../../../packages/dev-tools/cli/exit.ts", "../../../packages/dev-tools/cli/constants.ts", "../../../packages/dev-tools/package.json", "../../../node_modules/source-map-js/lib/base64.js", "../../../node_modules/source-map-js/lib/base64-vlq.js", "../../../node_modules/source-map-js/lib/util.js", "../../../node_modules/source-map-js/lib/array-set.js", "../../../node_modules/source-map-js/lib/mapping-list.js", "../../../node_modules/source-map-js/lib/source-map-generator.js", "../../../node_modules/source-map-js/lib/binary-search.js", "../../../node_modules/source-map-js/lib/quick-sort.js", "../../../node_modules/source-map-js/lib/source-map-consumer.js", "../../../node_modules/source-map-js/lib/source-node.js", "../../../node_modules/source-map-js/source-map.js", "../../../node_modules/@babel/parser/src/util/location.ts", "../../../node_modules/@babel/parser/src/parse-error/module-errors.ts", "../../../node_modules/@babel/parser/src/parse-error/to-node-description.ts", "../../../node_modules/@babel/parser/src/parse-error/standard-errors.ts", "../../../node_modules/@babel/parser/src/parse-error/strict-mode-errors.ts", "../../../node_modules/@babel/parser/src/parse-error/pipeline-operator-errors.ts", "../../../node_modules/@babel/parser/src/parse-error.ts", "../../../node_modules/@babel/parser/src/plugins/estree.ts", "../../../node_modules/@babel/parser/src/tokenizer/context.ts", "../../../node_modules/@babel/parser/src/tokenizer/types.ts", "../../../node_modules/@babel/babel-helper-validator-identifier/src/identifier.ts", "../../../node_modules/@babel/babel-helper-validator-identifier/src/keyword.ts", "../../../node_modules/@babel/parser/src/util/identifier.ts", "../../../node_modules/@babel/parser/src/util/scope.ts", "../../../node_modules/@babel/parser/src/plugins/flow/scope.ts", "../../../node_modules/@babel/parser/src/parser/base.ts", "../../../node_modules/@babel/parser/src/parser/comments.ts", "../../../node_modules/@babel/parser/src/util/whitespace.ts", "../../../node_modules/@babel/parser/src/tokenizer/state.ts", "../../../node_modules/@babel/babel-helper-string-parser/src/index.ts", "../../../node_modules/@babel/parser/src/tokenizer/index.ts", "../../../node_modules/@babel/parser/src/util/class-scope.ts", "../../../node_modules/@babel/parser/src/util/expression-scope.ts", "../../../node_modules/@babel/parser/src/util/production-parameter.ts", "../../../node_modules/@babel/parser/src/parser/util.ts", "../../../node_modules/@babel/parser/src/parser/node.ts", "../../../node_modules/@babel/parser/src/plugins/flow/index.ts", "../../../node_modules/@babel/parser/src/plugins/jsx/xhtml.ts", "../../../node_modules/@babel/parser/src/plugins/jsx/index.ts", "../../../node_modules/@babel/parser/src/plugins/typescript/scope.ts", "../../../node_modules/@babel/parser/src/parser/lval.ts", "../../../node_modules/@babel/parser/src/plugins/typescript/index.ts", "../../../node_modules/@babel/parser/src/plugins/placeholders.ts", "../../../node_modules/@babel/parser/src/plugins/v8intrinsic.ts", "../../../node_modules/@babel/parser/src/plugin-utils.ts", "../../../node_modules/@babel/parser/src/options.ts", "../../../node_modules/@babel/parser/src/parser/expression.ts", "../../../node_modules/@babel/parser/src/parser/statement.ts", "../../../node_modules/@babel/parser/src/parser/index.ts", "../../../node_modules/@babel/parser/src/index.ts", "../../../node_modules/magicast/dist/index.mjs", "../../../packages/dev-tools/node/node-sys.ts", "../../../node_modules/uuid/dist/esm-node/stringify.js", "../../../node_modules/uuid/dist/esm-node/rng.js", "../../../node_modules/uuid/dist/esm-node/native.js", "../../../node_modules/uuid/dist/esm-node/v4.js", "../../../node_modules/uuid/dist/esm-node/index.js", "../../../packages/dev-tools/common/errors.ts", "../../../packages/dev-tools/cli/track.ts", "../../../package.json", "../../../packages/vcp-common/codegen.ts", "../../../packages/dev-tools/cli/fetch.ts", "../../../packages/vcp-common/figma-component.ts", "../../../packages/dev-tools/cli/figma-utils.ts", "../../../node_modules/globby/node_modules/@sindresorhus/merge-streams/index.js", "../../../node_modules/fast-glob/out/utils/array.js", "../../../node_modules/fast-glob/out/utils/errno.js", "../../../node_modules/fast-glob/out/utils/fs.js", "../../../node_modules/fast-glob/out/utils/path.js", "../../../node_modules/is-extglob/index.js", "../../../node_modules/is-glob/index.js", "../../../node_modules/glob-parent/index.js", "../../../node_modules/braces/lib/utils.js", "../../../node_modules/braces/lib/stringify.js", "../../../node_modules/is-number/index.js", "../../../node_modules/to-regex-range/index.js", "../../../node_modules/fill-range/index.js", "../../../node_modules/braces/lib/compile.js", "../../../node_modules/braces/lib/expand.js", "../../../node_modules/braces/lib/constants.js", "../../../node_modules/braces/lib/parse.js", "../../../node_modules/braces/index.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/constants.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/utils.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/scan.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/parse.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/picomatch.js", "../../../node_modules/micromatch/node_modules/picomatch/index.js", "../../../node_modules/micromatch/index.js", "../../../node_modules/fast-glob/out/utils/pattern.js", "../../../node_modules/merge2/index.js", "../../../node_modules/fast-glob/out/utils/stream.js", "../../../node_modules/fast-glob/out/utils/string.js", "../../../node_modules/fast-glob/out/utils/index.js", "../../../node_modules/fast-glob/out/managers/tasks.js", "../../../node_modules/@nodelib/fs.stat/out/providers/async.js", "../../../node_modules/@nodelib/fs.stat/out/providers/sync.js", "../../../node_modules/@nodelib/fs.stat/out/adapters/fs.js", "../../../node_modules/@nodelib/fs.stat/out/settings.js", "../../../node_modules/@nodelib/fs.stat/out/index.js", "../../../node_modules/queue-microtask/index.js", "../../../node_modules/run-parallel/index.js", "../../../node_modules/@nodelib/fs.scandir/out/constants.js", "../../../node_modules/@nodelib/fs.scandir/out/utils/fs.js", "../../../node_modules/@nodelib/fs.scandir/out/utils/index.js", "../../../node_modules/@nodelib/fs.scandir/out/providers/common.js", "../../../node_modules/@nodelib/fs.scandir/out/providers/async.js", "../../../node_modules/@nodelib/fs.scandir/out/providers/sync.js", "../../../node_modules/@nodelib/fs.scandir/out/adapters/fs.js", "../../../node_modules/@nodelib/fs.scandir/out/settings.js", "../../../node_modules/@nodelib/fs.scandir/out/index.js", "../../../node_modules/reusify/reusify.js", "../../../node_modules/fastq/queue.js", "../../../node_modules/@nodelib/fs.walk/out/readers/common.js", "../../../node_modules/@nodelib/fs.walk/out/readers/reader.js", "../../../node_modules/@nodelib/fs.walk/out/readers/async.js", "../../../node_modules/@nodelib/fs.walk/out/providers/async.js", "../../../node_modules/@nodelib/fs.walk/out/providers/stream.js", "../../../node_modules/@nodelib/fs.walk/out/readers/sync.js", "../../../node_modules/@nodelib/fs.walk/out/providers/sync.js", "../../../node_modules/@nodelib/fs.walk/out/settings.js", "../../../node_modules/@nodelib/fs.walk/out/index.js", "../../../node_modules/fast-glob/out/readers/reader.js", "../../../node_modules/fast-glob/out/readers/stream.js", "../../../node_modules/fast-glob/out/readers/async.js", "../../../node_modules/fast-glob/out/providers/matchers/matcher.js", "../../../node_modules/fast-glob/out/providers/matchers/partial.js", "../../../node_modules/fast-glob/out/providers/filters/deep.js", "../../../node_modules/fast-glob/out/providers/filters/entry.js", "../../../node_modules/fast-glob/out/providers/filters/error.js", "../../../node_modules/fast-glob/out/providers/transformers/entry.js", "../../../node_modules/fast-glob/out/providers/provider.js", "../../../node_modules/fast-glob/out/providers/async.js", "../../../node_modules/fast-glob/out/providers/stream.js", "../../../node_modules/fast-glob/out/readers/sync.js", "../../../node_modules/fast-glob/out/providers/sync.js", "../../../node_modules/fast-glob/out/settings.js", "../../../node_modules/fast-glob/out/index.js", "../../../node_modules/globby/node_modules/path-type/index.js", "../../../node_modules/unicorn-magic/default.js", "../../../node_modules/unicorn-magic/node.js", "../../../node_modules/slash/index.js", "../../../node_modules/globby/utilities.js", "../../../node_modules/globby/ignore.js", "../../../node_modules/globby/index.js", "../../../packages/dev-tools/common/node-request.ts", "../../../packages/dev-tools/common/builder/builder-api.ts", "../../../packages/dev-tools/common/builder/content-ids.ts", "../../../packages/dev-tools/common/builder/content-generation.ts", "../../../packages/dev-tools/server/builder-connect.ts", "../../../packages/dev-tools/server/dev-tools-api.ts", "../../../packages/dev-tools/server/client-script.ts", "../../../packages/dev-tools/server/auth.ts", "../../../packages/dev-tools/server/request-handler.ts", "../../../packages/dev-tools/server/dev-tools-http-server.ts", "../../../packages/dev-tools/server/create-dev-tools-server.ts", "../../../packages/dev-tools/server/index.ts", "../../../packages/dev-tools/cli/builder-add/interface.ts", "../../../packages/dev-tools/cli/sync-utils.ts", "../../../packages/dev-tools/cli/help.ts", "../../../packages/ai-utils/src/completion.ts", "../../../packages/ai-utils/src/events.ts", "../../../packages/ai-utils/src/messages.ts", "../../../packages/ai-utils/src/settings.ts", "../../../packages/ai-utils/src/mapping.ts", "../../../packages/ai-utils/src/codegen.ts", "../../../packages/ai-utils/src/projects.ts", "../../../packages/ai-utils/src/repo-indexing.ts", "../../../packages/ai-utils/src/organization.ts", "../../../packages/ai-utils/src/features.ts", "../../../packages/ai-utils/src/index.ts", "../../../node_modules/diff/lib/index.mjs", "../../../packages/vcp-common/mdc-parser.ts", "../../../packages/vcp-common/backoff.ts", "../../../packages/vcp-common/stream.ts", "../../../node_modules/tree-kill/index.js", "../../../packages/dev-tools/cli/utils/process-tracker.ts", "../../../packages/dev-tools/cli/utils/git.ts", "../../../packages/dev-tools/cli/backup.ts", "../../../packages/vcp-common/command-security.ts", "../../../packages/vcp-common/normalize-text.ts", "../../../packages/vcp-common/acl.ts", "../../../packages/vcp-common/ripgrep-filter.ts", "../../../packages/vcp-common/file-tree.ts", "../../../packages/dev-tools/cli/utils/terminal-buffer.ts", "../../../packages/dev-tools/cli/utils/env-capture.ts", "../../../node_modules/http-proxy-3/dist/lib/http-proxy/common.js", "../../../node_modules/http-proxy-3/dist/lib/http-proxy/passes/web-outgoing.js", "../../../node_modules/ms/index.js", "../../../node_modules/debug/src/common.js", "../../../node_modules/debug/src/browser.js", "../../../node_modules/has-flag/index.js", "../../../node_modules/supports-color/index.js", "../../../node_modules/debug/src/node.js", "../../../node_modules/debug/src/index.js", "../../../node_modules/follow-redirects/debug.js", "../../../node_modules/follow-redirects/index.js", "../../../node_modules/http-proxy-3/dist/lib/http-proxy/passes/web-incoming.js", "../../../node_modules/http-proxy-3/dist/lib/http-proxy/passes/ws-incoming.js", "../../../node_modules/http-proxy-3/dist/lib/http-proxy/index.js", "../../../node_modules/http-proxy-3/dist/lib/index.js", "../../../node_modules/cookie/index.js", "../../../node_modules/cookie-signature/index.js", "../../../node_modules/cookie-parser/index.js", "../../../packages/dev-tools/cli/launch/server.ts", "../../../packages/dev-tools/cli/launch/proxy.ts", "../../../packages/dev-tools/cli/abort-signal-any.ts", "../../../node_modules/strip-ansi/node_modules/ansi-regex/index.js", "../../../node_modules/strip-ansi/index.js", "../../../packages/dev-tools/cli/utils/dev-server-url-parser.ts", "../../../packages/dev-tools/cli/utils/hosts-file-manager.ts", "../../../packages/dev-tools/cli/utils/file-overrides-manager.ts", "../../../packages/dev-tools/cli/launch/dev-server-orchestrator.ts", "../../../packages/dev-tools/cli/code-tools.ts", "../../../packages/dev-tools/cli/launch/helpers.ts", "../../../packages/dev-tools/cli/utils/workspace-path-resolver.ts", "../../../node_modules/zod/v3/helpers/util.js", "../../../node_modules/zod/v3/ZodError.js", "../../../node_modules/zod/v3/locales/en.js", "../../../node_modules/zod/v3/errors.js", "../../../node_modules/zod/v3/helpers/parseUtil.js", "../../../node_modules/zod/v3/helpers/typeAliases.js", "../../../node_modules/zod/v3/helpers/errorUtil.js", "../../../node_modules/zod/v3/types.js", "../../../node_modules/zod/v3/external.js", "../../../node_modules/zod/index.js", "../../../node_modules/@modelcontextprotocol/sdk/src/types.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/shared/protocol.ts", "../../../node_modules/uri-js/src/index.ts", "../../../node_modules/uri-js/src/schemes/urn-uuid.ts", "../../../node_modules/uri-js/src/schemes/urn.ts", "../../../node_modules/uri-js/src/schemes/mailto.ts", "../../../node_modules/uri-js/src/schemes/wss.ts", "../../../node_modules/uri-js/src/schemes/ws.ts", "../../../node_modules/uri-js/src/schemes/https.ts", "../../../node_modules/uri-js/src/schemes/http.ts", "../../../node_modules/uri-js/src/uri.ts", "../../../node_modules/uri-js/node_modules/punycode/punycode.es6.js", "../../../node_modules/uri-js/src/regexps-iri.ts", "../../../node_modules/uri-js/src/regexps-uri.ts", "../../../node_modules/uri-js/src/util.ts", "../../../node_modules/fast-deep-equal/index.js", "../../../node_modules/ajv/lib/compile/ucs2length.js", "../../../node_modules/ajv/lib/compile/util.js", "../../../node_modules/ajv/lib/compile/schema_obj.js", "../../../node_modules/json-schema-traverse/index.js", "../../../node_modules/ajv/lib/compile/resolve.js", "../../../node_modules/ajv/lib/compile/error_classes.js", "../../../node_modules/fast-json-stable-stringify/index.js", "../../../node_modules/ajv/lib/dotjs/validate.js", "../../../node_modules/ajv/lib/compile/index.js", "../../../node_modules/ajv/lib/cache.js", "../../../node_modules/ajv/lib/compile/formats.js", "../../../node_modules/ajv/lib/dotjs/ref.js", "../../../node_modules/ajv/lib/dotjs/allOf.js", "../../../node_modules/ajv/lib/dotjs/anyOf.js", "../../../node_modules/ajv/lib/dotjs/comment.js", "../../../node_modules/ajv/lib/dotjs/const.js", "../../../node_modules/ajv/lib/dotjs/contains.js", "../../../node_modules/ajv/lib/dotjs/dependencies.js", "../../../node_modules/ajv/lib/dotjs/enum.js", "../../../node_modules/ajv/lib/dotjs/format.js", "../../../node_modules/ajv/lib/dotjs/if.js", "../../../node_modules/ajv/lib/dotjs/items.js", "../../../node_modules/ajv/lib/dotjs/_limit.js", "../../../node_modules/ajv/lib/dotjs/_limitItems.js", "../../../node_modules/ajv/lib/dotjs/_limitLength.js", "../../../node_modules/ajv/lib/dotjs/_limitProperties.js", "../../../node_modules/ajv/lib/dotjs/multipleOf.js", "../../../node_modules/ajv/lib/dotjs/not.js", "../../../node_modules/ajv/lib/dotjs/oneOf.js", "../../../node_modules/ajv/lib/dotjs/pattern.js", "../../../node_modules/ajv/lib/dotjs/properties.js", "../../../node_modules/ajv/lib/dotjs/propertyNames.js", "../../../node_modules/ajv/lib/dotjs/required.js", "../../../node_modules/ajv/lib/dotjs/uniqueItems.js", "../../../node_modules/ajv/lib/dotjs/index.js", "../../../node_modules/ajv/lib/compile/rules.js", "../../../node_modules/ajv/lib/data.js", "../../../node_modules/ajv/lib/compile/async.js", "../../../node_modules/ajv/lib/dotjs/custom.js", "../../../node_modules/ajv/lib/refs/json-schema-draft-07.json", "../../../node_modules/ajv/lib/definition_schema.js", "../../../node_modules/ajv/lib/keyword.js", "../../../node_modules/ajv/lib/refs/data.json", "../../../node_modules/ajv/lib/ajv.js", "../../../node_modules/@modelcontextprotocol/sdk/src/client/index.ts", "../../../node_modules/isexe/windows.js", "../../../node_modules/isexe/mode.js", "../../../node_modules/isexe/index.js", "../../../node_modules/which/which.js", "../../../node_modules/path-key/index.js", "../../../node_modules/cross-spawn/lib/util/resolveCommand.js", "../../../node_modules/cross-spawn/lib/util/escape.js", "../../../node_modules/shebang-regex/index.js", "../../../node_modules/shebang-command/index.js", "../../../node_modules/cross-spawn/lib/util/readShebang.js", "../../../node_modules/cross-spawn/lib/parse.js", "../../../node_modules/cross-spawn/lib/enoent.js", "../../../node_modules/cross-spawn/index.js", "../../../node_modules/@modelcontextprotocol/sdk/src/shared/stdio.ts", "../../../node_modules/@modelcontextprotocol/sdk/src/client/stdio.ts", "../../../node_modules/dotenv/package.json", "../../../node_modules/dotenv/lib/main.js", "../../../packages/dev-tools/cli/mcp-local.ts", "../../../packages/dev-tools/cli/utils/parseGitDiff.ts", "../../../packages/vcp-common/crypto.ts", "../../../packages/dev-tools/cli/utils/feature-flags.ts", "../../../packages/dev-tools/cli/repo-metrics-utils.ts", "../../../packages/dev-tools/cli/detectors/nextjs.ts", "../../../packages/dev-tools/cli/detectors/vue.ts", "../../../packages/dev-tools/cli/detectors/svelte.ts", "../../../packages/dev-tools/cli/repo-metrics.ts", "../../../packages/dev-tools/cli/codegen.ts", "../../../node_modules/is-unicode-supported/index.js", "../../../packages/dev-tools/cli/spinner.ts", "../../../packages/dev-tools/cli/utils/open.ts", "../../../packages/dev-tools/cli/launch/config.ts", "../../../packages/dev-tools/cli/repo-indexing/repo-indexing-utils.ts", "../../../packages/dev-tools/cli/code.ts", "../../../packages/dev-tools/cli/incremental-tsc.ts", "../../../packages/dev-tools/cli/figma-publish.ts", "../../../packages/dev-tools/cli/credentials.ts", "../../../node_modules/fastest-levenshtein/mod.js", "../../../node_modules/depd/index.js", "../../../node_modules/body-parser/node_modules/bytes/index.js", "../../../node_modules/content-type/index.js", "../../../node_modules/setprototypeof/index.js", "../../../node_modules/statuses/codes.json", "../../../node_modules/statuses/index.js", "../../../node_modules/inherits/inherits_browser.js", "../../../node_modules/inherits/inherits.js", "../../../node_modules/toidentifier/index.js", "../../../node_modules/http-errors/index.js", "../../../node_modules/body-parser/node_modules/ms/index.js", "../../../node_modules/body-parser/node_modules/debug/src/debug.js", "../../../node_modules/body-parser/node_modules/debug/src/browser.js", "../../../node_modules/body-parser/node_modules/debug/src/node.js", "../../../node_modules/body-parser/node_modules/debug/src/index.js", "../../../node_modules/destroy/index.js", "../../../node_modules/safer-buffer/safer.js", "../../../node_modules/body-parser/node_modules/iconv-lite/lib/bom-handling.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/internal.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/utf16.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/utf7.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/shiftjis.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/eucjp.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp936.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gbk-added.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp949.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp950.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/big5-added.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-data.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/index.js", "../../../node_modules/body-parser/node_modules/iconv-lite/lib/streams.js", "../../../node_modules/body-parser/node_modules/iconv-lite/lib/extend-node.js", "../../../node_modules/body-parser/node_modules/iconv-lite/lib/index.js", "../../../node_modules/unpipe/index.js", "../../../node_modules/body-parser/node_modules/raw-body/index.js", "../../../node_modules/ee-first/index.js", "../../../node_modules/on-finished/index.js", "../../../node_modules/body-parser/lib/read.js", "../../../node_modules/media-typer/index.js", "../../../node_modules/mime-db/db.json", "../../../node_modules/mime-db/index.js", "../../../node_modules/mime-types/index.js", "../../../node_modules/type-is/index.js", "../../../node_modules/body-parser/lib/types/json.js", "../../../node_modules/body-parser/lib/types/raw.js", "../../../node_modules/body-parser/lib/types/text.js", "../../../node_modules/es-errors/type.js", "../../../node_modules/object-inspect/util.inspect.js", "../../../node_modules/object-inspect/index.js", "../../../node_modules/side-channel-list/index.js", "../../../node_modules/es-object-atoms/index.js", "../../../node_modules/es-errors/index.js", "../../../node_modules/es-errors/eval.js", "../../../node_modules/es-errors/range.js", "../../../node_modules/es-errors/ref.js", "../../../node_modules/es-errors/syntax.js", "../../../node_modules/es-errors/uri.js", "../../../node_modules/math-intrinsics/abs.js", "../../../node_modules/math-intrinsics/floor.js", "../../../node_modules/math-intrinsics/max.js", "../../../node_modules/math-intrinsics/min.js", "../../../node_modules/math-intrinsics/pow.js", "../../../node_modules/math-intrinsics/round.js", "../../../node_modules/math-intrinsics/isNaN.js", "../../../node_modules/math-intrinsics/sign.js", "../../../node_modules/gopd/gOPD.js", "../../../node_modules/gopd/index.js", "../../../node_modules/es-define-property/index.js", "../../../node_modules/has-symbols/shams.js", "../../../node_modules/has-symbols/index.js", "../../../node_modules/get-proto/Reflect.getPrototypeOf.js", "../../../node_modules/get-proto/Object.getPrototypeOf.js", "../../../node_modules/function-bind/implementation.js", "../../../node_modules/function-bind/index.js", "../../../node_modules/call-bind-apply-helpers/functionCall.js", "../../../node_modules/call-bind-apply-helpers/functionApply.js", "../../../node_modules/call-bind-apply-helpers/reflectApply.js", "../../../node_modules/call-bind-apply-helpers/actualApply.js", "../../../node_modules/call-bind-apply-helpers/index.js", "../../../node_modules/dunder-proto/get.js", "../../../node_modules/get-proto/index.js", "../../../node_modules/hasown/index.js", "../../../node_modules/get-intrinsic/index.js", "../../../node_modules/call-bound/index.js", "../../../node_modules/side-channel-map/index.js", "../../../node_modules/side-channel-weakmap/index.js", "../../../node_modules/side-channel/index.js", "../../../node_modules/qs/lib/formats.js", "../../../node_modules/qs/lib/utils.js", "../../../node_modules/qs/lib/stringify.js", "../../../node_modules/qs/lib/parse.js", "../../../node_modules/qs/lib/index.js", "../../../node_modules/body-parser/lib/types/urlencoded.js", "../../../node_modules/body-parser/index.js", "../../../node_modules/merge-descriptors/index.js", "../../../node_modules/finalhandler/node_modules/ms/index.js", "../../../node_modules/finalhandler/node_modules/debug/src/debug.js", "../../../node_modules/finalhandler/node_modules/debug/src/browser.js", "../../../node_modules/finalhandler/node_modules/debug/src/node.js", "../../../node_modules/finalhandler/node_modules/debug/src/index.js", "../../../node_modules/encodeurl/index.js", "../../../node_modules/escape-html/index.js", "../../../node_modules/parseurl/index.js", "../../../node_modules/finalhandler/index.js", "../../../node_modules/express/node_modules/ms/index.js", "../../../node_modules/express/node_modules/debug/src/debug.js", "../../../node_modules/express/node_modules/debug/src/browser.js", "../../../node_modules/express/node_modules/debug/src/node.js", "../../../node_modules/express/node_modules/debug/src/index.js", "../../../node_modules/array-flatten/array-flatten.js", "../../../node_modules/express/node_modules/path-to-regexp/index.js", "../../../node_modules/express/lib/router/layer.js", "../../../node_modules/methods/index.js", "../../../node_modules/express/lib/router/route.js", "../../../node_modules/utils-merge/index.js", "../../../node_modules/express/lib/router/index.js", "../../../node_modules/express/lib/middleware/init.js", "../../../node_modules/express/lib/middleware/query.js", "../../../node_modules/express/lib/view.js", "../../../node_modules/express/node_modules/safe-buffer/index.js", "../../../node_modules/content-disposition/node_modules/safe-buffer/index.js", "../../../node_modules/content-disposition/index.js", "../../../node_modules/send/node_modules/debug/node_modules/ms/index.js", "../../../node_modules/send/node_modules/debug/src/debug.js", "../../../node_modules/send/node_modules/debug/src/browser.js", "../../../node_modules/send/node_modules/debug/src/node.js", "../../../node_modules/send/node_modules/debug/src/index.js", "../../../node_modules/send/node_modules/encodeurl/index.js", "../../../node_modules/etag/index.js", "../../../node_modules/fresh/index.js", "../../../node_modules/send/node_modules/mime/types.json", "../../../node_modules/send/node_modules/mime/mime.js", "../../../node_modules/range-parser/index.js", "../../../node_modules/send/index.js", "../../../node_modules/forwarded/index.js", "../../../node_modules/ipaddr.js/lib/ipaddr.js", "../../../node_modules/proxy-addr/index.js", "../../../node_modules/express/lib/utils.js", "../../../node_modules/express/lib/application.js", "../../../node_modules/negotiator/lib/charset.js", "../../../node_modules/negotiator/lib/encoding.js", "../../../node_modules/negotiator/lib/language.js", "../../../node_modules/negotiator/lib/mediaType.js", "../../../node_modules/negotiator/index.js", "../../../node_modules/accepts/index.js", "../../../node_modules/express/lib/request.js", "../../../node_modules/express/node_modules/cookie/index.js", "../../../node_modules/vary/index.js", "../../../node_modules/express/lib/response.js", "../../../node_modules/serve-static/index.js", "../../../node_modules/express/lib/express.js", "../../../node_modules/express/index.js", "../../../node_modules/ws/lib/constants.js", "../../../node_modules/node-gyp-build/node-gyp-build.js", "../../../node_modules/node-gyp-build/index.js", "../../../node_modules/bufferutil/fallback.js", "../../../node_modules/bufferutil/index.js", "../../../node_modules/ws/lib/buffer-util.js", "../../../node_modules/ws/lib/limiter.js", "../../../node_modules/ws/lib/permessage-deflate.js", "../../../node_modules/utf-8-validate/fallback.js", "../../../node_modules/utf-8-validate/index.js", "../../../node_modules/ws/lib/validation.js", "../../../node_modules/ws/lib/receiver.js", "../../../node_modules/ws/lib/sender.js", "../../../node_modules/ws/lib/event-target.js", "../../../node_modules/ws/lib/extension.js", "../../../node_modules/ws/lib/websocket.js", "../../../node_modules/ws/lib/stream.js", "../../../node_modules/ws/lib/subprotocol.js", "../../../node_modules/ws/lib/websocket-server.js", "../../../node_modules/cli-progress/lib/eta.js", "../../../node_modules/cli-progress/lib/terminal.js", "../../../node_modules/ansi-regex/index.js", "../../../node_modules/cli-progress/node_modules/strip-ansi/index.js", "../../../node_modules/is-fullwidth-code-point/index.js", "../../../node_modules/cli-progress/node_modules/emoji-regex/index.js", "../../../node_modules/cli-progress/node_modules/string-width/index.js", "../../../node_modules/cli-progress/lib/format-value.js", "../../../node_modules/cli-progress/lib/format-bar.js", "../../../node_modules/cli-progress/lib/format-time.js", "../../../node_modules/cli-progress/lib/formatter.js", "../../../node_modules/cli-progress/lib/options.js", "../../../node_modules/cli-progress/lib/generic-bar.js", "../../../node_modules/cli-progress/lib/single-bar.js", "../../../node_modules/cli-progress/lib/multi-bar.js", "../../../node_modules/cli-progress/presets/legacy.js", "../../../node_modules/cli-progress/presets/shades-classic.js", "../../../node_modules/cli-progress/presets/shades-grey.js", "../../../node_modules/cli-progress/presets/rect.js", "../../../node_modules/cli-progress/presets/index.js", "../../../node_modules/cli-progress/cli-progress.js", "../../../node_modules/emoji-regex/index.js", "../../../packages/dev-tools/cli/index.ts", "sentry-debug-id-stub:_sentry-debug-id-injection-stub?sentry-module-id=dc3be191-a665-4709-b1b4-55928eb2dada", "../../../packages/dev-tools/cli/index.ts", "../../../packages/dev-tools/cli/figma.ts", "../../../packages/dev-tools/cli/download.ts", "../../../packages/dev-tools/cli/generate.ts", "../../../packages/dev-tools/cli/report/figma-report.ts", "../../../packages/dev-tools/cli/report/create-vue.txt", "../../../packages/dev-tools/cli/report/create-angular.txt", "../../../packages/dev-tools/cli/report/create-react.txt", "../../../packages/dev-tools/cli/report/guide.txt", "../../../packages/dev-tools/cli/builder-add/options.ts", "../../../packages/dev-tools/cli/launch.ts", "../../../packages/dev-tools/cli/server-ws.ts", "../../../node_modules/ws/wrapper.mjs", "../../../packages/dev-tools/cli/launch/debugging-rule.txt", "../../../packages/dev-tools/cli/launch/InitStateMachine.ts", "../../../packages/dev-tools/types/proxy-middleware.ts", "../../../packages/dev-tools/cli/utils/signals.ts", "../../../packages/dev-tools/cli/launch/machine-health.ts", "../../../packages/dev-tools/cli/launch/dry-run-backup.ts", "../../../packages/dev-tools/cli/launch/grafana.ts", "../../../packages/dev-tools/cli/utils/lock-file.ts", "../../../packages/dev-tools/cli/repo-indexing/repo-indexing.ts", "../../../node_modules/wrap-ansi/index.js", "../../../node_modules/string-width/index.js", "../../../node_modules/get-east-asian-width/index.js", "../../../node_modules/get-east-asian-width/lookup.js", "../../../node_modules/wrap-ansi/node_modules/ansi-styles/index.js", "../../../packages/dev-tools/cli/auth/auth-utils.ts", "../../../packages/dev-tools/cli/repo-indexing/types.ts", "../../../packages/dev-tools/cli/repo-indexing/component-discovery.ts", "../../../packages/dev-tools/cli/utils/repo-indexing-group-prompt.ts", "../../../packages/dev-tools/cli/repo-indexing/icons.ts", "../../../packages/dev-tools/cli/repo-indexing/tokens.ts", "../../../packages/dev-tools/cli/repo-indexing/component-indexing.ts", "../../../packages/dev-tools/cli/utils/component-group-mdx-prompt.ts", "../../../packages/dev-tools/cli/utils/repo-indexing-agent-prompt.ts", "../../../packages/dev-tools/cli/auth/auth.ts", "../../../packages/dev-tools/cli/auth/status.ts", "../../../packages/dev-tools/cli/repo-connect/repo-connect.ts", "../../../packages/dev-tools/cli/repo-connect/git-detector.ts", "../../../packages/dev-tools/cli/repo-connect/package-detector.ts", "../../../packages/dev-tools/cli/repo-connect/env-collector.ts", "../../../packages/dev-tools/cli/repo-connect/file-collector.ts", "../../../packages/dev-tools/cli/repo-connect/install-runner.ts"],
  "sourcesContent": ["{\n    let _global =\n      typeof window !== 'undefined' ?\n        window :\n        typeof global !== 'undefined' ?\n          global :\n          typeof globalThis !== 'undefined' ?\n            globalThis :\n            typeof self !== 'undefined' ?\n              self :\n              {};\n\n    _global.SENTRY_RELEASE={id:\"e0254c71b8e3918c9c93683ec4424e84792079a7\"};}", "function toArr(any) {\n\treturn any == null ? [] : Array.isArray(any) ? any : [any];\n}\n\nfunction toVal(out, key, val, opts) {\n\tvar x, old=out[key], nxt=(\n\t\t!!~opts.string.indexOf(key) ? (val == null || val === true ? '' : String(val))\n\t\t: typeof val === 'boolean' ? val\n\t\t: !!~opts.boolean.indexOf(key) ? (val === 'false' ? false : val === 'true' || (out._.push((x = +val,x * 0 === 0) ? x : val),!!val))\n\t\t: (x = +val,x * 0 === 0) ? x : val\n\t);\n\tout[key] = old == null ? nxt : (Array.isArray(old) ? old.concat(nxt) : [old, nxt]);\n}\n\nmodule.exports = function (args, opts) {\n\targs = args || [];\n\topts = opts || {};\n\n\tvar k, arr, arg, name, val, out={ _:[] };\n\tvar i=0, j=0, idx=0, len=args.length;\n\n\tconst alibi = opts.alias !== void 0;\n\tconst strict = opts.unknown !== void 0;\n\tconst defaults = opts.default !== void 0;\n\n\topts.alias = opts.alias || {};\n\topts.string = toArr(opts.string);\n\topts.boolean = toArr(opts.boolean);\n\n\tif (alibi) {\n\t\tfor (k in opts.alias) {\n\t\t\tarr = opts.alias[k] = toArr(opts.alias[k]);\n\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t(opts.alias[arr[i]] = arr.concat(k)).splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i=opts.boolean.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.boolean[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.boolean.push(arr[j]);\n\t}\n\n\tfor (i=opts.string.length; i-- > 0;) {\n\t\tarr = opts.alias[opts.string[i]] || [];\n\t\tfor (j=arr.length; j-- > 0;) opts.string.push(arr[j]);\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tname = typeof opts.default[k];\n\t\t\tarr = opts.alias[k] = opts.alias[k] || [];\n\t\t\tif (opts[name] !== void 0) {\n\t\t\t\topts[name].push(k);\n\t\t\t\tfor (i=0; i < arr.length; i++) {\n\t\t\t\t\topts[name].push(arr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst keys = strict ? Object.keys(opts.alias) : [];\n\n\tfor (i=0; i < len; i++) {\n\t\targ = args[i];\n\n\t\tif (arg === '--') {\n\t\t\tout._ = out._.concat(args.slice(++i));\n\t\t\tbreak;\n\t\t}\n\n\t\tfor (j=0; j < arg.length; j++) {\n\t\t\tif (arg.charCodeAt(j) !== 45) break; // \"-\"\n\t\t}\n\n\t\tif (j === 0) {\n\t\t\tout._.push(arg);\n\t\t} else if (arg.substring(j, j + 3) === 'no-') {\n\t\t\tname = arg.substring(j + 3);\n\t\t\tif (strict && !~keys.indexOf(name)) {\n\t\t\t\treturn opts.unknown(arg);\n\t\t\t}\n\t\t\tout[name] = false;\n\t\t} else {\n\t\t\tfor (idx=j+1; idx < arg.length; idx++) {\n\t\t\t\tif (arg.charCodeAt(idx) === 61) break; // \"=\"\n\t\t\t}\n\n\t\t\tname = arg.substring(j, idx);\n\t\t\tval = arg.substring(++idx) || (i+1 === len || (''+args[i+1]).charCodeAt(0) === 45 || args[++i]);\n\t\t\tarr = (j === 2 ? [name] : name);\n\n\t\t\tfor (idx=0; idx < arr.length; idx++) {\n\t\t\t\tname = arr[idx];\n\t\t\t\tif (strict && !~keys.indexOf(name)) return opts.unknown('-'.repeat(j) + name);\n\t\t\t\ttoVal(out, name, (idx + 1 < arr.length) || val, opts);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (defaults) {\n\t\tfor (k in opts.default) {\n\t\t\tif (out[k] === void 0) {\n\t\t\t\tout[k] = opts.default[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tif (alibi) {\n\t\tfor (k in out) {\n\t\t\tarr = opts.alias[k] || [];\n\t\t\twhile (arr.length > 0) {\n\t\t\t\tout[arr.shift()] = out[k];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n", "import builtInPrettier from \"prettier\";\nimport { createRequire as createRequireFromPath } from \"node:module\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\n\nfunction findPrettierIgnoreFiles(startPath: string): string[] {\n  const ignoreFiles: string[] = [];\n  let currentDir = path.dirname(startPath);\n\n  while (currentDir !== path.dirname(currentDir)) {\n    const ignoreFile = path.join(currentDir, \".prettierignore\");\n    if (fs.existsSync(ignoreFile)) {\n      ignoreFiles.push(ignoreFile);\n    }\n\n    // Stop at git repository root\n    const gitDir = path.join(currentDir, \".git\");\n    if (fs.existsSync(gitDir)) {\n      break;\n    }\n\n    currentDir = path.dirname(currentDir);\n  }\n\n  return ignoreFiles;\n}\n\nexport function loadPrettier(\n  absoluteFilePath: string | undefined,\n): typeof builtInPrettier {\n  if (!absoluteFilePath) {\n    return builtInPrettier;\n  }\n  try {\n    // Create a require function based on the working directory\n    const customRequire = createRequireFromPath(absoluteFilePath);\n    const localPrettier = customRequire(\"prettier\");\n    if (!localPrettier) {\n      throw new Error(\"Prettier not found\");\n    }\n    return localPrettier;\n  } catch (error) {\n    return builtInPrettier;\n  }\n}\n\nexport async function prettierFormat(\n  workingDirectory: string,\n  code: string,\n  parser: string | undefined,\n  filePath: string | undefined,\n) {\n  try {\n    const basePath = path.resolve(workingDirectory, filePath ?? \"file.tsx\");\n    const prettier = loadPrettier(basePath);\n\n    // Check if file should be ignored\n    if (filePath) {\n      const ignoreFiles = findPrettierIgnoreFiles(basePath);\n      const fileInfo = await prettier.getFileInfo(basePath, {\n        ignorePath: ignoreFiles.length > 0 ? ignoreFiles : undefined,\n      });\n      if (fileInfo.ignored) {\n        return code;\n      }\n    }\n\n    const config = await prettier.resolveConfig(basePath);\n    if (config) {\n      const formattedCode = await prettier.format(code, {\n        ...config,\n        filepath: filePath,\n        parser,\n      });\n      return formattedCode;\n    } else {\n      const formattedCode = await prettier.format(code, {\n        filepath: filePath,\n        parser,\n      });\n      return formattedCode;\n    }\n  } catch (error) {\n    return code;\n  }\n}\n", "export const PUBLIC_API_KEY_QS = `api-key`;\nexport const PRIVATE_AUTH_KEY_QS = `p-key`;\nexport const PREVIEW_URL_QS = `preview-url`;\nexport const USER_ID_QS = `user-id`;\nexport const CONNECTED_USER_ID_QS = \"_b-uid\";\nexport const FRAMEWORK_QS = `framework`;\nexport const PLATFORM_QS = `platform`;\nexport const NODE_VERSION_QS = `node`;\n\nexport const BUILDER_AUTH_CONNECT_PATH = \"/~builder-connect\";\nexport const BUILDER_AUTH_RETURN_PATH = \"/~builder-connected\";\n\nexport const DEV_TOOLS_API_PATH = \"/~builder-dev-tools\";\nexport const DEV_TOOLS_CLIENT_SCRIPT_PATH = \"/~builder-dev-tools.js\";\nexport const DEV_TOOLS_SERVER_CLOSE_PATH = \"/~builder-dev-tools-close\";\nexport const DEV_TOOLS_MAPPINGS_PATH = \"/mappings\";\n\nexport const AMPLITUDE_PROXY_URL =\n  \"https://cdn.builder.io/api/v1/proxy-api?url=https://api2.amplitude.com/2/httpapi\";\n\nexport const SPACE_KIND_QS = `kind`;\n", "'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n  to(x, y) {\n    if (!y) return `${CSI}${x + 1}G`;\n    return `${CSI}${y + 1};${x + 1}H`;\n  },\n  move(x, y) {\n    let ret = '';\n\n    if (x < 0) ret += `${CSI}${-x}D`;\n    else if (x > 0) ret += `${CSI}${x}C`;\n\n    if (y < 0) ret += `${CSI}${-y}A`;\n    else if (y > 0) ret += `${CSI}${y}B`;\n\n    return ret;\n  },\n  up: (count = 1) => `${CSI}${count}A`,\n  down: (count = 1) => `${CSI}${count}B`,\n  forward: (count = 1) => `${CSI}${count}C`,\n  backward: (count = 1) => `${CSI}${count}D`,\n  nextLine: (count = 1) => `${CSI}E`.repeat(count),\n  prevLine: (count = 1) => `${CSI}F`.repeat(count),\n  left: `${CSI}G`,\n  hide: `${CSI}?25l`,\n  show: `${CSI}?25h`,\n  save: `${ESC}7`,\n  restore: `${ESC}8`\n}\n\nconst scroll = {\n  up: (count = 1) => `${CSI}S`.repeat(count),\n  down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n  screen: `${CSI}2J`,\n  up: (count = 1) => `${CSI}1J`.repeat(count),\n  down: (count = 1) => `${CSI}J`.repeat(count),\n  line: `${CSI}2K`,\n  lineEnd: `${CSI}K`,\n  lineStart: `${CSI}1K`,\n  lines(count) {\n    let clear = '';\n    for (let i = 0; i < count; i++)\n      clear += this.line + (i < count - 1 ? cursor.up() : '');\n    if (count)\n      clear += cursor.left;\n    return clear;\n  }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n", "let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "var eaw = {};\n\nif ('undefined' == typeof module) {\n  window.eastasianwidth = eaw;\n} else {\n  module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n  var x = character.charCodeAt(0);\n  var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n  var codePoint = x;\n  if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n    x &= 0x3FF;\n    y &= 0x3FF;\n    codePoint = (x << 10) | y;\n    codePoint += 0x10000;\n  }\n\n  if ((0x3000 == codePoint) ||\n      (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n      (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n    return 'F';\n  }\n  if ((0x20A9 == codePoint) ||\n      (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n      (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n      (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n      (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n      (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n      (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n    return 'H';\n  }\n  if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n      (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n      (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n      (0x2329 <= codePoint && codePoint <= 0x232A) ||\n      (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n      (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n      (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n      (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n      (0x3001 <= codePoint && codePoint <= 0x303E) ||\n      (0x3041 <= codePoint && codePoint <= 0x3096) ||\n      (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n      (0x3105 <= codePoint && codePoint <= 0x312D) ||\n      (0x3131 <= codePoint && codePoint <= 0x318E) ||\n      (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n      (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n      (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n      (0x3220 <= codePoint && codePoint <= 0x3247) ||\n      (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n      (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n      (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n      (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n      (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n      (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n      (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n      (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n      (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n      (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n      (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n      (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n      (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n      (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n      (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n      (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n      (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n      (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n      (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n      (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n      (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n    return 'W';\n  }\n  if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n      (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n      (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n      (0x00AC == codePoint) ||\n      (0x00AF == codePoint) ||\n      (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n      (0x2985 <= codePoint && codePoint <= 0x2986)) {\n    return 'Na';\n  }\n  if ((0x00A1 == codePoint) ||\n      (0x00A4 == codePoint) ||\n      (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n      (0x00AA == codePoint) ||\n      (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n      (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n      (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n      (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n      (0x00C6 == codePoint) ||\n      (0x00D0 == codePoint) ||\n      (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n      (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n      (0x00E6 == codePoint) ||\n      (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n      (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n      (0x00F0 == codePoint) ||\n      (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n      (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n      (0x00FC == codePoint) ||\n      (0x00FE == codePoint) ||\n      (0x0101 == codePoint) ||\n      (0x0111 == codePoint) ||\n      (0x0113 == codePoint) ||\n      (0x011B == codePoint) ||\n      (0x0126 <= codePoint && codePoint <= 0x0127) ||\n      (0x012B == codePoint) ||\n      (0x0131 <= codePoint && codePoint <= 0x0133) ||\n      (0x0138 == codePoint) ||\n      (0x013F <= codePoint && codePoint <= 0x0142) ||\n      (0x0144 == codePoint) ||\n      (0x0148 <= codePoint && codePoint <= 0x014B) ||\n      (0x014D == codePoint) ||\n      (0x0152 <= codePoint && codePoint <= 0x0153) ||\n      (0x0166 <= codePoint && codePoint <= 0x0167) ||\n      (0x016B == codePoint) ||\n      (0x01CE == codePoint) ||\n      (0x01D0 == codePoint) ||\n      (0x01D2 == codePoint) ||\n      (0x01D4 == codePoint) ||\n      (0x01D6 == codePoint) ||\n      (0x01D8 == codePoint) ||\n      (0x01DA == codePoint) ||\n      (0x01DC == codePoint) ||\n      (0x0251 == codePoint) ||\n      (0x0261 == codePoint) ||\n      (0x02C4 == codePoint) ||\n      (0x02C7 == codePoint) ||\n      (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n      (0x02CD == codePoint) ||\n      (0x02D0 == codePoint) ||\n      (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n      (0x02DD == codePoint) ||\n      (0x02DF == codePoint) ||\n      (0x0300 <= codePoint && codePoint <= 0x036F) ||\n      (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n      (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n      (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n      (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n      (0x0401 == codePoint) ||\n      (0x0410 <= codePoint && codePoint <= 0x044F) ||\n      (0x0451 == codePoint) ||\n      (0x2010 == codePoint) ||\n      (0x2013 <= codePoint && codePoint <= 0x2016) ||\n      (0x2018 <= codePoint && codePoint <= 0x2019) ||\n      (0x201C <= codePoint && codePoint <= 0x201D) ||\n      (0x2020 <= codePoint && codePoint <= 0x2022) ||\n      (0x2024 <= codePoint && codePoint <= 0x2027) ||\n      (0x2030 == codePoint) ||\n      (0x2032 <= codePoint && codePoint <= 0x2033) ||\n      (0x2035 == codePoint) ||\n      (0x203B == codePoint) ||\n      (0x203E == codePoint) ||\n      (0x2074 == codePoint) ||\n      (0x207F == codePoint) ||\n      (0x2081 <= codePoint && codePoint <= 0x2084) ||\n      (0x20AC == codePoint) ||\n      (0x2103 == codePoint) ||\n      (0x2105 == codePoint) ||\n      (0x2109 == codePoint) ||\n      (0x2113 == codePoint) ||\n      (0x2116 == codePoint) ||\n      (0x2121 <= codePoint && codePoint <= 0x2122) ||\n      (0x2126 == codePoint) ||\n      (0x212B == codePoint) ||\n      (0x2153 <= codePoint && codePoint <= 0x2154) ||\n      (0x215B <= codePoint && codePoint <= 0x215E) ||\n      (0x2160 <= codePoint && codePoint <= 0x216B) ||\n      (0x2170 <= codePoint && codePoint <= 0x2179) ||\n      (0x2189 == codePoint) ||\n      (0x2190 <= codePoint && codePoint <= 0x2199) ||\n      (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n      (0x21D2 == codePoint) ||\n      (0x21D4 == codePoint) ||\n      (0x21E7 == codePoint) ||\n      (0x2200 == codePoint) ||\n      (0x2202 <= codePoint && codePoint <= 0x2203) ||\n      (0x2207 <= codePoint && codePoint <= 0x2208) ||\n      (0x220B == codePoint) ||\n      (0x220F == codePoint) ||\n      (0x2211 == codePoint) ||\n      (0x2215 == codePoint) ||\n      (0x221A == codePoint) ||\n      (0x221D <= codePoint && codePoint <= 0x2220) ||\n      (0x2223 == codePoint) ||\n      (0x2225 == codePoint) ||\n      (0x2227 <= codePoint && codePoint <= 0x222C) ||\n      (0x222E == codePoint) ||\n      (0x2234 <= codePoint && codePoint <= 0x2237) ||\n      (0x223C <= codePoint && codePoint <= 0x223D) ||\n      (0x2248 == codePoint) ||\n      (0x224C == codePoint) ||\n      (0x2252 == codePoint) ||\n      (0x2260 <= codePoint && codePoint <= 0x2261) ||\n      (0x2264 <= codePoint && codePoint <= 0x2267) ||\n      (0x226A <= codePoint && codePoint <= 0x226B) ||\n      (0x226E <= codePoint && codePoint <= 0x226F) ||\n      (0x2282 <= codePoint && codePoint <= 0x2283) ||\n      (0x2286 <= codePoint && codePoint <= 0x2287) ||\n      (0x2295 == codePoint) ||\n      (0x2299 == codePoint) ||\n      (0x22A5 == codePoint) ||\n      (0x22BF == codePoint) ||\n      (0x2312 == codePoint) ||\n      (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n      (0x24EB <= codePoint && codePoint <= 0x254B) ||\n      (0x2550 <= codePoint && codePoint <= 0x2573) ||\n      (0x2580 <= codePoint && codePoint <= 0x258F) ||\n      (0x2592 <= codePoint && codePoint <= 0x2595) ||\n      (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n      (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n      (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n      (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n      (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n      (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n      (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n      (0x25CB == codePoint) ||\n      (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n      (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n      (0x25EF == codePoint) ||\n      (0x2605 <= codePoint && codePoint <= 0x2606) ||\n      (0x2609 == codePoint) ||\n      (0x260E <= codePoint && codePoint <= 0x260F) ||\n      (0x2614 <= codePoint && codePoint <= 0x2615) ||\n      (0x261C == codePoint) ||\n      (0x261E == codePoint) ||\n      (0x2640 == codePoint) ||\n      (0x2642 == codePoint) ||\n      (0x2660 <= codePoint && codePoint <= 0x2661) ||\n      (0x2663 <= codePoint && codePoint <= 0x2665) ||\n      (0x2667 <= codePoint && codePoint <= 0x266A) ||\n      (0x266C <= codePoint && codePoint <= 0x266D) ||\n      (0x266F == codePoint) ||\n      (0x269E <= codePoint && codePoint <= 0x269F) ||\n      (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n      (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n      (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n      (0x26E3 == codePoint) ||\n      (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n      (0x273D == codePoint) ||\n      (0x2757 == codePoint) ||\n      (0x2776 <= codePoint && codePoint <= 0x277F) ||\n      (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n      (0x3248 <= codePoint && codePoint <= 0x324F) ||\n      (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n      (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n      (0xFFFD == codePoint) ||\n      (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n      (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n      (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n      (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n      (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n      (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n      (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n    return 'A';\n  }\n\n  return 'N';\n};\n\neaw.characterLength = function(character) {\n  var code = this.eastAsianWidth(character);\n  if (code == 'F' || code == 'W' || code == 'A') {\n    return 2;\n  } else {\n    return 1;\n  }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n  return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n  var characters = stringToArray(string);\n  var len = 0;\n  for (var i = 0; i < characters.length; i++) {\n    len = len + this.characterLength(characters[i]);\n  }\n  return len;\n};\n\neaw.slice = function(text, start, end) {\n  textLen = eaw.length(text)\n  start = start ? start : 0;\n  end = end ? end : 1;\n  if (start < 0) {\n      start = textLen + start;\n  }\n  if (end < 0) {\n      end = textLen + end;\n  }\n  var result = '';\n  var eawLen = 0;\n  var chars = stringToArray(text);\n  for (var i = 0; i < chars.length; i++) {\n    var char = chars[i];\n    var charLen = eaw.length(char);\n    if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n        if (eawLen + charLen <= end) {\n            result += char;\n        } else {\n            break;\n        }\n    }\n    eawLen += charLen;\n  }\n  return result;\n};\n", "\"use strict\";\n\nmodule.exports = function () {\n  // https://mths.be/emoji\n  return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n", "import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), '  ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n", "const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record<string, Action>;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n", "export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n", "import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n", "import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions<Prompt>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents>(event: T, ...data: Parameters<ClackEvents[T]>) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (!this.value && this.opts.placeholder) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n", "import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions<T extends { value: any }> extends PromptOptions<SelectKeyPrompt<T>> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n", "import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)}  ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)}  ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)}  ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)}  ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)}  ${color.yellow(ln)}` : `   ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)}  ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)}  `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : '  ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)}  ${color.yellow(ln)}` : `   ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)}  ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)}  `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)}  ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)}  ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)}  ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)}  ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)}  ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol}  ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)}  ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)}  `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable<string> | AsyncIterable<string>,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol}  `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame}  ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame}  ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame}  ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step}  ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step}  ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport function codeToSource(sys: DevToolsSys, code: string | null = \"\") {\n  return sys.ts.createSourceFile(\n    \"module.tsx\",\n    typeof code === \"string\" ? code : \"\",\n    sys.ts.ScriptTarget.Latest,\n    undefined,\n  );\n}\n\nexport function codeToStatement(sys: DevToolsSys, code: string | null = \"\") {\n  const sourceFile = codeToSource(sys, code?.trim());\n  if (sourceFile.statements.length === 0) {\n    throw new Error(`No statements found in code: ${code}`);\n  }\n  return sourceFile.statements[0];\n}\n\nexport function sourceToCode(\n  sys: DevToolsSys,\n  node: ts.Node | null | undefined,\n  removeComments?: boolean,\n) {\n  if (node) {\n    const printer = sys.ts.createPrinter({\n      newLine: sys.ts.NewLineKind.LineFeed,\n      removeComments,\n    });\n    if (sys.ts.isSourceFile(node)) {\n      return printer.printFile(node).trim() + \"\\n\";\n    }\n\n    return (\n      printer\n        .printNode(\n          sys.ts.EmitHint.Unspecified,\n          node,\n          sys.ts.createSourceFile(\"module.tsx\", \"\", sys.ts.ScriptTarget.Latest),\n        )\n        .trim() + \"\\n\"\n    );\n  }\n  return \"\";\n}\n", "'use strict'\n\nmodule.exports = function () {\n  if (!process.env.npm_config_user_agent) {\n    return undefined\n  }\n  return pmFromUserAgent(process.env.npm_config_user_agent)\n}\n\nfunction pmFromUserAgent (userAgent) {\n  const pmSpec = userAgent.split(' ')[0]\n  const separatorPos = pmSpec.lastIndexOf('/')\n  const name = pmSpec.substring(0, separatorPos)\n  return {\n    name: name === 'npminstall' ? 'cnpm' : name,\n    version: pmSpec.substring(separatorPos + 1)\n  }\n}\n", "import type { ComponentInfo, DevToolsSys } from \"../types\";\nimport detectPackageManager from \"which-pm-runs\";\n\nexport function isMapperFile(fileName: string) {\n  return (\n    fileName.endsWith(\".mapper.tsx\") ||\n    fileName.endsWith(\".mapper.jsx\") ||\n    fileName.endsWith(\".mapper.ts\") ||\n    fileName.endsWith(\".mapper.js\") ||\n    fileName.endsWith(\".mapper.mjs\")\n  );\n}\n\nexport function getImportPath(\n  sys: DevToolsSys,\n  containingModulePath: string,\n  moduleToImportPath: string,\n) {\n  containingModulePath = normalizePathSlash(containingModulePath);\n  moduleToImportPath = normalizePathSlash(moduleToImportPath);\n\n  containingModulePath = sys.dirname(containingModulePath);\n\n  const fileName = sys.basename(\n    moduleToImportPath,\n    sys.extname(moduleToImportPath),\n  );\n\n  moduleToImportPath = sys.dirname(moduleToImportPath);\n\n  let p: string;\n  if (fileName === \"index\") {\n    p = sys.relative(containingModulePath, moduleToImportPath);\n  } else {\n    p = sys.relative(\n      containingModulePath,\n      sys.join(moduleToImportPath, fileName),\n    );\n  }\n  p = normalizePathSlash(sys.normalize(p));\n\n  if (!p.startsWith(\".\")) {\n    p = \"./\" + p;\n  }\n\n  return p;\n}\n\nexport function normalizePathSlash(path: string) {\n  const isExtendedLengthPath = path.startsWith(\"\\\\\\\\?\\\\\");\n  if (isExtendedLengthPath) {\n    return path;\n  }\n  return path.replace(/\\\\/g, \"/\");\n}\n\nexport function getComponentImportNameFilePath(\n  sys: DevToolsSys,\n  filePath: string,\n) {\n  const ext = sys.extname(filePath);\n  const parts = sys.basename(filePath, ext).split(/[\\/\\\\]/);\n  const fileName = parts[parts.length - 1];\n  if (fileName === \"index\") {\n    return getComponentImportName(sys.basename(sys.dirname(filePath)));\n  }\n  return getComponentImportName(fileName);\n}\n\nexport function getComponentImportName(str: string) {\n  return getComponentDisplayName(str).replace(/ /g, \"\");\n}\n\nexport function getComponentDisplayNameFromFilePath(\n  sys: DevToolsSys,\n  filePath: string,\n) {\n  const ext = sys.extname(filePath);\n\n  const fileName = normalizePathSlash(sys.basename(filePath, ext))\n    .split(\"/\")\n    .pop()!;\n  if (fileName === \"index\") {\n    return getComponentDisplayName(sys.basename(sys.dirname(filePath)));\n  }\n  return getComponentDisplayName(fileName);\n}\n\nexport function getComponentImportPath(sys: DevToolsSys, absFilePath: string) {\n  let relFilePath = normalizePathSlash(\n    sys.relative(sys.getAppRootDir(), absFilePath),\n  );\n\n  relFilePath = relFilePath\n    .split(\"/\")\n    .filter((p) => p !== \".\" && p !== \"..\" && p !== \"\")\n    .join(\"/\");\n\n  if (relFilePath.endsWith(\".tsx\") || relFilePath.endsWith(\".jsx\")) {\n    relFilePath = relFilePath.slice(0, -4);\n  } else if (relFilePath.endsWith(\".ts\") || relFilePath.endsWith(\".js\")) {\n    relFilePath = relFilePath.slice(0, -3);\n  }\n\n  const frameworks = sys.getFrameworks();\n\n  if (relFilePath.startsWith(\"src/\")) {\n    relFilePath = relFilePath.slice(4);\n  }\n\n  if (frameworks.some((f) => f.name.includes(\"next\"))) {\n    return \"@/\" + relFilePath;\n  }\n\n  return \"~/\" + relFilePath;\n}\n\nexport function getDisplayFilePath(sys: DevToolsSys, filePath: string) {\n  let path = filePath;\n  let parts: string[] = [];\n  for (let i = 0; i < 2; i++) {\n    const part = sys.basename(path);\n    if (!part || part === \"components\") {\n      break;\n    }\n    parts.unshift(part);\n    path = sys.dirname(path);\n  }\n  return parts.join(\"/\");\n}\n\nexport function getComponentDisplayName(str: string) {\n  str = str\n    .replace(/([A-Z])/g, \" $1\")\n    .replace(/\\./g, \" \")\n    .replace(/_/g, \" \")\n    .replace(/-/g, \" \")\n    .replace(/\\s/g, \" \")\n    .trim();\n\n  while (str.includes(\"  \")) {\n    str = str.replace(/  /g, \" \");\n  }\n\n  return str\n    .split(\" \")\n    .map((p) => {\n      if (p.length > 2) {\n        return p[0].toUpperCase() + p.slice(1);\n      }\n      return p;\n    })\n    .join(\"\")\n    .trim();\n}\n\nexport function sortComponents(cmps: ComponentInfo[]) {\n  return cmps.sort((a, b) =>\n    a.name.toLocaleLowerCase().localeCompare(b.name.toLocaleLowerCase()),\n  );\n}\n\nexport async function getComponentId(\n  sys: DevToolsSys,\n  filePath: string,\n  exportName: string,\n  externalImportPath?: string,\n) {\n  if (typeof exportName !== \"string\" || exportName === \"\") {\n    throw new Error(\n      `getComponentId(), exportName must be a non-empty string, received: ${exportName}, ${filePath}`,\n    );\n  }\n\n  if (externalImportPath) {\n    filePath = externalImportPath;\n  }\n\n  filePath = sys.normalize(filePath);\n\n  const hash = await sys.hash(filePath + \"#\" + exportName);\n  return hash.substring(0, 8);\n}\n\nexport async function getLocalAppId(sys: DevToolsSys) {\n  const hash = await sys.hash(sys.getAppRootDir());\n  return hash.substring(0, 8);\n}\n\nexport function isNumber(v: any): v is number {\n  return typeof v === \"number\";\n}\n\nexport function isBoolean(v: any): v is boolean {\n  return typeof v === \"boolean\";\n}\n\nexport function isString(v: any): v is string {\n  return typeof v === \"string\";\n}\n\nexport function isValidJsxTag(tag: string) {\n  if (typeof tag === \"string\") {\n    return /^[A-Z][A-Za-z0-9]*$/.test(tag);\n  }\n  return false;\n}\n\nexport function clone<T>(obj: T): T {\n  return JSON.parse(JSON.stringify(obj));\n}\n\nexport function shouldSkipFolder(\n  sys: DevToolsSys,\n  skipFolders: Set<string>,\n  fileName: string,\n): boolean {\n  for (const folder of skipFolders) {\n    if (sys.dirname(fileName).includes(folder)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function getPackageManager() {\n  try {\n    const detected = detectPackageManager();\n    if (detected?.name) {\n      return detected.name;\n    }\n  } catch (e) {}\n\n  return \"npm\";\n}\n\nexport function isWindows() {\n  return process.platform.startsWith(\"win\");\n}\n\nexport function builderNpxPackage() {\n  if (isWindows()) {\n    return '\"@builder.io/dev-tools\"';\n  } else {\n    return \"builder.io\";\n  }\n}\n\n/**\n * Sanitizes a component name for use in filesystem paths by replacing invalid characters with underscores\n * @param name The component name to sanitize\n * @returns A sanitized string safe for use in filesystem paths\n */\nexport function sanitizeComponentName(name: string): string {\n  return name.replace(/[^a-zA-Z0-9-_]/g, \"_\");\n}\n", "import type { DevToolsSys, PackageJSON } from \"../types\";\n\nexport function hasTsconfig(sys: DevToolsSys) {\n  const tsconfigPath = sys.join(sys.getAppRootDir(), \"tsconfig.json\");\n  return sys.exists(tsconfigPath);\n}\n\nconst skipFolders = [\"node_modules\", \"dist\", \"build\", \"public\"];\n\nexport async function findBuilderRegistry(\n  sys: DevToolsSys,\n  defaultFolder: string,\n) {\n  async function walk(\n    root: string,\n    depth: number,\n  ): Promise<string | undefined> {\n    if (depth > 10) {\n      return;\n    }\n    const files = await sys.readdir(root);\n    for (const file of files) {\n      if (skipFolders.includes(file)) {\n        continue;\n      }\n      const filePath = sys.join(root, file);\n      const stat = await sys.stat(filePath);\n      if (stat) {\n        if (stat.isFile() && file.startsWith(\"builder-registry.\")) {\n          return filePath;\n        }\n        if (stat.isDirectory()) {\n          const result = await walk(filePath, depth + 1);\n          if (result) {\n            return result;\n          }\n        }\n      }\n    }\n  }\n  const result = await walk(sys.getAppRootDir(), 0);\n  if (!result) {\n    const typescriptEnabled = await hasTsconfig(sys);\n\n    const registryFileName = `builder-registry.${\n      typescriptEnabled ? \"ts\" : \"js\"\n    }`;\n    return sys.join(defaultFolder, registryFileName);\n  }\n  return result;\n}\n\nexport async function findPackageJson(sys: DevToolsSys, dir: string) {\n  const fsRoot = sys.resolve(\"/\");\n\n  for (let i = 0; i < 20; i++) {\n    const pkgJsonPath = sys.join(dir, \"package.json\");\n    const content = await sys.readFile(pkgJsonPath);\n    if (content) {\n      const pkgJson = JSON.parse(content) as PackageJSON;\n      return pkgJson;\n    }\n\n    if (dir === fsRoot) {\n      break;\n    }\n    dir = sys.dirname(dir);\n  }\n\n  return null;\n}\n\nexport async function findUpNodeModules(sys: DevToolsSys, p: string) {\n  for (let i = 0; i < 20; i++) {\n    const dir = sys.dirname(p);\n    const nodeModulesDir = sys.join(dir, \"node_modules\");\n\n    if (await sys.exists(nodeModulesDir)) {\n      return nodeModulesDir;\n    }\n\n    if (p === sys.getAppRootDir()) {\n      break;\n    }\n    p = sys.dirname(p);\n  }\n\n  return sys.join(sys.getAppRootDir(), \"node_modules\");\n}\n\nexport async function recursiveFindDir(\n  sys: DevToolsSys,\n  dir: string,\n  findDirectoryName: string,\n): Promise<string | undefined> {\n  const itemNames = await sys.readdir(dir);\n\n  if (itemNames.includes(findDirectoryName)) {\n    return sys.join(dir, findDirectoryName);\n  }\n\n  const results = await Promise.all(\n    itemNames.map(async (itemName) => {\n      if (itemName.startsWith(\".\") || itemName === \"node_modules\") {\n        return;\n      }\n\n      const itemPath = sys.join(dir, itemName);\n      const itemStat = await sys.stat(itemPath);\n      if (itemStat.isDirectory()) {\n        const foundDir = await recursiveFindDir(\n          sys,\n          itemPath,\n          findDirectoryName,\n        );\n        if (foundDir) {\n          return foundDir;\n        }\n      }\n    }),\n  );\n\n  return results.find((r) => typeof r === \"string\");\n}\n", "import type ts from \"typescript\";\nimport type {\n  DevToolsSys,\n  TranspileFileOptions,\n  TranspileModuleOptions,\n  TranspileResult,\n} from \"../types\";\nimport { codeToSource } from \"./ast/transform\";\nimport { clone } from \"./utils\";\nimport { findUpNodeModules } from \"./fs\";\n\nexport async function createTsProgram(\n  sys: DevToolsSys,\n  filePaths: string[],\n  overrideTsOptions?: ts.CompilerOptions,\n) {\n  if (!Array.isArray(filePaths) || filePaths.length === 0) {\n    throw new Error(`createTsProgram() Invalid filePaths: ${filePaths}`);\n  }\n\n  const nodeModulesPath = await findUpNodeModules(sys, filePaths[0]);\n  const tsLibDir = sys.join(nodeModulesPath, \"typescript\", \"lib\");\n\n  const existsCache = new Map<string, boolean>();\n\n  const host: ts.CompilerHost = {\n    fileExists: (p) => {\n      p = sys.normalize(p);\n\n      if (p.includes(\"node_modules\")) {\n        let nm = NODE_MODULE_CACHE.get(p);\n        if (!nm) {\n          try {\n            const stat = sys.statSync(p);\n            if (stat.isFile()) {\n              nm = { exists: true, content: sys.readFileSync(p) };\n            } else {\n              nm = { exists: false };\n            }\n          } catch (e) {\n            nm = { exists: false };\n          }\n          NODE_MODULE_CACHE.set(p, nm);\n        }\n        return nm.exists;\n      }\n\n      if (!existsCache.has(p)) {\n        const exists = sys.existsSync(p);\n        if (exists) {\n          const stat = sys.statSync(p);\n          existsCache.set(p, stat.isFile());\n        } else {\n          existsCache.set(p, false);\n        }\n      }\n\n      return existsCache.get(p)!;\n    },\n    getCanonicalFileName: (p) => sys.normalize(p),\n    getCurrentDirectory: () => sys.cwd(),\n    getDefaultLibFileName: () => sys.join(tsLibDir, \"lib.d.ts\"),\n    getDefaultLibLocation: () => tsLibDir,\n    getNewLine: () => \"\\n\",\n    getSourceFile: (p) => {\n      p = sys.normalize(p);\n\n      if (p.includes(\"node_modules\")) {\n        const nm = NODE_MODULE_CACHE.get(p);\n        if (nm) {\n          return codeToSource(sys, nm.content);\n        }\n      }\n\n      let c: string | null | undefined;\n      try {\n        c = sys.readFileSync(p);\n      } catch {\n        console.error(`Could not read: ${p}`);\n        c == null;\n      }\n      if (c == null) {\n        const fileName = sys.basename(p);\n        const ext = sys.extname(fileName).toLowerCase();\n        if (p.startsWith(tsLibDir) && ext === \".ts\") {\n          c = LIB_CACHE.get(fileName);\n          if (\n            c == null &&\n            typeof self !== \"undefined\" &&\n            typeof fetch === \"function\"\n          ) {\n            throw new MissingTsLibError(fileName);\n          }\n        }\n      }\n\n      if (p.includes(\"node_modules\")) {\n        if (c) {\n          NODE_MODULE_CACHE.set(p, { exists: true, content: c });\n        } else {\n          NODE_MODULE_CACHE.set(p, { exists: false });\n        }\n      }\n\n      return codeToSource(sys, c);\n    },\n    readFile: (p) => {\n      const content = sys.readFileSync(p);\n      return typeof content === \"string\" ? content : undefined;\n    },\n    useCaseSensitiveFileNames: () => false,\n    writeFile: () => {},\n  };\n\n  while (true) {\n    try {\n      return createHostProgram(sys, host, filePaths, overrideTsOptions);\n    } catch (e) {\n      if (e instanceof MissingTsLibError) {\n        await fetchLib(sys, e.libName);\n        continue;\n      }\n      sys.Sentry?.captureException(e);\n      throw new Error(\n        `createTsProgram() Could not create program for: ${filePaths[0]}`,\n        { cause: e },\n      );\n    }\n  }\n}\n\nfunction createHostProgram(\n  sys: DevToolsSys,\n  host: ts.CompilerHost,\n  filePaths: string[],\n  overrideTsOptions?: ts.CompilerOptions,\n) {\n  const programOpts: ts.CreateProgramOptions = {\n    rootNames: [...filePaths],\n    host,\n    options: {},\n  };\n\n  const tsConfigPath = sys.ts.findConfigFile(sys.dirname(filePaths[0]), (p) =>\n    sys.existsSync(p),\n  );\n\n  if (tsConfigPath) {\n    let options = TSCONFIG_CACHE.get(tsConfigPath);\n    if (!options) {\n      const configFile = sys.ts.readConfigFile(tsConfigPath, (p) => {\n        const content = sys.readFileSync(p);\n        return typeof content === \"string\" ? content : undefined;\n      });\n\n      if (!configFile.error) {\n        const tsConfig = sys.ts.parseJsonConfigFileContent(\n          configFile.config,\n          sys.ts.sys || {\n            useCaseSensitiveFileNames: false,\n            readDirectory: (p, _) => sys.readdirSync(p),\n            fileExists: (p) => sys.existsSync(p),\n            readFile: (p) => sys.readFileSync(p) || undefined,\n          },\n          sys.dirname(tsConfigPath),\n          undefined,\n          tsConfigPath,\n        );\n        options = tsConfig.options;\n        TSCONFIG_CACHE.set(tsConfigPath, options);\n      } else {\n        sys.Sentry?.captureException(\n          new Error(`Error reading tsconfig for createTsProgram`),\n          {\n            extra: {\n              error: configFile.error,\n              tsConfigPath,\n            },\n          },\n        );\n      }\n    }\n    if (options) {\n      programOpts.options = clone(options);\n    }\n  }\n\n  programOpts.options.noEmit = true;\n  programOpts.options.isolatedModules = false;\n  programOpts.options.strict = false;\n  programOpts.options.jsx = sys.ts.JsxEmit.Preserve;\n  programOpts.options.allowJs = true;\n\n  Object.assign(programOpts.options, overrideTsOptions);\n\n  return sys.ts.createProgram(programOpts);\n}\n\nexport async function getTypeChecker(\n  sys: DevToolsSys,\n  filePath: string,\n  tsProgram: ts.Program | null,\n) {\n  if (!tsProgram) {\n    tsProgram = await createTsProgram(sys, [filePath]);\n  }\n\n  const sourceFile = tsProgram.getSourceFile(filePath);\n  if (!sourceFile) {\n    throw new Error(`getTypeChecker() Could not find source file: ${filePath}`);\n  }\n  const typeChecker = tsProgram.getTypeChecker();\n  return {\n    typeChecker,\n    sourceFile,\n  };\n}\n\nclass MissingTsLibError {\n  readonly libName: string;\n\n  constructor(libName: string) {\n    this.libName = libName;\n  }\n}\n\nasync function fetchLib(sys: DevToolsSys, libName: string) {\n  const libUrl = `https://cdn.jsdelivr.net/npm/typescript@${sys.ts.version}/lib/${libName}`;\n\n  if (!PENDING_LIB_CACHE.has(libName)) {\n    PENDING_LIB_CACHE.set(\n      libName,\n      fetch(libUrl)\n        .then((rsp) => rsp.text())\n        .then((content) => {\n          LIB_CACHE.set(libName, content);\n        }),\n    );\n  }\n  await PENDING_LIB_CACHE.get(libName);\n  PENDING_LIB_CACHE.delete(libName);\n}\n\nconst LIB_CACHE = new Map<string, string>();\nconst PENDING_LIB_CACHE = new Map<string, Promise<void>>();\nconst NODE_MODULE_CACHE = new Map<\n  string,\n  { exists: boolean; content?: string | null }\n>();\nconst TSCONFIG_CACHE = new Map<string, ts.CompilerOptions>();\n\nexport async function transpileFile(\n  sys: DevToolsSys,\n  opts: TranspileFileOptions,\n) {\n  const code = await sys.readFile(opts.filePath);\n  if (code == null) {\n    const result: TranspileResult = {\n      diagnostics: [\n        {\n          messageText: `Error reading: ${opts.filePath}`,\n        },\n      ],\n      code: null,\n      output: null,\n    };\n    return result;\n  }\n\n  return transpileModule(sys, {\n    code,\n    filePath: opts.filePath,\n    compilerOptions: opts.compilerOptions,\n  });\n}\n\nexport function transpileModule(\n  sys: DevToolsSys,\n  opts: TranspileModuleOptions,\n) {\n  const result: TranspileResult = {\n    diagnostics: [],\n    code: opts.code,\n    output: null,\n  };\n\n  try {\n    const output = sys.ts.transpileModule(opts.code, {\n      compilerOptions: opts.compilerOptions,\n      fileName: opts.filePath ?? \"module.tsx\",\n      reportDiagnostics: true,\n    });\n\n    output.diagnostics?.forEach((d) => {\n      result.diagnostics.push({\n        messageText: String(d.messageText),\n      });\n    });\n\n    result.output = output.outputText;\n  } catch (e) {\n    console.error(`transpileModule`, e);\n    result.diagnostics.push({\n      messageText: String(e),\n    });\n  }\n\n  return result;\n}\n", "declare const DEV_TOOLS_VERSION: string;\n\nconst builderVersion =\n  typeof DEV_TOOLS_VERSION === \"string\" ? DEV_TOOLS_VERSION : \"0.0.0\";\nexport const pkgVersion = process.env.OVERRIDE_VERSION ?? builderVersion;\n", "import type {\n  DevToolsSys,\n  Framework,\n  PackageJSON,\n  SemanticVersion,\n} from \"../types\";\nimport { findPackageJson } from \"../common/fs\";\nimport { getPackageManager } from \"../common/utils\";\n\nexport async function detectFrameworks(sys: DevToolsSys) {\n  const frameworks: Framework[] = [];\n\n  const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n  if (pkgJson) {\n    const depFrameworks = await detectFrameworksFromPackageJson(pkgJson, sys);\n    frameworks.push(...depFrameworks);\n  }\n\n  return frameworks;\n}\n\nexport async function detectTurbopack(sys: DevToolsSys) {\n  const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n  if (!pkgJson?.scripts?.dev) {\n    return false;\n  }\n\n  const devCommand = pkgJson.scripts.dev;\n  return devCommand.includes(\"--turbopack\");\n}\n\nexport async function detectFrameworksFromPackageJson(\n  pkgJson: PackageJSON,\n  sys: DevToolsSys,\n) {\n  const frameworks: Framework[] = [];\n  if (pkgJson && typeof pkgJson === \"object\") {\n    const depNames = new Set(\n      Object.keys({\n        ...pkgJson.dependencies,\n        ...pkgJson.devDependencies,\n      }),\n    );\n\n    for (const depName of FRAMEWORKS) {\n      if (depNames.has(depName)) {\n        if (!frameworks.some((f) => f.name === depName)) {\n          const payload: Framework = { name: depName };\n          if (VERSION_RESOLVER.has(depName)) {\n            payload.version = await VERSION_RESOLVER.get(depName)!(sys);\n          }\n          frameworks.push(payload);\n        }\n      }\n    }\n  }\n  return frameworks;\n}\n\n/**\n * Given a fragment of a semantic version string, return the integer form\n * or undefined if the input is invalid.\n * @param versionFragment - A fragment of the semantic version string\n * such as \"5\" in \"1.2.5\"\n */\nfunction parseSemanticVersionNumber(versionFragment: string) {\n  const parsed = parseInt(versionFragment);\n\n  return Number.isNaN(parsed) ? undefined : parsed;\n}\n\n/**\n * Resolvers to get the installed JS Framework version. This is useful when Dev Tools\n * needs to do things differently based on JS Framework versions (such as to account\n * for breaking changes across major releases.)\n */\nconst VERSION_RESOLVER = new Map<\n  string,\n  (sys: DevToolsSys) => Promise<SemanticVersion | undefined>\n>([\n  [\n    \"next\",\n    async (sys: DevToolsSys) => {\n      if (!sys.spawnSync) {\n        return;\n      }\n      const packageManager = getPackageManager();\n      const command = packageManager === \"npm\" ? \"npx\" : packageManager;\n\n      const { stdout } = sys.spawnSync(command, [\"next\", \"-v\"], {\n        encoding: \"utf8\",\n      });\n\n      if (!stdout) {\n        return;\n      }\n\n      const nextInfo = stdout.match(/(Next.js v)([\\d.]+)/g);\n      if (!nextInfo) {\n        return;\n      }\n      const version = nextInfo[0].split(\"Next.js v\")[1];\n      const [major, minor, patch] = version.split(\".\");\n\n      return {\n        major: parseSemanticVersionNumber(major),\n        minor: parseSemanticVersionNumber(minor),\n        patch: parseSemanticVersionNumber(patch),\n      };\n    },\n  ],\n]);\n\n/**\n * Order it so more specific frameworks are first\n * and more general ones are last\n */\nconst FRAMEWORKS: string[] = [\n  // toolkit frameworks\n  \"@shopify/remix-oxygen\",\n  \"@shopify/hydrogen\",\n\n  // meta frameworks\n  \"@builder.io/qwik-city\",\n  \"@remix-run/react\",\n  \"@sveltejs/kit\",\n  \"astro\",\n  \"gatsby\",\n  \"next\",\n  \"nuxt\",\n\n  // frameworks\n  \"@builder.io/qwik\",\n  \"@angular/core\",\n  \"react\",\n  \"solid-js\",\n  \"svelte\",\n  \"vue\",\n];\n", "import type { DevToolsSys } from \"../types\";\n\nexport async function getBuilderCache(sys: DevToolsSys) {\n  const cachePath = getCachePath(sys);\n  const contents = await sys.readFile(cachePath);\n  if (typeof contents === \"string\") {\n    return JSON.parse(contents);\n  }\n  return {};\n}\n\nexport async function setBuilderCache(\n  sys: DevToolsSys,\n  cache: Record<string, any>,\n) {\n  cache = typeof cache === \"object\" && cache != null ? cache : {};\n  const cachePath = getCachePath(sys);\n  await sys.writeFile(cachePath, JSON.stringify(cache ?? {}, null, 2));\n}\n\nfunction getCachePath(sys: DevToolsSys) {\n  const rootDir = sys.getAppRootDir();\n  return sys.join(rootDir, \"node_modules\", \".builder\", \"builder-cache.json\");\n}\n", "import type { DevToolsSys, EnvInfo } from \"../types\";\n\nexport async function getDotEnvValue(\n  sys: DevToolsSys,\n  dotEnvFileNames: string[],\n  envKey: string,\n) {\n  const envInfo: EnvInfo = {\n    envKey,\n    envValue: null,\n    file: \"\",\n  };\n\n  for (const dotEnvFileName of dotEnvFileNames) {\n    const envPath = sys.join(sys.getAppRootDir(), dotEnvFileName);\n    const envVars = await parseDotEnvFile(sys, envPath);\n    if (envVars) {\n      const value = envVars[envKey];\n      if (\n        typeof value === \"string\" &&\n        value.length > 0 &&\n        value !== \"YOUR_API_KEY\"\n      ) {\n        envInfo.envValue = value;\n        envInfo.file = envPath;\n        return envInfo;\n      }\n    }\n  }\n\n  envInfo.file = sys.join(\n    sys.getAppRootDir(),\n    dotEnvFileNames[dotEnvFileNames.length - 1],\n  );\n  return envInfo;\n}\n\nexport async function setDotEnvValue(\n  sys: DevToolsSys,\n  dotEnvFileNames: string[],\n  envKey: string,\n  envValue: string,\n) {\n  const env = await getDotEnvValue(sys, dotEnvFileNames, envKey);\n\n  const modifiedType = await setDotEnvVar(sys, env.file, envKey, envValue);\n\n  const envInfo: EnvInfo = {\n    envKey,\n    envValue,\n    file: env.file,\n    modifiedType,\n  };\n\n  return envInfo;\n}\n\nexport async function parseDotEnvFile(sys: DevToolsSys, envPath: string) {\n  const envContent = await sys.readFile(envPath);\n  if (typeof envContent === \"string\") {\n    return parseDotEnvContent(envContent);\n  }\n  return null;\n}\n\nexport function parseDotEnvContent(envContent: string) {\n  const envVars: Record<string, string> = {};\n\n  // Convert line breaks to same format\n  const lines = envContent.replace(/\\r\\n?/gm, \"\\n\");\n\n  let match: RegExpExecArray | null;\n  while ((match = DOTENV_LINE.exec(lines)) != null) {\n    const key = match[1];\n\n    // Default undefined or null to empty string\n    let value = match[2] || \"\";\n\n    // Remove whitespace\n    value = value.trim();\n\n    // Check if double quoted\n    const maybeQuote = value[0];\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/gm, \"$2\");\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, \"\\n\");\n      value = value.replace(/\\\\r/g, \"\\r\");\n    }\n\n    // Add to object\n    envVars[key] = value;\n  }\n\n  return envVars;\n}\n\nconst DOTENV_LINE =\n  /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/gm;\n\nexport async function setDotEnvVar(\n  sys: DevToolsSys,\n  envPath: string,\n  key: string,\n  value: string,\n): Promise<\"create\" | \"update\" | \"permission-error\" | null> {\n  const comment = `# https://www.builder.io/c/docs/using-your-api-key`;\n  let envContent = await sys.readFile(envPath);\n\n  try {\n    // check if we already have an .env file\n    if (envContent) {\n      // read the existing .env file\n      if (envContent.includes(key)) {\n        // existing .env has a builder api key already, update its value\n        if (!envContent.includes(value)) {\n          // existing .env has a builder api key, but it's not the same as the one we have\n          sys.debug(`Replace \"${key}\" in ${envPath}`);\n          envContent = envContent.replace(\n            new RegExp(`${key}=.*`),\n            `${key}=${value}`,\n          );\n          await sys.writeFile(envPath, envContent);\n          return \"update\";\n        } else {\n          sys.debug(`\"${key}\" with \"${value}\" already set in ${envPath}`);\n        }\n      } else {\n        // existing .env does not have a builder api key, append the key/value\n        sys.debug(`Append \"${key}\" to ${envPath}`);\n        envContent += `\\n\\n${comment}\\n${key}=${value}\\n\\n`;\n        await sys.writeFile(envPath, envContent);\n        return \"update\";\n      }\n    } else {\n      // create a new .env file since it doesn't exist yet\n      sys.debug(`Creating new .env file with \"${key}\" at ${envPath}`);\n      envContent = [comment, `${key}=${value}`, ``].join(\"\\n\");\n      await sys.writeFile(envPath, envContent);\n      return \"create\";\n    }\n  } catch (error) {\n    if (error && String(error).includes(\"EACCES\")) {\n      sys.debug(\n        `Permssion denied, failed to create or modify .env file with \"${key}=${value}\" at ${envPath}`,\n      );\n      return \"permission-error\";\n    }\n    sys.Sentry?.captureException(error);\n  }\n\n  return null;\n}\n", "import type { DevToolsSys, EnvInfo } from \"../../../types\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\n\nexport async function getNextApiKey(sys: DevToolsSys) {\n  const dotEnvFileNames = [\n    \".env.local\",\n    \".env.development.local\",\n    \".env.production.local\",\n    \".env.development\",\n    \".env.production\",\n    \".env\",\n  ];\n\n  const env = await getDotEnvValue(\n    sys,\n    dotEnvFileNames,\n    NEXT_BUILDER_API_KEY_ENV,\n  );\n  return env;\n}\n\nexport async function setNextApiKey(sys: DevToolsSys, publicApiKey: string) {\n  const env = await getNextApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const NEXT_BUILDER_API_KEY_ENV = `NEXT_PUBLIC_BUILDER_API_KEY`;\n", "import type { spawnSync } from \"node:child_process\";\n\nexport interface DevToolsPath {\n  basename: (path: string, suffix?: string) => string;\n  extname: (path: string) => string;\n  dirname: (path: string) => string;\n  isAbsolute: (path: string) => boolean;\n  join: (...paths: string[]) => string;\n  normalize: (path: string) => string;\n  relative: (from: string, to: string) => string;\n  resolve: (...pathSegments: string[]) => string;\n}\n\nexport interface RepoInfo {\n  hasGit: boolean;\n  remoteUrl: string;\n  defaultBranch: string;\n  currentBranch: string;\n  commit: string;\n}\n\nexport interface DevToolsSys extends DevToolsPath {\n  cwd: () => string;\n  getCwdDir: () => string;\n  getAppRootDir: () => string;\n  getRepoRootDir: () => string;\n  exists: (path: string) => Promise<boolean>;\n  existsSync: (path: string) => boolean;\n  readdir: (path: string, absolutePaths?: boolean) => Promise<string[]>;\n  readdirRecursive: (path: string, skipFolders?: string[]) => Promise<string[]>;\n  readdirSync: (path: string) => string[];\n  readFile: (filePath: string) => Promise<string | null>;\n  readFileSync: (filePath: string) => string | null;\n  readFileSyncBuffer: (filePath: string) => Uint8Array | null;\n  spawnSync: typeof spawnSync | undefined;\n  stat: (path: string) => Promise<{\n    isDirectory: () => boolean;\n    isFile: () => boolean;\n    size: number;\n  }>;\n  statSync: (path: string) => {\n    isDirectory: () => boolean;\n    isFile: () => boolean;\n    size: number;\n  };\n  writeFile: (filePath: string, content: string | Uint8Array) => Promise<void>;\n  unlink: (filePath: string) => Promise<void>;\n  unlinkSync: (filePath: string) => void;\n  formatCode: (filePath: string, code: string) => Promise<string>;\n  hash: (str: string) => Promise<string>;\n  on: (eventName: \"change\", callback: FileChangeCallback) => void;\n  off: (eventName: \"change\", callback: FileChangeCallback) => void;\n  debug: (...args: any[]) => void;\n  launchEditor: (\n    file: LaunchEditorFile,\n  ) => Promise<{ success: boolean; message?: string }>;\n  platform: () => DevtoolsPlatform;\n  getDeviceId: () => Promise<string>;\n  getFrameworks: () => Framework[];\n  getRepoInfo: (githubWorkingDirectory?: string) => Promise<RepoInfo>;\n  Sentry: typeof import(\"@sentry/node\") | undefined;\n  connectionTracker: import(\"./types/connection-tracker\").ConnectionTracker;\n  ts: typeof import(\"typescript\");\n  version: string;\n  sdkVersion: SDK_VERSION_VALUES | null;\n  ignoreMissingConfig?: boolean;\n  kind: SPACE_KIND_VALUES;\n  magicast: typeof import(\"magicast\") | undefined;\n}\n\nexport interface DevtoolsPlatform {\n  runtime: string;\n  os: string;\n}\n\nexport type FileChangeCallback = (file: FileChangeInfo) => Promise<void> | void;\n\nexport interface FileChangeInfo {\n  path: string;\n  basename: string;\n  extname: string;\n  dirname: string;\n}\n\nexport interface EnsureConfigResult {\n  content: string;\n  filePath: string;\n  fileName: string;\n  outcome: \"already-exists\" | \"added\" | \"no-update\";\n}\n\nexport interface FrameworkDependency {\n  name: string;\n  version?: string;\n  devDependency?: boolean;\n}\n\nexport interface BuildToolConfig {\n  id: string;\n  content: string;\n  filePath: string;\n}\n\nexport interface CreateDevToolsOptions extends DevToolsSys {\n  frameworks?: Framework[];\n}\n\nexport interface FrameworkBuilderPageOptions {\n  templateContentId: string;\n  title: string;\n  pathname: string;\n  localePathname?: string;\n}\n\nexport interface DevToolsAdapter {\n  getPublicApiKey: () => Promise<EnvInfo>;\n  setPublicApiKey: (opts: SetPublicApiKeyOptions) => Promise<EnvInfo>;\n  builderPageOptions: () => Promise<FrameworkBuilderPageOptions>;\n  ensureBuilderSetup: () => Promise<ModifiedFile[]>;\n  ensureFigmaImportPage: () => Promise<ModifiedFile[]>;\n  getRegistry: (opts?: GetRegistryOptions) => Promise<ComponentRegistry>;\n  getRegistryPath: () => string;\n  loadComponent: (opts: LoadComponentOptions) => Promise<LoadComponent>;\n  addExternalPackage: (pkgName: string) => void;\n  registerComponent: (\n    opts: RegisterComponentOptions,\n  ) => Promise<ComponentRegistry>;\n  unregisterComponent: (\n    opts: UnregisterComponentOptions,\n  ) => Promise<ComponentRegistry>;\n  setRegisteredComponentInfo: (\n    opts: SetComponentInfoOptions,\n  ) => Promise<ComponentRegistry>;\n  setRegisteredComponentInput: (\n    opts: SetComponentInputOptions,\n  ) => Promise<ComponentRegistry>;\n  getDependencies: (opts: DependenciesOptions) => FrameworkDependency[];\n  getDevRunCommand: () => string;\n  getCache: () => Promise<Record<string, any>>;\n  setCache: (cache: Record<string, any>) => Promise<void>;\n}\n\nexport interface DevTools extends DevToolsAdapter {\n  exportRegistry: () => Promise<string>;\n  importRegistry: (exportedRegistry: string) => Promise<ComponentRegistry>;\n  framework: string;\n  findAllDependencies: () => Promise<DependencyTree>;\n}\n\nexport interface DevToolsServerOptions extends DevToolsSys, DevTools {\n  getClientId: () => string;\n  getPastSyncInfo?: (data: { sessionKey: string; since: number }) => any;\n  resyncSnippet?: (data: { syncInfo: SyncInfo; snippet: Snippet }) => any;\n  enableAppWatch: (enabled: boolean) => Promise<boolean>;\n  closeAppServer: () => Promise<void>;\n  restartAppServer: () => Promise<void>;\n  port?: number;\n  getAllProjectFiles?: () => Promise<string[]>;\n}\n\nexport interface DevToolsHttpServer {\n  url: string;\n  port: number;\n  setContext(ctx: DevToolsServerContext): void;\n  close(): Promise<void>;\n}\n\nexport interface BuilderAppCredentials {\n  publicApiKey: string | null;\n}\n\nexport interface DevToolsServerContext\n  extends Omit<DevToolsServerOptions, \"getAllProjectFiles\"> {\n  devToolsServerUrl: string;\n  isValid: boolean;\n  serverShouldRestart: boolean;\n  publicApiKey: string;\n  port: number;\n  ignoreMissingConfig: boolean;\n  getAllProjectFiles: () => Promise<string[]>;\n}\n\nexport interface SetPublicApiKeyOptions {\n  publicApiKey: string;\n}\n\nexport interface EnvInfo {\n  envKey: string;\n  envValue: string | null;\n  file: string;\n  modifiedType?: \"create\" | \"update\" | \"permission-error\" | null;\n}\n\nexport interface DevToolsServer {\n  getUrl: () => string;\n}\n\nexport type ApiRequest =\n  | ApiConnectBuilderRequest\n  | ApiDevToolsEnabledRequest\n  | ApiGetRegistryRequest\n  | ApiLaunchEditorRequest\n  | ApiRegisterComponentRequest\n  | ApiRegisteredComponentInfoRequest\n  | ApiRegisteredComponentInputRequest\n  | ApiLoadComponentRequest\n  | ApiUnregisterComponentRequest\n  | ApiValidateBuilderRequest\n  | ApiFrameworksRequest\n  | ApiReadFileRequest\n  | ApiWriteFileRequest\n  | ApiReaddirRequest\n  | ApiGetBuilderCacheRequest\n  | ApiEnsureFigmaImportPageRequest\n  | ApiSetBuilderCacheRequest\n  | ApiTranspileModuleRequest\n  | ApiTranspileFileRequest\n  | ApiPastSyncInfoRequest\n  | ApiResyncSnippetRequest\n  | ApiLocalConfigRequest\n  | ApiGetAllProjectFilesRequest;\n\nexport interface ApiTranspileModuleRequest extends TranspileModuleOptions {\n  type: \"transileModule\";\n}\n\nexport interface ApiTranspileFileRequest extends TranspileFileOptions {\n  type: \"transileFile\";\n}\n\nexport interface ApiGetBuilderCacheRequest {\n  type: \"getCache\";\n}\n\nexport interface ApiSetBuilderCacheRequest {\n  type: \"setCache\";\n  data: Record<string, any>;\n}\nexport interface ApiPastSyncInfoRequest {\n  type: \"getPastSyncInfo\";\n  data: { sessionKey: string; since: number };\n}\nexport interface ApiResyncSnippetRequest {\n  type: \"resyncSnippet\";\n  data: { syncInfo: SyncInfo; snippet: Snippet };\n}\n\nexport interface ApiEnsureFigmaImportPageRequest {\n  type: \"ensureFigmaImportPage\";\n}\n\nexport interface ApiConnectBuilderRequest {\n  type: \"connectBuilder\";\n  data: {\n    publicApiKey: string;\n    privateAuthKey: string;\n    kind: string | null;\n  };\n}\n\nexport interface ApiDevToolsEnabledRequest {\n  type: \"enableDevTools\";\n  data: {\n    enabled: boolean;\n  };\n}\n\nexport interface ApiGetRegistryRequest {\n  type: \"getRegistry\";\n  data?: GetRegistryOptions;\n}\n\nexport interface GetRegistryOptions {\n  readAllInputTypes?: boolean;\n}\n\nexport interface ApiLocalConfigRequest {\n  type: \"localConfig\";\n}\n\nexport interface ApiLaunchEditorRequest {\n  type: \"launchEditor\";\n  data: LaunchEditorFile;\n}\n\nexport interface ApiRegisterComponentRequest {\n  type: \"registerComponent\";\n  data: RegisterComponentOptions;\n}\n\nexport interface ApiUnregisterComponentRequest {\n  type: \"unregisterComponent\";\n  data: UnregisterComponentOptions;\n}\n\nexport interface ApiRegisteredComponentInfoRequest {\n  type: \"setComponentInfo\";\n  data: SetComponentInfoOptions;\n}\n\nexport interface ApiRegisteredComponentInputRequest {\n  type: \"setComponentInput\";\n  data: SetComponentInputOptions;\n}\n\nexport interface ApiLoadComponentRequest {\n  type: \"loadComponent\";\n  data: LoadComponentOptions;\n}\n\nexport interface ApiValidateBuilderRequest {\n  type: \"validateBuilder\";\n}\n\nexport interface ApiFrameworksRequest {\n  type: \"getFrameworks\";\n}\n\nexport interface ApiReadFileRequest {\n  type: \"readFile\";\n  path: string;\n}\n\nexport interface ApiWriteFileRequest {\n  type: \"writeFile\";\n  path: string;\n  content: string;\n}\n\nexport interface ApiReaddirRequest {\n  type: \"readdir\";\n  path: string;\n}\n\nexport interface ApiResponse<T = any> {\n  type?: string;\n  data?: T;\n  errors?: string[];\n}\n\nexport interface ValidatedBuilder {\n  isValid: boolean;\n  pathname: string;\n  platform: DevtoolsPlatform;\n}\n\nexport interface ConnectedBuilder {\n  success: boolean;\n  pathname: string;\n  modifiedFiles: ModifiedFile[];\n  platform: DevtoolsPlatform;\n  kind: SPACE_KIND_VALUES;\n}\n\nexport interface LocalConfig {\n  userId?: string;\n  deviceId?: string;\n}\n\nexport interface ModifiedFile {\n  filePath: string;\n  displayFilePath?: string;\n  modifiedType: \"create\" | \"update\";\n}\n\nexport interface Framework {\n  name: string;\n  version?: SemanticVersion;\n}\n\nexport interface SemanticVersion {\n  major?: number;\n  minor?: number;\n  patch?: number;\n}\n\nexport interface ComponentRegistry {\n  components: ComponentInfo[];\n  registryPath: string;\n  registryDisplayPath: string;\n  frameworks: Framework[];\n  dependencies: AppDependency[];\n  publicApiKey: string | undefined;\n  devToolsVersion: string;\n}\n\nexport interface AppDependency {\n  name: string;\n}\n\nexport interface ExportedRegistry {\n  components: MinimalComponentInfo[];\n  version: number;\n}\n\nexport interface LoadComponent extends ComponentRegistry {\n  component: ComponentInfo;\n}\n\nexport interface LoadComponentOptions {\n  cmpId: string;\n}\n\nexport interface RegisterComponentOptions {\n  cmpId: string | string[];\n}\n\nexport interface UnregisterComponentOptions {\n  cmpId: string;\n}\n\nexport interface SetComponentInfoOptions {\n  cmpId: string;\n  name?: string;\n  image?: string | null;\n  description?: string | null;\n}\n\nexport interface SetComponentInputOptions\n  extends Partial<Omit<ComponentInput, \"isRegistered\">> {\n  cmpId: string;\n  name: string;\n  registerInput?: boolean;\n}\n\nexport interface DependenciesOptions {\n  sdkVersion: SDK_VERSION_VALUES | null;\n}\n\nexport interface ComponentInfo {\n  id: string;\n  filePath: string;\n  relFilePath: string;\n  importPath: string;\n  name: string;\n  image?: string;\n  description?: string;\n  inputs: ComponentInput[];\n  displayFilePath?: string;\n  exportName: string;\n  exportType?: ExportType;\n  importName: string;\n  nodeIndex?: number;\n  isRegistered?: boolean;\n  acceptsChildren?: boolean;\n  meta?: Record<string, any>;\n  dependencies?: AppDependency[];\n  externalImportPath?: string;\n  framework: \"react\" | \"angular\" | \"qwik\" | \"vue\";\n  vueApiType?: \"composition-setup\" | \"composition\" | \"options\";\n}\n\nexport interface MinimalComponentInfo {\n  filePath: string;\n  name: string;\n  image?: string;\n  description?: string;\n  inputs: ComponentInput[];\n  exportName: string;\n}\n\n/**\n * Extends the @builder.io/sdk Input type to include additional properties.\n * If a property is set to null, it will be removed from the input.\n */\nexport interface ComponentInput {\n  /** This is the name of the component prop this input represents */\n  name: string;\n  /** A friendlier name to show in the UI if the component prop name is not ideal for end users. Setting to null will remove the value. */\n  friendlyName?: string | null;\n  /** A default value to use. Setting to null will remove the value. */\n  defaultValue?: string | number | boolean | null;\n  /**\n   * The type of input to use, such as 'text'\n   *\n   * See all available inputs [here](https://www.builder.io/c/docs/custom-react-components#input-types)\n   * and you can create your own custom input types and associated editor UIs with [plugins](https://www.builder.io/c/docs/extending/plugins)\n   */\n  type: string;\n  /** Is this input mandatory or not. Setting to null will remove the setting. */\n  required?: boolean | null;\n  /**\n   * Additional text to render in the UI to give guidance on how to use this\n   *\n   * @example\n   * ```js\n   * helperText: 'Be sure to use a proper URL, starting with \"https://\"'\n   * 111\n   */\n  helperText?: string | null;\n  /**\n   * For \"text\" input type, specifying an enum will show a dropdown of options instead\n   */\n  enum?:\n    | string[]\n    | {\n        label: string;\n        value: string | number | boolean;\n        helperText?: string;\n      }[];\n  meta?: Record<string, any>;\n\n  /** Add-on data that should not go in the registry */\n  isRegistered?: boolean;\n\n  hideFromUI?: boolean;\n}\n\nexport type ExportType = \"default\" | \"named\";\n\nexport interface PackageJSON {\n  dependencies?: { [pkgName: string]: string };\n  devDependencies?: { [pkgName: string]: string };\n  scripts?: { [scriptName: string]: string };\n  [key: string]: any;\n}\n\nexport type ModuleFormat = \"esm\" | \"cjs\";\n\nexport interface LaunchEditorFile {\n  filePath: string;\n  line?: number;\n  column?: number;\n}\n\nexport interface TranspileFileOptions {\n  filePath: string;\n  compilerOptions: import(\"typescript\").CompilerOptions;\n}\n\nexport interface TranspileModuleOptions {\n  code: string;\n  filePath?: string;\n  compilerOptions: import(\"typescript\").CompilerOptions;\n}\n\nexport interface TranspileResult {\n  code: string | null;\n  output: string | null;\n  diagnostics: TranspileDiagnostic[];\n}\n\nexport interface TranspileDiagnostic {\n  messageText: string;\n}\n\nexport const SDK_VERSIONS = {\n  gen1: \"Gen 1\",\n  gen2: \"Gen 2\",\n} as const;\n\ntype SDK_VERSION_KEYS = keyof typeof SDK_VERSIONS;\n\nexport type SDK_VERSION_VALUES = (typeof SDK_VERSIONS)[SDK_VERSION_KEYS];\n\nexport interface SDKVersionInfo {\n  version: SDK_VERSION_VALUES;\n  recommended: boolean;\n}\n\nexport interface SDKFrameworks {\n  [key: string]: SDKVersionInfo[];\n}\n\nexport interface UpdateRegistry {\n  addCmpToRegistry: ComponentInfo | null;\n  removeCmpFromRegistry: ComponentInfo | null;\n  updateRegisteredCmp: ComponentInfo | null;\n  nodeIndex: number;\n  components: ComponentInfo[];\n}\n\nexport interface AddCliOptions {\n  cwd: string;\n  command?: string;\n  snippetId?: string;\n  snippet?: Snippet;\n  path?: string;\n}\n\nexport interface FileNode {\n  name: string;\n  code: string;\n  path: string;\n  timestamp?: number;\n  snippetId?: string;\n}\n\nexport interface FolderNode {\n  name: string;\n  path: string;\n  files: (FileNode | FolderNode)[];\n}\nexport interface Snippet {\n  createdDate: number;\n  contentId: string;\n  code: string;\n  framework: string;\n  suggestedName: string;\n  id: string;\n  files: Array<FileNode | FolderNode>;\n  sessionKey: string;\n}\nexport interface SyncInfo {\n  snippet: Snippet;\n  pathInput: string;\n  writtenFiles: Array<FileNode>;\n  timeStamp: number;\n}\nexport interface Package {\n  name: string;\n  subPackages: string[];\n}\n\nexport type DependencyTree = Package[];\n\nexport const SPACE_KIND = {\n  CMS: \"cms\",\n  VCP: \"vcp\",\n  HYBRID: \"hybrid\",\n} as const;\n\ntype SPACE_KIND_KEYS = keyof typeof SPACE_KIND;\n\nexport type SPACE_KIND_VALUES = (typeof SPACE_KIND)[SPACE_KIND_KEYS] | null;\n\nexport interface ApiGetAllProjectFilesRequest {\n  type: \"getAllProjectFiles\";\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport function setObjectExpressionProperty(\n  sys: DevToolsSys,\n  obj: ts.ObjectLiteralExpression,\n  propName: string,\n  propValue: any,\n  deleteIfNullOrUndefined = true,\n) {\n  const props = obj.properties.filter((p) =>\n    sys.ts.isPropertyAssignment(p),\n  ) as ts.PropertyAssignment[];\n\n  const i = getObjLiteralPropertyIndex(sys, obj, propName);\n  if (i > -1) {\n    if (propValue == null && deleteIfNullOrUndefined) {\n      return sys.ts.factory.updateObjectLiteralExpression(\n        obj,\n        props.filter((_, j) => j !== i),\n      );\n    }\n\n    props[i] = sys.ts.factory.updatePropertyAssignment(\n      props[i],\n      props[i].name,\n      valueToExpression(sys, propValue),\n    );\n\n    return sys.ts.factory.updateObjectLiteralExpression(obj, props);\n  }\n\n  if (propValue != null) {\n    props.push(\n      sys.ts.factory.createPropertyAssignment(\n        propName,\n        valueToExpression(sys, propValue),\n      ),\n    );\n  }\n\n  return sys.ts.factory.updateObjectLiteralExpression(obj, props);\n}\n\nexport function getObjLiteralPropertyIndex(\n  sys: DevToolsSys,\n  obj: ts.ObjectLiteralExpression,\n  propName: string,\n) {\n  return obj.properties.findIndex((p) => {\n    return getTextOfPropertyName(sys, p) === propName;\n  });\n}\n\nexport function expressionToValue(sys: DevToolsSys, exp: ts.Expression): any {\n  switch (exp.kind) {\n    case sys.ts.SyntaxKind.ArrayLiteralExpression:\n      return convertArrayExpressionToJsArray(\n        sys,\n        exp as ts.ArrayLiteralExpression,\n      );\n\n    case sys.ts.SyntaxKind.ObjectLiteralExpression:\n      return objectExpressionToObjectValue(\n        sys,\n        exp as ts.ObjectLiteralExpression,\n      );\n\n    case sys.ts.SyntaxKind.StringLiteral:\n      return (exp as ts.StringLiteral).text;\n\n    case sys.ts.SyntaxKind.NumericLiteral:\n      return Number((exp as ts.NumericLiteral).text);\n\n    case sys.ts.SyntaxKind.NoSubstitutionTemplateLiteral:\n      return (exp as ts.StringLiteral).text;\n\n    case sys.ts.SyntaxKind.TrueKeyword:\n      return true;\n\n    case sys.ts.SyntaxKind.FalseKeyword:\n      return false;\n\n    case sys.ts.SyntaxKind.Identifier:\n      switch ((exp as ts.Identifier).escapedText) {\n        case \"undefined\":\n          return undefined;\n        case \"null\":\n          return null;\n        case \"String\":\n          return String;\n        case \"Number\":\n          return Number;\n        case \"Boolean\":\n          return Boolean;\n        case \"NaN\":\n          return NaN;\n      }\n  }\n  return undefined;\n}\n\nexport function objectExpressionToObjectValue(\n  sys: DevToolsSys,\n  objectLiteral: ts.ObjectLiteralExpression,\n): { [key: string]: any } {\n  const obj: { [key: string]: any } = {};\n\n  if (objectLiteral && sys.ts.isObjectLiteralExpression(objectLiteral)) {\n    for (const prop of objectLiteral.properties) {\n      if (sys.ts.isPropertyAssignment(prop)) {\n        const attrName = getTextOfPropertyName(sys, prop);\n        if (attrName) {\n          obj[attrName] = expressionToValue(sys, prop.initializer);\n        }\n      }\n    }\n  }\n\n  return obj;\n}\n\nexport function convertArrayExpressionToJsArray(\n  sys: DevToolsSys,\n  arr: ts.ArrayLiteralExpression,\n) {\n  if (arr && sys.ts.isArrayLiteralExpression(arr)) {\n    return arr.elements.map((el) => expressionToValue(sys, el));\n  }\n  return [];\n}\n\nexport function getTextOfPropertyName(\n  sys: DevToolsSys,\n  prop: ts.PropertyAssignment | ts.ObjectLiteralElementLike | undefined,\n): string | undefined {\n  if (prop && sys.ts.isPropertyAssignment(prop)) {\n    const propName = prop.name;\n    switch (propName.kind) {\n      case sys.ts.SyntaxKind.Identifier:\n        return propName.text;\n      case sys.ts.SyntaxKind.StringLiteral:\n      case sys.ts.SyntaxKind.NumericLiteral:\n        return propName.text;\n      case sys.ts.SyntaxKind.ComputedPropertyName:\n        const expression = propName.expression;\n        if (\n          sys.ts.isStringLiteral(expression) ||\n          sys.ts.isNumericLiteral(expression)\n        ) {\n          return (propName.expression as ts.LiteralExpression).text;\n        }\n    }\n  }\n  return undefined;\n}\n\nexport function valueToExpression(sys: DevToolsSys, val: any) {\n  return valueToTsExpression(sys, val, new WeakSet());\n}\n\nfunction valueToTsExpression(sys: DevToolsSys, val: any, refs: WeakSet<any>) {\n  if (val === undefined) {\n    return sys.ts.factory.createIdentifier(\"undefined\");\n  }\n  if (val === null) {\n    return sys.ts.factory.createIdentifier(\"null\");\n  }\n  if (typeof val === \"string\") {\n    return sys.ts.factory.createStringLiteral(val);\n  }\n  if (typeof val === \"number\") {\n    if (isNaN(val)) {\n      return sys.ts.factory.createIdentifier(\"NaN\");\n    }\n    return sys.ts.factory.createNumericLiteral(val);\n  }\n  if (val === true) {\n    return sys.ts.factory.createTrue();\n  }\n  if (val === false) {\n    return sys.ts.factory.createFalse();\n  }\n  if (val === String) {\n    return sys.ts.factory.createIdentifier(\"String\");\n  }\n  if (val === Number) {\n    return sys.ts.factory.createIdentifier(\"Number\");\n  }\n  if (val === Boolean) {\n    return sys.ts.factory.createIdentifier(\"Boolean\");\n  }\n  if (Array.isArray(val)) {\n    return arrayToArrayExpression(sys, val, refs);\n  }\n  if (typeof val === \"object\") {\n    return objectToObjectLiteral(sys, val, refs);\n  }\n  return sys.ts.factory.createIdentifier(val);\n}\n\nfunction arrayToArrayExpression(\n  sys: DevToolsSys,\n  list: any[],\n  refs: WeakSet<any>,\n): ts.ArrayLiteralExpression {\n  const newList: any[] = list.map((l) => {\n    return valueToTsExpression(sys, l, refs);\n  });\n  return sys.ts.factory.createArrayLiteralExpression(newList, true);\n}\n\nfunction objectToObjectLiteral(\n  sys: DevToolsSys,\n  obj: { [key: string]: any },\n  refs: WeakSet<any>,\n): ts.ObjectLiteralExpression {\n  if (refs.has(obj)) {\n    return sys.ts.factory.createIdentifier(\"undefined\") as any;\n  }\n\n  refs.add(obj);\n\n  const newProperties: ts.ObjectLiteralElementLike[] = Object.keys(obj).map(\n    (key) => {\n      return sys.ts.factory.createPropertyAssignment(\n        key,\n        valueToTsExpression(sys, obj[key], refs) as ts.Expression,\n      );\n    },\n  );\n\n  return sys.ts.factory.createObjectLiteralExpression(newProperties, true);\n}\n", "import type ts from \"typescript\";\nimport type { ComponentInput, DevToolsSys } from \"../../types\";\n\nexport function parseComponentSourcePropsFromNode(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  fnNode: ts.Node | undefined,\n) {\n  let inputs: ComponentInput[] = [];\n  if (!fnNode) {\n    return inputs;\n  }\n\n  let properties: ts.Symbol[] | null = null;\n\n  if (\n    sys.ts.isArrowFunction(fnNode) ||\n    sys.ts.isFunctionExpression(fnNode) ||\n    sys.ts.isFunctionDeclaration(fnNode)\n  ) {\n    const fnParams = fnNode.parameters;\n    if (fnParams.length > 0) {\n      const propsNode = fnParams[0];\n      let type = typeChecker.getTypeAtLocation(propsNode);\n      if (type.aliasTypeArguments && type.aliasTypeArguments.length > 0) {\n        type = type.aliasTypeArguments[0];\n      }\n      const isObject = !!(type.flags & sys.ts.TypeFlags.Object);\n      if (isObject) {\n        properties = type.getProperties();\n      }\n    }\n  } else if (sys.ts.isIdentifier(fnNode)) {\n    const type = typeChecker.getTypeAtLocation(fnNode);\n    const classDecl = type.symbol?.valueDeclaration;\n\n    if (classDecl && sys.ts.isClassDeclaration(classDecl)) {\n      const extendClause = classDecl.heritageClauses?.find(\n        (h) => h.token === sys.ts.SyntaxKind.ExtendsKeyword,\n      );\n      const extendTypes = extendClause?.types;\n      if (extendTypes) {\n        for (const extendType of extendTypes) {\n          const symbol = typeChecker.getSymbolAtLocation(extendType.expression);\n          if (symbol?.name === \"Component\") {\n            if (sys.ts.isExpressionWithTypeArguments(extendType)) {\n              const typeArguments = extendType.typeArguments;\n              if (typeArguments) {\n                const propsTypeNode = typeArguments[0];\n                const propsType =\n                  typeChecker.getTypeFromTypeNode(propsTypeNode);\n                properties = propsType.getProperties();\n              }\n            }\n            break;\n          }\n        }\n      }\n    }\n\n    if (!properties) {\n      const callSignatures = type.getCallSignatures();\n      if (callSignatures.length > 0) {\n        const params = callSignatures[0].getParameters();\n        if (params.length > 0) {\n          const typeOfSymbol = typeChecker.getTypeOfSymbolAtLocation(\n            params[0],\n            fnNode,\n          );\n          properties = typeOfSymbol.getProperties();\n        }\n      }\n    }\n  } else if (sys.ts.isExportSpecifier(fnNode)) {\n    const symbol = typeChecker.getSymbolAtLocation(fnNode.name);\n    if (symbol) {\n      const type = typeChecker.getTypeOfSymbolAtLocation(symbol, fnNode);\n      const callSignatures = type.getCallSignatures();\n      if (callSignatures.length > 0) {\n        const params = callSignatures[0].getParameters();\n        if (params.length > 0) {\n          const typeOfSymbol = typeChecker.getTypeOfSymbolAtLocation(\n            params[0],\n            fnNode,\n          );\n          properties = typeOfSymbol.getProperties();\n        }\n      }\n    }\n  }\n\n  if (properties) {\n    for (const symbol of properties) {\n      const input = parseComponentSourceInputFromSymbol(\n        sys,\n        typeChecker,\n        symbol,\n      );\n\n      if (input) {\n        inputs.push(input);\n      }\n    }\n  }\n\n  inputs = inputs.filter(shouldIncludeInput);\n  if (inputs.length > 0) {\n    return inputs;\n  }\n\n  return parseComponentSourceInputFromJsDocs(sys, fnNode);\n}\n\nfunction parseComponentSourceInputFromSymbol(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  symbol: ts.Symbol,\n) {\n  let value = symbol.valueDeclaration;\n  const propName = symbol.getName();\n  if (!value) {\n    value = symbol.getDeclarations()?.[0];\n  }\n  if (value && sys.ts.isPropertySignature(value)) {\n    if (propName !== \"children\") {\n      const filename = value.getSourceFile().fileName;\n      if (filename.includes(\"node_modules/@types/\")) {\n        return null;\n      }\n    }\n    let builderInputType = \"string\"; // default\n    let nonPrimitiveType: string | undefined = undefined;\n\n    if (value?.type) {\n      const nodeType = typeChecker.getTypeFromTypeNode(value.type);\n\n      // get the type string\n      const typeString = typeChecker.typeToString(nodeType);\n\n      const normlizedBuilderType = normalizeBuilderInputType(typeString);\n      if (!normlizedBuilderType.knownType) {\n        if (\n          isValidBuilderObjectType(typeString) ||\n          nodeType.flags & sys.ts.TypeFlags.StringLike\n        ) {\n          builderInputType = \"string\";\n        } else if (nodeType.flags & sys.ts.TypeFlags.NumberLike) {\n          builderInputType = \"number\";\n        } else if (nodeType.flags & sys.ts.TypeFlags.IndexedAccess) {\n          builderInputType = \"list\";\n        } else if (nodeType.flags & sys.ts.TypeFlags.Object) {\n          builderInputType = \"object\";\n        } else if (\n          nodeType.isUnion() &&\n          nodeType.types.every((t) => t.flags & sys.ts.TypeFlags.Object)\n        ) {\n          builderInputType = \"object\";\n        } else if (\n          nodeType.isIntersection() &&\n          nodeType.types.some((t) => t.flags & sys.ts.TypeFlags.Object)\n        ) {\n          builderInputType = \"object\";\n        } else {\n          builderInputType = \"string\";\n        }\n      } else {\n        builderInputType = normlizedBuilderType.builderType;\n      }\n\n      if (typeString !== builderInputType) {\n        // if the type is not a valid builder input type\n        // then we need to store it in the meta\n        nonPrimitiveType = typeString;\n      }\n    }\n\n    const input: ComponentInput = {\n      name: propName,\n      type: builderInputType,\n      isRegistered: false,\n    };\n    if (nonPrimitiveType && value.type) {\n      const resolvedType = resolveType(\n        sys,\n        typeChecker,\n        typeChecker.getTypeFromTypeNode(value.type),\n      );\n\n      input.meta = input.meta || {};\n      if (\n        resolvedType &&\n        resolvedType.length > 0 &&\n        input.type === \"string\" &&\n        resolvedType.every(hasQuotes)\n      ) {\n        input.enum = resolvedType.map(removeQuotes);\n      } else {\n        input.meta.ts = nonPrimitiveType;\n      }\n    }\n\n    if (!value.questionToken) {\n      input.required = true;\n    }\n\n    return input;\n  }\n  return null;\n}\n\nfunction parseComponentSourceInputFromJsDocs(\n  sys: DevToolsSys,\n  fnNode: ts.Node,\n) {\n  /**\n   * Component description.\n   *\n   * @component\n   * @param {Object} props\n   * @param {string} props.title The title of the component.\n   * @param {number} props.enabled Is the component enabled.\n   * @param {number} props.count Count of items.\n   */\n\n  const inputs: ComponentInput[] = [];\n  const jsDocComments = sys.ts.getJSDocCommentsAndTags(fnNode);\n\n  for (const jsDoc of jsDocComments) {\n    if (!sys.ts.isJSDoc(jsDoc) || !jsDoc.tags) {\n      continue;\n    }\n\n    for (const tag of jsDoc.tags) {\n      if (!sys.ts.isJSDocParameterTag(tag)) {\n        continue;\n      }\n      const tagName = tag.tagName.text;\n      if (tagName !== \"param\") {\n        continue;\n      }\n\n      // * @param {Object} props\n\n      const jsDocType = tag.typeExpression?.type;\n      if (!jsDocType || !sys.ts.isJSDocTypeLiteral(jsDocType)) {\n        continue;\n      }\n      const jsDocPropertyTags = jsDocType.jsDocPropertyTags;\n      if (!jsDocPropertyTags) {\n        continue;\n      }\n\n      for (const jsDocPropertyTag of jsDocPropertyTags) {\n        if (!sys.ts.isJSDocPropertyLikeTag(jsDocPropertyTag)) {\n          continue;\n        }\n        const paramPropName = jsDocPropertyTag.name;\n        if (!sys.ts.isQualifiedName(paramPropName)) {\n          continue;\n        }\n        const typeExp = jsDocPropertyTag.typeExpression;\n        if (!typeExp) {\n          continue;\n        }\n\n        // * @param {string} props.title The title of the component.\n\n        let builderInputType = \"\";\n        switch (typeExp.type.kind) {\n          case sys.ts.SyntaxKind.StringKeyword: {\n            builderInputType = \"string\";\n            break;\n          }\n          case sys.ts.SyntaxKind.NumberKeyword: {\n            builderInputType = \"number\";\n            break;\n          }\n          case sys.ts.SyntaxKind.BooleanKeyword: {\n            builderInputType = \"boolean\";\n            break;\n          }\n          default: {\n            // idk\n            continue;\n          }\n        }\n\n        const propName = paramPropName.right.text;\n\n        const input: ComponentInput = {\n          name: propName,\n          type: builderInputType,\n          isRegistered: false,\n        };\n        inputs.push(input);\n      }\n    }\n  }\n\n  return inputs.filter(shouldIncludeInput);\n}\n\nconst VALID_OBJECT_TYPES = [\n  \"ClassicComponent\",\n  \"FunctionComponent\",\n  \"IntrinsicElements\",\n  \"JSX\",\n  \"ReactNode\",\n  \"ReactElement\",\n  \"ReactPortal\",\n];\n\nfunction isValidBuilderObjectType(type: string) {\n  if (typeof type !== \"string\") {\n    return false;\n  }\n\n  if (VALID_OBJECT_TYPES.some((t) => type.includes(t))) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function normalizeBuilderInputType(t: string) {\n  if (typeof t === \"string\") {\n    t = t.trim();\n    if (INPUT_TYPES.some((i) => i.value === t)) {\n      return {\n        builderType: t,\n        knownType: true,\n      };\n    }\n  }\n  // default builder component input type\n  return {\n    builderType: \"string\",\n    knownType: false,\n  };\n}\n\n/**\n * https://www.builder.io/c/docs/custom-components-input-types\n */\nexport const INPUT_TYPES = [\n  { value: \"boolean\", text: \"boolean\" },\n  { value: \"color\", text: \"color (provides a color in hex or rgb)\" },\n  { value: \"date\", text: \"date (same format as the Date constructor)\" },\n  { value: \"email\", text: \"email\" },\n  { value: \"file\", text: \"file (uploads a file and provides a url)\" },\n  { value: \"list\", text: \"list (collection of items)\" },\n  { value: \"longText\", text: \"longText (multiline text editor)\" },\n  { value: \"number\", text: \"number\" },\n  { value: \"object\", text: \"object (set of specific names and values)\" },\n  { value: \"richText\", text: \"richText (provides value as html)\" },\n  { value: \"string\", text: \"string\" },\n];\n\nexport const STRING_TYPES = [\n  \"color\",\n  \"date\",\n  \"email\",\n  \"file\",\n  \"longText\",\n  \"richText\",\n  \"string\",\n];\nexport const NUMBER_TYPES = [\"number\"];\nexport const BOOLEAN_TYPES = [\"boolean\"];\nexport const ARRAY_TYPES = [\"list\"];\nexport const OBJECT_TYPES = [\"object\"];\n\nexport function getPrimitiveType(t: string) {\n  if (STRING_TYPES.includes(t)) {\n    return \"string\";\n  } else if (NUMBER_TYPES.includes(t)) {\n    return \"number\";\n  } else if (BOOLEAN_TYPES.includes(t)) {\n    return \"boolean\";\n  } else if (ARRAY_TYPES.includes(t)) {\n    return \"array\";\n  } else if (OBJECT_TYPES.includes(t)) {\n    return \"object\";\n  } else {\n    return \"string\";\n  }\n}\n\nfunction hasQuotes(text: string) {\n  return /^['\"].*['\"]$/.test(text);\n}\n\nexport function removeQuotes(text: string): string {\n  if (\n    (text.startsWith(`\"`) || text.startsWith(`'`)) &&\n    (text.endsWith(`\"`) || text.endsWith(`'`))\n  ) {\n    return text.slice(1, -1);\n  }\n  return text;\n}\n\n// This is used to get enum values from the type\nexport const resolveType = (\n  sys: DevToolsSys,\n  checker: ts.TypeChecker,\n  type: ts.Type,\n): string[] | undefined => {\n  const set = new Set<string>();\n  parseDocsType(sys, checker, type, set);\n\n  const hasTrue = set.delete(\"true\");\n  const hasFalse = set.delete(\"false\");\n  if (hasTrue || hasFalse) {\n    set.add(\"boolean\");\n  }\n\n  let parts = Array.from(set.keys()).sort();\n  if (parts.length > 1) {\n    parts = parts.map((p) => (p.indexOf(\"=>\") >= 0 ? `(${p})` : p));\n  }\n  // This is intentional as some props have too many enums\n  if (parts.length > 20) {\n    return;\n  } else {\n    return parts;\n  }\n};\n\nexport const typeToString = (\n  sys: DevToolsSys,\n  checker: ts.TypeChecker,\n  type: ts.Type,\n): string => {\n  const TYPE_FORMAT_FLAGS =\n    sys.ts.TypeFormatFlags.InElementType | sys.ts.TypeFormatFlags.NoTruncation;\n\n  return checker.typeToString(type, undefined, TYPE_FORMAT_FLAGS);\n};\n\nexport const parseDocsType = (\n  sys: DevToolsSys,\n  checker: ts.TypeChecker,\n  type: ts.Type,\n  parts: Set<string>,\n): void => {\n  if (type.isUnion()) {\n    (type as ts.UnionType).types.forEach((t) => {\n      parseDocsType(sys, checker, t, parts);\n    });\n  } else {\n    if (type.isLiteral()) {\n      const text = typeToString(sys, checker, type);\n      parts.add(text);\n    }\n  }\n};\n\nfunction shouldIncludeInput(input: ComponentInput) {\n  const propName = input?.name;\n  if (typeof propName !== \"string\" || propName === \"\") {\n    return false;\n  }\n\n  if (propName.startsWith(\"aria\")) {\n    return false;\n  }\n\n  if (propName.startsWith(\"data-\")) {\n    return false;\n  }\n\n  if (propName.startsWith(\"on\") && propName.length > 2) {\n    // onClick, onHover, etc\n    const thirdChar = propName.charAt(2);\n    if (thirdChar.toUpperCase() === thirdChar) {\n      return false;\n    }\n  }\n\n  return !PROP_BLACKLIST.has(propName.toLowerCase());\n}\n\n/**\n * Props that we should probably not include as a possible component input\n */\nconst PROP_BLACKLIST = new Set(\n  [\n    \"about\",\n    \"accessKey\",\n    \"accessKeyLabel\",\n    \"asChild\",\n    \"autoCapitalize\",\n    \"autoCorrect\",\n    \"autoFocus\",\n    \"autoSave\",\n    \"blur\",\n    \"contentEditable\",\n    \"contextMenu\",\n    \"dangerouslySetInnerHTML\",\n    \"datatype\",\n    \"defaultChecked\",\n    \"defaultValue\",\n    \"dir\",\n    \"draggable\",\n    \"enterKeyHint\",\n    \"focus\",\n    \"form\",\n    \"formAction\",\n    \"formEncType\",\n    \"formMethod\",\n    \"formNoValidate\",\n    \"formTarget\",\n    \"inlist\",\n    \"innerText\",\n    \"inputMode\",\n    \"is\",\n    \"isContentEditable\",\n    \"itemID\",\n    \"itemProp\",\n    \"itemRef\",\n    \"itemScope\",\n    \"itemType\",\n    \"lang\",\n    \"nonce\",\n    \"offsetHeight\",\n    \"offsetLeft\",\n    \"offsetTop\",\n    \"offsetWidth\",\n    \"outerText\",\n    \"prefix\",\n    \"property\",\n    \"radioGroup\",\n    \"rel\",\n    \"resource\",\n    \"results\",\n    \"rev\",\n    \"role\",\n    \"security\",\n    \"slot\",\n    \"spellCheck\",\n    \"suppressContentEditableWarning\",\n    \"suppressHydrationWarning\",\n    \"tabIndex\",\n    \"translate\",\n    \"typeof\",\n    \"unselectable\",\n    \"vocab\",\n  ].map((s) => s.toLowerCase()),\n);\n", "import type ts from \"typescript\";\nimport type {\n  Component as BuilderComponent,\n  Input as BuilderInput,\n} from \"@builder.io/sdk\";\nimport type { ComponentInfo, ComponentInput, DevToolsSys } from \"../../types\";\nimport {\n  expressionToValue,\n  getTextOfPropertyName,\n  setObjectExpressionProperty,\n  valueToExpression,\n} from \"./convert-values\";\nimport { normalizeBuilderInputType } from \"./component-input-types\";\nimport { isBoolean, isNumber, isString } from \"../utils\";\n\nexport function parseRegisteredComponentInfo(\n  sys: DevToolsSys,\n  cmpInfo: ComponentInfo,\n  cmpObjLit: ts.ObjectLiteralExpression,\n) {\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"name\" && sys.ts.isStringLiteral(p.initializer)) {\n      cmpInfo.name = p.initializer.text;\n      continue;\n    }\n\n    if (propName === \"description\" && sys.ts.isStringLiteral(p.initializer)) {\n      cmpInfo.description = p.initializer.text;\n      continue;\n    }\n\n    if (propName === \"image\" && sys.ts.isStringLiteral(p.initializer)) {\n      cmpInfo.image = p.initializer.text;\n      continue;\n    }\n\n    if (\n      propName === \"inputs\" &&\n      sys.ts.isArrayLiteralExpression(p.initializer)\n    ) {\n      const registeredInputs = parseRegisteredComponentInputs(\n        sys,\n        p.initializer,\n      );\n      mergeComponentInputs(cmpInfo, registeredInputs);\n      continue;\n    }\n\n    if (\n      propName === \"meta\" &&\n      sys.ts.isObjectLiteralExpression(p.initializer)\n    ) {\n      const meta = expressionToValue(sys, p.initializer);\n      if (meta && typeof meta === \"object\") {\n        cmpInfo.meta = meta;\n      }\n      continue;\n    }\n  }\n\n  return cmpInfo;\n}\n\nfunction parseRegisteredComponentInputs(\n  sys: DevToolsSys,\n  arr: ts.ArrayLiteralExpression,\n) {\n  const inputs: ComponentInput[] = [];\n  for (const elm of arr.elements) {\n    if (sys.ts.isObjectLiteralExpression(elm)) {\n      inputs.push(parseRegisteredComponentInput(sys, elm));\n    }\n  }\n  return inputs;\n}\n\nfunction parseRegisteredComponentInput(\n  sys: DevToolsSys,\n  obj: ts.ObjectLiteralExpression,\n) {\n  const builderInput = expressionToValue(sys, obj) as BuilderInput;\n  const cmpInput = normalizeBuilderInput(builderInput);\n  cmpInput.isRegistered = true;\n  return cmpInput;\n}\n\nexport function updateComponentObjLiteralInfoProperties(\n  sys: DevToolsSys,\n  cmpObjExp: ts.ObjectLiteralExpression,\n  cmpInfo: ComponentInfo,\n) {\n  const builderCmp = mapDevToolsCmpToBuilderCmp(cmpInfo);\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"name\",\n    builderCmp.name,\n    false,\n  );\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"description\",\n    builderCmp.description,\n  );\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"image\",\n    builderCmp.image,\n  );\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"meta\",\n    //@ts-expect-error waiting on updated @builder.io/sdk release\n    builderCmp.meta,\n  );\n\n  cmpObjExp = updateComponentObjLiteralInputsProperty(\n    sys,\n    cmpObjExp,\n    builderCmp,\n  );\n\n  return sortComponentInfoProperties(sys, cmpObjExp);\n}\n\nfunction updateComponentObjLiteralInputsProperty(\n  sys: DevToolsSys,\n  cmpObjExp: ts.ObjectLiteralExpression,\n  builderCmp: BuilderComponent,\n) {\n  let arrExp: ts.ArrayLiteralExpression | null = null;\n\n  const props = cmpObjExp.properties.filter((p) => {\n    return sys.ts.isPropertyAssignment(p) && sys.ts.isIdentifier(p.name);\n  }) as ts.PropertyAssignment[];\n\n  const inputsIndex = props.findIndex((p) => {\n    return sys.ts.isIdentifier(p.name) && p.name.text === \"inputs\";\n  });\n\n  const inputs = [...(builderCmp.inputs ?? [])];\n\n  if (inputsIndex > -1) {\n    // already have an inputs property\n    if (inputs.length === 0) {\n      // no registered inputs, so remove the inputs property\n      return setObjectExpressionProperty(sys, cmpObjExp, \"inputs\", null);\n    }\n\n    const inputsObj = props[inputsIndex];\n    if (\n      sys.ts.isPropertyAssignment(inputsObj) &&\n      sys.ts.isArrayLiteralExpression(inputsObj.initializer)\n    ) {\n      arrExp = inputsObj.initializer;\n    }\n  }\n\n  if (inputs.length === 0) {\n    return cmpObjExp;\n  }\n\n  arrExp = updateComponentInputsArrayLiteralExp(\n    sys,\n    arrExp || sys.ts.factory.createArrayLiteralExpression(),\n    inputs as ComponentInput[],\n  );\n\n  if (inputsIndex > -1) {\n    props[inputsIndex] = sys.ts.factory.updatePropertyAssignment(\n      props[inputsIndex],\n      props[inputsIndex].name,\n      arrExp,\n    );\n  } else {\n    props.push(sys.ts.factory.createPropertyAssignment(\"inputs\", arrExp));\n  }\n\n  return sys.ts.factory.updateObjectLiteralExpression(cmpObjExp, props);\n}\n\nfunction mapDevToolsCmpToBuilderCmp(cmpInfo: ComponentInfo) {\n  // use the type from @builder.io/sdk to ensure we're correct\n  const builderCmp: BuilderComponent = {\n    name: cmpInfo.name,\n    description: cmpInfo.description,\n    image: cmpInfo.image,\n    inputs: (cmpInfo.inputs || [])\n      .filter((i) => i.isRegistered)\n      .map(mapDevToolsInputToBuilderInput),\n    ...(cmpInfo.meta ? { meta: { ...cmpInfo.meta } } : {}),\n  };\n  return builderCmp;\n}\n\nfunction mapDevToolsInputToBuilderInput(cmpInput: ComponentInput) {\n  // use the type from @builder.io/sdk to ensure we're correct\n  const builderInput: BuilderInput = {\n    name: cmpInput.name,\n    type: cmpInput.type,\n  };\n\n  if (\n    isString(cmpInput.defaultValue) ||\n    isNumber(cmpInput.defaultValue) ||\n    isBoolean(cmpInput.defaultValue)\n  ) {\n    builderInput.defaultValue = cmpInput.defaultValue;\n  }\n  if (isString(cmpInput.friendlyName)) {\n    builderInput.friendlyName = cmpInput.friendlyName;\n  }\n  if (isString(cmpInput.helperText)) {\n    builderInput.helperText = cmpInput.helperText;\n  }\n  if (cmpInput.required === true) {\n    builderInput.required = true;\n  }\n  if (Array.isArray(cmpInput.enum)) {\n    builderInput.enum = cmpInput.enum;\n  }\n  if (cmpInput.hideFromUI === true) {\n    builderInput.hideFromUI = true;\n  }\n  if (\n    typeof cmpInput.meta === \"object\" &&\n    cmpInput.meta != null &&\n    Object.keys(cmpInput.meta).length > 0\n  ) {\n    builderInput.meta = cmpInput.meta;\n  }\n\n  return builderInput;\n}\n\nexport function updateComponentInputsArrayLiteralExp(\n  sys: DevToolsSys,\n  arrExp: ts.ArrayLiteralExpression,\n  inputs: ComponentInput[],\n) {\n  let objLiteralExps = arrExp.elements.filter((elm) => {\n    if (!sys.ts.isObjectLiteralExpression(elm)) {\n      return false;\n    }\n\n    const inputName = elm.properties.find((p) => {\n      return getTextOfPropertyName(sys, p) === \"name\";\n    }) as ts.PropertyAssignment | undefined;\n\n    if (!inputName) {\n      return false;\n    }\n\n    const inputValue = inputName.initializer;\n    if (!sys.ts.isStringLiteral(inputValue)) {\n      return false;\n    }\n\n    return inputs.some((i) => i.name === inputValue.text);\n  }) as ts.ObjectLiteralExpression[];\n\n  for (const input of inputs) {\n    objLiteralExps = updateComponentInputObjLiteralExp(\n      sys,\n      objLiteralExps,\n      input,\n    );\n  }\n\n  objLiteralExps.sort((a, b) => {\n    const aProp = a.properties.find((p) => {\n      return getTextOfPropertyName(sys, p) === \"name\";\n    }) as ts.PropertyAssignment | undefined;\n    const bProp = b.properties.find((p) => {\n      return getTextOfPropertyName(sys, p) === \"name\";\n    }) as ts.PropertyAssignment | undefined;\n\n    const aInit = aProp?.initializer;\n    const bInit = bProp?.initializer;\n\n    const aName = aInit && sys.ts.isStringLiteral(aInit) ? aInit.text : \"zz\";\n    const bName = bInit && sys.ts.isStringLiteral(bInit) ? bInit.text : \"zz\";\n\n    return aName.toLowerCase().localeCompare(bName.toLowerCase());\n  });\n\n  return sys.ts.factory.updateArrayLiteralExpression(arrExp, objLiteralExps);\n}\n\nfunction updateComponentInputObjLiteralExp(\n  sys: DevToolsSys,\n  objLiteralExps: ts.ObjectLiteralExpression[],\n  input: ComponentInput,\n) {\n  const index = objLiteralExps.findIndex((obj) => {\n    return obj.properties.some((prop) => {\n      const propName = getTextOfPropertyName(sys, prop);\n      return (\n        sys.ts.isPropertyAssignment(prop) &&\n        propName === \"name\" &&\n        sys.ts.isStringLiteral(prop.initializer) &&\n        prop.initializer.text === input.name\n      );\n    });\n  });\n\n  if (index > -1) {\n    objLiteralExps[index] = updateComponentInputValue(\n      sys,\n      objLiteralExps[index],\n      input,\n    );\n  } else {\n    const newInputObj = updateComponentInputValue(\n      sys,\n      sys.ts.factory.createObjectLiteralExpression(\n        [\n          sys.ts.factory.createPropertyAssignment(\n            \"name\",\n            sys.ts.factory.createStringLiteral(input.name),\n          ),\n        ],\n        true,\n      ),\n      input,\n    );\n    objLiteralExps.push(newInputObj);\n  }\n\n  return objLiteralExps;\n}\n\nfunction updateComponentInputValue(\n  sys: DevToolsSys,\n  objLiteralExp: ts.ObjectLiteralExpression,\n  input: ComponentInput,\n) {\n  let propAssignments = objLiteralExp.properties.filter((p) =>\n    sys.ts.isPropertyAssignment(p),\n  ) as ts.PropertyAssignment[];\n\n  const inputKeys = (Object.keys(input) as (keyof ComponentInput)[]).filter(\n    (k) => k !== \"isRegistered\",\n  );\n\n  for (const inputKey of inputKeys) {\n    propAssignments = updateComponentInputPropAssignment(\n      sys,\n      propAssignments,\n      input,\n      inputKey,\n    );\n  }\n\n  propAssignments = sortComponentInputProperties(\n    sys,\n    propAssignments.filter((p) => {\n      const propName = getTextOfPropertyName(sys, p) as any;\n      return inputKeys.includes(propName);\n    }),\n  );\n\n  return sys.ts.factory.updateObjectLiteralExpression(\n    objLiteralExp,\n    propAssignments,\n  );\n}\n\nfunction updateComponentInputPropAssignment(\n  sys: DevToolsSys,\n  propAssignments: ts.PropertyAssignment[],\n  input: ComponentInput,\n  inputKey: keyof ComponentInput,\n) {\n  const propIndex = propAssignments.findIndex(\n    (p) => sys.ts.isIdentifier(p.name) && p.name.text === inputKey,\n  );\n\n  if (propIndex > -1) {\n    propAssignments[propIndex] = sys.ts.factory.updatePropertyAssignment(\n      propAssignments[propIndex],\n      propAssignments[propIndex].name,\n      valueToExpression(sys, input[inputKey]),\n    );\n  } else {\n    propAssignments.push(\n      sys.ts.factory.createPropertyAssignment(\n        inputKey as string,\n        valueToExpression(sys, input[inputKey]),\n      ),\n    );\n  }\n\n  return propAssignments;\n}\n\nexport function mergeComponentInputs(\n  cmp: ComponentInfo,\n  inputs: ComponentInput[],\n) {\n  for (const input of inputs) {\n    const i = cmp.inputs.findIndex((i) => i.name === input.name);\n    if (i > -1) {\n      if (input.isRegistered || !cmp.inputs[i].isRegistered) {\n        cmp.inputs[i] = input;\n      }\n    } else {\n      cmp.inputs.push(input);\n    }\n  }\n  cmp.acceptsChildren = componentAcceptsChildren(cmp);\n}\n\nfunction normalizeBuilderInput(builderInput: BuilderInput) {\n  const normalizedBuilderType = normalizeBuilderInputType(builderInput.type);\n\n  const cmpInput: ComponentInput = {\n    name: builderInput.name.trim(),\n    type: normalizedBuilderType.builderType,\n  };\n\n  if (\n    isString(builderInput.friendlyName) &&\n    builderInput.friendlyName.trim() !== builderInput.name.trim()\n  ) {\n    cmpInput.friendlyName = builderInput.friendlyName;\n  }\n\n  if (\n    isString(builderInput.defaultValue) ||\n    isNumber(builderInput.defaultValue) ||\n    isBoolean(builderInput.defaultValue)\n  ) {\n    cmpInput.defaultValue = builderInput.defaultValue;\n  }\n\n  if (isString(builderInput.helperText)) {\n    cmpInput.helperText = builderInput.helperText;\n  }\n\n  if (isBoolean(builderInput.required)) {\n    cmpInput.required = builderInput.required;\n  }\n\n  if (\n    typeof builderInput.meta === \"object\" &&\n    builderInput.meta != null &&\n    Object.keys(builderInput.meta).length > 0\n  ) {\n    cmpInput.meta = builderInput.meta;\n  }\n\n  if (Array.isArray(builderInput.enum) && builderInput.enum.length > 0) {\n    cmpInput.enum = builderInput.enum;\n  }\n\n  if (builderInput.hideFromUI === true) {\n    cmpInput.hideFromUI = true;\n  }\n\n  return normalizeComponentInput(cmpInput);\n}\n\nexport function componentAcceptsChildren(cmp: ComponentInfo) {\n  // if the component has a children prop, set acceptsChildren to true\n  const hasChildrenProp = cmp.inputs.some((i) => i.name === \"children\");\n  const hasJsxProp = cmp.inputs.some((i) => i.meta?.ts === \"ReactNode\");\n  if (hasChildrenProp || hasJsxProp || cmp.acceptsChildren === true) {\n    // set acceptsChildren to true, which will add the withChildren() wrapper\n    return true;\n  }\n  return false;\n}\n\nexport function normalizeComponentInput(input: ComponentInput) {\n  if (input.name === \"children\") {\n    input.hideFromUI = true;\n    delete input.required;\n  }\n\n  if (input.type === \"object\" && input.defaultValue == null) {\n    input.hideFromUI = true;\n  }\n\n  if (input.type === \"list\" && input.defaultValue == null) {\n    input.hideFromUI = true;\n  }\n\n  if (input.meta) {\n    let tsType = input.meta.ts;\n    if (typeof tsType === \"string\") {\n      tsType = tsType.trim();\n      if (tsType.endsWith(\"ReactNode\")) {\n        tsType = \"ReactNode\";\n      }\n      input.meta.ts = tsType;\n\n      if (tsType === \"ReactNode\") {\n        input.hideFromUI = true;\n      }\n    }\n  }\n\n  return input;\n}\n\nfunction sortComponentInfoProperties(\n  sys: DevToolsSys,\n  cmpObjExp: ts.ObjectLiteralExpression,\n) {\n  const props = [...cmpObjExp.properties].sort((a, b) => {\n    const aName = getTextOfPropertyName(sys, a) || \"zz\";\n    const bName = getTextOfPropertyName(sys, b) || \"zz\";\n\n    if (aName === \"inputs\") return 1;\n\n    const aIndex = INFO_PROP_SORT.indexOf(aName);\n    const bIndex = INFO_PROP_SORT.indexOf(bName);\n    if (aIndex > -1) {\n      if (bIndex > -1 && aIndex > bIndex) {\n        return 1;\n      }\n      return -1;\n    }\n\n    if (bIndex > -1) {\n      if (aIndex > -1 && bIndex < aIndex) {\n        return -1;\n      }\n      return 1;\n    }\n\n    return aName.localeCompare(bName);\n  });\n\n  return sys.ts.factory.updateObjectLiteralExpression(cmpObjExp, props);\n}\n\nconst INFO_PROP_SORT = [\"component\", \"name\", \"description\"];\n\nfunction sortComponentInputProperties(\n  sys: DevToolsSys,\n  propAssignments: ts.PropertyAssignment[],\n) {\n  const props = [...propAssignments].sort((a, b) => {\n    const aName = getTextOfPropertyName(sys, a) || \"zz\";\n    const bName = getTextOfPropertyName(sys, b) || \"zz\";\n\n    const aIndex = INPUT_PROP_SORT.indexOf(aName);\n    const bIndex = INPUT_PROP_SORT.indexOf(bName);\n    if (aIndex > -1) {\n      if (bIndex > -1 && aIndex > bIndex) {\n        return 1;\n      }\n      return -1;\n    }\n\n    if (bIndex > -1) {\n      if (aIndex > -1 && bIndex < aIndex) {\n        return -1;\n      }\n      return 1;\n    }\n\n    return aName.localeCompare(bName);\n  });\n\n  return props;\n}\n\nconst INPUT_PROP_SORT = [\"name\", \"type\"];\n\nexport function componentHasAcceptChildrenProp(\n  sys: DevToolsSys,\n  cmpObjLit: ts.ObjectLiteralExpression,\n): boolean {\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n    if (propName === \"canHaveChildren\") {\n      const { initializer } = p;\n      if (initializer.kind === sys.ts.SyntaxKind.TrueKeyword) {\n        return true;\n      }\n      return false;\n    }\n  }\n  return false;\n}\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { NextDevToolsSys } from \".\";\nimport { codeToStatement } from \"../../../common/ast/transform\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { updateComponentObjLiteralInfoProperties } from \"../../../common/ast/component-info\";\n\nexport function createNextRegisteredComponent(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  let code = `Builder.registerComponent(\\n`;\n\n  if (sys.appDir) {\n    // app dir\n\n    if (cmpInfo.acceptsChildren) {\n      code += `  withChildren(${cmpInfo.importName}),\\n`;\n    } else {\n      code += `  ${cmpInfo.importName},\\n`;\n    }\n  } else {\n    // not app dir\n    // use dynamic imports\n    const importPath = cmpInfo.externalImportPath\n      ? cmpInfo.externalImportPath\n      : getImportPath(sys, sys.registryPath, cmpInfo.filePath);\n    if (cmpInfo.exportName === \"default\") {\n      if (cmpInfo.acceptsChildren) {\n        code += `  withChildren(dynamic(() => import(${JSON.stringify(\n          importPath,\n        )}))),\\n`;\n      } else {\n        code += `  dynamic(() => import(${JSON.stringify(importPath)})),\\n`;\n      }\n    } else {\n      if (cmpInfo.acceptsChildren) {\n        code += `  withChildren(dynamic(async () => (await import(${JSON.stringify(\n          importPath,\n        )})).${cmpInfo.exportName})),\\n`;\n      } else {\n        code += `  dynamic(async () => (await import(${JSON.stringify(\n          importPath,\n        )})).${cmpInfo.exportName}),\\n`;\n      }\n    }\n  }\n\n  code += `  {\n    name: \"${cmpInfo.name}\",\n  }\\n`;\n  code += `);`;\n\n  const registerStatement = codeToStatement(sys, code);\n\n  return updateNextRegisteredComponent(sys, registerStatement, cmpInfo);\n}\n\nexport function updateNextRegisteredComponent(\n  sys: NextDevToolsSys,\n  registerStatement: ts.Statement,\n  cmpInfo: ComponentInfo,\n) {\n  if (!sys.ts.isExpressionStatement(registerStatement)) {\n    return registerStatement;\n  }\n\n  const callExp = registerStatement.expression;\n  if (!sys.ts.isCallExpression(callExp)) {\n    return registerStatement;\n  }\n\n  const args = [...callExp.arguments];\n  if (args.length < 2) {\n    return registerStatement;\n  }\n\n  if (cmpInfo.acceptsChildren) {\n    // Builder.registerComponent( withChildren(Component, { ... }) )\n    if (\n      sys.ts.isCallExpression(args[0]) &&\n      sys.ts.isIdentifier(args[0].expression) &&\n      args[0].expression.text === \"withChildren\"\n    ) {\n      // withChildren() already wrapping first arg\n      // do nothing\n    } else {\n      // withChildren() not wrapping first arg, wrap it\n      args[0] = sys.ts.factory.createCallExpression(\n        sys.ts.factory.createIdentifier(\"withChildren\"),\n        undefined,\n        [args[0]],\n      );\n    }\n  } else {\n    // Builder.registerComponent( Component, { ... } )\n    if (\n      sys.ts.isCallExpression(args[0]) &&\n      sys.ts.isIdentifier(args[0].expression) &&\n      args[0].expression.text === \"withChildren\"\n    ) {\n      // withChildren() wrapping first arg, unwrap it\n      args[0] = args[0].arguments[0];\n    } else {\n      // withChildren() not wrapping first arg\n      // do nothing\n    }\n  }\n\n  const cmpObjExp = args[1];\n  if (!sys.ts.isObjectLiteralExpression(cmpObjExp)) {\n    return registerStatement;\n  }\n\n  args[1] = updateComponentObjLiteralInfoProperties(sys, cmpObjExp, cmpInfo);\n\n  return sys.ts.factory.updateExpressionStatement(\n    registerStatement,\n    sys.ts.factory.updateCallExpression(\n      callExp,\n      callExp.expression,\n      callExp.typeArguments,\n      args,\n    ),\n  );\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ModuleFormat } from \"../../types\";\n\nexport function ensureImport(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  opts: EnsureImportOptions,\n  moduleType: ModuleFormat = \"esm\",\n) {\n  if (Array.isArray(opts.namedImports)) {\n    opts.namedImports.forEach((namedImport) => {\n      sourceFile = ensureNamedImport(\n        sys,\n        sourceFile,\n        namedImport,\n        opts.importPath,\n        !!opts.isTypeOnly,\n        moduleType,\n      );\n    });\n  }\n  if (typeof opts.defaultImport === \"string\") {\n    sourceFile = ensureDefaultImport(\n      sys,\n      sourceFile,\n      opts.defaultImport,\n      opts.importPath,\n      moduleType,\n    );\n  }\n  return sourceFile;\n}\n\nfunction ensureNamedImport(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  namedImport: string,\n  importPath: string,\n  isTypeOnly: boolean,\n  moduleType: ModuleFormat,\n) {\n  if (moduleType === \"cjs\") {\n    return ensureCjsImports(sys, sourceFile, null, namedImport, importPath);\n  } else {\n    return ensureEsmImports(\n      sys,\n      sourceFile,\n      null,\n      namedImport,\n      importPath,\n      isTypeOnly,\n    );\n  }\n}\n\nfunction ensureDefaultImport(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  defaultImport: string,\n  importPath: string,\n  moduleType: ModuleFormat,\n) {\n  if (moduleType === \"cjs\") {\n    return ensureCjsImports(sys, sourceFile, defaultImport, null, importPath);\n  } else {\n    return ensureEsmImports(\n      sys,\n      sourceFile,\n      defaultImport,\n      null,\n      importPath,\n      false,\n    );\n  }\n}\n\nfunction ensureEsmImports(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  defaultImport: string | null,\n  namedImport: string | null,\n  importPath: string,\n  isTypeOnly: boolean,\n) {\n  const statements = [...sourceFile.statements];\n  let lastImportIndex = 0;\n  let madeNameImportChange = false;\n  let madeDefaultImportChange = false;\n\n  for (let i = 0; i < statements.length; i++) {\n    const n = statements[i];\n    if (!sys.ts.isImportDeclaration(n)) {\n      continue;\n    }\n    lastImportIndex = i;\n    if (!n.moduleSpecifier || !sys.ts.isStringLiteral(n.moduleSpecifier)) {\n      continue;\n    }\n    if (n.moduleSpecifier.text !== importPath) {\n      continue;\n    }\n    if (!!n.importClause?.isTypeOnly !== isTypeOnly) {\n      continue;\n    }\n\n    const existingNamedImports: ts.ImportSpecifier[] = [];\n    const namedImports = n.importClause?.namedBindings;\n    if (\n      namedImports &&\n      sys.ts.isNamedImports(namedImports) &&\n      namedImports.elements\n    ) {\n      existingNamedImports.push(...namedImports.elements);\n    }\n\n    if (typeof namedImport === \"string\") {\n      if (existingNamedImports.some((e) => e.name.text === namedImport)) {\n        return sourceFile;\n      }\n\n      existingNamedImports.push(\n        sys.ts.factory.createImportSpecifier(\n          false,\n          undefined,\n          sys.ts.factory.createIdentifier(namedImport),\n        ),\n      );\n      existingNamedImports.sort((a, b) => {\n        return a.name.text.localeCompare(b.name.text);\n      });\n      madeNameImportChange = true;\n    }\n\n    let defaultIdentifier = n.importClause ? n.importClause.name : undefined;\n    if (typeof defaultImport === \"string\") {\n      if (defaultIdentifier && defaultIdentifier.text === defaultImport) {\n        return sourceFile;\n      }\n      defaultIdentifier = sys.ts.factory.createIdentifier(defaultImport);\n      madeDefaultImportChange = true;\n    }\n\n    if (madeNameImportChange || madeDefaultImportChange) {\n      statements[i] = sys.ts.factory.updateImportDeclaration(\n        n,\n        undefined,\n        sys.ts.factory.createImportClause(\n          isTypeOnly,\n          defaultIdentifier,\n          sys.ts.factory.createNamedImports(existingNamedImports),\n        ),\n        n.moduleSpecifier,\n        undefined,\n      );\n      return sys.ts.factory.updateSourceFile(sourceFile, statements);\n    }\n  }\n\n  let defaultIdentifier: ts.Identifier = undefined as any;\n  let namedBindings: ts.NamedImports = undefined as any;\n\n  if (typeof defaultImport === \"string\") {\n    defaultIdentifier = sys.ts.factory.createIdentifier(defaultImport);\n  }\n\n  if (typeof namedImport === \"string\") {\n    namedBindings = sys.ts.factory.createNamedImports([\n      sys.ts.factory.createImportSpecifier(\n        false,\n        undefined,\n        sys.ts.factory.createIdentifier(namedImport),\n      ),\n    ]);\n  }\n\n  const newImport = sys.ts.factory.createImportDeclaration(\n    undefined,\n    sys.ts.factory.createImportClause(\n      isTypeOnly,\n      defaultIdentifier,\n      namedBindings,\n    ),\n    sys.ts.factory.createStringLiteral(importPath),\n  );\n  statements.splice(lastImportIndex, 0, newImport);\n\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nfunction ensureCjsImports(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  defaultImport: string | null,\n  namedImport: string | null,\n  importPath: string,\n) {\n  const statements = [...sourceFile.statements];\n  let lastRequireIndex = 0;\n\n  for (let i = 0; i < statements.length; i++) {\n    const varStatement = statements[i];\n    if (!sys.ts.isVariableStatement(varStatement)) {\n      continue;\n    }\n\n    for (let d = 0; d < varStatement.declarationList.declarations.length; d++) {\n      const declarations = [...varStatement.declarationList.declarations];\n      const decl = declarations[d];\n      const requireCallExp = decl.initializer;\n\n      if (!requireCallExp || !sys.ts.isCallExpression(requireCallExp)) {\n        continue;\n      }\n      const requireCallExpName = requireCallExp.expression;\n      if (!sys.ts.isIdentifier(requireCallExpName)) {\n        continue;\n      }\n      if (requireCallExpName.text !== \"require\") {\n        continue;\n      }\n      if (requireCallExp.arguments.length !== 1) {\n        continue;\n      }\n      const requireCallExpArg = requireCallExp.arguments[0];\n      if (!sys.ts.isStringLiteral(requireCallExpArg)) {\n        continue;\n      }\n      lastRequireIndex = i;\n      if (requireCallExpArg.text !== importPath) {\n        continue;\n      }\n\n      if (sys.ts.isIdentifier(decl.name) && typeof defaultImport === \"string\") {\n        if (decl.name.text === defaultImport) {\n          return sourceFile;\n        }\n        declarations[d] = sys.ts.factory.updateVariableDeclaration(\n          decl,\n          sys.ts.factory.createIdentifier(defaultImport),\n          decl.exclamationToken,\n          decl.type,\n          decl.initializer,\n        );\n\n        statements[i] = sys.ts.factory.updateVariableStatement(\n          varStatement,\n          varStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            varStatement.declarationList,\n            declarations,\n          ),\n        );\n        return sys.ts.factory.updateSourceFile(sourceFile, statements);\n      }\n\n      if (\n        sys.ts.isObjectBindingPattern(decl.name) &&\n        typeof namedImport === \"string\"\n      ) {\n        const elements = [...decl.name.elements];\n\n        const hasNamedBinding = elements.some((e) => {\n          if (!sys.ts.isBindingElement(e) || !sys.ts.isIdentifier(e.name)) {\n            return false;\n          }\n          return e.name.text === namedImport;\n        });\n        if (hasNamedBinding) {\n          return sourceFile;\n        }\n\n        elements.push(\n          sys.ts.factory.createBindingElement(\n            undefined,\n            undefined,\n            namedImport,\n          ),\n        );\n\n        elements.sort((a, b) => {\n          if (!sys.ts.isBindingElement(a) || !sys.ts.isIdentifier(a.name)) {\n            return 0;\n          }\n          if (!sys.ts.isBindingElement(b) || !sys.ts.isIdentifier(b.name)) {\n            return 0;\n          }\n          return a.name.text.localeCompare(b.name.text);\n        });\n\n        declarations[d] = sys.ts.factory.updateVariableDeclaration(\n          decl,\n          sys.ts.factory.createObjectBindingPattern(elements),\n          decl.exclamationToken,\n          decl.type,\n          decl.initializer,\n        );\n\n        statements[i] = sys.ts.factory.updateVariableStatement(\n          varStatement,\n          varStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            varStatement.declarationList,\n            declarations,\n          ),\n        );\n        return sys.ts.factory.updateSourceFile(sourceFile, statements);\n      }\n    }\n  }\n\n  if (typeof defaultImport === \"string\") {\n    const newRequire = sys.ts.factory.createVariableStatement(\n      undefined,\n      sys.ts.factory.createVariableDeclarationList(\n        [\n          sys.ts.factory.createVariableDeclaration(\n            defaultImport,\n            undefined,\n            undefined,\n            sys.ts.factory.createCallExpression(\n              sys.ts.factory.createIdentifier(\"require\"),\n              undefined,\n              [sys.ts.factory.createStringLiteral(importPath)],\n            ),\n          ),\n        ],\n        sys.ts.NodeFlags.Const,\n      ),\n    );\n    statements.splice(lastRequireIndex, 0, newRequire);\n    return sys.ts.factory.updateSourceFile(sourceFile, statements);\n  }\n\n  if (typeof namedImport === \"string\") {\n    const newRequire = sys.ts.factory.createVariableStatement(\n      undefined,\n      sys.ts.factory.createVariableDeclarationList(\n        [\n          sys.ts.factory.createVariableDeclaration(\n            sys.ts.factory.createObjectBindingPattern([\n              sys.ts.factory.createBindingElement(\n                undefined,\n                undefined,\n                namedImport,\n              ),\n            ]),\n            undefined,\n            undefined,\n            sys.ts.factory.createCallExpression(\n              sys.ts.factory.createIdentifier(\"require\"),\n              undefined,\n              [sys.ts.factory.createStringLiteral(importPath)],\n            ),\n          ),\n        ],\n        sys.ts.NodeFlags.Const,\n      ),\n    );\n    statements.splice(lastRequireIndex, 0, newRequire);\n    return sys.ts.factory.updateSourceFile(sourceFile, statements);\n  }\n\n  return sourceFile;\n}\n\nexport interface EnsureImportOptions {\n  defaultImport?: string;\n  namedImports?: string[];\n  importPath: string;\n  isTypeOnly?: boolean;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ModuleFormat } from \"../../types\";\n\nexport function getExportedStatements(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  moduleType: ModuleFormat = \"esm\",\n) {\n  if (moduleType === \"cjs\") {\n    return getCjsExportedStatements(sys, sourceFile);\n  } else {\n    return getEsmExportedStatements(sys, sourceFile);\n  }\n}\n\nfunction getEsmExportedStatements(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const exports: ExportedStatement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isExportDeclaration(s)) {\n      if (s.exportClause && sys.ts.isNamedExports(s.exportClause)) {\n        for (const elm of s.exportClause.elements) {\n          if (s.moduleSpecifier) {\n            exports.push({\n              isDefaultExport: false,\n              statement: s,\n              node: elm,\n            });\n          }\n          if (sys.ts.isIdentifier(elm.name)) {\n            const identifierName = elm.name.text;\n            for (const s2 of sourceFile.statements) {\n              if (sys.ts.isVariableStatement(s2)) {\n                for (const d of s2.declarationList.declarations) {\n                  if (\n                    sys.ts.isIdentifier(d.name) &&\n                    d.name.text === identifierName\n                  ) {\n                    exports.push({\n                      isDefaultExport: false,\n                      statement: s2,\n                      node: s2,\n                    });\n                  }\n                }\n              } else if (sys.ts.isFunctionDeclaration(s2)) {\n                if (s2.name && s2.name.text === identifierName) {\n                  exports.push({\n                    isDefaultExport: false,\n                    statement: s2,\n                    node: s2,\n                  });\n                }\n              }\n            }\n          }\n        }\n      } else if (!s.exportClause && s.moduleSpecifier) {\n        // Handle \"export * from 'module'\" case\n        exports.push({\n          isDefaultExport: false,\n          statement: s,\n          node: s,\n        });\n      }\n      continue;\n    }\n\n    if (sys.ts.isExportAssignment(s)) {\n      const isDefaultExport = s.flags === sys.ts.NodeFlags.None;\n\n      const exportedIdentifier = s.expression;\n      if (sys.ts.isIdentifier(exportedIdentifier)) {\n        const identifierName = exportedIdentifier.text;\n        for (const s2 of sourceFile.statements) {\n          if (sys.ts.isVariableStatement(s2)) {\n            for (const d of s2.declarationList.declarations) {\n              if (\n                sys.ts.isIdentifier(d.name) &&\n                d.name.text === identifierName\n              ) {\n                exports.push({ isDefaultExport, statement: s2, node: s2 });\n              }\n            }\n          }\n          if (sys.ts.isFunctionDeclaration(s2)) {\n            if (s2.name?.text === identifierName) {\n              exports.push({ isDefaultExport, statement: s2, node: s2 });\n            }\n          }\n        }\n      } else if (\n        sys.ts.isArrowFunction(exportedIdentifier) ||\n        sys.ts.isCallExpression(exportedIdentifier) ||\n        sys.ts.isFunctionDeclaration(exportedIdentifier) ||\n        sys.ts.isObjectLiteralExpression(exportedIdentifier)\n      ) {\n        exports.push({\n          isDefaultExport,\n          statement: s,\n          node: exportedIdentifier,\n        });\n      }\n      continue;\n    }\n\n    if (\n      (sys.ts.isVariableStatement(s) || sys.ts.isFunctionDeclaration(s)) &&\n      s.modifiers\n    ) {\n      if (s.modifiers.some((m) => m.kind === sys.ts.SyntaxKind.ExportKeyword)) {\n        exports.push({\n          isDefaultExport: s.modifiers.some(\n            (m) => m.kind === sys.ts.SyntaxKind.DefaultKeyword,\n          ),\n          statement: s,\n          node: s,\n        });\n        continue;\n      }\n    }\n  }\n\n  return exports;\n}\n\nfunction getCjsExportedStatements(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const exports: ExportedStatement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isBinaryExpression(s.expression) &&\n      sys.ts.isPropertyAccessExpression(s.expression.left)\n    ) {\n      const left = s.expression.left;\n      const right = s.expression.right;\n\n      if (!sys.ts.isIdentifier(left.expression)) {\n        continue;\n      }\n\n      if (left.expression.text === \"module\" && left.name.text === \"exports\") {\n        // module.exports = ...\n\n        if (sys.ts.isIdentifier(right)) {\n          // module.exports = identifier;\n          const identifierName = right.text;\n\n          for (const s2 of sourceFile.statements) {\n            if (sys.ts.isVariableStatement(s2)) {\n              for (const d of s2.declarationList.declarations) {\n                if (\n                  sys.ts.isIdentifier(d.name) &&\n                  d.name.text === identifierName\n                ) {\n                  exports.push({\n                    isDefaultExport: true,\n                    statement: s2,\n                    node: s2,\n                  });\n                }\n              }\n            } else if (sys.ts.isFunctionDeclaration(s2)) {\n              if (s2.name && s2.name.text === identifierName) {\n                exports.push({\n                  isDefaultExport: true,\n                  statement: s2,\n                  node: s2,\n                });\n              }\n            }\n          }\n        } else {\n          exports.push({\n            isDefaultExport: true,\n            statement: s,\n            node: right,\n          });\n        }\n\n        continue;\n      }\n    }\n  }\n\n  return exports;\n}\n\nexport interface ExportedStatement {\n  isDefaultExport: boolean;\n  statement: ts.Statement;\n  node: ts.Node;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ExportType } from \"../../types\";\nimport { getDisplayFilePath } from \"../utils\";\n\nexport function getImportPathFromIdentifier(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  identifierName: string,\n) {\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isImportDeclaration(s) && s.importClause) {\n      if (\n        s.importClause.namedBindings &&\n        sys.ts.isNamedImports(s.importClause.namedBindings)\n      ) {\n        for (const elm of s.importClause.namedBindings.elements) {\n          if (\n            sys.ts.isIdentifier(elm.name) &&\n            elm.name.text === identifierName\n          ) {\n            if (sys.ts.isStringLiteral(s.moduleSpecifier)) {\n              return {\n                importPath: s.moduleSpecifier.text,\n                exportType: \"named\" as ExportType,\n              };\n            }\n          }\n        }\n      }\n      if (s.importClause.name && s.importClause.name.text === identifierName) {\n        if (sys.ts.isStringLiteral(s.moduleSpecifier)) {\n          return {\n            importPath: s.moduleSpecifier.text,\n            exportType: \"default\" as ExportType,\n          };\n        }\n      }\n    }\n  }\n  return null;\n}\n\nexport async function getFilePathFromIdentifier(\n  sys: DevToolsSys,\n  containerPath: string,\n  sourceFile: ts.SourceFile,\n  identifierName: string,\n) {\n  // Traverse the source file to find the import statement and import path\n  const i = getImportPathFromIdentifier(sys, sourceFile, identifierName);\n  if (i) {\n    const filePath = await resolveComponentPath(\n      sys,\n      sys.normalize(sys.resolve(sys.dirname(containerPath), i.importPath)),\n    );\n    const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n    return {\n      displayFilePath: getDisplayFilePath(sys, filePath),\n      filePath,\n      relFilePath,\n      importPath: i.importPath,\n      exportType: i.exportType as ExportType,\n    };\n  }\n  return null;\n}\n\nexport function findVariableStatement(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  variableName: string,\n) {\n  for (let i = 0; i < sourceFile.statements.length; i++) {\n    const statement = sourceFile.statements[i];\n    if (sys.ts.isVariableStatement(statement)) {\n      for (const declaration of statement.declarationList.declarations) {\n        if (\n          sys.ts.isIdentifier(declaration.name) &&\n          declaration.name.text === variableName\n        ) {\n          return { statement, statementIndex: i };\n        }\n      }\n    }\n  }\n  return null;\n}\n\nexport function findArrayStatementInitializer(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  variableName: string,\n) {\n  const s = findVariableStatement(sys, sourceFile, variableName);\n  if (s && s.statement.declarationList.declarations.length > 0) {\n    const declaration = s.statement.declarationList.declarations[0];\n    if (\n      declaration.initializer &&\n      sys.ts.isArrayLiteralExpression(declaration.initializer)\n    ) {\n      return {\n        statement: s.statement,\n        statementIndex: s.statementIndex,\n        variableDeclaration: declaration,\n        arrayLiteralExp: declaration.initializer,\n      };\n    }\n  }\n  return null;\n}\n\nexport function hasJsxNode(sys: DevToolsSys, n: ts.Node | undefined) {\n  if (n) {\n    if (isJsxNode(sys, n)) {\n      return true;\n    }\n    let foundJsx = false;\n    n.forEachChild((c) => {\n      if (hasJsxNode(sys, c)) {\n        foundJsx = true;\n      }\n    });\n    if (foundJsx) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isJsxNode(sys: DevToolsSys, n: ts.Node) {\n  return (\n    sys.ts.isJsxElement(n) ||\n    sys.ts.isJsxOpeningElement(n) ||\n    sys.ts.isJsxOpeningFragment(n) ||\n    sys.ts.isJsxSelfClosingElement(n) ||\n    sys.ts.isJsxFragment(n) ||\n    sys.ts.isJsxChild(n)\n  );\n}\n\nexport async function resolveComponentPath(sys: DevToolsSys, filePath: string) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \"\" || !RESOLVE_EXTS.includes(ext)) {\n    for (const tryExt of RESOLVE_EXTS) {\n      const checkPath = filePath + tryExt;\n      if (await sys.exists(checkPath)) {\n        return checkPath;\n      }\n    }\n\n    for (const tryExt of RESOLVE_EXTS) {\n      const checkPath = sys.join(filePath, \"index\" + tryExt);\n      if (await sys.exists(checkPath)) {\n        return checkPath;\n      }\n    }\n  }\n  return filePath;\n}\n\nexport const RESOLVE_EXTS = [\".tsx\", \".jsx\", \".ts\", \".js\"];\n", "import type { AppDependency, ComponentInfo, DevToolsSys } from \"../../types\";\nimport type ts from \"typescript\";\nimport { normalizePathSlash } from \"../utils\";\n\nexport function getSourceDependencies(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  fnNode: ts.Node,\n) {\n  if (!fnNode || !typeChecker) {\n    return undefined;\n  }\n\n  const symbol = typeChecker.getSymbolAtLocation(fnNode);\n  if (!symbol) {\n    return undefined;\n  }\n\n  const valueDeclaration = symbol.valueDeclaration;\n  if (!valueDeclaration) {\n    return undefined;\n  }\n\n  const filePath = valueDeclaration.getSourceFile().fileName;\n  const moduleName = getModuleNameFromPath(sys, filePath);\n  if (!moduleName) {\n    return undefined;\n  }\n\n  const dep: AppDependency = {\n    name: moduleName,\n  };\n  return [dep];\n}\n\nfunction getModuleNameFromPath(sys: DevToolsSys, filePath: string) {\n  if (typeof filePath === \"string\") {\n    filePath = sys.normalize(normalizePathSlash(filePath));\n    const parts = filePath.split(\"/\");\n    const nodeModuleIndex = parts.lastIndexOf(\"node_modules\");\n    if (nodeModuleIndex > -1) {\n      const moduleParts = parts.slice(nodeModuleIndex + 1);\n      let moduleName = moduleParts[0];\n      if (moduleName) {\n        if (moduleName.startsWith(\"@\") && moduleParts[1]) {\n          moduleName += \"/\" + moduleParts[1];\n        }\n        return moduleName;\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function getAppDependencies(cmps: ComponentInfo[]) {\n  const deps: AppDependency[] = [];\n  for (const cmp of cmps) {\n    if (cmp.dependencies) {\n      for (const dep of cmp.dependencies) {\n        if (!deps.some((d) => d.name === dep.name)) {\n          deps.push({ ...dep });\n        }\n      }\n    }\n  }\n  return deps.sort((a, b) => a.name.localeCompare(b.name));\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ModuleFormat } from \"../../types\";\nimport type { ExportedStatement } from \"./exported-statements\";\n\nexport function getImportedStatements(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  moduleType: ModuleFormat = \"esm\",\n) {\n  if (moduleType === \"cjs\") {\n    return getCjsImportedStatements(sys, sourceFile);\n  } else {\n    return getEsmImportedStatements(sys, sourceFile);\n  }\n}\n\n// expression to match any external import, not relative or local\nconst externalImportRegex = /^(@\\w|\\w)/;\n\nfunction getEsmImportedStatements(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const exports: ExportedStatement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isImportDeclaration(s)) {\n      if (sys.ts.isLiteralExpression(s.moduleSpecifier)) {\n        if (!externalImportRegex.test(s.moduleSpecifier.text)) {\n          continue;\n        }\n        if (s.importClause?.isTypeOnly) {\n          continue;\n        }\n        if (s.importClause && s.importClause.namedBindings) {\n          if (sys.ts.isNamedImports(s.importClause.namedBindings)) {\n            for (const n of s.importClause.namedBindings.elements) {\n              if (!n.isTypeOnly) {\n                exports.push({\n                  isDefaultExport: false,\n                  statement: s,\n                  node: n.name,\n                });\n              }\n            }\n          }\n        }\n\n        // handle default import\n        if (s.importClause && s.importClause.name) {\n          exports.push({\n            isDefaultExport: true,\n            statement: s,\n            node: s.importClause.name,\n          });\n        }\n      }\n    }\n  }\n\n  return exports;\n}\n\nfunction getCjsImportedStatements(\n  _sys: DevToolsSys,\n  _sourceFile: ts.SourceFile,\n) {\n  const exports: ExportedStatement[] = [];\n\n  return exports;\n}\n", "import type ts from \"typescript\";\nimport type { AppDependency, ComponentInfo, DevToolsSys } from \"../../../types\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentDisplayNameFromFilePath,\n  getComponentImportNameFilePath,\n  getDisplayFilePath,\n  isValidJsxTag,\n  getComponentImportPath,\n  shouldSkipFolder,\n} from \"../../../common/utils\";\nimport {\n  getExportedStatements,\n  type ExportedStatement,\n} from \"../../../common/ast/exported-statements\";\nimport { hasJsxNode } from \"../../../common/ast/utils\";\nimport { createTsProgram, getTypeChecker } from \"../../../common/typescript\";\nimport { parseComponentSourcePropsFromNode } from \"../../../common/ast/component-input-types\";\nimport { getSourceDependencies } from \"../../../common/ast/app-dependencies\";\nimport type { ReactDevToolsSys } from \"./index\";\nimport { getImportedStatements } from \"../../../common/ast/imported-statements\";\n\nexport async function parseReactAllComponentSourceInputs(\n  sys: DevToolsSys,\n  components: ComponentInfo[],\n) {\n  const hasUnregistered = components.some((c) => !c.isRegistered);\n  if (!hasUnregistered) {\n    return components;\n  }\n\n  const tsProgram = await createTsProgram(\n    sys,\n    components.map((c) => c.filePath),\n  );\n  const typeChecker = tsProgram.getTypeChecker();\n\n  const componentsWithTypes = await Promise.all(\n    components.map(async (cmp) => {\n      const sourceFile = tsProgram.getSourceFile(cmp.filePath);\n      if (sourceFile) {\n        const typedSrcCmps = await getReactComponentsFromSourceFile(\n          sys,\n          typeChecker,\n          cmp.filePath,\n          sourceFile,\n          false,\n        );\n        const typedSrcCmp = typedSrcCmps.find((t) => t.cmpInfo.id === cmp.id);\n        if (typedSrcCmp) {\n          cmp.inputs = parseComponentSourcePropsFromNode(\n            sys,\n            typeChecker,\n            typedSrcCmp.node.fnNode,\n          );\n        }\n      }\n      return cmp;\n    }),\n  );\n\n  return componentsWithTypes;\n}\n\nexport async function parseReactComponentSourceInputs(\n  sys: DevToolsSys,\n  srcCmp: ReactComponentSource,\n  tsProgram: ts.Program | null,\n  includeImports: boolean,\n) {\n  if (srcCmp.node.fnNode) {\n    const { sourceFile, typeChecker } = await getTypeChecker(\n      sys,\n      srcCmp.cmpInfo.filePath,\n      tsProgram,\n    );\n\n    const typedSrcCmps = await getReactComponentsFromSourceFile(\n      sys,\n      typeChecker,\n      srcCmp.cmpInfo.filePath,\n      sourceFile,\n      includeImports,\n    );\n    const typedSrcCmp = typedSrcCmps.find(\n      (t) => t.cmpInfo.id === srcCmp.cmpInfo.id,\n    );\n    if (!typedSrcCmp) {\n      throw new Error(\n        `createComponentInputs() Could not find component ${srcCmp.cmpInfo.name} in ${srcCmp.cmpInfo.filePath}`,\n      );\n    }\n\n    return parseComponentSourcePropsFromNode(\n      sys,\n      typeChecker,\n      typedSrcCmp.node.fnNode,\n    );\n  }\n  return [];\n}\n\nexport async function getReactComponentsFromPath(\n  sys: DevToolsSys,\n  filePath: string,\n  includeImports: boolean,\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".tsx\" || ext === \".jsx\" || ext === \".ts\" || ext === \".js\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      return getReactComponentsFromCode(sys, filePath, code, includeImports);\n    }\n  }\n  return null;\n}\n\nexport function getReactComponentsFromCode(\n  sys: DevToolsSys,\n  filePath: string,\n  code: string,\n  includeImports: boolean = false,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return getReactComponentsFromSourceFile(\n    sys,\n    null,\n    filePath,\n    sourceFile,\n    includeImports,\n  );\n}\n\nexport async function getReactComponentsFromSourceFile(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile,\n  includeImports: boolean,\n) {\n  const fileCmps: ReactComponentSource[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isStringLiteral(s.expression)\n    ) {\n      if (s.expression.text === \"use server\") {\n        // react server component files should be ignored\n        return fileCmps;\n      }\n    }\n  }\n\n  const exports = getExportedStatements(sys, sourceFile);\n  if (includeImports) {\n    exports.push(...getImportedStatements(sys, sourceFile));\n  }\n  filePath = sys.normalize(filePath);\n\n  await Promise.all(\n    exports.map(async (exp) => {\n      const sCmps = await getReactComponentSource(\n        sys,\n        typeChecker,\n        filePath,\n        exp,\n      );\n      fileCmps.push(...sCmps);\n    }),\n  );\n\n  return fileCmps;\n}\n\nasync function getReactComponentSource(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  exp: ExportedStatement,\n): Promise<ReactComponentSource[]> {\n  const srcCmps: ReactComponentSource[] = [];\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  if (sys.ts.isVariableStatement(exp.node)) {\n    for (const declaration of exp.node.declarationList.declarations) {\n      if (!sys.ts.isIdentifier(declaration.name)) {\n        continue;\n      }\n      if (!isValidJsxTag(declaration.name.text)) {\n        continue;\n      }\n\n      const cmpExp = getReactComponentExpression(\n        sys,\n        typeChecker,\n        declaration.initializer,\n      );\n      if (cmpExp) {\n        const cmpName = cmpExp.name || declaration.name.text;\n\n        const exportName = exp.isDefaultExport ? \"default\" : cmpName;\n        const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n        srcCmps.push({\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, exportName),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: getComponentDisplayName(cmpName),\n            inputs: [],\n            exportName,\n            exportType,\n            importName: cmpName,\n            filePath,\n            relFilePath,\n            importPath,\n            dependencies: cmpExp.deps,\n            framework: \"react\",\n          },\n          node: cmpExp,\n        });\n      }\n    }\n    return srcCmps;\n  }\n\n  if (sys.ts.isArrowFunction(exp.node)) {\n    const cmpExp = getReactComponentExpression(sys, typeChecker, exp.node);\n    if (cmpExp) {\n      const cmpName = getComponentDisplayNameFromFilePath(sys, filePath);\n\n      const exportName = exp.isDefaultExport ? \"default\" : cmpName;\n      const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, exportName),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: cmpName,\n          inputs: [],\n          exportName,\n          exportType,\n          importName: getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath,\n          dependencies: cmpExp.deps,\n          framework: \"react\",\n        },\n        node: cmpExp,\n      });\n    }\n    return srcCmps;\n  }\n\n  if (\n    sys.ts.isFunctionExpression(exp.node) ||\n    sys.ts.isFunctionDeclaration(exp.node)\n  ) {\n    const fnName = exp.node.name?.text;\n    if (fnName && !isValidJsxTag(fnName)) {\n      return srcCmps;\n    }\n\n    const cmpExp = getReactComponentExpression(sys, typeChecker, exp.node);\n    if (cmpExp) {\n      const cmpName =\n        cmpExp.name || getComponentDisplayNameFromFilePath(sys, filePath);\n\n      const exportName =\n        exp.isDefaultExport || !cmpExp.name ? \"default\" : cmpExp.name;\n      const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, exportName),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: cmpName,\n          inputs: [],\n          exportName,\n          exportType,\n          importName:\n            cmpExp.name || getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath,\n          dependencies: cmpExp.deps,\n          framework: \"react\",\n        },\n        node: cmpExp,\n      });\n    }\n    return srcCmps;\n  }\n\n  if (\n    (sys.ts.isExportSpecifier(exp.node) || sys.ts.isIdentifier(exp.node)) &&\n    isValidJsxTag(exp.node.getText())\n  ) {\n    let modulePath;\n    const cmpExp = getReactComponentExpression(sys, typeChecker, exp.node);\n    if (cmpExp) {\n      const cmpName =\n        cmpExp.name || getComponentDisplayNameFromFilePath(sys, filePath);\n      const exportName =\n        exp.isDefaultExport || !cmpExp.name ? \"default\" : cmpExp.name;\n      const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n      const moduleSpecifier =\n        closestExportDeclaration(sys, exp.node)?.moduleSpecifier ??\n        closestImportDeclaration(sys, exp.node)?.moduleSpecifier;\n\n      if (moduleSpecifier && sys.ts.isStringLiteral(moduleSpecifier)) {\n        const symbol = typeChecker?.getSymbolAtLocation(moduleSpecifier);\n        if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n          const declaration = symbol.declarations[0];\n          if (\n            !sys.ts.isSourceFile(declaration) ||\n            (sys.ts.isSourceFile(declaration) &&\n              declaration.fileName.includes(\"node_modules\"))\n          ) {\n            modulePath = moduleSpecifier.text;\n          }\n        }\n      }\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, exportName, modulePath),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: cmpName,\n          inputs: [],\n          exportName,\n          exportType,\n          importName:\n            cmpExp.name || getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath: modulePath ? modulePath : importPath,\n          externalImportPath: modulePath,\n          dependencies: cmpExp.deps,\n          framework: \"react\",\n        },\n        node: cmpExp,\n      });\n    }\n    return srcCmps;\n  }\n\n  // export * from \"@cloudscape-design/components\";\n  if (\n    sys.ts.isExportDeclaration(exp.node) &&\n    exp.node.exportClause === undefined\n  ) {\n    const moduleSpecifier = exp.node.moduleSpecifier;\n\n    if (moduleSpecifier && sys.ts.isStringLiteral(moduleSpecifier)) {\n      const exportedComponentNames = await extractReactComponentsFromModule(\n        sys,\n        typeChecker,\n        filePath,\n        moduleSpecifier,\n      );\n      srcCmps.push(...exportedComponentNames);\n    }\n    return srcCmps;\n  }\n\n  return srcCmps;\n}\n\nfunction closestExportDeclaration(\n  sys: DevToolsSys,\n  node: ts.Node,\n): ts.ExportDeclaration | null {\n  while (node) {\n    if (sys.ts.isExportDeclaration(node)) {\n      return node;\n    }\n    node = node.parent;\n  }\n  return null;\n}\n\nfunction closestImportDeclaration(\n  sys: DevToolsSys,\n  node: ts.Node,\n): ts.ImportDeclaration | null {\n  while (node) {\n    if (sys.ts.isImportDeclaration(node)) {\n      return node;\n    }\n    node = node.parent;\n  }\n  return null;\n}\n\nfunction getReactComponentExpression(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  x:\n    | ts.Expression\n    | ts.FunctionDeclaration\n    | ts.PropertyAccessExpression\n    | ts.ExportSpecifier\n    | ts.Identifier\n    | ts.Declaration\n    | undefined,\n): ReactComponentSourceNode | null {\n  if (!x) {\n    return null;\n  }\n  if (sys.ts.isArrowFunction(x)) {\n    if (hasJsxNode(sys, x.body)) {\n      return {\n        name: \"\",\n        fnNode: x,\n        deps: getSourceDependencies(sys, typeChecker, x),\n      };\n    }\n    return null;\n  }\n\n  if (sys.ts.isFunctionExpression(x) || sys.ts.isFunctionDeclaration(x)) {\n    if (hasJsxNode(sys, x.body)) {\n      return {\n        name: x.name?.text || \"\",\n        fnNode: x,\n        deps: getSourceDependencies(sys, typeChecker, x),\n      };\n    }\n    return null;\n  }\n\n  if (sys.ts.isCallExpression(x)) {\n    const exp = x.expression;\n    if (sys.ts.isPropertyAccessExpression(exp)) {\n      const args = x.arguments;\n      if (args.length === 0) {\n        return null;\n      }\n\n      const reactIdentifier = exp.expression;\n      if (!sys.ts.isIdentifier(reactIdentifier)) {\n        return null;\n      }\n\n      if (reactIdentifier.text !== \"React\") {\n        return null;\n      }\n\n      const forwardRefIdentifier = exp.name;\n      if (!sys.ts.isIdentifier(forwardRefIdentifier)) {\n        return null;\n      }\n\n      if (forwardRefIdentifier.text !== \"forwardRef\") {\n        return null;\n      }\n\n      return getReactComponentExpression(sys, typeChecker, args[0]);\n    } else if (\n      sys.ts.isIdentifier(exp) &&\n      (exp.text === \"observer\" || exp.text === \"forwardRef\")\n    ) {\n      const args = x.arguments;\n      if (args.length === 0) {\n        return null;\n      }\n\n      return getReactComponentExpression(sys, typeChecker, args[0]);\n    }\n\n    return null;\n  }\n\n  if (!typeChecker) {\n    return null;\n  }\n\n  if (sys.ts.isPropertyAccessExpression(x)) {\n    // import * as AccordionPrimitive from \"@radix-ui/react-accordion\";\n    // const Accordion = AccordionPrimitive.Root;\n\n    const expIdentifier = x.expression;\n    const nameIdentifier = x.name;\n    if (\n      !sys.ts.isIdentifier(expIdentifier) ||\n      !sys.ts.isIdentifier(nameIdentifier)\n    ) {\n      return null;\n    }\n\n    if (!isValidJsxTag(nameIdentifier.text)) {\n      // Root\n      return null;\n    }\n\n    const type = typeChecker.getTypeAtLocation(nameIdentifier);\n    const callSignatures = type.getCallSignatures();\n    if (callSignatures.length > 0) {\n      const params = callSignatures[0].getParameters();\n      if (params.length > 0) {\n        return {\n          name: \"\",\n          fnNode: nameIdentifier,\n          deps: getSourceDependencies(sys, typeChecker, nameIdentifier),\n        };\n      }\n    }\n  }\n\n  if (sys.ts.isExportSpecifier(x)) {\n    const nameIdentifier = x.name;\n    return {\n      name: nameIdentifier.text || \"\",\n      fnNode: nameIdentifier,\n      deps: getSourceDependencies(sys, typeChecker, nameIdentifier),\n    };\n  }\n\n  if (sys.ts.isIdentifier(x)) {\n    return {\n      name: x.text || \"\",\n      fnNode: x,\n      deps: getSourceDependencies(sys, typeChecker, x),\n    };\n  }\n\n  // Handle declaration statements with 'as default'\n  if (sys.ts.isExpressionStatement(x)) {\n    const expression = x.expression;\n    if (\n      sys.ts.isAsExpression(expression) &&\n      sys.ts.isIdentifier(expression.type) &&\n      expression.type.text === \"default\"\n    ) {\n      return getReactComponentExpression(\n        sys,\n        typeChecker,\n        expression.expression,\n      );\n    }\n  }\n\n  // Handle variable declarations with 'as default'\n  if (sys.ts.isVariableStatement(x)) {\n    for (const declaration of x.declarationList.declarations) {\n      if (\n        declaration.initializer &&\n        sys.ts.isAsExpression(declaration.initializer)\n      ) {\n        const asExpression = declaration.initializer;\n        if (\n          sys.ts.isIdentifier(asExpression.type) &&\n          asExpression.type.text === \"default\"\n        ) {\n          const componentExp = getReactComponentExpression(\n            sys,\n            typeChecker,\n            asExpression.expression,\n          );\n          if (componentExp && sys.ts.isIdentifier(declaration.name)) {\n            return {\n              name: declaration.name.text,\n              fnNode: componentExp.fnNode,\n              deps: componentExp.deps,\n            };\n          }\n        }\n      }\n    }\n  }\n\n  return null;\n}\n\nexport async function getReactSourceComponentsFromDir(\n  sys: ReactDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: ReactComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (shouldSkipFolder(sys, SKIP_FOLDERS, sourceFile.fileName)) {\n        return;\n      }\n\n      if (\n        filePath === sys.reactConfigPath ||\n        filePath === sys.builderComponentPath\n      ) {\n        return;\n      }\n\n      const fileCmps = await getReactComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n        filePath === sys.registryPath,\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps.sort((a, b) => a.cmpInfo.name.localeCompare(b.cmpInfo.name));\n}\n\nexport interface ReactComponentSourceNode {\n  name: string;\n  fnNode: ts.Node;\n  deps: AppDependency[] | undefined;\n}\n\nexport interface ReactComponentSource {\n  cmpInfo: ComponentInfo;\n  node: ReactComponentSourceNode;\n}\n\nconst SKIP_FOLDERS = new Set([\"node_modules\", \"dist\"]);\n\nasync function extractReactComponentsFromModule(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  moduleSpecifier: ts.StringLiteral,\n): Promise<ReactComponentSource[]> {\n  const components: ReactComponentSource[] = [];\n  const modulePath = moduleSpecifier.text;\n\n  if (!typeChecker) {\n    return components;\n  }\n\n  try {\n    const moduleSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier);\n    if (!moduleSymbol) {\n      return components;\n    }\n\n    const exportedSymbols = typeChecker.getExportsOfModule(moduleSymbol);\n\n    for (const symbol of exportedSymbols) {\n      const declaration = symbol.valueDeclaration || symbol.declarations?.[0];\n      if (!declaration) continue;\n\n      const exportName = symbol.name;\n\n      if (!isValidJsxTag(exportName) && exportName !== \"default\") {\n        continue;\n      }\n\n      if (!isLikelyReactComponent(sys, typeChecker, declaration)) {\n        continue;\n      }\n\n      const cmpExp = getReactComponentExpression(sys, typeChecker, declaration);\n      if (cmpExp) {\n        const exportName = symbol.name;\n        const exportType = exportName === \"default\" ? \"default\" : \"named\";\n        const cmpName = getComponentDisplayName(exportName);\n        const importName =\n          exportName === \"default\"\n            ? getComponentImportNameFilePath(sys, filePath)\n            : exportName;\n\n        components.push({\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, exportName, modulePath),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: cmpName,\n            inputs: [],\n            exportName,\n            exportType,\n            importName,\n            filePath,\n            relFilePath: sys.relative(sys.getAppRootDir(), filePath),\n            importPath: modulePath,\n            externalImportPath: modulePath,\n            dependencies: cmpExp.deps,\n            framework: \"react\",\n          },\n          node: cmpExp,\n        });\n      }\n    }\n  } catch (error) {\n    sys.Sentry?.captureException(\n      new Error(`Error processing module ${modulePath}:`, { cause: error }),\n      {\n        extra: {\n          modulePath,\n          filePath,\n        },\n      },\n    );\n  }\n\n  return components;\n}\n\nfunction isLikelyReactComponent(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  declaration: ts.Declaration,\n): boolean {\n  if (\n    sys.ts.isInterfaceDeclaration(declaration) ||\n    sys.ts.isTypeAliasDeclaration(declaration)\n  ) {\n    return false;\n  }\n\n  if (sys.ts.isExportSpecifier(declaration)) {\n    const symbol = typeChecker.getSymbolAtLocation(declaration.name);\n    if (symbol) {\n      const aliasedSymbol = typeChecker.getAliasedSymbol(symbol);\n      const aliasedDeclaration = aliasedSymbol.declarations?.[0];\n      if (aliasedDeclaration) {\n        return isLikelyReactComponent(sys, typeChecker, aliasedDeclaration);\n      }\n    }\n    return false;\n  }\n\n  if (\n    sys.ts.isFunctionDeclaration(declaration) ||\n    sys.ts.isArrowFunction(declaration) ||\n    sys.ts.isFunctionExpression(declaration)\n  ) {\n    const signature = typeChecker.getSignatureFromDeclaration(declaration);\n    if (signature) {\n      const returnType = typeChecker.getReturnTypeOfSignature(signature);\n\n      const result = isJsxElement(returnType, typeChecker);\n      return result;\n    }\n  }\n\n  if (sys.ts.isClassDeclaration(declaration)) {\n    const result =\n      declaration.heritageClauses?.some((clause) =>\n        clause.types.some(\n          (type) =>\n            type.expression.getText() === \"React.Component\" ||\n            type.expression.getText() === \"Component\",\n        ),\n      ) ?? false;\n    return result;\n  }\n\n  if (sys.ts.isVariableDeclaration(declaration)) {\n    const type = typeChecker.getTypeAtLocation(declaration);\n    const result = type\n      .getCallSignatures()\n      .some((sig) =>\n        isJsxElement(typeChecker.getReturnTypeOfSignature(sig), typeChecker),\n      );\n    return result;\n  }\n\n  return false;\n}\n\nfunction isJsxElement(type: ts.Type, typeChecker: ts.TypeChecker): boolean {\n  const typeString = typeChecker.typeToString(type);\n  return (\n    typeString === \"JSX.Element\" ||\n    typeString === \"Element\" ||\n    typeString.includes(\"ReactElement\") ||\n    typeString.includes(\"React.ReactElement\") ||\n    typeString.includes(\"ReactNode\")\n  );\n}\n", "import type { NextDevToolsSys } from \"./index\";\nimport type ts from \"typescript\";\nimport {\n  getReactComponentsFromSourceFile,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { isMapperFile } from \"../../../common/utils\";\n\nexport async function getNextSourceComponentsFromDir(\n  sys: NextDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: ReactComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n      if (sys.appDir && SKIP_APP_FILES.has(fileName)) {\n        return;\n      }\n      if (sys.dirname(sourceFile.fileName).includes(\"node_modules\")) {\n        return;\n      }\n\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (\n        filePath === sys.nextConfigPath ||\n        filePath === sys.builderComponentPath\n      ) {\n        return;\n      }\n\n      const fileCmps = await getReactComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n        filePath === sys.registryPath || isMapperFile(filePath),\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps.sort((a, b) => a.cmpInfo.name.localeCompare(b.cmpInfo.name));\n}\n\n// https://nextjs.org/docs/app/api-reference/file-conventions\nconst SKIP_APP_FILES = new Set([\n  \"default.tsx\",\n  \"default.ts\",\n  \"default.jsx\",\n  \"default.js\",\n  \"error.tsx\",\n  \"error.ts\",\n  \"error.jsx\",\n  \"error.js\",\n  \"layout.tsx\",\n  \"layout.ts\",\n  \"layout.jsx\",\n  \"layout.js\",\n  \"loading.tsx\",\n  \"loading.ts\",\n  \"loading.jsx\",\n  \"loading.js\",\n  \"not-found.tsx\",\n  \"not-found.ts\",\n  \"not-found.jsx\",\n  \"not-found.js\",\n  \"page.tsx\",\n  \"page.ts\",\n  \"page.jsx\",\n  \"page.js\",\n  \"route.tsx\",\n  \"route.ts\",\n  \"route.jsx\",\n  \"route.js\",\n  \"template.tsx\",\n  \"template.ts\",\n  \"template.jsx\",\n  \"template.js\",\n]);\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\nimport { getTextOfPropertyName } from \"./convert-values\";\n\nexport function normalizeImports(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const externalImportStatements: ts.ImportDeclaration[] = [];\n  const importStatements: ts.ImportDeclaration[] = [];\n  const unknownImportStatements: ts.ImportDeclaration[] = [];\n  const statements: ts.Statement[] = [];\n\n  for (const statement of sourceFile.statements) {\n    if (sys.ts.isImportDeclaration(statement)) {\n      if (sys.ts.isStringLiteral(statement.moduleSpecifier)) {\n        const importPath = statement.moduleSpecifier.text;\n        if (!importPath.startsWith(\".\") && !importPath.startsWith(\"/\")) {\n          externalImportStatements.push(statement);\n          continue;\n        }\n      }\n\n      const importClause = statement.importClause;\n      if (importClause) {\n        const namedBindings = importClause.namedBindings;\n        if (namedBindings) {\n          importStatements.push(statement);\n          continue;\n        }\n\n        if (importClause.name) {\n          importStatements.push(statement);\n          continue;\n        }\n      }\n\n      unknownImportStatements.push(statement);\n      continue;\n    }\n\n    statements.push(statement);\n  }\n\n  return sys.ts.factory.updateSourceFile(sourceFile, [\n    ...sortImports(sys, externalImportStatements),\n    ...sortImports(sys, importStatements),\n    ...sortImports(sys, unknownImportStatements),\n    ...statements,\n  ]);\n}\n\nexport function normalizeLineBreaks(code: string) {\n  const lines = code.split(\"\\n\").map((l) => l.trimEnd());\n\n  code = \"\";\n  let foundImport = false;\n  for (let i = lines.length - 1; i >= 0; i--) {\n    let line = lines[i];\n\n    if (!foundImport && line.startsWith(\"import \")) {\n      foundImport = true;\n      line = line + \"\\n\";\n    }\n\n    if (/^builder.init(.*)$/.test(line)) {\n      line = line + \"\\n\";\n    }\n\n    if (lines[i - 1] && !lines[i - 1].includes(\"*/\")) {\n      if (line.trim().startsWith(\"Builder.registerComponent\")) {\n        line = \"\\n\" + line;\n      }\n\n      if (line.trim().startsWith(\"/**\")) {\n        line = \"\\n\" + line;\n      }\n\n      if (line.trim().startsWith(\"module.exports\")) {\n        line = \"\\n\" + line;\n      }\n\n      if (line.trim().startsWith(\"export \")) {\n        line = \"\\n\" + line;\n      }\n    }\n\n    code = line + \"\\n\" + code;\n  }\n\n  return code.trim() + \"\\n\";\n}\n\nfunction sortImports(\n  sys: DevToolsSys,\n  importStatements: ts.ImportDeclaration[],\n) {\n  return importStatements.sort((a, b) => {\n    const aText = getImportName(sys, a);\n    const bText = getImportName(sys, b);\n    return aText.toLocaleLowerCase().localeCompare(bText.toLocaleLowerCase());\n  });\n}\n\nfunction getImportName(sys: DevToolsSys, s: ts.ImportDeclaration) {\n  const importClause = s.importClause;\n  if (importClause) {\n    const namedBindings = importClause.namedBindings;\n    if (namedBindings && sys.ts.isNamedImports(namedBindings)) {\n      if (namedBindings.elements.length > 0) {\n        return namedBindings.elements[0].name.text;\n      }\n    }\n    if (importClause.name) {\n      return importClause.name.text;\n    }\n  }\n  if (s.moduleSpecifier && sys.ts.isStringLiteral(s.moduleSpecifier)) {\n    return s.moduleSpecifier.text;\n  }\n  return \"\";\n}\n\nexport function ensureUseClientStringLiteral(code: string) {\n  if (\n    typeof code === \"string\" &&\n    !code.includes(`'use client'`) &&\n    !code.includes(`\"use client\"'`)\n  ) {\n    code = `\"use client\"\\n${code}`;\n  }\n  return code;\n}\n\nexport function removeUseClientStringLiteral(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const statements = sourceFile.statements.filter((s) => {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isStringLiteral(s.expression)\n    ) {\n      if (sys.ts.isStringLiteral(s.expression)) {\n        if (s.expression.text === \"use client\") {\n          return false;\n        }\n      }\n    }\n    return true;\n  });\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nexport function normalizeRegisteredArrayElements(\n  sys: DevToolsSys,\n  elements: ts.Expression[],\n) {\n  return elements.sort((a, b) => {\n    if (\n      sys.ts.isObjectLiteralExpression(a) &&\n      sys.ts.isObjectLiteralExpression(b)\n    ) {\n      const aName = getNameProperty(sys, a);\n      const bName = getNameProperty(sys, b);\n      return aName.toLocaleLowerCase().localeCompare(bName.toLocaleLowerCase());\n    }\n    return 1;\n  });\n}\n\nfunction getNameProperty(sys: DevToolsSys, obj: ts.ObjectLiteralExpression) {\n  const prop = obj.properties.find((p) => {\n    return getTextOfPropertyName(sys, p) === \"name\";\n  });\n\n  if (\n    prop &&\n    sys.ts.isPropertyAssignment(prop) &&\n    sys.ts.isStringLiteral(prop.initializer)\n  ) {\n    return prop.initializer.text;\n  }\n\n  return \"zzzz\";\n}\n", "import type ts from \"typescript\";\nimport { SDK_VERSIONS, type ComponentInfo } from \"../../../types\";\nimport type { NextDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  resolveComponentPath,\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentDisplayNameFromFilePath,\n  getComponentId,\n  getComponentImportPath,\n  getDisplayFilePath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport {\n  parseRegisteredComponentInfo,\n  componentHasAcceptChildrenProp,\n} from \"../../../common/ast/component-info\";\nimport { NEXT_BUILDER_API_KEY_ENV } from \"./next-api-key\";\n\nexport async function parseNextRegistryFromFile(sys: NextDevToolsSys) {\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseNextRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseNextRegistryFromCode(\n  sys: NextDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return parseNextRegistryFromSourceSdkGen2(sys, sourceFile);\n  }\n  return parseNextRegistryFromSource(sys, sourceFile);\n}\n\nasync function parseNextRegistryFromSource(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n\n  for (let i = 0; i < sourceFile.statements.length; i++) {\n    const s = sourceFile.statements[i];\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"Builder\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName !== \"registerComponent\") {\n      continue;\n    }\n    const args = exp.arguments;\n    if (args.length < 2) {\n      continue;\n    }\n    const infoArg = args[1];\n    if (!sys.ts.isObjectLiteralExpression(infoArg)) {\n      continue;\n    }\n\n    const cmpArg = args[0];\n    if (sys.ts.isCallExpression(cmpArg)) {\n      const fnName =\n        sys.ts.isIdentifier(cmpArg.expression) && cmpArg.expression.text;\n\n      if (fnName === \"withChildren\") {\n        // Builder.registerComponent( withChildren( ?? ), {...})\n\n        const wrappedCmpArg = checkWrapperFunction(sys, cmpArg.arguments[0]);\n\n        if (sys.ts.isCallExpression(wrappedCmpArg)) {\n          // Builder.registerComponent( withChildren(dynamic( .. )), {...})\n          const cmp = await parseNextRegisteredDynamicComponent(\n            sys,\n            i,\n            wrappedCmpArg,\n            infoArg,\n            true,\n          );\n          if (cmp) {\n            cmps.push(cmp);\n          }\n        } else {\n          // Builder.registerComponent( withChildren(Component), {...})\n          const cmpArgArgs = wrappedCmpArg;\n          if (sys.ts.isIdentifier(cmpArgArgs)) {\n            const cmp = await parseNextRegisteredIdentifierComponent(\n              sys,\n              sourceFile,\n              i,\n              cmpArgArgs,\n              infoArg,\n              true,\n            );\n            if (cmp) {\n              cmps.push(cmp);\n            }\n          }\n        }\n        continue;\n      }\n\n      if (fnName === \"dynamic\") {\n        // Builder.registerComponent(dynamic(() => import('./components/heading')), {...})\n        const cmp = await parseNextRegisteredDynamicComponent(\n          sys,\n          i,\n          cmpArg,\n          infoArg,\n          false,\n        );\n        if (cmp) {\n          cmps.push(cmp);\n        }\n        continue;\n      }\n\n      const wrappedCmpArg = checkWrapperFunction(sys, cmpArg.arguments[0]);\n\n      if (\n        sys.ts.isCallExpression(wrappedCmpArg) &&\n        sys.ts.isIdentifier(wrappedCmpArg.expression) &&\n        wrappedCmpArg.expression.text === \"dynamic\"\n      ) {\n        // Builder.registerComponent(forwardProps(dynamic(() => import('./components/heading'))), {...})\n        const cmp = await parseNextRegisteredDynamicComponent(\n          sys,\n          i,\n          wrappedCmpArg,\n          infoArg,\n          false,\n        );\n        if (cmp) {\n          cmps.push(cmp);\n        }\n        continue;\n      }\n\n      if (sys.ts.isIdentifier(wrappedCmpArg)) {\n        // Builder.registerComponent(forwardProps(Component), {...} )\n        const cmp = await parseNextRegisteredIdentifierComponent(\n          sys,\n          sourceFile,\n          i,\n          wrappedCmpArg,\n          infoArg,\n          false,\n        );\n        if (cmp) {\n          cmps.push(cmp);\n        }\n        continue;\n      }\n\n      continue;\n    }\n\n    if (sys.ts.isIdentifier(cmpArg)) {\n      // Builder.registerComponent(Component, {...} )\n      const cmp = await parseNextRegisteredIdentifierComponent(\n        sys,\n        sourceFile,\n        i,\n        cmpArg,\n        infoArg,\n        false,\n      );\n      if (cmp) {\n        cmps.push(cmp);\n      }\n      continue;\n    }\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nfunction checkWrapperFunction(\n  sys: NextDevToolsSys,\n  node: ts.Expression,\n): ts.Expression {\n  if (sys.ts.isCallExpression(node)) {\n    const fnName = sys.ts.isIdentifier(node.expression) && node.expression.text;\n    if (fnName === \"dynamic\") {\n      return node;\n    } else {\n      return checkWrapperFunction(sys, node.arguments[0]);\n    }\n  }\n  return node;\n}\n\nasync function parseNextRegisteredDynamicComponent(\n  sys: NextDevToolsSys,\n  statementIndex: number,\n  dynamicArg: ts.CallExpression,\n  infoArg: ts.ObjectLiteralExpression,\n  withChildrenWrapper: boolean,\n) {\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    nodeIndex: statementIndex,\n    acceptsChildren: withChildrenWrapper,\n    framework: \"react\",\n  };\n\n  const importArgArgs = dynamicArg.arguments;\n  if (importArgArgs.length === 0) {\n    return null;\n  }\n\n  const importArgArg = importArgArgs[0];\n  if (!sys.ts.isArrowFunction(importArgArg)) {\n    return null;\n  }\n\n  const importBody = importArgArg.body;\n  if (sys.ts.isCallExpression(importBody)) {\n    // probably default export\n    // dynamic(() => import('./components/heading')),\n    const importExp = importBody.expression;\n    if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n      return null;\n    }\n\n    if (importBody.arguments.length !== 1) {\n      return null;\n    }\n\n    const importPathArg = importBody.arguments[0];\n    if (!sys.ts.isStringLiteral(importPathArg)) {\n      return null;\n    }\n\n    const importPath = importPathArg.text;\n\n    const resolvedPath = await resolveNextImportPath(sys, importPath);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n    cmp.importName = \"default\";\n    cmp.exportName = \"default\";\n    cmp.exportType = \"default\";\n  } else if (sys.ts.isPropertyAccessExpression(importBody)) {\n    // probably named export\n    // dynamic(async () => (await import(\"./components/title\")).Title),\n    const paranthesizedExp = importBody.expression;\n    if (!sys.ts.isParenthesizedExpression(paranthesizedExp)) {\n      return null;\n    }\n\n    const awaitExpr = paranthesizedExp.expression;\n    if (!sys.ts.isAwaitExpression(awaitExpr)) {\n      return null;\n    }\n\n    const callExp = awaitExpr.expression;\n    if (!sys.ts.isCallExpression(callExp)) {\n      return null;\n    }\n\n    const importExp = callExp.expression;\n    if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n      return null;\n    }\n\n    if (callExp.arguments.length !== 1) {\n      return null;\n    }\n\n    const importPathArg = callExp.arguments[0];\n    if (!sys.ts.isStringLiteral(importPathArg)) {\n      return null;\n    }\n\n    if (!sys.ts.isIdentifier(importBody.name)) {\n      return null;\n    }\n\n    const importPath = importPathArg.text;\n\n    const resolvedPath = await resolveNextImportPath(sys, importPath);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayName(importBody.name.text);\n    cmp.importName = importBody.name.text;\n    cmp.exportName = importBody.name.text;\n    cmp.exportType = \"named\";\n  } else {\n    return null;\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, infoArg);\n\n  cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n  return cmp;\n}\n\nasync function parseNextRegisteredIdentifierComponent(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  statementIndex: number,\n  identifierArg: ts.Identifier,\n  infoArg: ts.ObjectLiteralExpression,\n  withChildrenWrapper: boolean,\n) {\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    nodeIndex: statementIndex,\n    acceptsChildren: withChildrenWrapper,\n    framework: \"react\",\n  };\n\n  const importDeclarations = sourceFile.statements.filter((s) =>\n    sys.ts.isImportDeclaration(s),\n  ) as ts.ImportDeclaration[];\n\n  const defaultImportDeclaration = importDeclarations.find(\n    (s) => s.importClause && s.importClause.name?.text === identifierArg.text,\n  );\n\n  if (defaultImportDeclaration) {\n    const importPath = defaultImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n    const resolvedPath = await resolveNextImportPath(sys, importPath.text);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath.text;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = \"default\";\n    cmp.exportType = \"default\";\n  } else {\n    const namedImportDeclaration = importDeclarations.find((s) => {\n      if (!s.importClause) {\n        return false;\n      }\n      if (!s.importClause.namedBindings) {\n        return false;\n      }\n      if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n        return false;\n      }\n      return s.importClause.namedBindings.elements.some(\n        (e) => e.name.text === identifierArg.text,\n      );\n    });\n    if (!namedImportDeclaration) {\n      return null;\n    }\n    const importPath = namedImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n\n    const resolvedPath = await resolveNextImportPath(sys, importPath.text);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    // If path doesn't exist, it's an external module\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      cmp.externalImportPath = importPath.text;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayName(identifierArg.text);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = identifierArg.text;\n    cmp.exportType = \"named\";\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, infoArg);\n\n  cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n  return cmp;\n}\n\nfunction resolveNextImportPath(sys: NextDevToolsSys, importPath: string) {\n  return resolveComponentPath(\n    sys,\n    sys.normalize(sys.resolve(sys.dirname(sys.registryPath), importPath)),\n  );\n}\n\nexport function ensureBuilderIsInitialized(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  typescriptEnabled: boolean,\n) {\n  let isApiKeyInitialized = false;\n  let lastImportIndex = 0;\n\n  const statements = [...sourceFile.statements];\n\n  for (let i = 0; i < statements.length; i++) {\n    const s = statements[i];\n    if (sys.ts.isImportDeclaration(s)) {\n      lastImportIndex = i;\n      continue;\n    }\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"builder\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName == \"init\") {\n      isApiKeyInitialized = true;\n      break;\n    } else {\n      continue;\n    }\n  }\n\n  if (isApiKeyInitialized) {\n    return sourceFile;\n  }\n\n  // process.env.NEXT_PUBLIC_BUILDER_API_KEY\n  const envKeyExpression = sys.ts.factory.createPropertyAccessExpression(\n    sys.ts.factory.createPropertyAccessExpression(\n      sys.ts.factory.createIdentifier(\"process\"),\n      sys.ts.factory.createIdentifier(\"env\"),\n    ),\n    sys.ts.factory.createIdentifier(NEXT_BUILDER_API_KEY_ENV),\n  );\n\n  const nonNullEnvKeyExpression = typescriptEnabled\n    ? sys.ts.factory.createNonNullExpression(envKeyExpression)\n    : envKeyExpression;\n\n  const initializeBuilderApiKey = sys.ts.factory.createExpressionStatement(\n    sys.ts.factory.createCallExpression(\n      sys.ts.factory.createPropertyAccessExpression(\n        sys.ts.factory.createIdentifier(\"builder\"),\n        sys.ts.factory.createIdentifier(\"init\"),\n      ),\n      undefined,\n      [nonNullEnvKeyExpression],\n    ),\n  );\n\n  statements.splice(lastImportIndex + 1, 0, initializeBuilderApiKey);\n\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nasync function parseNextRegistryFromSourceSdkGen2(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseNextRegisteredComponentSdkGen2(\n          sys,\n          sourceFile,\n          cmpElm,\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseNextRegisteredComponentSdkGen2(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    acceptsChildren: false,\n    framework: \"react\",\n  };\n\n  const acceptsChildren = componentHasAcceptChildrenProp(sys, cmpObjLit);\n\n  if (acceptsChildren) {\n    cmp.acceptsChildren = true;\n  }\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isCallExpression(initializer)) {\n        const fnName =\n          sys.ts.isIdentifier(initializer.expression) &&\n          initializer.expression.text;\n\n        if (fnName === \"dynamic\") {\n          // component: dynamic(() => import(\"./components/Counter/Counter\")),\n\n          const importArgArgs = initializer.arguments;\n          if (importArgArgs.length === 0) {\n            return null;\n          }\n\n          const importArgArg = importArgArgs[0];\n          if (!sys.ts.isArrowFunction(importArgArg)) {\n            return null;\n          }\n\n          const importBody = importArgArg.body;\n          if (sys.ts.isCallExpression(importBody)) {\n            // probably default export\n            // dynamic(() => import('./components/heading')),\n            const importExp = importBody.expression;\n            if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n              return null;\n            }\n\n            if (importBody.arguments.length !== 1) {\n              return null;\n            }\n\n            const importPathArg = importBody.arguments[0];\n            if (!sys.ts.isStringLiteral(importPathArg)) {\n              return null;\n            }\n\n            const importPath = importPathArg.text;\n\n            const resolvedPath = await resolveNextImportPath(sys, importPath);\n            cmp.filePath = resolvedPath;\n            cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n            if (await sys.exists(resolvedPath)) {\n              cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n            } else {\n              // If path doesn't exist, it's an external module\n              cmp.externalImportPath = importPath;\n              cmp.importPath = cmp.externalImportPath;\n            }\n\n            cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n            cmp.importName = \"default\";\n            cmp.exportName = \"default\";\n            cmp.exportType = \"default\";\n          } else if (sys.ts.isPropertyAccessExpression(importBody)) {\n            // probably named export\n            // dynamic(async () => (await import(\"./components/title\")).Title),\n            const paranthesizedExp = importBody.expression;\n            if (!sys.ts.isParenthesizedExpression(paranthesizedExp)) {\n              return null;\n            }\n\n            const awaitExpr = paranthesizedExp.expression;\n            if (!sys.ts.isAwaitExpression(awaitExpr)) {\n              return null;\n            }\n\n            const callExp = awaitExpr.expression;\n            if (!sys.ts.isCallExpression(callExp)) {\n              return null;\n            }\n\n            const importExp = callExp.expression;\n            if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n              return null;\n            }\n\n            if (callExp.arguments.length !== 1) {\n              return null;\n            }\n\n            const importPathArg = callExp.arguments[0];\n            if (!sys.ts.isStringLiteral(importPathArg)) {\n              return null;\n            }\n\n            if (!sys.ts.isIdentifier(importBody.name)) {\n              return null;\n            }\n\n            const importPath = importPathArg.text;\n\n            const resolvedPath = await resolveNextImportPath(sys, importPath);\n            cmp.filePath = resolvedPath;\n            cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n            if (await sys.exists(resolvedPath)) {\n              cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n            } else {\n              // If path doesn't exist, it's an external module\n              cmp.externalImportPath = importPath;\n              cmp.importPath = cmp.externalImportPath;\n            }\n\n            cmp.name = getComponentDisplayName(importBody.name.text);\n            cmp.importName = importBody.name.text;\n            cmp.exportName = importBody.name.text;\n            cmp.exportType = \"named\";\n          } else {\n            return null;\n          }\n\n          cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n          cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n          if (cmp.filePath && cmp.exportName) {\n            cmp.id = await getComponentId(\n              sys,\n              cmp.filePath,\n              cmp.exportName,\n              cmp.externalImportPath,\n            );\n          }\n          return cmp;\n        }\n      }\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.importPath = getComponentImportPath(sys, i.filePath);\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      const importDeclarations = sourceFile.statements.filter((s) =>\n        sys.ts.isImportDeclaration(s),\n      ) as ts.ImportDeclaration[];\n\n      const defaultImportDeclaration = importDeclarations.find(\n        (s) => s.importClause && s.importClause.name?.text === identifierName,\n      );\n\n      if (defaultImportDeclaration) {\n        const importPath = defaultImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n        cmp.exportName = \"default\";\n      } else {\n        const namedImportDeclaration = importDeclarations.find((s) => {\n          if (!s.importClause) {\n            return false;\n          }\n          if (!s.importClause.namedBindings) {\n            return false;\n          }\n          if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n            return false;\n          }\n          return s.importClause.namedBindings.elements.some(\n            (e) => e.name.text === identifierName,\n          );\n        });\n        if (!namedImportDeclaration) {\n          return null;\n        }\n        const importPath = namedImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n\n        cmp.exportName = identifierName;\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n\n  return cmp;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport function removeUnusedImports(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  let statements = [...sourceFile.statements];\n  let madeUpdates = false;\n\n  for (let i = sourceFile.statements.length - 1; i >= 0; i--) {\n    const importDec = sourceFile.statements[i];\n\n    if (sys.ts.isImportDeclaration(importDec) && importDec.importClause) {\n      let removeImportDeclaration = false;\n\n      const namedBindings = importDec.importClause.namedBindings;\n      if (\n        namedBindings &&\n        sys.ts.isNamedImports(namedBindings) &&\n        namedBindings.elements\n      ) {\n        const namedBindingsElements = [...namedBindings.elements];\n\n        for (let j = namedBindingsElements.length - 1; j >= 0; j--) {\n          const namedImportElement = namedBindingsElements[j];\n          if (sys.ts.isImportSpecifier(namedImportElement)) {\n            const importName = namedImportElement.name;\n            if (importName && sys.ts.isIdentifier(importName)) {\n              const namedImportFn = importName.text;\n              if (!isIdentifierFound(sys, sourceFile, namedImportFn)) {\n                namedBindingsElements.splice(j, 1);\n              }\n            }\n          }\n        }\n\n        if (namedBindingsElements.length === 0) {\n          removeImportDeclaration = true;\n        } else if (\n          namedBindings.elements.length !== namedBindingsElements.length\n        ) {\n          const updatedImport = sys.ts.factory.updateImportClause(\n            importDec.importClause,\n            false,\n            importDec.importClause.name,\n            sys.ts.factory.createNamedImports(namedBindingsElements),\n          );\n          const s = sys.ts.factory.updateImportDeclaration(\n            importDec,\n            undefined,\n            updatedImport,\n            importDec.moduleSpecifier,\n            undefined,\n          );\n          statements[i] = s;\n          madeUpdates = true;\n        }\n      } else if (\n        importDec.importClause.name &&\n        sys.ts.isIdentifier(importDec.importClause.name)\n      ) {\n        const importName = importDec.importClause.name.text;\n        if (!isIdentifierFound(sys, sourceFile, importName)) {\n          removeImportDeclaration = true;\n        }\n      }\n\n      if (removeImportDeclaration) {\n        statements.splice(i, 1);\n        madeUpdates = true;\n      }\n    }\n  }\n\n  if (madeUpdates) {\n    return sys.ts.factory.updateSourceFile(sourceFile, statements);\n  }\n  return sourceFile;\n}\n\nfunction isIdentifierFound(\n  sys: DevToolsSys,\n  node: ts.SourceFile,\n  identifier: string,\n) {\n  let foundIdentifier = false;\n\n  function visit(childNode: ts.Node) {\n    if (sys.ts.isImportDeclaration(childNode)) {\n      return;\n    }\n    if (sys.ts.isIdentifier(childNode) && childNode.text === identifier) {\n      foundIdentifier = true;\n      return;\n    }\n    sys.ts.forEachChild(childNode, visit);\n  }\n\n  sys.ts.forEachChild(node, visit);\n\n  return foundIdentifier;\n}\n", "import type {\n  ComponentInfo,\n  ComponentInput,\n  SetComponentInfoOptions,\n  SetComponentInputOptions,\n} from \"../../types\";\nimport { clone, isBoolean, isNumber, isString, sortComponents } from \"../utils\";\nimport {\n  componentAcceptsChildren,\n  normalizeComponentInput,\n} from \"./component-info\";\n\nexport function updateRegistry(\n  cmpId: string,\n  srcCmps: ComponentInfo[],\n  regCmps: ComponentInfo[],\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n) {\n  let addCmpToRegistry: ComponentInfo | null = null;\n  let removeCmpFromRegistry: ComponentInfo | null = null;\n  let updateRegisteredCmp: ComponentInfo | null = null;\n  let nodeIndex = -1;\n\n  srcCmps = clone(srcCmps);\n  regCmps = clone(regCmps);\n\n  const srcCmpInfo = srcCmps.find((c) => c.id === cmpId)!;\n  const regCmpInfo = regCmps.find((c) => c.id === cmpId);\n\n  if (registerCmp) {\n    // lets register this component\n    if (!regCmpInfo) {\n      // component info not already registered, append it using src info\n      addCmpToRegistry = {\n        ...clone(srcCmpInfo),\n        inputs: clone(srcCmpInfo.inputs).map((i) => {\n          i.isRegistered = true;\n          return i;\n        }),\n      };\n      nodeIndex = regCmps.length;\n      regCmps.push(addCmpToRegistry);\n    }\n  } else if (\n    typeof regCmpInfo?.nodeIndex === \"number\" &&\n    regCmpInfo.nodeIndex > -1\n  ) {\n    // component is in the registry\n    if (unregisterCmp) {\n      // already registered, unregister it\n      nodeIndex = regCmpInfo.nodeIndex;\n      removeCmpFromRegistry = clone(regCmpInfo);\n      regCmps = regCmps.filter((c) => c.id !== cmpId);\n    } else if (setCmpInfo != null) {\n      // already registered, update component info\n      updateCmpInfoValues(regCmpInfo, setCmpInfo);\n      nodeIndex = regCmpInfo.nodeIndex;\n      updateRegisteredCmp = regCmpInfo;\n    } else if (setCmpInput != null) {\n      // already registered, update component input\n      const input = regCmpInfo.inputs.find((i) => i.name === setCmpInput.name);\n      if (input) {\n        if (setCmpInput.registerInput === false) {\n          // remove input from the registered inputs\n          input.isRegistered = false;\n        } else {\n          // update the existing registered input\n          updateCmpInputValues(input, setCmpInput);\n          input.isRegistered = true;\n        }\n        updateRegisteredCmp = regCmpInfo;\n        nodeIndex = regCmpInfo.nodeIndex;\n      }\n    }\n  }\n\n  return {\n    addCmpToRegistry,\n    removeCmpFromRegistry,\n    updateRegisteredCmp,\n    nodeIndex,\n    components: mergeComponents(srcCmps, regCmps),\n  };\n}\n\nexport function mergeComponents(\n  sourceComponents: ComponentInfo[],\n  registeredCmps: ComponentInfo[],\n) {\n  const cmps = sortComponents([\n    ...registeredCmps.map((c) => {\n      c.isRegistered = true;\n      return c;\n    }),\n    ...sourceComponents\n      .filter((c) => !registeredCmps.some((r) => r.id === c.id))\n      .map((c) => {\n        c.isRegistered = false;\n        return c;\n      }),\n  ]);\n\n  cmps.forEach((cmp) => {\n    cmp.inputs = cmp.inputs.map(normalizeComponentInput);\n    cmp.inputs.sort((a, b) => {\n      return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n    });\n\n    const regCmp = registeredCmps.find((c) => c.id === cmp.id);\n    if (regCmp) {\n      // update the array of the registered component in place\n      // when updating many components in one call, we need to\n      // ensure the array stays up to date with each registered cmp\n      regCmp.acceptsChildren = componentAcceptsChildren(cmp);\n    }\n\n    // Make sure filePath and relFilePath are set correctly in case of external modules\n    const externalCmp = sourceComponents.find(\n      (c) => c.id === cmp.id && c.externalImportPath,\n    );\n    if (externalCmp) {\n      cmp.filePath = externalCmp.filePath;\n      cmp.relFilePath = externalCmp.relFilePath;\n    }\n  });\n\n  return cmps;\n}\n\nfunction updateCmpInfoValues(\n  cmpInfo: ComponentInfo,\n  setCmpInfo: SetComponentInfoOptions,\n) {\n  if (isString(setCmpInfo.name)) {\n    cmpInfo.name = setCmpInfo.name;\n  } else if (setCmpInfo.name === null) {\n    cmpInfo.name = cmpInfo.importName;\n  }\n\n  if (isString(setCmpInfo.description)) {\n    cmpInfo.description = setCmpInfo.description;\n  } else if (setCmpInfo.description === null) {\n    delete cmpInfo.description;\n  }\n\n  if (isString(setCmpInfo.image)) {\n    cmpInfo.image = setCmpInfo.image;\n  } else if (setCmpInfo.image === null) {\n    delete cmpInfo.image;\n  }\n}\n\nfunction updateCmpInputValues(\n  cmpInput: ComponentInput,\n  setCmpInput: SetComponentInputOptions,\n) {\n  if (isString(setCmpInput.type)) {\n    cmpInput.type = setCmpInput.type;\n  }\n\n  if (isString(setCmpInput.friendlyName)) {\n    cmpInput.friendlyName = setCmpInput.friendlyName;\n  } else if (setCmpInput.friendlyName === null) {\n    delete cmpInput.friendlyName;\n  }\n\n  if (\n    isString(setCmpInput.defaultValue) ||\n    isNumber(setCmpInput.defaultValue) ||\n    isBoolean(setCmpInput.defaultValue)\n  ) {\n    cmpInput.defaultValue = setCmpInput.defaultValue;\n  } else if (setCmpInput.defaultValue === null) {\n    delete cmpInput.defaultValue;\n  }\n\n  if (isString(setCmpInput.helperText)) {\n    cmpInput.helperText = setCmpInput.helperText;\n  } else if (setCmpInput.helperText === null) {\n    delete cmpInput.helperText;\n  }\n\n  if (setCmpInput.required === true) {\n    cmpInput.required = setCmpInput.required;\n  } else if (setCmpInput.required === null || setCmpInput.required === false) {\n    delete cmpInput.required;\n  }\n}\n", "import type { DevToolsSys } from \"../../index\";\nimport { createTsProgram } from \"../../../common/typescript\";\n\nexport async function createReactTsProgram(sys: DevToolsSys) {\n  const entryPaths = new Set<string>();\n\n  const recursive = async (childDir: string) => {\n    const itemNames = await sys.readdir(childDir);\n\n    await Promise.all(\n      itemNames.map(async (itemName) => {\n        if (itemName.startsWith(\".\") || itemName === \"node_modules\") {\n          return;\n        }\n\n        const itemPath = sys.join(childDir, itemName);\n        const ext = sys.extname(itemName).toLowerCase();\n        if (\n          ext === \".tsx\" ||\n          ext === \".jsx\" ||\n          ext === \".ts\" ||\n          ext === \".js\"\n        ) {\n          entryPaths.add(itemPath);\n          return;\n        }\n\n        const stat = await sys.stat(itemPath);\n        if (stat.isDirectory()) {\n          await recursive(itemPath);\n        }\n      }),\n    );\n  };\n\n  await recursive(sys.getAppRootDir());\n\n  const tsProgram = await createTsProgram(sys, [...entryPaths]);\n  return tsProgram;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\nimport { findVariableStatement } from \"./utils\";\n\nexport function ensureArrayStatement(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  opts: EnsureArrayStatementOptions,\n) {\n  const variableStatement = findVariableStatement(\n    sys,\n    sourceFile,\n    opts.variableName,\n  );\n  if (variableStatement) {\n    return sourceFile;\n  }\n  return appendArrayStatement(sys, sourceFile, opts);\n}\n\nfunction appendArrayStatement(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  opts: EnsureArrayStatementOptions,\n) {\n  const arrayType =\n    typeof opts.arrayType === \"string\"\n      ? sys.ts.factory.createArrayTypeNode(\n          sys.ts.factory.createTypeReferenceNode(opts.arrayType, undefined),\n        )\n      : undefined;\n\n  const initializer = sys.ts.factory.createArrayLiteralExpression([]);\n\n  const variableDeclaration = sys.ts.factory.createVariableDeclaration(\n    opts.variableName,\n    undefined,\n    arrayType,\n    initializer,\n  );\n\n  const variableDeclarationList = sys.ts.factory.createVariableDeclarationList(\n    [variableDeclaration],\n    sys.ts.NodeFlags.Const,\n  );\n\n  const exportModifier = sys.ts.factory.createModifier(\n    sys.ts.SyntaxKind.ExportKeyword,\n  );\n\n  const variableStatement = sys.ts.factory.createVariableStatement(\n    [exportModifier],\n    variableDeclarationList,\n  );\n\n  const statements = [...sourceFile.statements, variableStatement];\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nexport interface EnsureArrayStatementOptions {\n  variableName: string;\n  arrayType?: string;\n}\n", "import {\n  SDK_VERSIONS,\n  type ComponentInfo,\n  type ComponentRegistry,\n  type SetComponentInfoOptions,\n  type SetComponentInputOptions,\n  type UpdateRegistry,\n} from \"../../../types\";\nimport type { NextDevToolsSys } from \"./index\";\nimport {\n  createNextRegisteredComponent,\n  updateNextRegisteredComponent,\n} from \"./next-component-info\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { getNextSourceComponentsFromDir } from \"./next-components\";\nimport {\n  getDisplayFilePath,\n  getImportPath,\n  isMapperFile,\n} from \"../../../common/utils\";\nimport {\n  ensureUseClientStringLiteral,\n  normalizeImports,\n  normalizeLineBreaks,\n  removeUseClientStringLiteral,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseNextRegistryFromFile,\n  ensureBuilderIsInitialized,\n  parseNextRegisteredComponentSdkGen2,\n} from \"./next-registry-parse\";\nimport {\n  parseReactAllComponentSourceInputs,\n  parseReactComponentSourceInputs,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getNextApiKey } from \"./next-api-key\";\nimport type ts from \"typescript\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { hasTsconfig } from \"../../../common/fs\";\n\nexport async function nextComponentRegistry(\n  sys: NextDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, typescriptEnabled, nextApiKey] =\n    await Promise.all([\n      getNextSourceComponentsFromDir(sys, tsProgram),\n      parseNextRegistryFromFile(sys),\n      hasTsconfig(sys),\n      getNextApiKey(sys),\n    ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: nextApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseReactAllComponentSourceInputs(\n      sys,\n      cmpRegistry.components,\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n      ? [cmpId]\n      : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath)),\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      )!;\n      const sourceInputs = await parseReactComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n        sys.registryPath === srcCmp.cmpInfo.filePath ||\n          isMapperFile(srcCmp.cmpInfo.filePath),\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update: UpdateRegistry = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput,\n      );\n\n      if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n        const {\n          elements,\n          elmIndex,\n          statementIndex,\n          statement,\n          variableDeclaration,\n        } = await getNextRegisteredComponentSourceSdkGen2(\n          sys,\n          sourceFile,\n          srcCmp,\n        );\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          elements.push(\n            createNextRegisteredComponentSdkGen2(sys, update.addCmpToRegistry),\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          elements.splice(elmIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          const element = updateComponentObjLiteralInfoProperties(\n            sys,\n            elements[elmIndex],\n            update.updateRegisteredCmp,\n          );\n          elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n            element,\n            [\n              createNextComponentPropertyAssignmentSdkGen2(\n                sys,\n                update.updateRegisteredCmp,\n              ),\n              ...element.properties.slice(1),\n            ],\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          const statements = [...sourceFile.statements];\n          statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n            statement,\n            statement.modifiers,\n            sys.ts.factory.updateVariableDeclarationList(\n              statement.declarationList,\n              [\n                sys.ts.factory.updateVariableDeclaration(\n                  variableDeclaration,\n                  variableDeclaration.name,\n                  variableDeclaration.exclamationToken,\n                  variableDeclaration.type,\n                  sys.ts.factory.createArrayLiteralExpression(\n                    normalizeRegisteredArrayElements(sys, elements),\n                  ),\n                ),\n              ],\n            ),\n          );\n\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureNextComponentImportStatements(\n            sys,\n            update,\n            sourceFile,\n          );\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"RegisteredComponent\"],\n            importPath: \"@builder.io/sdk-react\",\n            isTypeOnly: true,\n          });\n\n          sourceFile = ensureArrayStatement(sys, sourceFile, {\n            variableName: \"CUSTOM_COMPONENTS\",\n            arrayType: \"RegisteredComponent\",\n          });\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered,\n          );\n        }\n      } else {\n        let statements = [...sourceFile.statements];\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          statements.push(\n            createNextRegisteredComponent(sys, update.addCmpToRegistry),\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          statements.splice(update.nodeIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          statements[update.nodeIndex] = updateNextRegisteredComponent(\n            sys,\n            statements[update.nodeIndex],\n            update.updateRegisteredCmp,\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"Builder\", \"builder\"],\n            importPath: \"@builder.io/react\",\n          });\n\n          sourceFile = ensureBuilderIsInitialized(\n            sys,\n            sourceFile,\n            typescriptEnabled,\n          );\n\n          sourceFile = ensureNextComponentImportStatements(\n            sys,\n            update,\n            sourceFile,\n          );\n\n          if (cmpInfo?.acceptsChildren) {\n            sourceFile = ensureImport(sys, sourceFile, {\n              namedImports: [\"withChildren\"],\n              importPath: \"@builder.io/react\",\n            });\n          }\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered,\n          );\n        }\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    if (sys.appDir) {\n      sourceFile = removeUseClientStringLiteral(sys, sourceFile);\n    }\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    if (sys.appDir) {\n      code = ensureUseClientStringLiteral(code);\n    }\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nfunction createNextComponentPropertyAssignmentSdkGen2(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName);\n\n  // app dir\n  if (sys.appDir) {\n    return sys.ts.factory.createPropertyAssignment(\"component\", identifier);\n  }\n\n  // not app dir\n  // use dynamic imports\n  return sys.ts.factory.createPropertyAssignment(\n    \"component\",\n    getDynamicComponentImport(sys, cmpInfo),\n  );\n}\n\nfunction createNextAcceptChildrenPropertyAssignmentSdkGen2(\n  sys: NextDevToolsSys,\n) {\n  return sys.ts.factory.createPropertyAssignment(\n    \"canHaveChildren\",\n    sys.ts.factory.createTrue(),\n  );\n}\n\nfunction createNextRegisteredComponentSdkGen2(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        createNextComponentPropertyAssignmentSdkGen2(sys, cmpInfo),\n        ...(cmpInfo.acceptsChildren\n          ? [createNextAcceptChildrenPropertyAssignmentSdkGen2(sys)]\n          : []),\n      ],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nasync function getNextRegisteredComponentSourceSdkGen2(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: ReactComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseNextRegisteredComponentSdkGen2(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n\nfunction ensureNextComponentImportStatements(\n  sys: NextDevToolsSys,\n  update: UpdateRegistry,\n  sourceFile: ts.SourceFile,\n) {\n  if (sys.appDir) {\n    // app dir\n    const regCmp = update.addCmpToRegistry || update.updateRegisteredCmp;\n    if (regCmp) {\n      const importPath = regCmp.externalImportPath\n        ? regCmp.externalImportPath\n        : getImportPath(sys, sys.registryPath, regCmp.filePath);\n      if (regCmp.exportType === \"default\") {\n        sourceFile = ensureImport(sys, sourceFile, {\n          defaultImport: regCmp.importName,\n          importPath,\n        });\n      } else if (regCmp.exportType === \"named\") {\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [regCmp.importName],\n          importPath,\n        });\n      }\n    }\n  } else {\n    // not app dir\n    sourceFile = ensureImport(sys, sourceFile, {\n      defaultImport: \"dynamic\",\n      importPath: \"next/dynamic\",\n    });\n  }\n\n  return sourceFile;\n}\n\nfunction getDynamicComponentImport(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  const importPath = cmpInfo.externalImportPath\n    ? cmpInfo.externalImportPath\n    : getImportPath(sys, sys.registryPath, cmpInfo.filePath);\n\n  const useArrowFunction = cmpInfo.exportName !== \"default\";\n  let arrowFunctionBody;\n\n  if (useArrowFunction) {\n    arrowFunctionBody = sys.ts.factory.createPropertyAccessExpression(\n      sys.ts.factory.createAwaitExpression(\n        sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(\"import\"),\n          undefined,\n          [sys.ts.factory.createStringLiteral(importPath)],\n        ),\n      ),\n      sys.ts.factory.createIdentifier(cmpInfo.exportName),\n    );\n  } else {\n    arrowFunctionBody = sys.ts.factory.createCallExpression(\n      sys.ts.factory.createIdentifier(\"import\"),\n      undefined,\n      [sys.ts.factory.createStringLiteral(importPath)],\n    );\n  }\n\n  const arrowFunction = sys.ts.factory.createArrowFunction(\n    useArrowFunction\n      ? [sys.ts.factory.createModifier(sys.ts.SyntaxKind.AsyncKeyword)]\n      : undefined,\n    undefined,\n    [],\n    undefined,\n    sys.ts.factory.createToken(sys.ts.SyntaxKind.EqualsGreaterThanToken),\n    arrowFunctionBody,\n  );\n\n  return sys.ts.factory.createCallExpression(\n    sys.ts.factory.createIdentifier(\"dynamic\"),\n    undefined,\n    [arrowFunction],\n  );\n}\n", "import { SDK_VERSIONS, type ModifiedFile } from \"../../../types\";\nimport type { NextDevToolsSys } from \".\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { NEXT_BUILDER_API_KEY_ENV } from \"./next-api-key\";\nimport { nextComponentRegistry } from \"./next-registry\";\n\n// https://www.builder.io/c/docs/quickstart\n\nexport async function nextEnsureBuilderSetup(sys: NextDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await nextEnsureCounterComponent(sys, modifiedFiles);\n  await nextEnsureBuilderRegistry(sys, modifiedFiles, counterCmpPath);\n\n  if (sys.appDir) {\n    sys.debug(`ensure builder setup for next.js app ${sys.appDir}`);\n    await nextAppEnsureBuilderSetup(sys, sys.appDir, modifiedFiles);\n  } else if (sys.pagesDir) {\n    sys.debug(`ensure builder setup for next.js pages ${sys.pagesDir}`);\n    await nextPagesEnsureBuilderSetup(sys, sys.pagesDir, modifiedFiles);\n  }\n\n  return modifiedFiles;\n}\n\nexport async function nextEnsureFigmaImportPageSetup(sys: NextDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  await nextEnsureBuilderRegistry(sys, modifiedFiles);\n\n  if (sys.appDir) {\n    sys.debug(`ensure figma-imports setup for next.js app ${sys.appDir}`);\n    await nextAppEnsureFigmaImportSetup(sys, sys.appDir, modifiedFiles);\n  } else if (sys.pagesDir) {\n    sys.debug(`ensure figma-imports setup for next.js pages ${sys.pagesDir}`);\n    await nextPagesEnsureFigmaImportSetup(sys, sys.pagesDir, modifiedFiles);\n  }\n\n  return modifiedFiles;\n}\n\nasync function nextAppEnsureFigmaImportSetup(\n  sys: NextDevToolsSys,\n  appDir: string,\n  modifiedFiles: ModifiedFile[],\n) {\n  const routeFileName = `page.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  const routePath = sys.join(appDir, `figma-imports`, routeFileName);\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextAppRoute({ sys, routePath, modelName: \"figma-imports\" }),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(sys.builderComponentPath))) {\n    const code = await sys.formatCode(\n      sys.builderComponentPath,\n      getNextAppBuilderComponent(sys),\n    );\n    await sys.writeFile(sys.builderComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.builderComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nasync function nextAppEnsureBuilderSetup(\n  sys: NextDevToolsSys,\n  appDir: string,\n  modifiedFiles: ModifiedFile[],\n) {\n  const routeFileName = `page.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  const routePath = sys.join(appDir, `[...page]`, routeFileName);\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextAppRoute({ sys, routePath, modelName: \"page\" }),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(sys.builderComponentPath))) {\n    const code = await sys.formatCode(\n      sys.builderComponentPath,\n      getNextAppBuilderComponent(sys),\n    );\n    await sys.writeFile(sys.builderComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.builderComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nfunction getNextAppBuilderComponent(sys: NextDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\n  \"use client\";\n  import { ${\n    ts ? \"BuilderContent, \" : \"\"\n  } isPreviewing, Content } from \"@builder.io/sdk-react\";\n  import DefaultErrorPage from \"next/error\";\n  import { CUSTOM_COMPONENTS } from ${JSON.stringify(\n    getImportPath(sys, sys.builderComponentPath, sys.registryPath),\n  )};\n  ${\n    ts\n      ? `\\ninterface BuilderPageProps {\n      content: BuilderContent | null;\n      model: string;\n      }`\n      : \"\"\n  }\n\n  // Builder Public API Key set in .env file\n  const builderApiKey = process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"};\n\n  export function RenderBuilderContent({ content, model }${\n    ts ? \": BuilderPageProps\" : \"\"\n  }) {\n    // Call the isPreviewing hook to determine if\n    // the page is being previewed in Builder\n    // If \"content\" has a value or the page is being previewed in Builder,\n    // render the BuilderComponent with the specified content and model props.\n    if (content || isPreviewing()) {\n      return <Content\n        content={content}\n        apiKey={builderApiKey}\n        model={model}\n        customComponents={CUSTOM_COMPONENTS}\n      />;\n    }\n    // If the \"content\" is falsy and the page is\n    // not being previewed in Builder, render the\n    // DefaultErrorPage with a 404.\n    return <DefaultErrorPage statusCode={404} />;\n  }\n  `.trimStart();\n  }\n\n  return `\n\"use client\";\n${ts ? 'import { ComponentProps } from \"react\";' : \"\"}\nimport { BuilderComponent, useIsPreviewing } from \"@builder.io/react\";\nimport { ${ts ? \"BuilderContent, \" : \"\"}builder } from '@builder.io/sdk';\nimport DefaultErrorPage from \"next/error\";\nimport ${JSON.stringify(\n    getImportPath(sys, sys.builderComponentPath, sys.registryPath),\n  )};\n${\n  ts ? `\\ntype BuilderPageProps = ComponentProps<typeof BuilderComponent>;` : \"\"\n}\n\n// Builder Public API Key set in .env file\nbuilder.init(process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"});\n\nexport function RenderBuilderContent({ content, model }${\n    ts ? \": BuilderPageProps\" : \"\"\n  }) {\n  // Call the useIsPreviewing hook to determine if\n  // the page is being previewed in Builder\n  const isPreviewing = useIsPreviewing();\n  // If \"content\" has a value or the page is being previewed in Builder,\n  // render the BuilderComponent with the specified content and model props.\n  if (content || isPreviewing) {\n    return <BuilderComponent content={content} model={model} />;\n  }\n  // If the \"content\" is falsy and the page is\n  // not being previewed in Builder, render the\n  // DefaultErrorPage with a 404.\n  return <DefaultErrorPage statusCode={404} />;\n}\n`.trimStart();\n}\n\nfunction generatePagePropsType(sys: NextDevToolsSys) {\n  if (sys.features.asyncParams) {\n    return `\\ninterface PageProps {\n      params: Promise<{\n        page: string[];\n      }>;\n    }`;\n  } else {\n    return `\\ninterface PageProps {\n      params: {\n        page: string[];\n      };\n    }`;\n  }\n}\n\nfunction getNextAppRoute({\n  sys,\n  routePath,\n  modelName,\n}: {\n  sys: NextDevToolsSys;\n  routePath: string;\n  modelName: \"page\" | \"figma-imports\";\n}) {\n  const ts = sys.typescriptEnabled;\n  const buildContentImport = getImportPath(\n    sys,\n    routePath,\n    sys.builderComponentPath,\n  );\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\nimport { fetchOneEntry } from \"@builder.io/sdk-react\";\nimport { RenderBuilderContent } from ${JSON.stringify(buildContentImport)};\n\n// Builder Public API Key set in .env file\nconst PUBLIC_API_KEY = process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"};\n\n${ts ? generatePagePropsType(sys) : \"\"}\n\nexport default async function Page(props${ts ? `: PageProps` : ``}) {\n  const builderModelName = \"${modelName}\";\n\n  // Use the page path specified in the URL to fetch the content\n  const urlPath = \"/\" + (${\n    sys.features.asyncParams ? \"(await props?.params)\" : \"props?.params\"\n  }?.page?.join(\"/\") || \"\");\n\n  const content = await fetchOneEntry({\n   // Get the page content from Builder with the specified options\n    apiKey: PUBLIC_API_KEY,\n    model: builderModelName,\n    userAttributes: { urlPath },\n  });\n\n  return (\n    <>\n      {/* Render the Builder page */}\n      <RenderBuilderContent content={content} model={builderModelName} />\n    </>\n  );\n}\n`.trimStart();\n  }\n\n  return `\nimport { builder } from \"@builder.io/sdk\";\nimport { RenderBuilderContent } from ${JSON.stringify(buildContentImport)};\n\n// Builder Public API Key set in .env file\nbuilder.init(process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"});\n${ts ? generatePagePropsType(sys) : \"\"}\n\nexport default async function Page(props${ts ? `: PageProps` : ``}) {\n  const builderModelName = \"${modelName}\";\n\n  const content = await builder\n    // Get the page content from Builder with the specified options\n    .get(builderModelName, {\n      userAttributes: {\n        // Use the page path specified in the URL to fetch the content\n        urlPath: \"/\" + (${\n          sys.features.asyncParams ? \"(await props?.params)\" : \"props?.params\"\n        }?.page?.join(\"/\") || \"\"),\n      },\n    })\n    // Convert the result to a promise\n    .toPromise();\n\n  return (\n    <>\n      {/* Render the Builder page */}\n      <RenderBuilderContent content={content} model={builderModelName} />\n    </>\n  );\n}\n`.trimStart();\n}\n\nasync function nextPagesEnsureBuilderSetup(\n  sys: NextDevToolsSys,\n  pagesDir: string,\n  modifiedFiles: ModifiedFile[],\n) {\n  const routeFileName = `[...page].${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  const routePath = sys.join(pagesDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextPagesRoute({ sys, routePath, modelName: \"page\" }),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nasync function nextPagesEnsureFigmaImportSetup(\n  sys: NextDevToolsSys,\n  pagesDir: string,\n  modifiedFiles: ModifiedFile[],\n) {\n  const routeFileName = `figma-imports.${\n    sys.typescriptEnabled ? \"tsx\" : \"jsx\"\n  }`;\n  const routePath = sys.join(pagesDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextPagesRoute({ sys, routePath, modelName: \"figma-imports\" }),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nfunction getNextPagesRoute({\n  sys,\n  routePath,\n  modelName,\n}: {\n  sys: NextDevToolsSys;\n  routePath: string;\n  modelName: \"page\" | \"figma-imports\";\n}) {\n  const ts = sys.typescriptEnabled;\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\nimport React from \"react\";\nimport { useRouter } from \"next/router\";\n${ts ? 'import type { BuilderContent } from \"@builder.io/sdk-react\";' : \"\"}\nimport {\n  Content,\n  fetchEntries,\n  fetchOneEntry,\n  isPreviewing,\n} from \"@builder.io/sdk-react\";\nimport DefaultErrorPage from \"next/error\";\nimport Head from \"next/head\";\n${ts ? 'import { GetStaticProps } from \"next\";' : \"\"}\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(\n      getImportPath(sys, sys.builderComponentPath, sys.registryPath),\n    )};\n\nconst BUILDER_API_KEY = process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"};\n\n// Define a function that fetches the Builder\n// content for a given page\nexport const getStaticProps${\n      ts ? \": GetStaticProps\" : \"\"\n    } = async ({ params }) => {\n  ${sys.features.asyncParams ? \"await params;\" : \"\"}\n  const urlPath =\n    \"/\" +\n    (Array.isArray(params?.page) ? params.page.join(\"/\") : params?.page || \"\");\n\n  // Fetch the builder content for the given page\n  const page = await fetchOneEntry({\n    apiKey: BUILDER_API_KEY,\n    model: \"${modelName}\",\n    userAttributes: { urlPath },\n  });\n\n  return {\n    // Return the page content as props\n    props: { page },\n    // Revalidate the content every 5 seconds\n    revalidate: 5,\n  };\n};\n\n${\n  modelName === \"page\"\n    ? `\n// Define a function that generates the\n// static paths for all pages in Builder\nexport async function getStaticPaths() {\n  // Get a list of all pages in Builder\n  const pages = await fetchEntries({\n    apiKey: BUILDER_API_KEY,\n    model: \"page\",\n    // We only need the URL field\n    fields: \"data.url\",\n    options: { noTargeting: true },\n  });\n  // Generate the static paths for all pages in Builder\n  return {\n    paths: pages.map((page) => \\`\\${page.data?.url}\\`),\n    fallback: \"blocking\",\n  };\n}\n`\n    : \"\"\n}\n\n// Define the Page component\nexport default function Page(props${\n      ts ? \": { page: BuilderContent | null }\" : \"\"\n    }) {\n  const router = useRouter();\n  const canShowContent = props.page || isPreviewing(router.asPath);\n\n  // If the page content is not available\n  // and not in preview/editing mode, show a 404 error page\n  if (!canShowContent) {\n    return <DefaultErrorPage statusCode={404} />;\n  }\n\n  // If the page content is available, render\n  // the BuilderComponent with the page content\n  return (\n    <>\n      <Head>\n        <title>{props.page?.data?.title}</title>\n      </Head>\n      {/* Render the Builder page */}\n      <Content\n        model=\"${modelName}\"\n        content={props.page}\n        apiKey={BUILDER_API_KEY}\n        customComponents={CUSTOM_COMPONENTS}\n      />\n    </>\n  );\n}\n\n    `;\n  }\n\n  return `\nimport React from \"react\";\nimport { useRouter } from \"next/router\";\nimport { BuilderComponent, builder, useIsPreviewing } from \"@builder.io/react\";\nimport DefaultErrorPage from \"next/error\";\nimport Head from \"next/head\";${\n    ts ? '\\nimport { BuilderContent } from \"@builder.io/sdk\";' : \"\"\n  }${ts ? '\\nimport { GetStaticProps } from \"next\";' : \"\"}\nimport ${JSON.stringify(getImportPath(sys, routePath, sys.registryPath))};\n\nbuilder.init(process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"});\n\n// Define a function that fetches the Builder\n// content for a given page\nexport const getStaticProps${\n    ts ? \": GetStaticProps\" : \"\"\n  } = async ({ params }) => {\n  ${sys.features.asyncParams ? \"await params;\" : \"\"}\n  // Fetch the builder content for the given page\n  const page = await builder\n    .get(\"${modelName}\", {\n      userAttributes: {\n        urlPath: \"/\" + ((params?.page${\n          ts ? ` as string[]` : ``\n        })?.join(\"/\") || \"\"),\n      },\n    })\n    .toPromise();\n\n  // Return the page content as props\n  return {\n    props: {\n      page: page || null,\n    },\n    // Revalidate the content every 5 seconds\n    revalidate: 5,\n  };\n};\n\n${\n  modelName === \"page\"\n    ? `// Define a function that generates the\n// static paths for all pages in Builder\nexport async function getStaticPaths() {\n  // Get a list of all pages in Builder\n  const pages = await builder.getAll(\"page\", {\n    // We only need the URL field\n    fields: \"data.url\",\n    options: { noTargeting: true },\n  });\n\n  // Generate the static paths for all pages in Builder\n  return {\n    paths: pages.map((page) => String(page.data?.url)).filter(url => url !== '/'),\n    fallback: 'blocking',\n  };\n}`\n    : ``\n}\n\n// Define the Page component\nexport default function Page({ page }${\n    ts ? \": { page: BuilderContent | null }\" : \"\"\n  }) {\n  const router = useRouter();\n  const isPreviewing = useIsPreviewing();\n\n  // If the page content is not available\n  // and not in preview mode, show a 404 error page\n  if (!page && !isPreviewing) {\n    return <DefaultErrorPage statusCode={404} />;\n  }\n\n  // If the page content is available, render\n  // the BuilderComponent with the page content\n  return (\n    <>\n      <Head>\n        <title>{page?.data?.title}</title>\n      </Head>\n      {/* Render the Builder page */}\n      <BuilderComponent model=\"${modelName}\" content={page || undefined} />\n    </>\n  );\n}\n`.trimStart();\n}\n\nasync function nextEnsureCounterComponent(\n  sys: NextDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"tsx\" : \"jsx\";\n\n  const counterCmpDir = sys.join(sys.componentsDir, `Counter`);\n  const counterCmpPath = sys.join(counterCmpDir, `Counter.${ext}`);\n  const counterStylesPath = sys.join(counterCmpDir, `styles.module.css`);\n\n  const { component, styles } = getCounterComponent(sys);\n\n  if (!(await sys.exists(counterCmpPath))) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(counterStylesPath))) {\n    await sys.writeFile(counterStylesPath, styles);\n    modifiedFiles.push({\n      filePath: counterStylesPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: NextDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n  const component = `\n\"use client\"\nimport React, { useState } from \"react\";\nimport styles from \"./styles.module.css\";\n${\n  ts\n    ? `\ninterface CounterProps {\n  initialCount?: number;\n}`\n    : ``\n}\n\nfunction Counter({ initialCount = 99 }${ts ? `: CounterProps` : ``}) {\n  const [count, setCount] = useState(initialCount);\n\n  const increment = () => {\n    setCount((prevCount) => prevCount + 1);\n  };\n\n  const decrement = () => {\n    setCount((prevCount) => prevCount - 1);\n  };\n\n  return (\n    <div className={styles.counter}>\n      <button className={styles.btn} onClick={decrement}>\n        -\n      </button>\n      <span className={styles.count}>{count}</span>\n      <button className={styles.btn} onClick={increment}>\n        +\n      </button>\n    </div>\n  );\n}\n\nexport default Counter;\n`.trimStart();\n\n  const styles = `\n.counter {\n  margin: 32px auto;\n  display: flex;\n  width: 100%;\n  max-width: 190px;\n}\n\n.btn {\n  width: 42px;\n  font-size: 32px;\n  font-weight: bold;\n  background-color: #1c6bd1;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  line-height: 1.4;\n}\n\n.btn:hover {\n  opacity: 0.8;\n}\n\n.count {\n  flex: 1;\n  font-size: 42px;\n  text-align: center;\n}\n`.trimStart();\n\n  return { component, styles };\n}\n\nasync function nextEnsureBuilderRegistry(\n  sys: NextDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n  counterCmpPath?: string,\n) {\n  if (!(await sys.exists(sys.registryPath))) {\n    if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n      const code = getNextBuilderRegistryReactGen2(sys);\n      await sys.writeFile(sys.registryPath, code);\n      // else it is gen1\n    } else {\n      await sys.writeFile(sys.registryPath, \"\");\n    }\n\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!counterCmpPath) {\n    return;\n  }\n\n  const registry = await nextComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false,\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  // Register the counter component\n  await nextComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false,\n  );\n}\n\nfunction getNextBuilderRegistryReactGen2(sys: NextDevToolsSys) {\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from \"@builder.io/sdk-react\";\n\nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n", "import { SDK_VERSIONS, type DevToolsSys } from \"../../../types\";\nimport { findPackageJson } from \"../../../common/fs\";\n\nexport async function detectReactSdkVersion(sys: DevToolsSys) {\n  const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n  if (pkgJson && typeof pkgJson === \"object\") {\n    const depNames = new Set(\n      Object.keys({\n        ...pkgJson.dependencies,\n        ...pkgJson.devDependencies,\n      }),\n    );\n\n    if (depNames.has(\"@builder.io/sdk-react\")) {\n      return SDK_VERSIONS.gen2;\n    }\n    if (depNames.has(\"@builder.io/react\")) {\n      return SDK_VERSIONS.gen1;\n    }\n  }\n\n  return null;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getNextApiKey, setNextApiKey } from \"./next-api-key\";\nimport { nextComponentRegistry } from \"./next-registry\";\nimport {\n  nextEnsureBuilderSetup,\n  nextEnsureFigmaImportPageSetup,\n} from \"./next-ensure-builder-setup\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { detectReactSdkVersion } from \"../react/react-builder-sdk-setup\";\nimport { findBuilderRegistry, hasTsconfig } from \"../../../common/fs\";\n\nexport async function createNextDevTools(sys: CreateDevToolsOptions) {\n  const nextSys = await createNextDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      return {\n        templateContentId: \"3de2f13211234071a4b19a17b4fbc5a7\",\n        pathname: \"/builder-demo\",\n        title: \"Builder + Next.js Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return nextEnsureBuilderSetup(nextSys);\n    },\n    ensureFigmaImportPage: () => {\n      return nextEnsureFigmaImportPageSetup(nextSys);\n    },\n\n    getRegistryPath: () => {\n      return nextSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: (pkgName: string) => {\n      nextSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getNextApiKey(nextSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setNextApiKey(nextSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@builder.io/dev-tools\" },\n          { name: \"@builder.io/sdk-react\" },\n        ];\n      }\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/react\" },\n        { name: \"@builder.io/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getBuilderCache(nextSys),\n    setCache: (cache) => setBuilderCache(nextSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createNextDevToolsSys(sys: DevToolsSys) {\n  // https://nextjs.org/docs/pages/building-your-application/configuring/src-directory\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const nextConfigPath = await getNextConfigPath(sys);\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const nextFramework = sys.getFrameworks().find((f) => f.name === \"next\");\n  const features = {\n    asyncParams:\n      nextFramework?.version?.major !== undefined &&\n      nextFramework.version.major >= 15,\n  };\n\n  const externalPackages: Record<string, string> = {};\n  const nextSys: NextDevToolsSys = {\n    ...sys,\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[sys.join(rootDir, pkgName, \"index.ts\")] =\n        `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    appDir: null,\n    pagesDir: null,\n    srcDir: null,\n    builderComponentPath: \"\",\n    componentsDir: \"\",\n    registryPath: \"\",\n    nextConfigPath,\n    typescriptEnabled,\n    features,\n  };\n\n  if (sys.sdkVersion) {\n    nextSys.sdkVersion = sys.sdkVersion;\n  } else {\n    nextSys.sdkVersion = await detectReactSdkVersion(nextSys);\n  }\n\n  if (await sys.exists(srcDir)) {\n    // src dir\n    nextSys.srcDir = srcDir;\n    nextSys.componentsDir = sys.join(srcDir, \"components\");\n\n    const srcAppDir = sys.join(srcDir, \"app\");\n    if (await sys.exists(srcAppDir)) {\n      nextSys.appDir = srcAppDir;\n    }\n\n    const srcPagesDir = sys.join(srcDir, \"pages\");\n    if (await sys.exists(srcPagesDir)) {\n      nextSys.pagesDir = srcPagesDir;\n    }\n\n    nextSys.registryPath = await findBuilderRegistry(sys, srcDir);\n  } else {\n    // no src dir\n    nextSys.componentsDir = sys.join(rootDir, \"components\");\n    nextSys.registryPath = await findBuilderRegistry(sys, rootDir);\n  }\n\n  nextSys.builderComponentPath = sys.join(\n    nextSys.componentsDir,\n    `builder.${typescriptEnabled ? \"tsx\" : \"jsx\"}`,\n  );\n\n  if (!nextSys.appDir) {\n    const appDir = sys.join(rootDir, \"app\");\n    if (await sys.exists(appDir)) {\n      nextSys.appDir = appDir;\n    }\n  }\n\n  if (!nextSys.pagesDir) {\n    const pagesDir = sys.join(rootDir, \"pages\");\n    if (await sys.exists(pagesDir)) {\n      nextSys.pagesDir = pagesDir;\n    }\n  }\n\n  if (!nextSys.appDir && !nextSys.pagesDir && !sys.ignoreMissingConfig) {\n    throw new Error(\n      `Could not find Next.js \"app\" or \"pages\" directory. Searched in \"${rootDir}\".`,\n    );\n  }\n\n  return nextSys;\n}\n\nasync function getNextConfigPath(sys: DevToolsSys) {\n  const nextConfigTsPath = sys.join(sys.getAppRootDir(), \"next.config.ts\");\n  if (await sys.exists(nextConfigTsPath)) {\n    return nextConfigTsPath;\n  }\n\n  const nextConfigMjsPath = sys.join(sys.getAppRootDir(), \"next.config.mjs\");\n  if (await sys.exists(nextConfigMjsPath)) {\n    return nextConfigMjsPath;\n  }\n\n  const nextConfigJsPath = sys.join(sys.getAppRootDir(), \"next.config.js\");\n  if (await sys.exists(nextConfigJsPath)) {\n    return nextConfigJsPath;\n  }\n\n  throw new Error(\n    `Could not find Next.js config file. Searched for \"next.config.ts\", \"next.config.mjs\" and \"next.config.js\" in \"${sys.getAppRootDir()}\".`,\n  );\n}\n\n/**\n * Any Next.js-specific features that are enabled. This can be used to adjust how\n * Dev Tools integrates with Next.js apps based on the installed version of\n * Next.js.\n */\ninterface NextDevToolsFeatures {\n  /**\n   * If `true`, Next.js params will be awaited before accessed.\n   * Only applies to Next.js 15+\n   */\n  asyncParams: boolean;\n}\n\nexport interface NextDevToolsSys extends DevToolsSys {\n  appDir: string | null;\n  pagesDir: string | null;\n  srcDir: string | null;\n  componentsDir: string;\n  builderComponentPath: string;\n  registryPath: string;\n  nextConfigPath: string;\n  typescriptEnabled: boolean;\n  addExternalPackage: (pkgName: string) => void;\n  features: NextDevToolsFeatures;\n}\n", "import type { EnvInfo } from \"../../../types\";\nimport type { QwikDevToolsSys } from \".\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\n\nexport async function getQwikApiKey(sys: QwikDevToolsSys) {\n  const dotEnvFileNames = [\".env\"];\n\n  const env = await getDotEnvValue(\n    sys,\n    dotEnvFileNames,\n    QWIK_BUILDER_API_KEY_ENV,\n  );\n  return env;\n}\n\nexport async function setQwikApiKey(\n  sys: QwikDevToolsSys,\n  publicApiKey: string,\n) {\n  setBuilderPublicApiKeyEnvVar(publicApiKey);\n\n  const env = await getQwikApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nfunction setBuilderPublicApiKeyEnvVar(publicApiKey: string) {\n  if (typeof process !== \"undefined\") {\n    process.env[QWIK_BUILDER_API_KEY_ENV] = publicApiKey;\n  }\n}\n\nconst QWIK_BUILDER_API_KEY_ENV = `PUBLIC_BUILDER_API_KEY`;\n", "export function ensureComments(\n  code: string,\n  commentText: string[],\n  lineTextAfterComments: string,\n) {\n  if (lineTextAfterComments.length === 0) {\n    return code;\n  }\n\n  const lines = code.split(\"\\n\");\n  const lineIndex = lines.findIndex((l) => l.includes(lineTextAfterComments));\n  if (lineIndex === -1) {\n    return code;\n  }\n\n  const hasComments = lines.some((l) => l.includes(commentText[0]));\n  if (hasComments) {\n    return code;\n  }\n\n  const commentLines = [\n    `/**`,\n    ...commentText.map((c) => ` * ${c.trim()}`),\n    ` */`,\n  ];\n  lines.splice(lineIndex, 0, ...commentLines);\n\n  return lines.join(\"\\n\");\n}\n", "import type ts from \"typescript\";\nimport type { QwikDevToolsSys } from \"./index\";\nimport type { ComponentInfo } from \"../../../types\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentDisplayNameFromFilePath,\n  getComponentImportNameFilePath,\n  getDisplayFilePath,\n  getComponentImportPath,\n} from \"../../../common/utils\";\nimport {\n  getExportedStatements,\n  type ExportedStatement,\n} from \"../../../common/ast/exported-statements\";\n\nexport async function getQwikComponentsFromDir(\n  sys: QwikDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: QwikComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n      if (fileName.startsWith(\".\")) {\n        return;\n      }\n      if (QWIK_SKIP.has(fileName)) {\n        return;\n      }\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (filePath === sys.registryPath) {\n        return;\n      }\n      const fileCmps = await getQwikComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps;\n}\n\nexport async function getQwikComponentsFromPath(\n  sys: QwikDevToolsSys,\n  filePath: string,\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".tsx\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      return getQwikComponentsFromCode(sys, filePath, code);\n    }\n  }\n  return null;\n}\n\nexport function getQwikComponentsFromCode(\n  sys: QwikDevToolsSys,\n  filePath: string,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return getQwikComponentsFromSourceFile(sys, null, filePath, sourceFile);\n}\n\nexport async function getQwikComponentsFromSourceFile(\n  sys: QwikDevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile,\n) {\n  filePath = sys.normalize(filePath);\n  const fileCmps: QwikComponentSource[] = [];\n\n  const exports = getExportedStatements(sys, sourceFile);\n\n  await Promise.all(\n    exports.map(async (exp) => {\n      const sCmp = await getQwikComponentSource(\n        sys,\n        typeChecker,\n        filePath,\n        exp,\n      );\n      if (sCmp) {\n        fileCmps.push(sCmp);\n      }\n    }),\n  );\n\n  return fileCmps;\n}\n\nasync function getQwikComponentSource(\n  sys: QwikDevToolsSys,\n  _typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  exp: ExportedStatement,\n): Promise<QwikComponentSource | null> {\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  if (sys.ts.isVariableStatement(exp.node)) {\n    for (const declaration of exp.node.declarationList.declarations) {\n      const cmpExp = getQwikComponentExpression(sys, declaration.initializer);\n      if (cmpExp && sys.ts.isIdentifier(declaration.name)) {\n        const cmpName = declaration.name.text;\n        return {\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, cmpName),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: getComponentDisplayName(cmpName),\n            inputs: [],\n            exportName: exp.isDefaultExport ? \"default\" : cmpName,\n            exportType: exp.isDefaultExport ? \"default\" : \"named\",\n            importName: cmpName,\n            filePath,\n            relFilePath,\n            importPath,\n            framework: \"qwik\",\n          },\n          node: cmpExp,\n        };\n      }\n    }\n  } else if (sys.ts.isCallExpression(exp.node)) {\n    const cmpExp = getQwikComponentExpression(sys, exp.node);\n    if (cmpExp) {\n      return {\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, \"default\"),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: getComponentDisplayNameFromFilePath(sys, filePath),\n          inputs: [],\n          exportName: \"default\",\n          exportType: \"default\",\n          importName: getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath,\n          framework: \"qwik\",\n        },\n        node: cmpExp,\n      };\n    }\n  }\n  return null;\n}\n\nfunction getQwikComponentExpression(\n  sys: QwikDevToolsSys,\n  exp: ts.Expression | undefined,\n) {\n  if (exp && sys.ts.isCallExpression(exp)) {\n    if (\n      sys.ts.isIdentifier(exp.expression) &&\n      exp.expression.text === \"component$\" &&\n      exp.arguments.length > 0\n    ) {\n      const arg = exp.arguments[0];\n      if (sys.ts.isArrowFunction(arg) || sys.ts.isFunctionExpression(arg)) {\n        const srcNode: QwikComponentSourceNode = {\n          callExpression: exp,\n          fnNode: arg,\n        };\n        return srcNode;\n      }\n    }\n  }\n  return null;\n}\n\nexport interface QwikComponentSourceNode {\n  callExpression: ts.CallExpression;\n  fnNode: ts.Node;\n}\n\nexport interface QwikComponentSource {\n  cmpInfo: ComponentInfo;\n  node: QwikComponentSourceNode;\n}\n\nconst QWIK_SKIP = new Set([\n  \"node_modules\",\n  \"layout.tsx\",\n  \"404.tsx\",\n  \"router-head.tsx\",\n]);\n", "import type { QwikDevToolsSys } from \".\";\nimport {\n  getQwikComponentsFromSourceFile,\n  type QwikComponentSource,\n} from \"./qwik-components\";\nimport { getTypeChecker } from \"../../../common/typescript\";\nimport { parseComponentSourcePropsFromNode } from \"../../../common/ast/component-input-types\";\n\nexport async function parseQwikComponentSourceInputs(\n  sys: QwikDevToolsSys,\n  srcCmp: QwikComponentSource,\n) {\n  const fnNode = srcCmp.node.fnNode;\n\n  if (sys.ts.isArrowFunction(fnNode) || sys.ts.isFunctionExpression(fnNode)) {\n    const fnParams = fnNode.parameters;\n    if (fnParams.length > 0) {\n      const { sourceFile, typeChecker } = await getTypeChecker(\n        sys,\n        srcCmp.cmpInfo.filePath,\n        null,\n      );\n      const typedSrcCmps = await getQwikComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        srcCmp.cmpInfo.filePath,\n        sourceFile,\n      );\n      const typedSrcCmp = typedSrcCmps.find(\n        (t) => t.cmpInfo.id === srcCmp.cmpInfo.id,\n      );\n      if (!typedSrcCmp) {\n        throw new Error(\n          `createComponentInputs() Could not find component ${srcCmp.cmpInfo.name} in ${srcCmp.cmpInfo.filePath}`,\n        );\n      }\n      return parseComponentSourcePropsFromNode(sys, typeChecker, fnNode);\n    }\n  }\n  return [];\n}\n", "import type { ModifiedFile } from \"../../../types\";\nimport type { QwikDevToolsSys } from \".\";\n\nexport async function qwikEnsureBuilderSetup(sys: QwikDevToolsSys) {\n  return qwikEnsureBuilderRegistry(sys);\n}\n\nexport async function qwikEnsureBuilderRegistry(sys: QwikDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, DEFAULT_REGISTRY);\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nconst DEFAULT_REGISTRY = `import type { RegisteredComponent } from \"@builder.io/sdk-qwik\";\n\nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];\n`;\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { QwikDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentImportPath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getQwikComponentsFromPath } from \"./qwik-components\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport { parseRegisteredComponentInfo } from \"../../../common/ast/component-info\";\nimport { qwikEnsureBuilderRegistry } from \"./qwik-ensure-builder-setup\";\n\nexport async function parseQwikRegistryFromFile(sys: QwikDevToolsSys) {\n  await qwikEnsureBuilderRegistry(sys);\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseQwikRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseQwikRegistryFromCode(\n  sys: QwikDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return parseRegistryFromSource(sys, sourceFile);\n}\n\nexport async function parseRegistryFromSource(\n  sys: QwikDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseQwikRegisteredComponent(sys, sourceFile, cmpElm);\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseQwikRegisteredComponent(\n  sys: QwikDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    framework: \"qwik\",\n  };\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\" && sys.ts.isIdentifier(p.initializer)) {\n      const identifierName = p.initializer.text;\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n      cmp.importPath = getComponentImportPath(sys, i.filePath);\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      const cmps = await getQwikComponentsFromPath(sys, i.filePath);\n      if (cmps && cmps.length > 0) {\n        if (cmps.length === 1) {\n          cmp.exportName = cmps[0].cmpInfo.exportName;\n        } else {\n          const namedCmp = cmps.find(\n            (c) => c.cmpInfo.exportName === identifierName,\n          );\n          if (namedCmp) {\n            cmp.exportName = namedCmp.cmpInfo.exportName;\n          }\n        }\n      }\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(sys, cmp.filePath, cmp.exportName);\n  }\n\n  return cmp;\n}\n", "import type { DevToolsSys } from \"../../index\";\nimport { createTsProgram } from \"../../../common/typescript\";\n\nexport async function createQwikTsProgram(sys: DevToolsSys) {\n  const entryPaths = new Set<string>();\n\n  const recursive = async (childDir: string) => {\n    const itemNames = await sys.readdir(childDir);\n\n    await Promise.all(\n      itemNames.map(async (itemName) => {\n        if (itemName.startsWith(\".\") || itemName === \"node_modules\") {\n          return;\n        }\n\n        const itemPath = sys.join(childDir, itemName);\n        const ext = sys.extname(itemName).toLowerCase();\n        if (ext === \".tsx\" || ext === \".ts\") {\n          entryPaths.add(itemPath);\n          return;\n        }\n\n        const stat = await sys.stat(itemPath);\n        if (stat.isDirectory()) {\n          await recursive(itemPath);\n        }\n      }),\n    );\n  };\n\n  await recursive(sys.getAppRootDir());\n\n  const tsProgram = await createTsProgram(sys, [...entryPaths]);\n  return tsProgram;\n}\n", "import type ts from \"typescript\";\nimport type {\n  ComponentInfo,\n  ComponentRegistry,\n  SetComponentInfoOptions,\n  SetComponentInputOptions,\n} from \"../../../types\";\nimport type { QwikDevToolsSys } from \".\";\nimport type { QwikComponentSource } from \"./qwik-components\";\nimport { ensureComments } from \"../../../common/ast/ensure-comments\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { getDisplayFilePath, getImportPath } from \"../../../common/utils\";\nimport { getQwikComponentsFromDir } from \"./qwik-components\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport { parseQwikComponentSourceInputs } from \"./qwik-component-source-inputs\";\nimport { parseQwikRegisteredComponent } from \"./qwik-registry-parse\";\nimport { parseQwikRegistryFromFile } from \"./qwik-registry-parse\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport { createQwikTsProgram } from \"./qwik-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getQwikApiKey } from \"./qwik-api-key\";\n\nexport async function qwikComponentRegistry(\n  sys: QwikDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createQwikTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, qwikApiKey] = await Promise.all([\n    getQwikComponentsFromDir(sys, tsProgram),\n    parseQwikRegistryFromFile(sys),\n    getQwikApiKey(sys),\n  ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  const registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: qwikApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    // TODO!!!\n    return cmpRegistry;\n  }\n\n  if (cmpId != null) {\n    const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n    if (!srcCmp) {\n      throw new Error(`Component ${cmpId} not found`);\n    }\n\n    let sourceFile = parsedRegistry.sourceFile;\n\n    const cmpInfo = cmpRegistry.components.find((c) => c.id === cmpId)!;\n    const sourceInputs = await parseQwikComponentSourceInputs(sys, srcCmp);\n    mergeComponentInputs(cmpInfo, sourceInputs);\n\n    // TODO!!\n    // allow for multiple cmp ids\n    cmpId = Array.isArray(cmpId) ? cmpId[0] : cmpId;\n\n    const update = updateRegistry(\n      cmpId,\n      sourceComponents,\n      registeredComponents,\n      registerCmp,\n      unregisterCmp,\n      setCmpInfo,\n      setCmpInput,\n    );\n\n    const {\n      elements,\n      elmIndex,\n      statementIndex,\n      statement,\n      variableDeclaration,\n    } = await getQwikRegisteredComponentSource(sys, sourceFile, srcCmp);\n\n    let madeChanges = false;\n\n    if (update.addCmpToRegistry) {\n      // not already registered, append it\n      elements.push(\n        createQwikRegisteredComponent(sys, update.addCmpToRegistry),\n      );\n      madeChanges = true;\n    } else if (update.removeCmpFromRegistry) {\n      // already registered, remove it\n      elements.splice(elmIndex, 1);\n      madeChanges = true;\n    } else if (update.updateRegisteredCmp) {\n      // already registered, update component info\n      elements[elmIndex] = updateComponentObjLiteralInfoProperties(\n        sys,\n        elements[elmIndex],\n        update.updateRegisteredCmp,\n      );\n      madeChanges = true;\n    }\n\n    if (madeChanges && writeRegistry) {\n      const statements = [...sourceFile.statements];\n      statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n        statement,\n        statement.modifiers,\n        sys.ts.factory.updateVariableDeclarationList(\n          statement.declarationList,\n          [\n            sys.ts.factory.updateVariableDeclaration(\n              variableDeclaration,\n              variableDeclaration.name,\n              variableDeclaration.exclamationToken,\n              variableDeclaration.type,\n              sys.ts.factory.createArrayLiteralExpression(\n                normalizeRegisteredArrayElements(sys, elements),\n              ),\n            ),\n          ],\n        ),\n      );\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      if (cmpInfo.exportType === \"named\") {\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [cmpInfo.importName],\n          importPath: getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n        });\n      } else {\n        sourceFile = ensureImport(sys, sourceFile, {\n          defaultImport: cmpInfo.importName,\n          importPath: getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n        });\n      }\n\n      sourceFile = ensureImport(sys, sourceFile, {\n        namedImports: [\"RegisteredComponent\"],\n        importPath: \"@builder.io/sdk-qwik\",\n        isTypeOnly: true,\n      });\n\n      sourceFile = ensureArrayStatement(sys, sourceFile, {\n        variableName: \"CUSTOM_COMPONENTS\",\n        arrayType: \"RegisteredComponent\",\n      });\n\n      sourceFile = removeUnusedImports(sys, sourceFile);\n      sourceFile = normalizeImports(sys, sourceFile);\n\n      let code = sourceToCode(sys, sourceFile);\n      code = normalizeLineBreaks(code);\n      code = ensureComments(code, COMMENTS, \"CUSTOM_COMPONENTS\");\n      code = await sys.formatCode(sys.registryPath, code);\n      await sys.writeFile(sys.registryPath, code);\n    }\n\n    cmpRegistry.components = update.components;\n  }\n\n  return cmpRegistry;\n}\n\nfunction createQwikRegisteredComponent(\n  sys: QwikDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        sys.ts.factory.createPropertyAssignment(\n          \"component\",\n          sys.ts.factory.createIdentifier(cmpInfo.importName),\n        ),\n      ],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nasync function getQwikRegisteredComponentSource(\n  sys: QwikDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: QwikComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseQwikRegisteredComponent(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n\nconst COMMENTS = [\n  `This array is used to integrate custom components within Builder.`,\n  `https://www.builder.io/c/docs/custom-components-intro`,\n  ``,\n  `These components will be found the \"Custom Components\"`,\n  `section of Builder's visual editor.`,\n  `You can also turn on \"components only mode\" to limit`,\n  `editing to only these components.`,\n  `https://www.builder.io/c/docs/guides/components-only-mode`,\n];\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getQwikApiKey, setQwikApiKey } from \"./qwik-api-key\";\nimport { qwikComponentRegistry } from \"./qwik-registry\";\nimport { qwikEnsureBuilderSetup } from \"./qwik-ensure-builder-setup\";\nimport { findBuilderRegistry, recursiveFindDir } from \"../../../common/fs\";\n\nexport async function createQwikCityDevTools(sys: CreateDevToolsOptions) {\n  const qwikSys = await createQwikDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      return {\n        templateContentId: \"dc70f1d979ad416d8fd357137eb9ddfb\",\n        pathname: \"/\",\n        title: \"Builder + Qwik Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return qwikEnsureBuilderSetup(qwikSys);\n    },\n    ensureFigmaImportPage: async () => {\n      return [];\n    },\n    getRegistryPath: () => {\n      return qwikSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: async (_pkgName: string) => {},\n    loadComponent: async (opts) => {\n      const r = await qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getQwikApiKey(qwikSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setQwikApiKey(qwikSys, opts.publicApiKey);\n    },\n    getDependencies: (_opts) => {\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/sdk-qwik\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getBuilderCache(qwikSys),\n    setCache: (cache) => setBuilderCache(qwikSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createQwikDevToolsSys(sys: DevToolsSys) {\n  const componentsDir = await recursiveFindDir(\n    sys,\n    sys.getAppRootDir(),\n    \"components\",\n  );\n  if (!componentsDir) {\n    throw new Error(\n      `Could not find components directory within project: ${sys.getAppRootDir()}`,\n    );\n  }\n\n  const registryPath = await findBuilderRegistry(sys, componentsDir);\n  const envPath = sys.join(sys.getAppRootDir(), \".env\");\n\n  const qwikSys: QwikDevToolsSys = {\n    ...sys,\n    componentsDir,\n    registryPath,\n    envPath,\n  };\n  return qwikSys;\n}\n\nexport interface QwikDevToolsSys extends DevToolsSys {\n  componentsDir: string;\n  registryPath: string;\n  envPath: string;\n}\n", "import type { DevToolsSys, EnvInfo } from \"../../../types\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\n\nexport async function getRemixApiKey(sys: DevToolsSys) {\n  const dotEnvFileNames = [\".env\"];\n\n  const env = await getDotEnvValue(\n    sys,\n    dotEnvFileNames,\n    REMIX_BUILDER_API_KEY_ENV,\n  );\n  return env;\n}\n\nexport async function setRemixApiKey(sys: DevToolsSys, publicApiKey: string) {\n  const env = await getRemixApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const REMIX_BUILDER_API_KEY_ENV = `PUBLIC_BUILDER_KEY`;\n", "import type { RemixDevToolsSys } from \"./index\";\nimport type ts from \"typescript\";\nimport {\n  getReactComponentsFromSourceFile,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { shouldSkipFolder } from \"../../../common/utils\";\n\nconst SKIP_FOLDERS = new Set([\"dist\", \"node_modules\"]);\n\nexport async function getRemixSourceComponentsFromDir(\n  sys: RemixDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: ReactComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  const buildDir = sys.join(sys.getAppRootDir(), \"build\");\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n      if (\n        fileName.startsWith(\".\") ||\n        fileName === \"node_modules\" ||\n        shouldSkipFolder(sys, SKIP_FOLDERS, sourceFile.fileName) ||\n        SKIP_APP_FILES.has(fileName) ||\n        fileName.includes(\"$.\")\n      ) {\n        return;\n      }\n\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (filePath === sys.remixConfigPath || filePath === buildDir) {\n        return;\n      }\n\n      const fileCmps = await getReactComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n        filePath === sys.registryPath,\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps;\n}\n\n// https://remix.run/docs/en/main/file-conventions/route-files-v2\nconst SKIP_APP_FILES = new Set([\n  \"root.tsx\",\n  \"root.ts\",\n  \"root.jsx\",\n  \"root.js\",\n  \"_index.tsx\",\n  \"_index.jsx\",\n  \"_index.ts\",\n  \"_index.js\",\n]);\n", "import type ts from \"typescript\";\nimport { SDK_VERSIONS, type ComponentInfo } from \"../../../types\";\nimport type { RemixDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentImportPath,\n  isMapperFile,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport {\n  parseRegisteredComponentInfo,\n  componentHasAcceptChildrenProp,\n} from \"../../../common/ast/component-info\";\nimport { remixEnsureBuilderRegistry } from \"./remix-ensure-builder-setup\";\nimport { getReactComponentsFromPath } from \"../react/react-components\";\n\nexport async function parseRemixRegistryFromFile(sys: RemixDevToolsSys) {\n  await remixEnsureBuilderRegistry(sys);\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseRemixRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseRemixRegistryFromCode(\n  sys: RemixDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return parseRegistryFromSource(sys, sourceFile);\n}\n\nexport async function parseRegistryFromSource(\n  sys: RemixDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseRemixRegisteredComponent(\n          sys,\n          sourceFile,\n          cmpElm,\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseRemixRegisteredComponent(\n  sys: RemixDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    acceptsChildren: false,\n    framework: \"react\",\n  };\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    const acceptsChildren = componentHasAcceptChildrenProp(sys, cmpObjLit);\n    if (acceptsChildren) {\n      cmp.acceptsChildren = true;\n    }\n  }\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      } else if (sys.ts.isCallExpression(initializer)) {\n        const fnIdentifier =\n          sys.ts.isIdentifier(initializer.expression) &&\n          initializer.expression.text;\n\n        if (fnIdentifier === \"withChildren\") {\n          cmp.acceptsChildren = true;\n        }\n        const arg = initializer.arguments[0];\n        if (sys.ts.isIdentifier(arg)) {\n          identifierName = arg.text;\n        }\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      if (cmp.externalImportPath) {\n        cmp.exportName = identifierName;\n      } else {\n        const cmps = await getReactComponentsFromPath(\n          sys,\n          i.filePath,\n          sys.registryPath === i.filePath || isMapperFile(i.filePath),\n        );\n        if (cmps && cmps.length > 0) {\n          if (cmps.length === 1) {\n            cmp.exportName = cmps[0].cmpInfo.exportName;\n          } else {\n            const namedCmp = cmps.find(\n              (c) => c.cmpInfo.exportName === identifierName,\n            );\n            if (namedCmp) {\n              cmp.exportName = namedCmp.cmpInfo.exportName;\n            }\n          }\n        }\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n\n  return cmp;\n}\n", "import type ts from \"typescript\";\nimport {\n  SDK_VERSIONS,\n  type ComponentInfo,\n  type ComponentRegistry,\n  type SetComponentInfoOptions,\n  type SetComponentInputOptions,\n} from \"../../../types\";\nimport type { RemixDevToolsSys } from \"./index\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { getRemixSourceComponentsFromDir } from \"./remix-components\";\nimport {\n  getDisplayFilePath,\n  getImportPath,\n  isMapperFile,\n} from \"../../../common/utils\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseRemixRegisteredComponent,\n  parseRemixRegistryFromFile,\n} from \"./remix-registry-parse\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport {\n  parseReactAllComponentSourceInputs,\n  parseReactComponentSourceInputs,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getRemixApiKey } from \"./remix-api-key\";\n\nexport async function remixComponentRegistry(\n  sys: RemixDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, remixApiKey] = await Promise.all([\n    getRemixSourceComponentsFromDir(sys, tsProgram),\n    parseRemixRegistryFromFile(sys),\n    getRemixApiKey(sys),\n  ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: remixApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseReactAllComponentSourceInputs(\n      sys,\n      cmpRegistry.components,\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n      ? [cmpId]\n      : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath)),\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      )!;\n      const sourceInputs = await parseReactComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n        sys.registryPath === srcCmp.cmpInfo.filePath ||\n          isMapperFile(srcCmp.cmpInfo.filePath),\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput,\n      );\n\n      const {\n        elements,\n        elmIndex,\n        statementIndex,\n        statement,\n        variableDeclaration,\n      } = await getRemixRegisteredComponentSource(sys, sourceFile, srcCmp);\n\n      if (update.addCmpToRegistry) {\n        // not already registered, append it\n        elements.push(\n          createRemixRegisteredComponent(sys, update.addCmpToRegistry),\n        );\n        madeChanges = true;\n      } else if (update.removeCmpFromRegistry) {\n        // already registered, remove it\n        elements.splice(elmIndex, 1);\n        madeChanges = true;\n      } else if (update.updateRegisteredCmp) {\n        // already registered, update component info\n        const element = updateComponentObjLiteralInfoProperties(\n          sys,\n          elements[elmIndex],\n          update.updateRegisteredCmp,\n        );\n        elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n          element,\n          [\n            createRemixComponentPropertyAssignment(\n              sys,\n              update.updateRegisteredCmp,\n            ),\n            ...element.properties.slice(1),\n          ],\n        );\n        madeChanges = true;\n      }\n\n      if (madeChanges && writeRegistry) {\n        const statements = [...sourceFile.statements];\n        statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n          statement,\n          statement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            statement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                variableDeclaration,\n                variableDeclaration.name,\n                variableDeclaration.exclamationToken,\n                variableDeclaration.type,\n                sys.ts.factory.createArrayLiteralExpression(\n                  normalizeRegisteredArrayElements(sys, elements),\n                ),\n              ),\n            ],\n          ),\n        );\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        if (cmpInfo.exportType === \"named\") {\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [cmpInfo.importName],\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        } else {\n          sourceFile = ensureImport(sys, sourceFile, {\n            defaultImport: cmpInfo.importName,\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        }\n\n        const sdkImportPath =\n          sys.sdkVersion === SDK_VERSIONS.gen2\n            ? \"@builder.io/sdk-react\"\n            : \"@builder.io/react\";\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [\"RegisteredComponent\"],\n          importPath: sdkImportPath,\n          isTypeOnly: true,\n        });\n\n        if (cmpInfo.acceptsChildren && sys.sdkVersion !== SDK_VERSIONS.gen2) {\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"withChildren\"],\n            importPath: \"@builder.io/react\",\n          });\n        }\n\n        sourceFile = ensureArrayStatement(sys, sourceFile, {\n          variableName: \"CUSTOM_COMPONENTS\",\n          arrayType: \"RegisteredComponent\",\n        });\n\n        cmpRegistry.components = update.components;\n        registeredComponents = update.components.filter((c) => c.isRegistered);\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nfunction createRemixComponentPropertyAssignment(\n  sys: RemixDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return sys.ts.factory.createPropertyAssignment(\n      \"component\",\n      sys.ts.factory.createIdentifier(cmpInfo.importName),\n    );\n  }\n\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName),\n    initializer = cmpInfo.acceptsChildren\n      ? sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(\"withChildren\"),\n          undefined,\n          [identifier],\n        )\n      : identifier;\n\n  return sys.ts.factory.createPropertyAssignment(\"component\", initializer);\n}\n\nfunction createRemixRegisteredComponent(\n  sys: RemixDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        createRemixComponentPropertyAssignment(sys, cmpInfo),\n        ...(cmpInfo.acceptsChildren && sys.sdkVersion === SDK_VERSIONS.gen2\n          ? [\n              sys.ts.factory.createPropertyAssignment(\n                \"canHaveChildren\",\n                sys.ts.factory.createTrue(),\n              ),\n            ]\n          : []),\n      ],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nasync function getRemixRegisteredComponentSource(\n  sys: RemixDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: ReactComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseRemixRegisteredComponent(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n", "import { SDK_VERSIONS, type ModifiedFile } from \"../../../types\";\nimport type { RemixDevToolsSys } from \".\";\nimport { remixComponentRegistry } from \"./remix-registry\";\nimport { REMIX_BUILDER_API_KEY_ENV } from \"./remix-api-key\";\nimport { getImportPath } from \"../../../common/utils\";\n\n// https://www.builder.io/c/docs/quickstart\n\nexport async function remixEnsureBuilderSetup(sys: RemixDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await remixEnsureCounterComponent(sys, modifiedFiles);\n  modifiedFiles.push(...(await remixEnsureBuilderRegistry(sys)));\n\n  await remixEnsureCounterRegistered(sys, counterCmpPath);\n  await remixEnsureAppRoute(sys, modifiedFiles);\n\n  return modifiedFiles;\n}\n\nexport async function remixEnsureFigmaImportSetup(sys: RemixDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  modifiedFiles.push(...(await remixEnsureBuilderRegistry(sys)));\n\n  await remixEnsureFigmaImportRoute(sys, modifiedFiles);\n\n  return modifiedFiles;\n}\n\nasync function remixEnsureFigmaImportRoute(\n  sys: RemixDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  let routeFileName = `figma-imports.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  if (sys.hasLocaleParam) {\n    sys.debug(`remixEnsureFigmaImportRoute, hasLocaleParam`);\n    routeFileName = `($locale).${routeFileName}`;\n  }\n\n  const routePath = sys.join(sys.routesDir, routeFileName);\n  const hasRoute = await sys.exists(routePath);\n\n  sys.debug(`remixEnsureFigmaImportRoute, hasRoute: ${hasRoute}`);\n\n  const code = await sys.formatCode(\n    routePath,\n    getRemixAppRoute({ sys, routePath, modelName: \"figma-imports\" }),\n  );\n  await sys.writeFile(routePath, code);\n  modifiedFiles.push({\n    filePath: routePath,\n    modifiedType: hasRoute ? \"update\" : \"create\",\n  });\n}\n\nasync function remixEnsureAppRoute(\n  sys: RemixDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  let routeFileName = `$.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  if (sys.hasLocaleParam) {\n    sys.debug(`remixEnsureAppRoute, hasLocaleParam`);\n    routeFileName = `($locale).${routeFileName}`;\n  }\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    routeFileName = `($slug)._index.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  }\n\n  const routePath = sys.join(sys.routesDir, routeFileName);\n  const hasRoute = await sys.exists(routePath);\n\n  sys.debug(`remixEnsureAppRoute, hasRoute: ${hasRoute}`);\n\n  const code = await sys.formatCode(\n    routePath,\n    getRemixAppRoute({ sys, routePath, modelName: \"page\" }),\n  );\n  await sys.writeFile(routePath, code);\n  modifiedFiles.push({\n    filePath: routePath,\n    modifiedType: hasRoute ? \"update\" : \"create\",\n  });\n}\n\nfunction getRemixAppRoute({\n  sys,\n  routePath,\n  modelName,\n}: {\n  sys: RemixDevToolsSys;\n  routePath: string;\n  modelName: \"page\" | \"figma-imports\";\n}) {\n  const ts = sys.typescriptEnabled;\n\n  const registryImportPath = getImportPath(sys, routePath, sys.registryPath);\n\n  let loaderArgsImport = ``;\n  let loaderArgsType = ``;\n  if (ts) {\n    loaderArgsImport = `import type { LoaderArgs } from '@remix-run/server-runtime';`;\n    loaderArgsType = `: LoaderArgs`;\n  }\n\n  let envVar = `process.env.${REMIX_BUILDER_API_KEY_ENV}`;\n  let usesContext = ``;\n  if (sys.getFrameworks().some((f) => f.name === \"@shopify/remix-oxygen\")) {\n    // hydrogen uses the context object in the loader\n    envVar = `context.env.${REMIX_BUILDER_API_KEY_ENV}`;\n    usesContext = `, context`;\n  }\n  if (ts) {\n    envVar += `!`;\n  }\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\n\nimport {\n  Content,\n  fetchOneEntry,\n  getBuilderSearchParams,\n  isPreviewing,\n} from \"@builder.io/sdk-react\";\n${ts ? `import type { LoaderFunctionArgs } from \"@remix-run/node\";` : ``}\nimport { useLoaderData } from \"@remix-run/react\";\nimport { fetch as webFetch } from \"@remix-run/web-fetch\";\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(registryImportPath)};\n\nexport const loader = async ({ params, request${usesContext} }${\n      ts ? \": LoaderFunctionArgs\" : \"\"\n    }) => {\n  const builderApiKey = ${envVar};\n  const url = new URL(request.url);\n  const urlPath = \\`/\\${params[\"slug\"] || \"\"}\\`;\n\n  const page = await fetchOneEntry({\n    model: \"${modelName}\",\n    apiKey: builderApiKey,\n    options: getBuilderSearchParams(url.searchParams),\n    userAttributes: { urlPath },\n    fetch: webFetch,\n  });\n\n  if (!page && !isPreviewing(url.search)) {\n    throw new Response(\"Page Not Found\", {\n      status: 404,\n      statusText: \"Page not found in Builder.io\",\n    });\n  }\n\n  return { page, builderApiKey };\n};\n\n// Define and render the page.\nexport default function Page() {\n  const { page, builderApiKey } = useLoaderData${ts ? \"<typeof loader>\" : \"\"}();\n  // Render the page content from Builder.io\n  return (\n    <Content\n      model=\"${modelName}\"\n      apiKey={builderApiKey}\n      content={page}\n      customComponents={CUSTOM_COMPONENTS}\n    />\n  );\n}\n    `;\n  }\n\n  return `\nimport { BuilderComponent, builder } from \"@builder.io/react\";\nimport { useLoaderData } from \"@remix-run/react\";\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(registryImportPath)};\n${loaderArgsImport}\n\n// Fetch contents of the page\nexport const loader = async ({ params, request, context }${loaderArgsType}) => {\n  // Initialize the Builder client and pass in your Public API Key\n  const builderApiKey = ${envVar};\n  builder.init(builderApiKey);\n\n  // Fetch data content from Builder.io based on the URL path\n  const page = await builder\n    .get(\"${modelName}\", {\n      userAttributes: {\n        urlPath: \"/\" + params[\"*\"],\n      },\n      locale: params.locale,\n    })\n    .toPromise();\n\n  // Verify the user is previewing or editing in Builder\n  const isPreviewing = new URL(request.url).searchParams.has(\"builder.preview\");\n\n  // If the page is not found and the user is not previewing, throw a 404.\n  // The CatchBoundary component will catch the error\n  if (!page && !isPreviewing) {\n    throw new Response(\"Page Not Found\", {\n      status: 404,\n      statusText:\n        \"We couldn't find this page, please check your url path and if the page is published on Builder.io.\",\n    });\n  }\n\n  return { page, builderApiKey };\n};\n\n// Define and render the page.\nexport default function Page() {\n  // Use the useLoaderData hook to get the Page data from \"loader\" above.\n  const { page, builderApiKey } = useLoaderData${ts ? `<typeof loader>` : ``}();\n\n  // Render the page content from Builder.io\n  return (\n    <BuilderComponent\n      customComponents={CUSTOM_COMPONENTS}\n      apiKey={builderApiKey}\n      model=\"${modelName}\"\n      content={page}\n    />\n  );\n}\n\n${\n  ts\n    ? `\ndeclare global {\n  interface Env {\n    ${REMIX_BUILDER_API_KEY_ENV}: string;\n  }\n}\n`\n    : ``\n}\n`;\n}\n\nasync function remixEnsureCounterComponent(\n  sys: RemixDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"tsx\" : \"jsx\";\n\n  const counterCmpDir = sys.join(sys.componentsDir, `Counter`);\n  const counterCmpPath = sys.join(counterCmpDir, `Counter.${ext}`);\n  const counterStylesPath = sys.join(counterCmpDir, `styles.module.css`);\n\n  const { component, styles } = getCounterComponent(sys);\n\n  const hasCounterCmp = await sys.exists(counterCmpPath);\n\n  sys.debug(`remixEnsureCounterComponent, hasCounterCmp: ${hasCounterCmp}`);\n\n  if (!hasCounterCmp) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  const hasCounterStyles = await sys.exists(counterStylesPath);\n\n  sys.debug(\n    `remixEnsureCounterComponent, hasCounterStyles: ${hasCounterStyles}`,\n  );\n\n  if (!hasCounterStyles) {\n    await sys.writeFile(counterStylesPath, styles);\n    modifiedFiles.push({\n      filePath: counterStylesPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: RemixDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n  const component = `\nimport { useState } from \"react\";\nimport styles from \"./styles.module.css\";\n${\n  ts\n    ? `\ninterface CounterProps {\n  initialCount?: number;\n}`\n    : ``\n}\n\nfunction Counter({ initialCount = 99 }${ts ? `: CounterProps` : ``}) {\n  const [count, setCount] = useState(initialCount);\n\n  const increment = () => {\n    setCount((prevCount) => prevCount + 1);\n  };\n\n  const decrement = () => {\n    setCount((prevCount) => prevCount - 1);\n  };\n\n  return (\n    <div className={styles.counter}>\n      <button className={styles.btn} onClick={decrement}>\n        -\n      </button>\n      <span className={styles.count}>{count}</span>\n      <button className={styles.btn} onClick={increment}>\n        +\n      </button>\n    </div>\n  );\n}\n\nexport default Counter;\n`.trimStart();\n\n  const styles = `\n.counter {\n  margin: 32px auto;\n  display: flex;\n  width: 100%;\n  max-width: 190px;\n  color: #1c6bd1;\n}\n\n.btn {\n  width: 42px;\n  font-size: 32px;\n  font-weight: bold;\n  background-color: #1c6bd1;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  line-height: 1.4;\n}\n\n.btn:hover {\n  opacity: 0.8;\n}\n\n.count {\n  flex: 1;\n  font-size: 42px;\n  text-align: center;\n}\n`.trimStart();\n\n  return { component, styles };\n}\n\nasync function remixEnsureCounterRegistered(\n  sys: RemixDevToolsSys,\n  counterCmpPath: string,\n) {\n  const registry = await remixComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false,\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  await remixComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false,\n  );\n}\n\nexport async function remixEnsureBuilderRegistry(sys: RemixDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, getRemixBuilderRegistry(sys));\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nfunction getRemixBuilderRegistry(sys: RemixDevToolsSys) {\n  const isSdkGen2 = sys.sdkVersion === SDK_VERSIONS.gen2;\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from ${\n      isSdkGen2 ? `\"@builder.io/sdk-react\"` : `\"@builder.io/react\"`\n    };\n\nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getRemixApiKey, setRemixApiKey } from \"./remix-api-key\";\nimport {\n  findBuilderRegistry,\n  hasTsconfig,\n  recursiveFindDir,\n} from \"../../../common/fs\";\nimport {\n  remixEnsureBuilderSetup,\n  remixEnsureFigmaImportSetup,\n} from \"./remix-ensure-builder-setup\";\nimport { remixComponentRegistry } from \"./remix-registry\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { detectReactSdkVersion } from \"../react/react-builder-sdk-setup\";\n\nexport async function createRemixDevTools(sys: CreateDevToolsOptions) {\n  const remixSys = await createRemixDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      const pathname = \"/builder-demo\";\n      const localePathname = remixSys.hasLocaleParam\n        ? `/en-us${pathname}`\n        : undefined;\n\n      return {\n        templateContentId: \"a5c9eef7909d4fc99554264a17de22c9\",\n        pathname,\n        localePathname,\n        title: \"Builder + Remix Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return remixEnsureBuilderSetup(remixSys);\n    },\n    ensureFigmaImportPage: () => {\n      return remixEnsureFigmaImportSetup(remixSys);\n    },\n    getRegistryPath: () => {\n      return remixSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: (pkgName: string) => {\n      remixSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getRemixApiKey(remixSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setRemixApiKey(remixSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@builder.io/dev-tools\" },\n          { name: \"@builder.io/sdk-react\" },\n        ];\n      }\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/react\" },\n        { name: \"@builder.io/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getBuilderCache(remixSys),\n    setCache: (cache) => setBuilderCache(remixSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createRemixDevToolsSys(sys: DevToolsSys) {\n  const remixConfigPath = await getRemixConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const routesDir = await getRemixRoutesDir(sys);\n  const appDir = sys.dirname(routesDir);\n  const componentsDir = sys.join(appDir, \"components\");\n  const typescriptEnabled = await hasTsconfig(sys);\n  const registryPath = await findBuilderRegistry(sys, appDir);\n  const externalPackages: Record<string, string> = {};\n\n  const remixSys: RemixDevToolsSys = {\n    ...sys,\n    registryPath,\n    remixConfigPath,\n    typescriptEnabled,\n    appDir,\n    componentsDir,\n    routesDir,\n    hasLocaleParam: await hasLocaleParam(sys, routesDir),\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[sys.join(rootDir, pkgName, \"index.ts\")] =\n        `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n  };\n\n  if (sys.sdkVersion) {\n    remixSys.sdkVersion = sys.sdkVersion;\n  } else {\n    remixSys.sdkVersion = await detectReactSdkVersion(remixSys);\n  }\n\n  return remixSys;\n}\n\nasync function hasLocaleParam(sys: DevToolsSys, routesDir: string) {\n  const routesDirFiles = await sys.readdir(routesDir);\n  return routesDirFiles.some((f) => f.startsWith(`($locale).`));\n}\n\nasync function getRemixConfigPath(sys: DevToolsSys) {\n  const configs = [\n    \"remix.config.ts\",\n    \"remix.config.js\",\n    \"vite.config.ts\",\n    \"vite.config.js\",\n  ];\n  for (const configName of configs) {\n    const configPath = sys.join(sys.getAppRootDir(), configName);\n    if (await sys.exists(configPath)) {\n      return configPath;\n    }\n  }\n  if (sys.ignoreMissingConfig) {\n    return \"\";\n  }\n\n  throw new Error(\n    `Could not find Remix config file. Searched for ${configs.join(\n      \", \",\n    )} in \"${sys.getAppRootDir()}\".`,\n  );\n}\n\nasync function getRemixRoutesDir(sys: DevToolsSys) {\n  const routesDir = await recursiveFindDir(sys, sys.getAppRootDir(), \"routes\");\n  if (routesDir) {\n    return routesDir;\n  }\n  throw new Error(\n    `Could not find Remix \"routes\" directory in \"${sys.getAppRootDir()}\". Please ensure this command is ran from within your Remix project's directory.`,\n  );\n}\n\nexport interface RemixDevToolsSys extends DevToolsSys {\n  appDir: string;\n  componentsDir: string;\n  registryPath: string;\n  remixConfigPath: string;\n  typescriptEnabled: boolean;\n  routesDir: string;\n  hasLocaleParam: boolean;\n  addExternalPackage: (pkgName: string) => void;\n}\n", "import type { EnvInfo } from \"../../../types\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\nimport type { ReactDevToolsSys } from \".\";\n\nexport async function getReactApiKey(sys: ReactDevToolsSys) {\n  const dotEnvFileNames = [\".env\"];\n  const publicApiKey =\n    sys.configType === \"vite\"\n      ? REACT_VITE_BUILDER_KEY_ENV\n      : REACT_WEBPACK_BUILDER_KEY_ENV;\n  const env = await getDotEnvValue(sys, dotEnvFileNames, publicApiKey);\n  return env;\n}\n\nexport async function setReactApiKey(\n  sys: ReactDevToolsSys,\n  publicApiKey: string,\n) {\n  const env = await getReactApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const REACT_VITE_BUILDER_KEY_ENV = `VITE_PUBLIC_BUILDER_KEY`;\n\nexport const REACT_WEBPACK_BUILDER_KEY_ENV = `PUBLIC_BUILDER_KEY`;\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { ReactDevToolsSys } from \".\";\nimport { codeToStatement } from \"../../../common/ast/transform\";\nimport { updateComponentObjLiteralInfoProperties } from \"../../../common/ast/component-info\";\n\nexport function createReactRegisteredComponent(\n  sys: ReactDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  let code = `Builder.registerComponent(\\n`;\n\n  code += `  ${cmpInfo.importName},\\n`;\n\n  code += `  {\n    name: \"${cmpInfo.name}\",\n  }\\n`;\n  code += `);`;\n\n  const registerStatement = codeToStatement(sys, code);\n\n  return updateReactRegisteredComponent(sys, registerStatement, cmpInfo);\n}\n\nexport function updateReactRegisteredComponent(\n  sys: ReactDevToolsSys,\n  registerStatement: ts.Statement,\n  cmpInfo: ComponentInfo,\n) {\n  if (!sys.ts.isExpressionStatement(registerStatement)) {\n    return registerStatement;\n  }\n\n  const callExp = registerStatement.expression;\n  if (!sys.ts.isCallExpression(callExp)) {\n    return registerStatement;\n  }\n\n  const args = [...callExp.arguments];\n  if (args.length < 2) {\n    return registerStatement;\n  }\n\n  const cmpObjExp = args[1];\n  if (!sys.ts.isObjectLiteralExpression(cmpObjExp)) {\n    return registerStatement;\n  }\n\n  args[1] = updateComponentObjLiteralInfoProperties(sys, cmpObjExp, cmpInfo);\n\n  return sys.ts.factory.updateExpressionStatement(\n    registerStatement,\n    sys.ts.factory.updateCallExpression(\n      callExp,\n      callExp.expression,\n      callExp.typeArguments,\n      args,\n    ),\n  );\n}\n", "import type ts from \"typescript\";\nimport { SDK_VERSIONS, type ComponentInfo } from \"../../../types\";\nimport type { ReactDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  resolveComponentPath,\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentDisplayNameFromFilePath,\n  getComponentId,\n  getComponentImportPath,\n  getDisplayFilePath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport {\n  parseRegisteredComponentInfo,\n  componentHasAcceptChildrenProp,\n} from \"../../../common/ast/component-info\";\nimport { REACT_VITE_BUILDER_KEY_ENV } from \"./react-api-key\";\n\nexport async function parseReactRegistryFromFile(sys: ReactDevToolsSys) {\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseReactRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseReactRegistryFromCode(\n  sys: ReactDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return parseReactRegistryFromSourceSdkGen2(sys, sourceFile);\n  }\n  return parseReactRegistryFromSource(sys, sourceFile);\n}\n\nasync function parseReactRegistryFromSource(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n\n  for (let i = 0; i < sourceFile.statements.length; i++) {\n    const s = sourceFile.statements[i];\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"Builder\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName !== \"registerComponent\") {\n      continue;\n    }\n    const args = exp.arguments;\n    if (args.length < 2) {\n      continue;\n    }\n    const infoArg = args[1];\n    if (!sys.ts.isObjectLiteralExpression(infoArg)) {\n      continue;\n    }\n\n    const cmpArg = args[0];\n    if (sys.ts.isIdentifier(cmpArg)) {\n      // Builder.registerComponent(Component, {...} )\n      const cmp = await parseReactRegisteredIdentifierComponent(\n        sys,\n        sourceFile,\n        i,\n        cmpArg,\n        infoArg,\n        false,\n      );\n      if (cmp) {\n        cmps.push(cmp);\n      }\n      continue;\n    }\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nasync function parseReactRegisteredIdentifierComponent(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  statementIndex: number,\n  identifierArg: ts.Identifier,\n  infoArg: ts.ObjectLiteralExpression,\n  withChildrenWrapper: boolean,\n) {\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    nodeIndex: statementIndex,\n    acceptsChildren: withChildrenWrapper,\n    framework: \"react\",\n  };\n\n  const importDeclarations = sourceFile.statements.filter((s) =>\n    sys.ts.isImportDeclaration(s),\n  ) as ts.ImportDeclaration[];\n\n  const defaultImportDeclaration = importDeclarations.find(\n    (s) => s.importClause && s.importClause.name?.text === identifierArg.text,\n  );\n\n  if (defaultImportDeclaration) {\n    const importPath = defaultImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n    cmp.filePath = await resolveReactImportPath(sys, importPath.text);\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n    cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = \"default\";\n    cmp.exportType = \"default\";\n  } else {\n    const namedImportDeclaration = importDeclarations.find((s) => {\n      if (!s.importClause) {\n        return false;\n      }\n      if (!s.importClause.namedBindings) {\n        return false;\n      }\n      if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n        return false;\n      }\n      return s.importClause.namedBindings.elements.some(\n        (e) => e.name.text === identifierArg.text,\n      );\n    });\n    if (!namedImportDeclaration) {\n      return null;\n    }\n    const importPath = namedImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n\n    const resolvedPath = await resolveReactImportPath(sys, importPath.text);\n\n    cmp.filePath = await resolveReactImportPath(sys, importPath.text);\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath.text;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayName(identifierArg.text);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = identifierArg.text;\n    cmp.exportType = \"named\";\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, infoArg);\n\n  cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n  return cmp;\n}\n\nfunction resolveReactImportPath(sys: ReactDevToolsSys, importPath: string) {\n  return resolveComponentPath(\n    sys,\n    sys.normalize(sys.resolve(sys.dirname(sys.registryPath), importPath)),\n  );\n}\n\nexport function ensureBuilderIsInitialized(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  typescriptEnabled: boolean,\n) {\n  let isApiKeyInitialized = false;\n  let lastImportIndex = 0;\n\n  const statements = [...sourceFile.statements];\n\n  for (let i = 0; i < statements.length; i++) {\n    const s = statements[i];\n    if (sys.ts.isImportDeclaration(s)) {\n      lastImportIndex = i;\n      continue;\n    }\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"builder\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName == \"init\") {\n      isApiKeyInitialized = true;\n      break;\n    } else {\n      continue;\n    }\n  }\n\n  if (isApiKeyInitialized) {\n    return sourceFile;\n  }\n\n  // process.env.VITE_PUBLIC_BUILDER_KEY\n  const envKeyExpression = sys.ts.factory.createPropertyAccessExpression(\n    sys.ts.factory.createPropertyAccessExpression(\n      sys.ts.factory.createPropertyAccessExpression(\n        sys.ts.factory.createIdentifier(\"import\"),\n        sys.ts.factory.createIdentifier(\"meta\"),\n      ),\n      sys.ts.factory.createIdentifier(\"env\"),\n    ),\n    sys.ts.factory.createIdentifier(REACT_VITE_BUILDER_KEY_ENV),\n  );\n\n  const nonNullEnvKeyExpression = typescriptEnabled\n    ? sys.ts.factory.createNonNullExpression(envKeyExpression)\n    : envKeyExpression;\n\n  const initializeBuilderApiKey = sys.ts.factory.createExpressionStatement(\n    sys.ts.factory.createCallExpression(\n      sys.ts.factory.createPropertyAccessExpression(\n        sys.ts.factory.createIdentifier(\"builder\"),\n        sys.ts.factory.createIdentifier(\"init\"),\n      ),\n      undefined,\n      [nonNullEnvKeyExpression],\n    ),\n  );\n\n  statements.splice(lastImportIndex + 1, 0, initializeBuilderApiKey);\n\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nasync function parseReactRegistryFromSourceSdkGen2(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseReactRegisteredComponentSdkGen2(\n          sys,\n          sourceFile,\n          cmpElm,\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseReactRegisteredComponentSdkGen2(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    acceptsChildren: false,\n    framework: \"react\",\n  };\n\n  const acceptsChildren = componentHasAcceptChildrenProp(sys, cmpObjLit);\n\n  if (acceptsChildren) {\n    cmp.acceptsChildren = true;\n  }\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      const importDeclarations = sourceFile.statements.filter((s) =>\n        sys.ts.isImportDeclaration(s),\n      ) as ts.ImportDeclaration[];\n\n      const defaultImportDeclaration = importDeclarations.find(\n        (s) => s.importClause && s.importClause.name?.text === identifierName,\n      );\n\n      if (defaultImportDeclaration) {\n        const importPath = defaultImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n        cmp.exportName = \"default\";\n      } else {\n        const namedImportDeclaration = importDeclarations.find((s) => {\n          if (!s.importClause) {\n            return false;\n          }\n          if (!s.importClause.namedBindings) {\n            return false;\n          }\n          if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n            return false;\n          }\n          return s.importClause.namedBindings.elements.some(\n            (e) => e.name.text === identifierName,\n          );\n        });\n        if (!namedImportDeclaration) {\n          return null;\n        }\n        const importPath = namedImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n\n        cmp.exportName = identifierName;\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n\n  return cmp;\n}\n", "import {\n  SDK_VERSIONS,\n  type ComponentInfo,\n  type ComponentRegistry,\n  type SetComponentInfoOptions,\n  type SetComponentInputOptions,\n  type UpdateRegistry,\n} from \"../../../types\";\nimport type { ReactDevToolsSys } from \"./index\";\nimport {\n  createReactRegisteredComponent,\n  updateReactRegisteredComponent,\n} from \"./react-component-info\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { getReactSourceComponentsFromDir } from \"./react-components\";\nimport {\n  getDisplayFilePath,\n  getImportPath,\n  isMapperFile,\n} from \"../../../common/utils\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseReactRegistryFromFile,\n  parseReactRegisteredComponentSdkGen2,\n} from \"./react-registry-parse\";\nimport {\n  parseReactAllComponentSourceInputs,\n  parseReactComponentSourceInputs,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getReactApiKey } from \"./react-api-key\";\nimport type ts from \"typescript\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { hasTsconfig } from \"../../../common/fs\";\n\nexport async function reactComponentRegistry(\n  sys: ReactDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, _typescriptEnabled, reactApiKey] =\n    await Promise.all([\n      getReactSourceComponentsFromDir(sys, tsProgram),\n      parseReactRegistryFromFile(sys),\n      hasTsconfig(sys),\n      getReactApiKey(sys),\n    ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: reactApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseReactAllComponentSourceInputs(\n      sys,\n      cmpRegistry.components,\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n      ? [cmpId]\n      : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath)),\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      )!;\n      const sourceInputs = await parseReactComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n        sys.registryPath === srcCmp.cmpInfo.filePath ||\n          isMapperFile(srcCmp.cmpInfo.filePath),\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput,\n      );\n\n      if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n        const {\n          elements,\n          elmIndex,\n          statementIndex,\n          statement,\n          variableDeclaration,\n        } = await getReactRegisteredComponentSourceSdkGen2(\n          sys,\n          sourceFile,\n          srcCmp,\n        );\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          elements.push(\n            createReactRegisteredComponentSdkGen2(sys, update.addCmpToRegistry),\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          elements.splice(elmIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          const element = updateComponentObjLiteralInfoProperties(\n            sys,\n            elements[elmIndex],\n            update.updateRegisteredCmp,\n          );\n          const identifier = sys.ts.factory.createIdentifier(\n            update.updateRegisteredCmp.importName,\n          );\n\n          elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n            element,\n            [\n              sys.ts.factory.createPropertyAssignment(\"component\", identifier),\n              ...element.properties.slice(1),\n            ],\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          const statements = [...sourceFile.statements];\n          statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n            statement,\n            statement.modifiers,\n            sys.ts.factory.updateVariableDeclarationList(\n              statement.declarationList,\n              [\n                sys.ts.factory.updateVariableDeclaration(\n                  variableDeclaration,\n                  variableDeclaration.name,\n                  variableDeclaration.exclamationToken,\n                  variableDeclaration.type,\n                  sys.ts.factory.createArrayLiteralExpression(\n                    normalizeRegisteredArrayElements(sys, elements),\n                  ),\n                ),\n              ],\n            ),\n          );\n\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureReactComponentImportStatements(\n            sys,\n            update,\n            sourceFile,\n          );\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"RegisteredComponent\"],\n            importPath: \"@builder.io/sdk-react\",\n            isTypeOnly: true,\n          });\n\n          sourceFile = ensureArrayStatement(sys, sourceFile, {\n            variableName: \"CUSTOM_COMPONENTS\",\n            arrayType: \"RegisteredComponent\",\n          });\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered,\n          );\n        }\n      } else {\n        let statements = [...sourceFile.statements];\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          statements.push(\n            createReactRegisteredComponent(sys, update.addCmpToRegistry),\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          statements.splice(update.nodeIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          statements[update.nodeIndex] = updateReactRegisteredComponent(\n            sys,\n            statements[update.nodeIndex],\n            update.updateRegisteredCmp,\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"Builder\", \"builder\"],\n            importPath: \"@builder.io/react\",\n          });\n\n          sourceFile = ensureReactComponentImportStatements(\n            sys,\n            update,\n            sourceFile,\n          );\n\n          if (cmpInfo?.acceptsChildren) {\n            sourceFile = ensureImport(sys, sourceFile, {\n              namedImports: [\"withChildren\"],\n              importPath: \"@builder.io/react\",\n            });\n          }\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered,\n          );\n        }\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nasync function getReactRegisteredComponentSourceSdkGen2(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: ReactComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseReactRegisteredComponentSdkGen2(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n\nfunction createReactRegisteredComponentSdkGen2(\n  sys: ReactDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName);\n\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        sys.ts.factory.createPropertyAssignment(\"component\", identifier),\n        ...(cmpInfo.acceptsChildren\n          ? [\n              sys.ts.factory.createPropertyAssignment(\n                \"canHaveChildren\",\n                sys.ts.factory.createTrue(),\n              ),\n            ]\n          : []),\n      ],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nfunction ensureReactComponentImportStatements(\n  sys: ReactDevToolsSys,\n  update: UpdateRegistry,\n  sourceFile: ts.SourceFile,\n) {\n  const regCmp = update.addCmpToRegistry || update.updateRegisteredCmp;\n  if (regCmp) {\n    const importPath = regCmp.externalImportPath\n      ? regCmp.externalImportPath\n      : getImportPath(sys, sys.registryPath, regCmp.filePath);\n    if (regCmp.exportType === \"default\") {\n      sourceFile = ensureImport(sys, sourceFile, {\n        defaultImport: regCmp.importName,\n        importPath,\n      });\n    } else if (regCmp.exportType === \"named\") {\n      sourceFile = ensureImport(sys, sourceFile, {\n        namedImports: [regCmp.importName],\n        importPath,\n      });\n    }\n  }\n\n  return sourceFile;\n}\n", "import { SDK_VERSIONS, type ModifiedFile } from \"../../../types\";\nimport type { ReactDevToolsSys } from \".\";\nimport { reactComponentRegistry } from \"./react-registry\";\nimport { getImportPath } from \"../../../common/utils\";\nimport {\n  REACT_VITE_BUILDER_KEY_ENV,\n  REACT_WEBPACK_BUILDER_KEY_ENV,\n} from \"./react-api-key\";\n\nexport async function reactEnsureBuilderSetup(sys: ReactDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await reactEnsureCounterComponent(sys, modifiedFiles);\n  await reactEnsureBuilderRegistry(sys, modifiedFiles, counterCmpPath);\n\n  if (!(await sys.exists(sys.builderComponentPath))) {\n    const code = await sys.formatCode(\n      sys.builderComponentPath,\n      getReactAppBuilderComponent(sys, sys.builderComponentPath),\n    );\n    await sys.writeFile(sys.builderComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.builderComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nexport async function reactEnsureFigmaImportSetup(sys: ReactDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  await reactEnsureBuilderRegistry(sys, modifiedFiles);\n\n  const routeFileName = `figma-imports.${\n    sys.typescriptEnabled ? \"tsx\" : \"jsx\"\n  }`;\n  const routePath = sys.join(sys.componentsDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getReactAppBuilderComponent(sys, routePath, \"figma-imports\"),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nfunction getReactAppBuilderComponent(\n  sys: ReactDevToolsSys,\n  routePath: string,\n  modelName: string = \"page\",\n) {\n  const ts = sys.typescriptEnabled;\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\n  import React from \"react\";\n  import {\n      Content,\n      fetchOneEntry,\n      getBuilderSearchParams,\n      isPreviewing,\n    ${ts ? \"type BuilderContent,\" : \"\"}\n    } from \"@builder.io/sdk-react\";\n  import { CUSTOM_COMPONENTS } from ${JSON.stringify(\n    getImportPath(sys, routePath, sys.registryPath),\n  )};\n\n  // Builder Public API Key set in .env file\n  const BUILDER_API_KEY = ${\n    sys.configType === \"vite\"\n      ? `import.meta.env.${REACT_VITE_BUILDER_KEY_ENV};`\n      : `${REACT_WEBPACK_BUILDER_KEY_ENV};`\n  }\n  const MODEL_NAME = \"${modelName}\";\n\n  export default function BuilderPage() {\n  const [notFound, setNotFound] = React.useState(false);\n  const [content, setContent] = React.useState${\n    ts ? \"<BuilderContent | null>\" : \"\"\n  }(null);\n\n  // get the page content from Builder\n  React.useEffect(() => {\n    fetchOneEntry({\n      model: MODEL_NAME,\n      apiKey: BUILDER_API_KEY,\n      userAttributes: {\n        urlPath: window.location.pathname,\n      },\n      options: getBuilderSearchParams(new URL(location.href).searchParams),\n    })\n      .then((content) => {\n        if (content) {\n          setContent(content);\n        }\n        setNotFound(!content);\n      })\n      .catch((err) => {\n        console.log(\"Oops: \", err);\n      });\n  }, []);\n\n  // If no page is found, return\n  // a 404 page from your code.\n  if (notFound && !isPreviewing()) {\n    return <div>404 Page Not Found</div>;\n  }\n\n  // return the page when found\n  return (\n  <>\n    {/* Render the Builder page */}\n    <Content\n      content={content}\n      model={MODEL_NAME}\n      apiKey={BUILDER_API_KEY}\n      customComponents={CUSTOM_COMPONENTS}\n    />\n  </>\n  );\n}\n    `;\n  }\n\n  return `\nimport React from \"react\";\nimport { BuilderComponent, builder, useIsPreviewing } from \"@builder.io/react\"; \nimport ${JSON.stringify(getImportPath(sys, routePath, sys.registryPath))};\n\n// Builder Public API Key set in .env file\n${\n  sys.configType === \"vite\"\n    ? `builder.init(import.meta.env.${REACT_VITE_BUILDER_KEY_ENV}${\n        ts ? \"!\" : \"\"\n      })`\n    : `builder.init(\"${REACT_WEBPACK_BUILDER_KEY_ENV}\")`\n}\n\nexport default function BuilderPage() {\n  const isPreviewingInBuilder = useIsPreviewing();\n  const [notFound, setNotFound] = React.useState(false);\n  const [content, setContent] = React.useState(null);\n\n  // get the page content from Builder\n  React.useEffect(() => {\n    async function fetchContent() {\n      const content = await builder\n        .get(\"${modelName}\", {\n          url: window.location.pathname,\n        })\n        .promise();\n\n      setContent(content);\n      setNotFound(!content);\n\n      // if the page title is found, \n      // set the document title\n      if (content?.data.title) {\n        document.title = content.data.title;\n      }\n    }\n    fetchContent();\n  }, []);\n  \n  if (content === null) {\n    return;\n  }\n  // If no page is found, return \n  // a 404 page from your code.\n  if (notFound && !isPreviewingInBuilder) {\n    return <div>404 Page Not Found</div>;\n  }\n\n  // return the page when found\n  return (\n    <>\n      {/* Render the Builder page */}\n      <BuilderComponent model=\"${modelName}\" content={content} />\n    </>\n  );\n}\n`.trimStart();\n}\n\nasync function reactEnsureBuilderRegistry(\n  sys: ReactDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n  counterCmpPath?: string,\n) {\n  if (!(await sys.exists(sys.registryPath))) {\n    if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n      const code = getBuilderRegistryReactGen2(sys);\n      await sys.writeFile(sys.registryPath, code);\n      // else it is gen1\n    } else {\n      await sys.writeFile(sys.registryPath, \"\");\n    }\n\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!counterCmpPath) {\n    return;\n  }\n\n  const registry = await reactComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false,\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  await reactComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false,\n  );\n}\n\nasync function reactEnsureCounterComponent(\n  sys: ReactDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"tsx\" : \"jsx\";\n\n  const counterCmpDir = sys.join(sys.componentsDir, `Counter`);\n  const counterCmpPath = sys.join(counterCmpDir, `Counter.${ext}`);\n  const counterStylesPath = sys.join(counterCmpDir, `styles.module.css`);\n\n  const { component, styles } = getCounterComponent(sys);\n\n  if (!(await sys.exists(counterCmpPath))) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(counterStylesPath))) {\n    await sys.writeFile(counterStylesPath, styles);\n    modifiedFiles.push({\n      filePath: counterStylesPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: ReactDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n  const component = `\n\"use client\"\nimport React, { useState } from \"react\";\nimport styles from \"./styles.module.css\";\n${\n  ts\n    ? `\ninterface CounterProps {\n  initialCount?: number;\n}`\n    : ``\n}\n\nfunction Counter({ initialCount = 99 }${ts ? `: CounterProps` : ``}) {\n  const [count, setCount] = useState(initialCount);\n\n  const increment = () => {\n    setCount((prevCount) => prevCount + 1);\n  };\n\n  const decrement = () => {\n    setCount((prevCount) => prevCount - 1);\n  };\n\n  return (\n    <div className={styles.counter}>\n      <button className={styles.btn} onClick={decrement}>\n        -\n      </button>\n      <span className={styles.count}>{count}</span>\n      <button className={styles.btn} onClick={increment}>\n        +\n      </button>\n    </div>\n  );\n}\n\nexport default Counter;\n`.trimStart();\n\n  const styles = `\n.counter {\n  margin: 32px auto;\n  display: flex;\n  width: 100%;\n  max-width: 190px;\n}\n\n.btn {\n  width: 42px;\n  font-size: 32px;\n  font-weight: bold;\n  background-color: #1c6bd1;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  line-height: 1.4;\n}\n\n.btn:hover {\n  opacity: 0.8;\n}\n\n.count {\n  flex: 1;\n  font-size: 42px;\n  text-align: center;\n}\n`.trimStart();\n\n  return { component, styles };\n}\n\nfunction getBuilderRegistryReactGen2(sys: ReactDevToolsSys) {\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from \"@builder.io/sdk-react\";\n    \nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getReactApiKey, setReactApiKey } from \"./react-api-key\";\nimport { reactComponentRegistry } from \"./react-registry\";\nimport {\n  reactEnsureBuilderSetup,\n  reactEnsureFigmaImportSetup,\n} from \"./react-ensure-builder-setup\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { detectReactSdkVersion } from \"./react-builder-sdk-setup\";\nimport { findBuilderRegistry, hasTsconfig } from \"../../../common/fs\";\n\nexport async function createReactDevTools(sys: CreateDevToolsOptions) {\n  const reactSys = await createReactDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      return {\n        templateContentId: \"2e36438034894a8abf279ea9e6d3596f\",\n        pathname: \"/builder-demo\",\n        title: \"Builder + React Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return reactEnsureBuilderSetup(reactSys);\n    },\n    ensureFigmaImportPage: () => {\n      return reactEnsureFigmaImportSetup(reactSys);\n    },\n\n    getRegistryPath: () => {\n      return reactSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: (pkgName: string) => {\n      reactSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getReactApiKey(reactSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setReactApiKey(reactSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@builder.io/dev-tools\" },\n          { name: \"@builder.io/sdk-react\" },\n        ];\n      }\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/react\" },\n        { name: \"@builder.io/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getBuilderCache(reactSys),\n    setCache: (cache) => setBuilderCache(reactSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createReactDevToolsSys(sys: DevToolsSys) {\n  const reactConfigPath = await getReactConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const externalPackages: Record<string, string> = {};\n\n  const reactSys: ReactDevToolsSys = {\n    ...sys,\n    srcDir: null,\n    builderComponentPath: \"\",\n    componentsDir: \"\",\n    registryPath: \"\",\n    reactConfigPath,\n    typescriptEnabled,\n    configType: \"\",\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[sys.join(rootDir, pkgName, \"index.ts\")] =\n        `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n  };\n\n  if (sys.sdkVersion) {\n    reactSys.sdkVersion = sys.sdkVersion;\n  } else {\n    reactSys.sdkVersion = await detectReactSdkVersion(reactSys);\n  }\n\n  if (reactConfigPath.includes(\"webpack.config\")) {\n    reactSys.configType = \"webpack\";\n  }\n\n  if (reactConfigPath.includes(\"vite.config\")) {\n    reactSys.configType = \"vite\";\n  }\n\n  if (await sys.exists(srcDir)) {\n    // src dir\n    reactSys.srcDir = srcDir;\n    reactSys.componentsDir = sys.join(srcDir, \"components\");\n\n    reactSys.registryPath = await findBuilderRegistry(sys, srcDir);\n\n    reactSys.builderComponentPath = sys.join(\n      reactSys.srcDir,\n      `builder-page.${typescriptEnabled ? \"tsx\" : \"jsx\"}`,\n    );\n  } else {\n    // no src dir\n    reactSys.componentsDir = sys.join(rootDir, \"components\");\n    reactSys.registryPath = await findBuilderRegistry(sys, rootDir);\n    reactSys.builderComponentPath = sys.join(\n      rootDir,\n      `builder-page.${typescriptEnabled ? \"tsx\" : \"jsx\"}`,\n    );\n  }\n\n  return reactSys;\n}\n\nasync function getReactConfigPath(sys: DevToolsSys) {\n  const configs = [\n    \"vite.config.ts\",\n    \"vite.config.js\",\n    \"webpack.config.js\",\n    \"webpack.config.ts\",\n  ];\n  for (const configName of configs) {\n    const configPath = sys.join(sys.getAppRootDir(), configName);\n    if (await sys.exists(configPath)) {\n      return configPath;\n    }\n  }\n\n  if (sys.ignoreMissingConfig) {\n    return \"\";\n  }\n  throw new Error(\n    `Could not find React config file. Searched for ${configs.join(\n      \", \",\n    )} in \"${sys.getAppRootDir()}\".`,\n  );\n}\n\nexport interface ReactDevToolsSys extends DevToolsSys {\n  srcDir: string | null;\n  componentsDir: string;\n  builderComponentPath: string;\n  registryPath: string;\n  reactConfigPath: string;\n  typescriptEnabled: boolean;\n  configType: \"webpack\" | \"vite\" | \"\";\n  addExternalPackage: (pkgName: string) => void;\n}\n", "import type { DevToolsSys, EnvInfo } from \"../../../types\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport type ts from \"typescript\";\nimport { findVariableStatement } from \"../../../common/ast/utils\";\n\nexport async function getAngularApiKey(sys: DevToolsSys) {\n  const envFileNames = [\"environment.ts\"];\n\n  const env = await getEnvValue(sys, envFileNames, ANGULAR_BUILDER_API_KEY_ENV);\n  return env;\n}\n\nexport async function setAngularApiKey(sys: DevToolsSys, publicApiKey: string) {\n  const env = await getAngularApiKey(sys);\n\n  const modifiedType = await setEnvValue(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n\n  return updatedEnv;\n}\n\nexport async function getEnvValue(\n  sys: DevToolsSys,\n  envFileNames: string[],\n  envKey: string,\n) {\n  const envInfo: EnvInfo = {\n    envKey,\n    envValue: null,\n    file: \"\",\n  };\n\n  for (const envFileName of envFileNames) {\n    const envPath = sys.join(\n      sys.getAppRootDir(),\n      \"src\",\n      \"environments\",\n      envFileName,\n    );\n    const value = await parseEnvFile(sys, envPath);\n\n    if (\n      typeof value === \"string\" &&\n      value.length > 0 &&\n      value !== \"YOUR_API_KEY\"\n    ) {\n      envInfo.envValue = value;\n      envInfo.file = envPath;\n      return envInfo;\n    }\n  }\n\n  envInfo.file = sys.join(\n    sys.getAppRootDir(),\n    \"src\",\n    \"environments\",\n    envFileNames[envFileNames.length - 1],\n  );\n  return envInfo;\n}\n\nexport async function parseEnvFile(sys: DevToolsSys, envPath: string) {\n  const envContent = await sys.readFile(envPath);\n  if (envContent) {\n    return parseEnvContent(sys, envContent);\n  }\n  return \"\";\n}\n\nexport function parseEnvContent(sys: DevToolsSys, envContent: string) {\n  const sourceFile = codeToSource(sys, envContent);\n  let extractedApiKey: string = \"\";\n\n  const variableName = \"environment\";\n\n  const s = findVariableStatement(sys, sourceFile, variableName);\n  if (s && s.statement.declarationList.declarations.length > 0) {\n    const declaration = s.statement.declarationList.declarations[0];\n    const initializer = declaration.initializer;\n    if (initializer && sys.ts.isObjectLiteralExpression(initializer)) {\n      initializer.properties.forEach((prop) => {\n        if (\n          sys.ts.isPropertyAssignment(prop) &&\n          sys.ts.isIdentifier(prop.name) &&\n          prop.name.text === ANGULAR_BUILDER_API_KEY_ENV &&\n          sys.ts.isStringLiteral(prop.initializer)\n        ) {\n          extractedApiKey = prop.initializer.text;\n        }\n      });\n    }\n  }\n\n  return extractedApiKey;\n}\n\nexport async function appendApiKey(\n  sys: DevToolsSys,\n  envContent: string,\n  key: string,\n  value: string,\n): Promise<ts.VariableStatement | null> {\n  const sourceFile = codeToSource(sys, envContent);\n\n  const variableName = \"environment\";\n\n  const s = findVariableStatement(sys, sourceFile, variableName);\n\n  if (s && s.statement.declarationList.declarations.length > 0) {\n    const declarationList = s.statement.declarationList;\n    const declaration = declarationList.declarations[0];\n\n    const initializer = declaration.initializer;\n\n    if (initializer && sys.ts.isObjectLiteralExpression(initializer)) {\n      const newProperty = sys.ts.factory.createPropertyAssignment(\n        sys.ts.factory.createIdentifier(key),\n        sys.ts.factory.createStringLiteral(value),\n      );\n      const newProperties = sys.ts.factory.createNodeArray([\n        ...initializer.properties,\n        newProperty,\n      ]);\n\n      const newInitializer = sys.ts.factory.updateObjectLiteralExpression(\n        initializer,\n        newProperties,\n      );\n\n      const newDeclaration = sys.ts.factory.updateVariableDeclaration(\n        declaration,\n        declaration.name,\n        declaration.exclamationToken,\n        declaration.type,\n        newInitializer,\n      );\n\n      const newDeclarationList = sys.ts.factory.updateVariableDeclarationList(\n        declarationList,\n        [newDeclaration],\n      );\n\n      const newVariableStatement = sys.ts.factory.updateVariableStatement(\n        s.statement,\n        s.statement.modifiers,\n        newDeclarationList,\n      );\n\n      return newVariableStatement;\n    }\n    return null;\n  }\n  return null;\n}\n\nexport async function setEnvValue(\n  sys: DevToolsSys,\n  envPath: string,\n  key: string,\n  value: string,\n): Promise<\"create\" | \"update\" | null> {\n  let envContent = await sys.readFile(envPath);\n\n  // check if we already have an existing file\n  if (envContent) {\n    // read the existing file\n    if (!envContent.includes(key)) {\n      // existing env does not have a builder api key\n      sys.debug(`Add \"${key}\" to ${envPath}`);\n      const updatedEnvNode = await appendApiKey(sys, envContent, key, value);\n      if (updatedEnvNode) {\n        const updatedEnvContent = sourceToCode(sys, updatedEnvNode);\n        const code = await sys.formatCode(envPath, updatedEnvContent);\n        await sys.writeFile(envPath, code);\n      }\n\n      return \"update\";\n    } else {\n      sys.debug(`\"${key}\" already set in ${envPath}`);\n    }\n  } else {\n    // create a new env file since it doesn't exist yet\n    sys.debug(`Creating new env file with \"${key}\" at ${envPath}`);\n\n    const envContent = `\n    // https://www.builder.io/c/docs/using-your-api-key\n    export const environment = {\n      production: false,\n      builderApiKey: \"${value}\",\n    };\n    `.trimStart();\n    const code = await sys.formatCode(envPath, envContent);\n    await sys.writeFile(envPath, code);\n    return \"create\";\n  }\n\n  return null;\n}\n\nexport const ANGULAR_BUILDER_API_KEY_ENV = \"builderApiKey\";\n", "import type { AngularDevToolsSys } from \"./index\";\nimport type ts from \"typescript\";\nimport type {\n  AppDependency,\n  ComponentInfo,\n  ComponentInput,\n  DevToolsSys,\n} from \"../../../types\";\nimport type { AngularComponentOptions } from \"./types\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getDisplayFilePath,\n  getComponentImportPath,\n} from \"../../../common/utils\";\nimport { createTsProgram, getTypeChecker } from \"../../../common/typescript\";\nimport { parseComponentSourcePropsFromNode } from \"../../../common/ast/component-input-types\";\nimport { mergeComponentInputs } from \"../../../common/ast/component-info\";\n\nexport async function getAngularSourceComponentsFromDir(\n  sys: AngularDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: AngularComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n\n      if (shouldSkipFolder(sys, sourceFile.fileName)) {\n        return;\n      }\n\n      if (\n        fileName.startsWith(\".\") ||\n        fileName === \"node_modules\" ||\n        SKIP_APP_FILES.has(fileName)\n      ) {\n        return;\n      }\n\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (filePath === sys.registryPath) {\n        return;\n      }\n\n      const fileCmps = await getAngularComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps.sort((a, b) => a.cmpInfo.name.localeCompare(b.cmpInfo.name));\n}\n\nconst SKIP_APP_FILES: Set<string> = new Set([]);\n\nconst SKIP_FOLDERS = new Set([\"node_modules\"]);\n\nfunction shouldSkipFolder(sys: AngularDevToolsSys, fileName: string) {\n  for (const folder of SKIP_FOLDERS) {\n    if (sys.dirname(fileName).includes(folder)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport async function getAngularComponentsFromPath(\n  sys: DevToolsSys,\n  filePath: string,\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".tsx\" || ext === \".jsx\" || ext === \".ts\" || ext === \".js\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      return getAngularComponentsFromCode(sys, filePath, code);\n    }\n  }\n  return null;\n}\n\nexport function getAngularComponentsFromCode(\n  sys: DevToolsSys,\n  filePath: string,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return getAngularComponentsFromSourceFile(sys, null, filePath, sourceFile);\n}\n\nexport async function getAngularComponentsFromSourceFile(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile,\n) {\n  const fileCmps: AngularComponentSource[] = [];\n  const componentOptions: AngularComponentOptions = {};\n  filePath = sys.normalize(filePath);\n\n  const classStatements = sourceFile.statements.filter(\n    (s) => sys.ts.isClassDeclaration(s) && isComponentDecorator(sys, s),\n  );\n\n  const angularCoreImport = sourceFile.statements.find(\n    (s) =>\n      sys.ts.isImportDeclaration(s) &&\n      sys.ts.isStringLiteral(s.moduleSpecifier) &&\n      s.moduleSpecifier.text === \"@angular/core\",\n  );\n\n  /**\n   * input signals are typically imported as `input`, but it is possible for a\n   * developer to alias that import to something else, so we account for that here.\n   */\n  if (angularCoreImport && sys.ts.isImportDeclaration(angularCoreImport)) {\n    const namedImports = angularCoreImport.importClause?.namedBindings;\n    if (namedImports && sys.ts.isNamedImports(namedImports)) {\n      /**\n       * propertyName is only defined if import is aliased\n       * This code does not handle shadowed `input` variables, so this logic may need\n       * to be improved in the future.\n       */\n      const inputSignal = namedImports.elements.find(\n        (e) => (e.propertyName ?? e.name).text === \"input\",\n      );\n      if (inputSignal) {\n        componentOptions.inputSignalImportName = inputSignal.name.text;\n      }\n    }\n  }\n\n  const reExportedComponents = await getExportedAngularComponentSource(\n    sys,\n    typeChecker,\n    filePath,\n    sourceFile,\n  );\n\n  const enumOptions = extractEnumOptions(sys, sourceFile);\n\n  await Promise.all(\n    classStatements.map(async (node) => {\n      const sCmps = await getAngularComponentSource(\n        sys,\n        typeChecker,\n        filePath,\n        node as ts.ClassDeclaration,\n        enumOptions,\n        componentOptions,\n      );\n      fileCmps.push(...sCmps);\n    }),\n  );\n\n  fileCmps.push(...reExportedComponents);\n\n  return fileCmps;\n}\n\nexport async function parseAngularComponentSourceInputs(\n  sys: DevToolsSys,\n  srcCmp: AngularComponentSource,\n  tsProgram: ts.Program | null,\n) {\n  if (srcCmp.node.fnNode) {\n    const { sourceFile, typeChecker } = await getTypeChecker(\n      sys,\n      srcCmp.cmpInfo.filePath,\n      tsProgram,\n    );\n\n    const typedSrcCmps = await getAngularComponentsFromSourceFile(\n      sys,\n      typeChecker,\n      srcCmp.cmpInfo.filePath,\n      sourceFile,\n    );\n    const typedSrcCmp = typedSrcCmps.find(\n      (t) => t.cmpInfo.id === srcCmp.cmpInfo.id,\n    );\n\n    if (!typedSrcCmp) {\n      throw new Error(\n        `Could not find component ${srcCmp.cmpInfo.name} in ${srcCmp.cmpInfo.filePath}`,\n      );\n    }\n\n    return typedSrcCmp.cmpInfo.inputs;\n\n    // TODO: get inputs using typechecker\n    // return parseComponentSourcePropsFromNode(\n    //   sys,\n    //   typeChecker,\n    //   typedSrcCmp.node.fnNode\n    // );\n  }\n  return [];\n}\n\nexport async function parseAngularAllComponentSourceInputs(\n  sys: DevToolsSys,\n  sourceComponents: AngularComponentSource[],\n  components: ComponentInfo[],\n) {\n  // const hasUnregistered = components.some((c) => !c.isRegistered);\n  // if (!hasUnregistered) {\n  //   return components;\n  // }\n\n  const tsProgram = await createTsProgram(\n    sys,\n    components.map((c) => c.filePath),\n  );\n  const typeChecker = tsProgram.getTypeChecker();\n\n  const componentsWithTypes = await Promise.all(\n    components\n      .filter((cmp) => {\n        if (cmp.name.endsWith(\"Page\")) {\n          return false;\n        }\n        if (cmp.name.endsWith(\"Module\")) {\n          return false;\n        }\n        if (cmp.name === \"AppComponent\") {\n          return false;\n        }\n        return true;\n      })\n      .map(async (cmp) => {\n        if (!cmp.isRegistered) {\n          const sourceFile = tsProgram.getSourceFile(cmp.filePath);\n          if (sourceFile) {\n            const typedSrcCmps = await getAngularComponentsFromSourceFile(\n              sys,\n              typeChecker,\n              cmp.filePath,\n              sourceFile,\n            );\n            const typedSrcCmp = typedSrcCmps.find(\n              (t) => t.cmpInfo.id === cmp.id,\n            );\n            if (typedSrcCmp) {\n              cmp.inputs = parseComponentSourcePropsFromNode(\n                sys,\n                typeChecker,\n                typedSrcCmp.node.fnNode,\n              );\n              const sourceCmp = sourceComponents.find(\n                (s) => s.cmpInfo.id === cmp.id,\n              );\n              if (sourceCmp) {\n                const sourceInputs = await parseAngularComponentSourceInputs(\n                  sys,\n                  sourceCmp,\n                  tsProgram,\n                );\n                mergeComponentInputs(cmp, sourceInputs);\n              }\n            }\n          }\n        }\n        return cmp;\n      }),\n  );\n\n  return componentsWithTypes;\n}\n\nasync function getAngularComponentSource(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  node: ts.ClassDeclaration,\n  enumOptions: Record<string, string[]>,\n  componentOptions: AngularComponentOptions,\n): Promise<AngularComponentSource[]> {\n  const srcCmps: AngularComponentSource[] = [];\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  const cmpName = node.name?.text;\n  if (!cmpName) {\n    return srcCmps;\n  }\n  let isDefaultExport = false;\n\n  if (node.modifiers) {\n    isDefaultExport = node.modifiers.some(\n      (m) => m.kind === sys.ts.SyntaxKind.DefaultKeyword,\n    );\n  }\n\n  const exportName = isDefaultExport ? \"default\" : cmpName;\n  const exportType = isDefaultExport ? \"default\" : \"named\";\n\n  const componentInputs: ComponentInput[] = [];\n\n  node.members.forEach((member) => {\n    /**\n     * Inputs in Angular are either property declarations:\n     * @Input() foo = true; // using decorator\n     * bar = input(false); // using signal\n     *\n     * or getters/setters:\n     * @Input()\n     * get baz(): boolean {\n     *   return this._baz;\n     * }\n     * set baz(value: boolean): {\n     *   this._baz = value;\n     * }\n     */\n    if (\n      sys.ts.isPropertyDeclaration(member) ||\n      sys.ts.isGetAccessor(member) ||\n      sys.ts.isSetAccessor(member)\n    ) {\n      const decorators = sys.ts.getDecorators(member) ?? [];\n      const inputDecorator = decorators.find((d) => isInputDecorator(sys, d));\n\n      const usingDecorator =\n        inputDecorator !== undefined && sys.ts.isIdentifier(member.name);\n      const usingSignal =\n        componentOptions?.inputSignalImportName !== undefined &&\n        sys.ts.isIdentifier(member.name) &&\n        isInputSignal(sys, member, componentOptions.inputSignalImportName);\n\n      if (usingDecorator || usingSignal) {\n        let inputType = \"any\";\n        if (sys.ts.isSetAccessor(member)) {\n          // a setter must have exactly one parameter\n          inputType = getTypeText(sys, member.parameters[0].type);\n        } else if (member.type && typeChecker) {\n          const typeNode = typeChecker.getTypeAtLocation(member.type);\n          const typeString = typeChecker.typeToString(typeNode);\n          inputType = typeString;\n        } else {\n          inputType = getTypeText(sys, member.type);\n        }\n\n        const input: ComponentInput = {\n          name: member.name.text,\n          type: enumOptions[inputType] ? \"string\" : inputType,\n        };\n\n        if (enumOptions[inputType]) {\n          input.enum = enumOptions[inputType];\n        }\n\n        componentInputs.push(input);\n      }\n    }\n  });\n\n  srcCmps.push({\n    cmpInfo: {\n      id: await getComponentId(sys, filePath, cmpName),\n      displayFilePath: getDisplayFilePath(sys, filePath),\n      name: getComponentDisplayName(cmpName),\n      inputs: componentInputs,\n      exportName,\n      exportType,\n      importName: cmpName,\n      filePath,\n      relFilePath,\n      importPath,\n      meta: {\n        ...getComponentDecoratorInfo(sys, node),\n      },\n      framework: \"angular\",\n    },\n    node: {\n      name: cmpName,\n      fnNode: node,\n      deps: undefined,\n    },\n  });\n\n  return srcCmps;\n}\n\nasync function getExportedAngularComponentSource(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile,\n): Promise<AngularComponentSource[]> {\n  const srcCmps: AngularComponentSource[] = [];\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExportDeclaration(s) &&\n      s.exportClause &&\n      sys.ts.isNamedExports(s.exportClause)\n    ) {\n      for (const exportSpecifier of s.exportClause.elements) {\n        // const cmpName = exportSpecifier.name?.getText();\n        const cmpName = exportSpecifier.name?.text;\n        if (!cmpName) {\n          continue;\n        }\n        const exportName = cmpName;\n        const exportType = \"named\";\n\n        const componentInputs: ComponentInput[] = [];\n\n        // Resolve the type of the exported component\n        if (typeChecker) {\n          const symbol = typeChecker.getSymbolAtLocation(exportSpecifier.name);\n          if (symbol) {\n            const type = typeChecker.getDeclaredTypeOfSymbol(symbol);\n            const classMembers = typeChecker.getPropertiesOfType(type);\n            classMembers.forEach((member) => {\n              const declarations = member.getDeclarations();\n\n              if (declarations) {\n                declarations.forEach((declaration) => {\n                  if (sys.ts.isPropertyDeclaration(declaration)) {\n                    const type = typeChecker.getTypeAtLocation(declaration);\n\n                    const input: any = {\n                      name: member.getName(),\n                      type: getTypeName(sys, typeChecker, type),\n                    };\n\n                    componentInputs.push(input);\n                  }\n                });\n              }\n            });\n          }\n        }\n\n        const exportDeclaration =\n          sys.ts.isExportSpecifier(exportSpecifier) && exportSpecifier.parent\n            ? (exportSpecifier.parent.parent as ts.ExportDeclaration)\n            : undefined;\n        let modulePath;\n\n        if (exportDeclaration) {\n          const moduleSpecifier = exportDeclaration.moduleSpecifier;\n\n          if (moduleSpecifier && sys.ts.isStringLiteral(moduleSpecifier)) {\n            const symbol = typeChecker?.getSymbolAtLocation(moduleSpecifier);\n            if (\n              symbol &&\n              symbol.declarations &&\n              symbol.declarations.length > 0\n            ) {\n              const declaration = symbol.declarations[0];\n              if (\n                !sys.ts.isSourceFile(declaration) ||\n                (sys.ts.isSourceFile(declaration) &&\n                  declaration.fileName.includes(\"node_modules\"))\n              ) {\n                modulePath = moduleSpecifier.text;\n              }\n            }\n          }\n        }\n\n        srcCmps.push({\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, cmpName, modulePath),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: getComponentDisplayName(cmpName),\n            inputs: componentInputs,\n            exportName,\n            exportType,\n            importName: cmpName,\n            filePath,\n            relFilePath,\n            importPath: modulePath ? modulePath : importPath,\n            externalImportPath: modulePath,\n            framework: \"angular\",\n          },\n          node: {\n            name: cmpName,\n            fnNode: exportSpecifier,\n            deps: undefined,\n          },\n        });\n      }\n    }\n    // Handle star exports (export * from 'module')\n    else if (\n      sys.ts.isExportDeclaration(s) &&\n      !s.exportClause &&\n      s.moduleSpecifier &&\n      sys.ts.isStringLiteral(s.moduleSpecifier)\n    ) {\n      const moduleName = s.moduleSpecifier.text;\n\n      if (typeChecker) {\n        try {\n          const moduleSymbol = typeChecker.getSymbolAtLocation(\n            s.moduleSpecifier,\n          );\n          if (moduleSymbol && moduleSymbol.exports) {\n            // Get all exports from the module\n            const exportedSymbols =\n              typeChecker.getExportsOfModule(moduleSymbol);\n            // Process each exported symbol\n            for (const exportedSymbol of exportedSymbols) {\n              // Only process classes (most components are classes)\n              if (exportedSymbol.flags & sys.ts.SymbolFlags.Class) {\n                const cmpName = exportedSymbol.getName();\n\n                // Skip internal symbols that start with underscore\n                if (cmpName.startsWith(\"_\")) {\n                  continue;\n                }\n\n                srcCmps.push({\n                  cmpInfo: {\n                    id: await getComponentId(\n                      sys,\n                      filePath,\n                      cmpName,\n                      moduleName,\n                    ),\n                    displayFilePath: getDisplayFilePath(sys, filePath),\n                    name: getComponentDisplayName(cmpName),\n                    inputs: [], // Inputs would need to be resolved separately\n                    exportName: cmpName,\n                    exportType: \"named\",\n                    importName: cmpName,\n                    filePath,\n                    relFilePath,\n                    importPath: moduleName,\n                    externalImportPath: moduleName,\n                    framework: \"angular\",\n                  },\n                  node: {\n                    name: cmpName,\n                    fnNode: s,\n                    deps: undefined,\n                  },\n                });\n              }\n            }\n          }\n        } catch (error) {\n          console.warn(\n            `Error processing star export from ${moduleName}:`,\n            error,\n          );\n        }\n      }\n    }\n  }\n\n  return srcCmps;\n}\n\nfunction isInputDecorator(sys: DevToolsSys, decorator: ts.Decorator): boolean {\n  return decoratorNameIs(sys, decorator, \"Input\");\n}\n\n/**\n * Returns `true` if a class element is using the Angular input() signal.\n * Returns `false` otherwise.\n */\nfunction isInputSignal(\n  sys: DevToolsSys,\n  member: ts.ClassElement,\n  inputSignalName: string,\n): boolean {\n  return (\n    sys.ts.isPropertyDeclaration(member) &&\n    member.initializer !== undefined &&\n    sys.ts.isCallExpression(member.initializer) &&\n    sys.ts.isIdentifier(member.initializer.expression) &&\n    member.initializer.expression.text === inputSignalName\n  );\n}\n\nfunction decoratorNameIs(\n  sys: DevToolsSys,\n  decorator: ts.Decorator,\n  name: string,\n): boolean {\n  if (sys.ts.isCallExpression(decorator.expression)) {\n    const callExpression = decorator.expression;\n    if (sys.ts.isIdentifier(callExpression.expression)) {\n      return callExpression.expression?.text === name;\n    }\n  }\n  return false;\n}\n\nfunction isComponentDecorator(\n  sys: DevToolsSys,\n  node: ts.ClassDeclaration,\n): boolean {\n  const decorators = sys.ts.getDecorators(node);\n  const hasComponentDecorator = decorators?.some(\n    (decorator) =>\n      sys.ts.isCallExpression(decorator.expression) &&\n      sys.ts.isIdentifier(decorator.expression.expression) &&\n      decorator.expression.expression.text === \"Component\",\n  );\n  return Boolean(hasComponentDecorator);\n}\n\nfunction getTypeText(sys: DevToolsSys, type: ts.TypeNode | undefined): string {\n  if (!type) {\n    return \"any\";\n  }\n  let inputType = \"any\";\n  switch (type.kind) {\n    case sys.ts.SyntaxKind.StringKeyword:\n      inputType = \"string\";\n      break;\n    case sys.ts.SyntaxKind.NumberKeyword:\n      inputType = \"number\";\n      break;\n    case sys.ts.SyntaxKind.BooleanKeyword:\n      inputType = \"boolean\";\n      break;\n    case sys.ts.SyntaxKind.TypeReference:\n      if (\n        sys.ts.isTypeReferenceNode(type) &&\n        sys.ts.isIdentifier(type.typeName)\n      ) {\n        inputType = type.typeName.text;\n      }\n      break;\n  }\n  return inputType.includes(\"|\") ? \"string\" : inputType;\n}\n\nfunction extractEnumOptions(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n): Record<string, string[]> {\n  const enumOptions: Record<string, string[]> = {};\n\n  sys.ts.forEachChild(sourceFile, (node) => {\n    if (\n      sys.ts.isTypeAliasDeclaration(node) &&\n      sys.ts.isUnionTypeNode(node.type) &&\n      node.type.types.every(\n        (t) =>\n          sys.ts.isLiteralTypeNode(t) &&\n          sys.ts.isStringLiteral((t as ts.LiteralTypeNode).literal),\n      )\n    ) {\n      enumOptions[node.name.text] = node.type.types.map(\n        (t) => ((t as ts.LiteralTypeNode).literal as ts.StringLiteral).text,\n      );\n    }\n  });\n\n  return enumOptions;\n}\n\nexport interface AngularComponentSourceNode {\n  name: string;\n  fnNode: ts.Node;\n  deps: AppDependency[] | undefined;\n}\n\nexport interface AngularComponentSource {\n  cmpInfo: ComponentInfo;\n  node: AngularComponentSourceNode;\n}\n\nfunction getTypeName(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  type: ts.Type,\n): string {\n  let typeName = typeChecker.typeToString(type);\n\n  // Check if the type is 'any' and provide a more detailed type if available\n  if (typeName === \"any\") {\n    const symbol = type.getSymbol();\n    if (symbol) {\n      const declarations = symbol.getDeclarations();\n      if (declarations && declarations.length > 0) {\n        const declaration = declarations[0];\n        if (sys.ts.isVariableDeclaration(declaration)) {\n          // Try to get the type from variable declarations\n          const typeAnnotation = declaration.type;\n          if (typeAnnotation) {\n            typeName = typeChecker.typeToString(\n              typeChecker.getTypeAtLocation(typeAnnotation),\n            );\n          }\n        }\n      }\n    }\n  }\n\n  return typeName;\n}\n\nfunction getComponentDecoratorInfo(\n  sys: DevToolsSys,\n  node: ts.ClassDeclaration,\n) {\n  const {\n    getDecorators,\n    isCallExpression,\n    isIdentifier,\n    isObjectLiteralExpression,\n    isPropertyAssignment,\n    isStringLiteral,\n    SyntaxKind,\n  } = sys.ts;\n\n  let selector, standalone;\n  const classDecorators = getDecorators(node);\n  classDecorators?.forEach((decorator) => {\n    if (decoratorNameIs(sys, decorator, \"Component\")) {\n      const { expression } = decorator;\n      if (isCallExpression(expression)) {\n        const [arg] = expression.arguments;\n        if (isObjectLiteralExpression(arg)) {\n          arg.properties.forEach((prop) => {\n            if (isPropertyAssignment(prop) && isIdentifier(prop.name)) {\n              if (\n                prop.name.escapedText === \"selector\" &&\n                isStringLiteral(prop.initializer)\n              ) {\n                selector = prop.initializer.text;\n              }\n              if (prop.name.escapedText === \"standalone\") {\n                standalone = prop.initializer.kind === SyntaxKind.TrueKeyword;\n              }\n            }\n          });\n        }\n      }\n    }\n  });\n\n  return { selector, standalone };\n}\n", "import type ts from \"typescript\";\nimport type { AngularDevToolsSys } from \".\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\n\nexport async function angularUpdateAppModule(\n  sys: AngularDevToolsSys,\n  cmpName: string,\n  cmpPath: string,\n) {\n  const fileExtension = sys.typescriptEnabled ? \".ts\" : \".js\";\n  const fileName = `app.module${fileExtension}`;\n\n  const appModulePath = sys.join(sys.appDir, fileName);\n  const appModuleCode = await sys.readFile(appModulePath);\n\n  if (!appModuleCode) {\n    sys.Sentry?.captureException(\n      new Error(\n        `Unable to read app.module.${fileExtension} at ${appModulePath}`,\n      ),\n      {\n        extra: {\n          appModuleCode,\n          appModulePath,\n        },\n      },\n    );\n    return;\n  }\n\n  const updatedCode = await angularEnsureAppModuleImports(\n    sys,\n    appModulePath,\n    cmpName,\n    cmpPath,\n    appModuleCode,\n  );\n\n  if (!updatedCode) {\n    sys.Sentry?.captureException(\n      new Error(\n        `Unable to update app.module.${fileExtension} at ${appModulePath}`,\n      ),\n      {\n        extra: {\n          appModuleCode,\n          appModulePath,\n        },\n      },\n    );\n    return;\n  }\n\n  await sys.writeFile(appModulePath, updatedCode);\n\n  return appModulePath;\n}\n\nexport async function angularEnsureAppModuleImports(\n  sys: AngularDevToolsSys,\n  appModulePath: string,\n  cmpName: string,\n  cmpPath: string,\n  code: string,\n) {\n  let content = code;\n  let sourceFile = codeToSource(sys, code);\n\n  const cmpRelPath = getImportPath(sys, appModulePath, cmpPath);\n\n  sourceFile = ensureImport(sys, sourceFile, {\n    namedImports: [cmpName],\n    importPath: cmpRelPath,\n  });\n\n  sourceFile = ensureImport(sys, sourceFile, {\n    namedImports: [\"Content\"],\n    importPath: \"@builder.io/sdk-angular\",\n  });\n\n  const updatedStatements: ts.Statement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isClassDeclaration(s) && s.name?.text === \"AppModule\") {\n      const updatedClassDeclaration = modifyNgModuleDecorator(sys, cmpName, s);\n      updatedStatements.push(updatedClassDeclaration);\n    } else {\n      updatedStatements.push(s);\n    }\n  }\n\n  sourceFile = sys.ts.factory.updateSourceFile(sourceFile, updatedStatements);\n\n  content = sourceToCode(sys, sourceFile);\n  return content;\n}\n\nfunction modifyNgModuleDecorator(\n  sys: AngularDevToolsSys,\n  cmpName: string,\n  node: ts.ClassDeclaration,\n): ts.ClassDeclaration {\n  const decorators = sys.ts.getDecorators(node);\n\n  if (decorators) {\n    for (const decorator of decorators) {\n      if (\n        sys.ts.isCallExpression(decorator.expression) &&\n        sys.ts.isIdentifier(decorator.expression.expression) &&\n        decorator.expression.expression.text === \"NgModule\"\n      ) {\n        const ngModuleArgs = decorator.expression.arguments;\n        if (\n          ngModuleArgs.length === 1 &&\n          sys.ts.isObjectLiteralExpression(ngModuleArgs[0])\n        ) {\n          let updatedObjectLiteral = appendArrayProperty(\n            sys,\n            ngModuleArgs[0],\n            \"declarations\",\n            cmpName,\n          );\n\n          if (updatedObjectLiteral) {\n            const updatedObjectLiteralWithContent = appendArrayProperty(\n              sys,\n              updatedObjectLiteral,\n              \"imports\",\n              \"Content\",\n            );\n\n            if (updatedObjectLiteralWithContent) {\n              updatedObjectLiteral = updatedObjectLiteralWithContent;\n            }\n\n            if (updatedObjectLiteral) {\n              const updatedDecorator = sys.ts.factory.updateDecorator(\n                decorator,\n                sys.ts.factory.updateCallExpression(\n                  decorator.expression,\n                  decorator.expression.expression,\n                  decorator.expression.typeArguments,\n                  [updatedObjectLiteral],\n                ),\n              );\n\n              const updatedDecorators = decorators.map((d) =>\n                d === decorator ? updatedDecorator : d,\n              );\n\n              const modifiers = [\n                ...updatedDecorators,\n                ...(sys.ts.getModifiers(node) || []),\n              ];\n\n              return sys.ts.factory.updateClassDeclaration(\n                node,\n                modifiers,\n                node.name,\n                node.typeParameters,\n                node.heritageClauses,\n                node.members,\n              );\n            }\n          }\n        }\n      }\n    }\n  }\n  return node;\n}\n\nfunction appendArrayProperty(\n  sys: AngularDevToolsSys,\n  objectExpression: ts.ObjectLiteralExpression,\n  propertyName: string,\n  itemName: string,\n) {\n  const properties = [...objectExpression.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === propertyName;\n  });\n\n  if (pIndex > -1) {\n    const prop = properties[pIndex];\n    if (\n      sys.ts.isPropertyAssignment(prop) &&\n      prop.initializer &&\n      sys.ts.isArrayLiteralExpression(prop.initializer)\n    ) {\n      const updatedList = updateArrayItems(\n        sys,\n        prop.initializer as ts.ArrayLiteralExpression,\n        itemName,\n      );\n      if (updatedList) {\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          prop,\n          prop.name,\n          updatedList,\n        );\n        return sys.ts.factory.updateObjectLiteralExpression(\n          objectExpression,\n          properties,\n        );\n      }\n      // if item is already present in array\n      return null;\n    }\n    // if prop is present but it's not an array\n    return null;\n  }\n\n  // if prop is not present\n  const prop = updateArrayItems(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n    itemName,\n  );\n  if (prop) {\n    return sys.ts.factory.updateObjectLiteralExpression(objectExpression, [\n      ...properties,\n      sys.ts.factory.createPropertyAssignment(propertyName, prop),\n    ]);\n  }\n\n  return null;\n}\n\nfunction updateArrayItems(\n  sys: AngularDevToolsSys,\n  arrayExpression: ts.ArrayLiteralExpression,\n  itemToBeInserted: string,\n) {\n  const hasItem = arrayExpression.elements.some((e) => {\n    if (sys.ts.isIdentifier(e)) {\n      return e.text === itemToBeInserted;\n    }\n    return false;\n  });\n\n  if (hasItem) {\n    return null;\n  }\n\n  return sys.ts.factory.updateArrayLiteralExpression(arrayExpression, [\n    ...arrayExpression.elements,\n    sys.ts.factory.createIdentifier(itemToBeInserted),\n  ]);\n}\n", "import type { AngularDevToolsSys } from \".\";\n\nexport async function angularAddRoute(\n  sys: AngularDevToolsSys,\n  path: string,\n  componentName: string,\n  componentPath: string,\n) {\n  const fileExtension = sys.typescriptEnabled ? \".ts\" : \".js\";\n  const fileName = `app.routes${fileExtension}`;\n  const appRoutesPath = sys.join(sys.appDir, fileName);\n  try {\n    if (sys.magicast) {\n      const mod = await sys.magicast.loadFile(appRoutesPath);\n\n      // Get exports or create new if none exist\n      const exportKeys = Object.keys(mod.exports);\n      if (exportKeys.length === 0) {\n        // Create new export named 'routes' if no exports exist\n        mod.exports.routes = [];\n      }\n\n      // Get the first export (either existing or newly created)\n      const exportKey = Object.keys(mod.exports)[0];\n      const routes = mod.exports[exportKey];\n\n      // Don't add the same route twice\n      if (routes.find((r: any) => r.path === path)) {\n        return;\n      }\n      const newEntry = sys.magicast.builders.raw(\"{}\");\n      newEntry.path = path;\n      newEntry.component = sys.magicast.builders.raw(componentName);\n      routes.push(newEntry);\n\n      // Don't add the same import twice\n      if (mod.imports.$items.find((i) => i.imported === componentName)) {\n        return;\n      }\n      mod.imports.$append({\n        imported: componentName,\n        from: componentPath,\n      });\n      await sys.magicast.writeFile(mod, appRoutesPath);\n    }\n  } catch (e) {\n    let content: string | null = null;\n    try {\n      content = sys.readFileSync(appRoutesPath);\n    } catch (e) {\n      sys.Sentry?.captureException(e, {\n        level: \"warning\",\n      });\n    }\n    sys.Sentry?.captureException(e, {\n      extra: {\n        content: content,\n        appRoutesPath,\n        componentName,\n        componentPath,\n      },\n    });\n  }\n}\n", "// This is a generated file. Do not edit.\nmodule.exports.Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/\nmodule.exports.ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/\nmodule.exports.ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n", "const unicode = require('../lib/unicode')\n\nmodule.exports = {\n    isSpaceSeparator (c) {\n        return typeof c === 'string' && unicode.Space_Separator.test(c)\n    },\n\n    isIdStartChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c === '$') || (c === '_') ||\n        unicode.ID_Start.test(c)\n        )\n    },\n\n    isIdContinueChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c >= '0' && c <= '9') ||\n        (c === '$') || (c === '_') ||\n        (c === '\\u200C') || (c === '\\u200D') ||\n        unicode.ID_Continue.test(c)\n        )\n    },\n\n    isDigit (c) {\n        return typeof c === 'string' && /[0-9]/.test(c)\n    },\n\n    isHexDigit (c) {\n        return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n    },\n}\n", "const util = require('./util')\n\nlet source\nlet parseState\nlet stack\nlet pos\nlet line\nlet column\nlet token\nlet key\nlet root\n\nmodule.exports = function parse (text, reviver) {\n    source = String(text)\n    parseState = 'start'\n    stack = []\n    pos = 0\n    line = 1\n    column = 0\n    token = undefined\n    key = undefined\n    root = undefined\n\n    do {\n        token = lex()\n\n        // This code is unreachable.\n        // if (!parseStates[parseState]) {\n        //     throw invalidParseState()\n        // }\n\n        parseStates[parseState]()\n    } while (token.type !== 'eof')\n\n    if (typeof reviver === 'function') {\n        return internalize({'': root}, '', reviver)\n    }\n\n    return root\n}\n\nfunction internalize (holder, name, reviver) {\n    const value = holder[name]\n    if (value != null && typeof value === 'object') {\n        if (Array.isArray(value)) {\n            for (let i = 0; i < value.length; i++) {\n                const key = String(i)\n                const replacement = internalize(value, key, reviver)\n                if (replacement === undefined) {\n                    delete value[key]\n                } else {\n                    Object.defineProperty(value, key, {\n                        value: replacement,\n                        writable: true,\n                        enumerable: true,\n                        configurable: true,\n                    })\n                }\n            }\n        } else {\n            for (const key in value) {\n                const replacement = internalize(value, key, reviver)\n                if (replacement === undefined) {\n                    delete value[key]\n                } else {\n                    Object.defineProperty(value, key, {\n                        value: replacement,\n                        writable: true,\n                        enumerable: true,\n                        configurable: true,\n                    })\n                }\n            }\n        }\n    }\n\n    return reviver.call(holder, name, value)\n}\n\nlet lexState\nlet buffer\nlet doubleQuote\nlet sign\nlet c\n\nfunction lex () {\n    lexState = 'default'\n    buffer = ''\n    doubleQuote = false\n    sign = 1\n\n    for (;;) {\n        c = peek()\n\n        // This code is unreachable.\n        // if (!lexStates[lexState]) {\n        //     throw invalidLexState(lexState)\n        // }\n\n        const token = lexStates[lexState]()\n        if (token) {\n            return token\n        }\n    }\n}\n\nfunction peek () {\n    if (source[pos]) {\n        return String.fromCodePoint(source.codePointAt(pos))\n    }\n}\n\nfunction read () {\n    const c = peek()\n\n    if (c === '\\n') {\n        line++\n        column = 0\n    } else if (c) {\n        column += c.length\n    } else {\n        column++\n    }\n\n    if (c) {\n        pos += c.length\n    }\n\n    return c\n}\n\nconst lexStates = {\n    default () {\n        switch (c) {\n        case '\\t':\n        case '\\v':\n        case '\\f':\n        case ' ':\n        case '\\u00A0':\n        case '\\uFEFF':\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read()\n            return\n\n        case '/':\n            read()\n            lexState = 'comment'\n            return\n\n        case undefined:\n            read()\n            return newToken('eof')\n        }\n\n        if (util.isSpaceSeparator(c)) {\n            read()\n            return\n        }\n\n        // This code is unreachable.\n        // if (!lexStates[parseState]) {\n        //     throw invalidLexState(parseState)\n        // }\n\n        return lexStates[parseState]()\n    },\n\n    comment () {\n        switch (c) {\n        case '*':\n            read()\n            lexState = 'multiLineComment'\n            return\n\n        case '/':\n            read()\n            lexState = 'singleLineComment'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    multiLineComment () {\n        switch (c) {\n        case '*':\n            read()\n            lexState = 'multiLineCommentAsterisk'\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read()\n    },\n\n    multiLineCommentAsterisk () {\n        switch (c) {\n        case '*':\n            read()\n            return\n\n        case '/':\n            read()\n            lexState = 'default'\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read()\n        lexState = 'multiLineComment'\n    },\n\n    singleLineComment () {\n        switch (c) {\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read()\n            lexState = 'default'\n            return\n\n        case undefined:\n            read()\n            return newToken('eof')\n        }\n\n        read()\n    },\n\n    value () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        case 'n':\n            read()\n            literal('ull')\n            return newToken('null', null)\n\n        case 't':\n            read()\n            literal('rue')\n            return newToken('boolean', true)\n\n        case 'f':\n            read()\n            literal('alse')\n            return newToken('boolean', false)\n\n        case '-':\n        case '+':\n            if (read() === '-') {\n                sign = -1\n            }\n\n            lexState = 'sign'\n            return\n\n        case '.':\n            buffer = read()\n            lexState = 'decimalPointLeading'\n            return\n\n        case '0':\n            buffer = read()\n            lexState = 'zero'\n            return\n\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            buffer = read()\n            lexState = 'decimalInteger'\n            return\n\n        case 'I':\n            read()\n            literal('nfinity')\n            return newToken('numeric', Infinity)\n\n        case 'N':\n            read()\n            literal('aN')\n            return newToken('numeric', NaN)\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"')\n            buffer = ''\n            lexState = 'string'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    identifierNameStartEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read()\n        const u = unicodeEscape()\n        switch (u) {\n        case '$':\n        case '_':\n            break\n\n        default:\n            if (!util.isIdStartChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u\n        lexState = 'identifierName'\n    },\n\n    identifierName () {\n        switch (c) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            buffer += read()\n            return\n\n        case '\\\\':\n            read()\n            lexState = 'identifierNameEscape'\n            return\n        }\n\n        if (util.isIdContinueChar(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('identifier', buffer)\n    },\n\n    identifierNameEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read()\n        const u = unicodeEscape()\n        switch (u) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            break\n\n        default:\n            if (!util.isIdContinueChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u\n        lexState = 'identifierName'\n    },\n\n    sign () {\n        switch (c) {\n        case '.':\n            buffer = read()\n            lexState = 'decimalPointLeading'\n            return\n\n        case '0':\n            buffer = read()\n            lexState = 'zero'\n            return\n\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            buffer = read()\n            lexState = 'decimalInteger'\n            return\n\n        case 'I':\n            read()\n            literal('nfinity')\n            return newToken('numeric', sign * Infinity)\n\n        case 'N':\n            read()\n            literal('aN')\n            return newToken('numeric', NaN)\n        }\n\n        throw invalidChar(read())\n    },\n\n    zero () {\n        switch (c) {\n        case '.':\n            buffer += read()\n            lexState = 'decimalPoint'\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n\n        case 'x':\n        case 'X':\n            buffer += read()\n            lexState = 'hexadecimal'\n            return\n        }\n\n        return newToken('numeric', sign * 0)\n    },\n\n    decimalInteger () {\n        switch (c) {\n        case '.':\n            buffer += read()\n            lexState = 'decimalPoint'\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalPointLeading () {\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalFraction'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalPoint () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalFraction'\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalFraction () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalExponent () {\n        switch (c) {\n        case '+':\n        case '-':\n            buffer += read()\n            lexState = 'decimalExponentSign'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalExponentInteger'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentSign () {\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalExponentInteger'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentInteger () {\n        if (util.isDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    hexadecimal () {\n        if (util.isHexDigit(c)) {\n            buffer += read()\n            lexState = 'hexadecimalInteger'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    hexadecimalInteger () {\n        if (util.isHexDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    string () {\n        switch (c) {\n        case '\\\\':\n            read()\n            buffer += escape()\n            return\n\n        case '\"':\n            if (doubleQuote) {\n                read()\n                return newToken('string', buffer)\n            }\n\n            buffer += read()\n            return\n\n        case \"'\":\n            if (!doubleQuote) {\n                read()\n                return newToken('string', buffer)\n            }\n\n            buffer += read()\n            return\n\n        case '\\n':\n        case '\\r':\n            throw invalidChar(read())\n\n        case '\\u2028':\n        case '\\u2029':\n            separatorChar(c)\n            break\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        buffer += read()\n    },\n\n    start () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        // This code is unreachable since the default lexState handles eof.\n        // case undefined:\n        //     return newToken('eof')\n        }\n\n        lexState = 'value'\n    },\n\n    beforePropertyName () {\n        switch (c) {\n        case '$':\n        case '_':\n            buffer = read()\n            lexState = 'identifierName'\n            return\n\n        case '\\\\':\n            read()\n            lexState = 'identifierNameStartEscape'\n            return\n\n        case '}':\n            return newToken('punctuator', read())\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"')\n            lexState = 'string'\n            return\n        }\n\n        if (util.isIdStartChar(c)) {\n            buffer += read()\n            lexState = 'identifierName'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    afterPropertyName () {\n        if (c === ':') {\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforePropertyValue () {\n        lexState = 'value'\n    },\n\n    afterPropertyValue () {\n        switch (c) {\n        case ',':\n        case '}':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforeArrayValue () {\n        if (c === ']') {\n            return newToken('punctuator', read())\n        }\n\n        lexState = 'value'\n    },\n\n    afterArrayValue () {\n        switch (c) {\n        case ',':\n        case ']':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the default lexState.\n        // if (c === undefined) {\n        //     read()\n        //     return newToken('eof')\n        // }\n\n        throw invalidChar(read())\n    },\n}\n\nfunction newToken (type, value) {\n    return {\n        type,\n        value,\n        line,\n        column,\n    }\n}\n\nfunction literal (s) {\n    for (const c of s) {\n        const p = peek()\n\n        if (p !== c) {\n            throw invalidChar(read())\n        }\n\n        read()\n    }\n}\n\nfunction escape () {\n    const c = peek()\n    switch (c) {\n    case 'b':\n        read()\n        return '\\b'\n\n    case 'f':\n        read()\n        return '\\f'\n\n    case 'n':\n        read()\n        return '\\n'\n\n    case 'r':\n        read()\n        return '\\r'\n\n    case 't':\n        read()\n        return '\\t'\n\n    case 'v':\n        read()\n        return '\\v'\n\n    case '0':\n        read()\n        if (util.isDigit(peek())) {\n            throw invalidChar(read())\n        }\n\n        return '\\0'\n\n    case 'x':\n        read()\n        return hexEscape()\n\n    case 'u':\n        read()\n        return unicodeEscape()\n\n    case '\\n':\n    case '\\u2028':\n    case '\\u2029':\n        read()\n        return ''\n\n    case '\\r':\n        read()\n        if (peek() === '\\n') {\n            read()\n        }\n\n        return ''\n\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n        throw invalidChar(read())\n\n    case undefined:\n        throw invalidChar(read())\n    }\n\n    return read()\n}\n\nfunction hexEscape () {\n    let buffer = ''\n    let c = peek()\n\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read()\n\n    c = peek()\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read()\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n    let buffer = ''\n    let count = 4\n\n    while (count-- > 0) {\n        const c = peek()\n        if (!util.isHexDigit(c)) {\n            throw invalidChar(read())\n        }\n\n        buffer += read()\n    }\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n    start () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push()\n    },\n\n    beforePropertyName () {\n        switch (token.type) {\n        case 'identifier':\n        case 'string':\n            key = token.value\n            parseState = 'afterPropertyName'\n            return\n\n        case 'punctuator':\n            // This code is unreachable since it's handled by the lexState.\n            // if (token.value !== '}') {\n            //     throw invalidToken()\n            // }\n\n            pop()\n            return\n\n        case 'eof':\n            throw invalidEOF()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterPropertyName () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator' || token.value !== ':') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        parseState = 'beforePropertyValue'\n    },\n\n    beforePropertyValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push()\n    },\n\n    beforeArrayValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        if (token.type === 'punctuator' && token.value === ']') {\n            pop()\n            return\n        }\n\n        push()\n    },\n\n    afterPropertyValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforePropertyName'\n            return\n\n        case '}':\n            pop()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterArrayValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforeArrayValue'\n            return\n\n        case ']':\n            pop()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'eof') {\n        //     throw invalidToken()\n        // }\n    },\n}\n\nfunction push () {\n    let value\n\n    switch (token.type) {\n    case 'punctuator':\n        switch (token.value) {\n        case '{':\n            value = {}\n            break\n\n        case '[':\n            value = []\n            break\n        }\n\n        break\n\n    case 'null':\n    case 'boolean':\n    case 'numeric':\n    case 'string':\n        value = token.value\n        break\n\n    // This code is unreachable.\n    // default:\n    //     throw invalidToken()\n    }\n\n    if (root === undefined) {\n        root = value\n    } else {\n        const parent = stack[stack.length - 1]\n        if (Array.isArray(parent)) {\n            parent.push(value)\n        } else {\n            Object.defineProperty(parent, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true,\n            })\n        }\n    }\n\n    if (value !== null && typeof value === 'object') {\n        stack.push(value)\n\n        if (Array.isArray(value)) {\n            parseState = 'beforeArrayValue'\n        } else {\n            parseState = 'beforePropertyName'\n        }\n    } else {\n        const current = stack[stack.length - 1]\n        if (current == null) {\n            parseState = 'end'\n        } else if (Array.isArray(current)) {\n            parseState = 'afterArrayValue'\n        } else {\n            parseState = 'afterPropertyValue'\n        }\n    }\n}\n\nfunction pop () {\n    stack.pop()\n\n    const current = stack[stack.length - 1]\n    if (current == null) {\n        parseState = 'end'\n    } else if (Array.isArray(current)) {\n        parseState = 'afterArrayValue'\n    } else {\n        parseState = 'afterPropertyValue'\n    }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n//     return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n//     return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n    if (c === undefined) {\n        return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n    }\n\n    return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n    return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n//     if (token.type === 'eof') {\n//         return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n//     }\n\n//     const c = String.fromCodePoint(token.value.codePointAt(0))\n//     return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n    column -= 5\n    return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n    console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`)\n}\n\nfunction formatChar (c) {\n    const replacements = {\n        \"'\": \"\\\\'\",\n        '\"': '\\\\\"',\n        '\\\\': '\\\\\\\\',\n        '\\b': '\\\\b',\n        '\\f': '\\\\f',\n        '\\n': '\\\\n',\n        '\\r': '\\\\r',\n        '\\t': '\\\\t',\n        '\\v': '\\\\v',\n        '\\0': '\\\\0',\n        '\\u2028': '\\\\u2028',\n        '\\u2029': '\\\\u2029',\n    }\n\n    if (replacements[c]) {\n        return replacements[c]\n    }\n\n    if (c < ' ') {\n        const hexString = c.charCodeAt(0).toString(16)\n        return '\\\\x' + ('00' + hexString).substring(hexString.length)\n    }\n\n    return c\n}\n\nfunction syntaxError (message) {\n    const err = new SyntaxError(message)\n    err.lineNumber = line\n    err.columnNumber = column\n    return err\n}\n", "const util = require('./util')\n\nmodule.exports = function stringify (value, replacer, space) {\n    const stack = []\n    let indent = ''\n    let propertyList\n    let replacerFunc\n    let gap = ''\n    let quote\n\n    if (\n        replacer != null &&\n        typeof replacer === 'object' &&\n        !Array.isArray(replacer)\n    ) {\n        space = replacer.space\n        quote = replacer.quote\n        replacer = replacer.replacer\n    }\n\n    if (typeof replacer === 'function') {\n        replacerFunc = replacer\n    } else if (Array.isArray(replacer)) {\n        propertyList = []\n        for (const v of replacer) {\n            let item\n\n            if (typeof v === 'string') {\n                item = v\n            } else if (\n                typeof v === 'number' ||\n                v instanceof String ||\n                v instanceof Number\n            ) {\n                item = String(v)\n            }\n\n            if (item !== undefined && propertyList.indexOf(item) < 0) {\n                propertyList.push(item)\n            }\n        }\n    }\n\n    if (space instanceof Number) {\n        space = Number(space)\n    } else if (space instanceof String) {\n        space = String(space)\n    }\n\n    if (typeof space === 'number') {\n        if (space > 0) {\n            space = Math.min(10, Math.floor(space))\n            gap = '          '.substr(0, space)\n        }\n    } else if (typeof space === 'string') {\n        gap = space.substr(0, 10)\n    }\n\n    return serializeProperty('', {'': value})\n\n    function serializeProperty (key, holder) {\n        let value = holder[key]\n        if (value != null) {\n            if (typeof value.toJSON5 === 'function') {\n                value = value.toJSON5(key)\n            } else if (typeof value.toJSON === 'function') {\n                value = value.toJSON(key)\n            }\n        }\n\n        if (replacerFunc) {\n            value = replacerFunc.call(holder, key, value)\n        }\n\n        if (value instanceof Number) {\n            value = Number(value)\n        } else if (value instanceof String) {\n            value = String(value)\n        } else if (value instanceof Boolean) {\n            value = value.valueOf()\n        }\n\n        switch (value) {\n        case null: return 'null'\n        case true: return 'true'\n        case false: return 'false'\n        }\n\n        if (typeof value === 'string') {\n            return quoteString(value, false)\n        }\n\n        if (typeof value === 'number') {\n            return String(value)\n        }\n\n        if (typeof value === 'object') {\n            return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n        }\n\n        return undefined\n    }\n\n    function quoteString (value) {\n        const quotes = {\n            \"'\": 0.1,\n            '\"': 0.2,\n        }\n\n        const replacements = {\n            \"'\": \"\\\\'\",\n            '\"': '\\\\\"',\n            '\\\\': '\\\\\\\\',\n            '\\b': '\\\\b',\n            '\\f': '\\\\f',\n            '\\n': '\\\\n',\n            '\\r': '\\\\r',\n            '\\t': '\\\\t',\n            '\\v': '\\\\v',\n            '\\0': '\\\\0',\n            '\\u2028': '\\\\u2028',\n            '\\u2029': '\\\\u2029',\n        }\n\n        let product = ''\n\n        for (let i = 0; i < value.length; i++) {\n            const c = value[i]\n            switch (c) {\n            case \"'\":\n            case '\"':\n                quotes[c]++\n                product += c\n                continue\n\n            case '\\0':\n                if (util.isDigit(value[i + 1])) {\n                    product += '\\\\x00'\n                    continue\n                }\n            }\n\n            if (replacements[c]) {\n                product += replacements[c]\n                continue\n            }\n\n            if (c < ' ') {\n                let hexString = c.charCodeAt(0).toString(16)\n                product += '\\\\x' + ('00' + hexString).substring(hexString.length)\n                continue\n            }\n\n            product += c\n        }\n\n        const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b)\n\n        product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar])\n\n        return quoteChar + product + quoteChar\n    }\n\n    function serializeObject (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value)\n\n        let stepback = indent\n        indent = indent + gap\n\n        let keys = propertyList || Object.keys(value)\n        let partial = []\n        for (const key of keys) {\n            const propertyString = serializeProperty(key, value)\n            if (propertyString !== undefined) {\n                let member = serializeKey(key) + ':'\n                if (gap !== '') {\n                    member += ' '\n                }\n                member += propertyString\n                partial.push(member)\n            }\n        }\n\n        let final\n        if (partial.length === 0) {\n            final = '{}'\n        } else {\n            let properties\n            if (gap === '') {\n                properties = partial.join(',')\n                final = '{' + properties + '}'\n            } else {\n                let separator = ',\\n' + indent\n                properties = partial.join(separator)\n                final = '{\\n' + indent + properties + ',\\n' + stepback + '}'\n            }\n        }\n\n        stack.pop()\n        indent = stepback\n        return final\n    }\n\n    function serializeKey (key) {\n        if (key.length === 0) {\n            return quoteString(key, true)\n        }\n\n        const firstChar = String.fromCodePoint(key.codePointAt(0))\n        if (!util.isIdStartChar(firstChar)) {\n            return quoteString(key, true)\n        }\n\n        for (let i = firstChar.length; i < key.length; i++) {\n            if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n                return quoteString(key, true)\n            }\n        }\n\n        return key\n    }\n\n    function serializeArray (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value)\n\n        let stepback = indent\n        indent = indent + gap\n\n        let partial = []\n        for (let i = 0; i < value.length; i++) {\n            const propertyString = serializeProperty(String(i), value)\n            partial.push((propertyString !== undefined) ? propertyString : 'null')\n        }\n\n        let final\n        if (partial.length === 0) {\n            final = '[]'\n        } else {\n            if (gap === '') {\n                let properties = partial.join(',')\n                final = '[' + properties + ']'\n            } else {\n                let separator = ',\\n' + indent\n                let properties = partial.join(separator)\n                final = '[\\n' + indent + properties + ',\\n' + stepback + ']'\n            }\n        }\n\n        stack.pop()\n        indent = stepback\n        return final\n    }\n}\n", "const parse = require('./parse')\nconst stringify = require('./stringify')\n\nconst JSON5 = {\n    parse,\n    stringify,\n}\n\nmodule.exports = JSON5\n", "import type { AngularDevToolsSys } from \".\";\nimport JSON5 from \"json5\";\n\nexport async function angularFixTsConfig(sys: AngularDevToolsSys) {\n  const tsConfigPath = sys.ts.findConfigFile(\n    sys.getAppRootDir(),\n    sys.existsSync,\n  );\n  if (tsConfigPath) {\n    const tsConfigContent = await sys.readFile(tsConfigPath);\n    if (!tsConfigContent) {\n      return;\n    }\n    const tsConfig = JSON5.parse(tsConfigContent);\n    if (!tsConfig || typeof tsConfig !== \"object\" || Array.isArray(tsConfig)) {\n      return;\n    }\n    const compilerOptions = tsConfig.compilerOptions;\n    if (\n      !compilerOptions ||\n      typeof compilerOptions !== \"object\" ||\n      Array.isArray(compilerOptions)\n    ) {\n      return;\n    }\n    let paths = compilerOptions.paths;\n    if (!paths || typeof paths !== \"object\" || Array.isArray(paths)) {\n      compilerOptions.paths = {} as any;\n      paths = compilerOptions.paths;\n    }\n    Object.assign(compilerOptions.paths, {\n      \"~/*\": [\"./src/*\"],\n    });\n    await sys.writeFile(tsConfigPath, JSON.stringify(tsConfig, null, 2));\n  }\n}\n", "import type { ModifiedFile } from \"../../../types\";\nimport type { AngularDevToolsSys } from \".\";\nimport { angularComponentRegistry } from \"./angular-registry\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { ANGULAR_BUILDER_API_KEY_ENV } from \"./angular-api-key\";\nimport { angularUpdateAppModule } from \"./angular-app-module-imports\";\nimport { angularAddRoute } from \"./angular-app-routes-update\";\nimport { angularFixTsConfig } from \"./angular-fix-tsconfig\";\n\nexport async function angularEnsureBuilderSetup(sys: AngularDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await angularEnsureCounterComponent(\n    sys,\n    modifiedFiles,\n  );\n\n  modifiedFiles.push(...(await angularEnsureBuilderRegistry(sys)));\n\n  await angularEnsureCounterRegistered(sys, counterCmpPath);\n\n  const builderCmpName = \"BuilderPage\";\n\n  if (!(await sys.exists(sys.builderPageComponentPath))) {\n    const code = await sys.formatCode(\n      sys.builderPageComponentPath,\n      getAngularBuilderComponent(\n        sys,\n        builderCmpName,\n        sys.builderPageComponentPath,\n        \"builder-page\",\n        \"page\",\n        true,\n      ),\n    );\n    await sys.writeFile(sys.builderPageComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.builderPageComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  // Update app.module file if it exists\n  if (sys.hasAppModule) {\n    //Update app module with Counter\n    await angularUpdateAppModule(sys, \"Counter\", counterCmpPath);\n\n    //Update app module with BuilderPage\n    const appModulePath = await angularUpdateAppModule(\n      sys,\n      builderCmpName,\n      sys.builderPageComponentPath,\n    );\n\n    if (appModulePath) {\n      modifiedFiles.push({ filePath: appModulePath, modifiedType: \"update\" });\n    }\n  }\n  await angularAddRoute(\n    sys,\n    \"**\",\n    builderCmpName,\n    `./components/builder-page.component`,\n  );\n\n  return modifiedFiles;\n}\n\nexport async function angularEnsureFigmaImportSetup(sys: AngularDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  modifiedFiles.push(...(await angularEnsureBuilderRegistry(sys)));\n\n  const figmaImportsCmpName = \"FigmaImportsPage\";\n\n  const fileName = `figma-imports.component`;\n  const routePath = sys.join(\n    sys.componentsDir,\n    `${fileName}.${sys.typescriptEnabled ? \"ts\" : \"js\"}`,\n  );\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getAngularBuilderComponent(\n        sys,\n        figmaImportsCmpName,\n        routePath,\n        \"figma-imports\",\n        \"figma-imports\",\n        false,\n      ),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  // Update app.module file if it exists\n  if (sys.hasAppModule) {\n    const appModulePath = await angularUpdateAppModule(\n      sys,\n      figmaImportsCmpName,\n      routePath,\n    );\n\n    if (appModulePath) {\n      modifiedFiles.push({ filePath: appModulePath, modifiedType: \"update\" });\n    }\n  }\n  await angularAddRoute(\n    sys,\n    \"figma-imports\",\n    figmaImportsCmpName,\n    `./components/${fileName}`,\n  );\n  await angularFixTsConfig(sys);\n  return modifiedFiles;\n}\n\nexport async function angularEnsureBuilderRegistry(sys: AngularDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, getAngularBuilderRegistry(sys));\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nasync function angularEnsureCounterRegistered(\n  sys: AngularDevToolsSys,\n  counterCmpPath: string,\n) {\n  const registry = await angularComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false,\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  await angularComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false,\n  );\n}\n\nfunction getAngularBuilderComponent(\n  sys: AngularDevToolsSys,\n  cmpName: string,\n  cmpPath: string,\n  pageName: string,\n  modelName: string,\n  add404: boolean,\n) {\n  const isStandAloneComponent = !sys.hasAppModule;\n  const registryImportPath = getImportPath(sys, cmpPath, sys.registryPath);\n  const envPath = sys.join(\n    sys.getAppRootDir(),\n    \"src\",\n    \"environments\",\n    \"environment.ts\",\n  );\n  const environmentImportPath = getImportPath(sys, cmpPath, envPath);\n\n  const template = add404\n    ? `    <ng-container *ngIf=\"content || isPreviewing; else notFound\">\n      <builder-content\n        [model]=\"model\"\n        [content]=\"content\"\n        [apiKey]=\"apiKey\"\n        [customComponents]=\"customComponents\"\n      ></builder-content>\n    </ng-container>\n\n    <ng-template #notFound>\n      <div>404 - Content not found</div>\n    </ng-template>`\n    : `    <builder-content\n      [model]=\"model\"\n      [content]=\"content\"\n      [apiKey]=\"apiKey\"\n      [customComponents]=\"customComponents\"\n    ></builder-content>`;\n\n  return `\nimport { Component, Input } from '@angular/core';\nimport { fetchOneEntry, type BuilderContent${\n    add404 ? \", isPreviewing\" : \"\"\n  } } from '@builder.io/sdk-angular';\n${\n  isStandAloneComponent\n    ? \"import { Content } from '@builder.io/sdk-angular';\"\n    : \"\"\n}\n${\n  isStandAloneComponent ? \"import { CommonModule } from '@angular/common';\" : \"\"\n}\nimport { environment } from ${JSON.stringify(environmentImportPath)};\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(registryImportPath)};\n\n@Component({\n  selector: 'app-${pageName}',\n  ${isStandAloneComponent ? \"standalone: true,\" : \"\"}\n  ${isStandAloneComponent ? \"imports: [Content, CommonModule],\" : \"\"}\n  template: \\`\n${template}\n  \\`,\n})\nexport class ${cmpName} {\n  \n  ${add404 ? \"isPreviewing = isPreviewing();\\n\" : \"\"}\n  @Input() model = '${modelName}';\n\n  apiKey = environment.${ANGULAR_BUILDER_API_KEY_ENV};\n  ${\n    sys.typescriptEnabled\n      ? `\n  content: BuilderContent | null = null;\n`\n      : `\n  content = null;\n`\n  }\n\n  customComponents = CUSTOM_COMPONENTS;\n\n  async ngOnInit() {\n    const urlPath = window.location.pathname || '/';\n\n    const builderContent = await fetchOneEntry({\n      model: this.model,\n      apiKey: this.apiKey,\n      userAttributes: {\n        urlPath,\n      },\n    });\n\n    if (!builderContent) {\n      return;\n    }\n\n    this.content = builderContent;\n  }\n}\n\n  `.trimStart();\n}\n\nfunction getAngularBuilderRegistry(sys: AngularDevToolsSys) {\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from \"@builder.io/sdk-angular\";\n    \nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n\nasync function angularEnsureCounterComponent(\n  sys: AngularDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"ts\" : \"js\";\n\n  const counterCmpPath = sys.join(\n    sys.componentsDir,\n    `counter.component.${ext}`,\n  );\n\n  const hasCounterCmp = await sys.exists(counterCmpPath);\n\n  sys.debug(`angularEnsureCounterComponent, hasCounterCmp: ${hasCounterCmp}`);\n\n  const component = getCounterComponent(sys);\n\n  if (!hasCounterCmp) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: AngularDevToolsSys) {\n  const component = `\nimport { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'app-counter',\n  ${!sys.hasAppModule ? \"standalone: true,\" : \"\"}\n  template: \\`\n    <div class=\"counter\">\n      <button class=\"btn\" (click)=\"decrement()\">-</button>\n      <span class=\"count\">{{ count }}</span>\n      <button class=\"btn\" (click)=\"increment()\">+</button>\n    </div>\n  \\`,\n  styles: [\n    \\`\n      .counter {\n        margin: 32px auto;\n        display: flex;\n        width: 100%;\n        max-width: 190px;\n      }\n\n      .btn {\n        width: 42px;\n        font-size: 32px;\n        font-weight: bold;\n        background-color: #1c6bd1;\n        color: white;\n        border: none;\n        border-radius: 4px;\n        cursor: pointer;\n        line-height: 1.4;\n      }\n\n      .btn:hover {\n        opacity: 0.8;\n      }\n\n      .count {\n        flex: 1;\n        font-size: 42px;\n        text-align: center;\n        margin: 0 8px;\n      }\n    \\`,\n  ],\n})\nexport class Counter {\n  @Input() initialCount: number = 99;\n  count: number;\n\n  constructor() {\n    this.count = this.initialCount;\n  }\n\n  ngOnInit(): void {\n    this.count = this.initialCount;\n  }\n\n  increment(): void {\n    this.count += 1;\n  }\n\n  decrement(): void {\n    this.count -= 1;\n  }\n}\n\n`.trimStart();\n\n  return component;\n}\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { AngularDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentImportPath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport { parseRegisteredComponentInfo } from \"../../../common/ast/component-info\";\nimport { angularEnsureBuilderRegistry } from \"./angular-ensure-builder-setup\";\nimport { getAngularComponentsFromPath } from \"./angular-components\";\n\nexport async function parseAngularRegistryFromFile(sys: AngularDevToolsSys) {\n  await angularEnsureBuilderRegistry(sys);\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseAngularRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseAngularRegistryFromCode(\n  sys: AngularDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return parseRegistryFromSource(sys, sourceFile);\n}\n\nexport async function parseRegistryFromSource(\n  sys: AngularDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseAngularRegisteredComponent(\n          sys,\n          sourceFile,\n          cmpElm,\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseAngularRegisteredComponent(\n  sys: AngularDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    framework: \"angular\",\n  };\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      } else if (sys.ts.isCallExpression(initializer)) {\n        const arg = initializer.arguments[0];\n        if (sys.ts.isIdentifier(arg)) {\n          identifierName = arg.text;\n        }\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      if (cmp.externalImportPath) {\n        cmp.exportName = identifierName;\n      } else {\n        const cmps = await getAngularComponentsFromPath(sys, i.filePath);\n        if (cmps && cmps.length > 0) {\n          if (cmps.length === 1) {\n            cmp.exportName = cmps[0].cmpInfo.exportName;\n          } else {\n            const namedCmp = cmps.find(\n              (c) => c.cmpInfo.exportName === identifierName,\n            );\n            if (namedCmp) {\n              cmp.exportName = namedCmp.cmpInfo.exportName;\n            }\n          }\n        }\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n\n  return cmp;\n}\n", "import type ts from \"typescript\";\nimport type {\n  ComponentInfo,\n  ComponentRegistry,\n  SetComponentInfoOptions,\n  SetComponentInputOptions,\n} from \"../../../types\";\nimport type { AngularDevToolsSys } from \"./index\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { getAngularSourceComponentsFromDir } from \"./angular-components\";\nimport { getDisplayFilePath, getImportPath } from \"../../../common/utils\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseAngularRegisteredComponent,\n  parseAngularRegistryFromFile,\n} from \"./angular-registry-parse\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport {\n  parseAngularAllComponentSourceInputs,\n  parseAngularComponentSourceInputs,\n  type AngularComponentSource,\n} from \"./angular-components\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getAngularApiKey } from \"./angular-api-key\";\n\nexport async function angularComponentRegistry(\n  sys: AngularDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, angularApiKey] = await Promise.all([\n    getAngularSourceComponentsFromDir(sys, tsProgram),\n    parseAngularRegistryFromFile(sys),\n    getAngularApiKey(sys),\n  ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: angularApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseAngularAllComponentSourceInputs(\n      sys,\n      srcCmps,\n      cmpRegistry.components,\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n      ? [cmpId]\n      : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath)),\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      )!;\n      const sourceInputs = await parseAngularComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput,\n      );\n\n      const {\n        elements,\n        elmIndex,\n        statementIndex,\n        statement,\n        variableDeclaration,\n      } = await getAngularRegisteredComponentSource(sys, sourceFile, srcCmp);\n\n      if (update.addCmpToRegistry) {\n        // not already registered, append it\n        elements.push(\n          createAngularRegisteredComponent(sys, update.addCmpToRegistry),\n        );\n        madeChanges = true;\n      } else if (update.removeCmpFromRegistry) {\n        // already registered, remove it\n        elements.splice(elmIndex, 1);\n        madeChanges = true;\n      } else if (update.updateRegisteredCmp) {\n        // already registered, update component info\n        const element = updateComponentObjLiteralInfoProperties(\n          sys,\n          elements[elmIndex],\n          update.updateRegisteredCmp,\n        );\n        elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n          element,\n          [\n            createAngularComponentPropertyAssignment(\n              sys,\n              update.updateRegisteredCmp,\n            ),\n            ...element.properties.slice(1),\n          ],\n        );\n        madeChanges = true;\n      }\n\n      if (madeChanges && writeRegistry) {\n        const statements = [...sourceFile.statements];\n        statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n          statement,\n          statement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            statement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                variableDeclaration,\n                variableDeclaration.name,\n                variableDeclaration.exclamationToken,\n                variableDeclaration.type,\n                sys.ts.factory.createArrayLiteralExpression(\n                  normalizeRegisteredArrayElements(sys, elements),\n                ),\n              ),\n            ],\n          ),\n        );\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        if (cmpInfo.exportType === \"named\") {\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [cmpInfo.importName],\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        } else {\n          sourceFile = ensureImport(sys, sourceFile, {\n            defaultImport: cmpInfo.importName,\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        }\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [\"RegisteredComponent\"],\n          importPath: \"@builder.io/sdk-angular\",\n          isTypeOnly: true,\n        });\n\n        sourceFile = ensureArrayStatement(sys, sourceFile, {\n          variableName: \"CUSTOM_COMPONENTS\",\n          arrayType: \"RegisteredComponent\",\n        });\n\n        cmpRegistry.components = update.components;\n        registeredComponents = update.components.filter((c) => c.isRegistered);\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nfunction createAngularComponentPropertyAssignment(\n  sys: AngularDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName);\n\n  return sys.ts.factory.createPropertyAssignment(\"component\", identifier);\n}\n\nfunction createAngularRegisteredComponent(\n  sys: AngularDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [createAngularComponentPropertyAssignment(sys, cmpInfo)],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nasync function getAngularRegisteredComponentSource(\n  sys: AngularDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: AngularComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseAngularRegisteredComponent(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getAngularApiKey, setAngularApiKey } from \"./angular-api-key\";\nimport { angularComponentRegistry } from \"./angular-registry\";\nimport {\n  angularEnsureBuilderSetup,\n  angularEnsureFigmaImportSetup,\n} from \"./angular-ensure-builder-setup\";\nimport { findBuilderRegistry, hasTsconfig } from \"../../../common/fs\";\n\nexport async function createAngularDevTools(sys: CreateDevToolsOptions) {\n  const angularSys = await createAngularDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      return {\n        templateContentId: \"f0b8016ac92e474699293211a268ebaa\",\n        pathname: \"/builder-demo\",\n        title: \"Builder + Angular Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return angularEnsureBuilderSetup(angularSys);\n    },\n    ensureFigmaImportPage: () => {\n      return angularEnsureFigmaImportSetup(angularSys);\n    },\n\n    getRegistryPath: () => {\n      return angularSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: async (pkgName: string) => {\n      angularSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getAngularApiKey(angularSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setAngularApiKey(angularSys, opts.publicApiKey);\n    },\n    getDependencies: (_opts) => {\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/sdk-angular\" },\n        { name: \"concurrently\" }, // For running dev tools server and angular dev server concurrently\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"builder-dev\";\n    },\n    getCache: () => getBuilderCache(angularSys),\n    setCache: (cache) => setBuilderCache(angularSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createAngularDevToolsSys(sys: DevToolsSys) {\n  const angularConfigPath = await getAngularConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const appDir = sys.join(srcDir, \"app\");\n\n  const registryPath = await findBuilderRegistry(sys, appDir);\n  const externalPackages: Record<string, string> = {};\n\n  const angularSys: AngularDevToolsSys = {\n    ...sys,\n    srcDir: \"\",\n    appDir: \"\",\n    componentsDir: \"\",\n    registryPath,\n    angularConfigPath,\n    typescriptEnabled,\n    builderPageComponentPath: \"\",\n    hasAppModule: false, // If app.module is not present components will be standalone\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[sys.join(rootDir, pkgName, \"index.ts\")] =\n        `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n  };\n\n  if (!(await sys.exists(srcDir))) {\n    throw new Error(\n      `Could not find src directory. Searched for src in \"${sys.getAppRootDir()}\".`,\n    );\n  }\n\n  angularSys.srcDir = srcDir;\n  angularSys.appDir = appDir;\n  angularSys.componentsDir = sys.join(angularSys.appDir, \"components\");\n\n  angularSys.builderPageComponentPath = sys.join(\n    angularSys.componentsDir,\n    `builder-page.component.${typescriptEnabled ? \"ts\" : \"js\"}`,\n  );\n\n  const appModuleFileName = `app.module.${typescriptEnabled ? \"ts\" : \"js\"}`;\n  const appModulePath = sys.join(angularSys.appDir, appModuleFileName);\n\n  if (await sys.exists(appModulePath)) {\n    angularSys.hasAppModule = true;\n  }\n\n  return angularSys;\n}\n\nasync function getAngularConfigPath(sys: DevToolsSys) {\n  const configPath = sys.join(sys.getAppRootDir(), \"angular.json\");\n  if (await sys.exists(configPath)) {\n    return configPath;\n  }\n\n  const projectPath = sys.join(sys.getAppRootDir(), \"project.json\");\n  if (await sys.exists(projectPath)) {\n    return projectPath;\n  }\n\n  if (sys.ignoreMissingConfig) {\n    return \"\";\n  }\n  throw new Error(\n    `Could not find Angular config file. Searched for angular.json & project.json in \"${sys.getAppRootDir()}\".`,\n  );\n}\n\nexport interface AngularDevToolsSys extends DevToolsSys {\n  appDir: string;\n  srcDir: string;\n  componentsDir: string;\n  registryPath: string;\n  angularConfigPath: string;\n  typescriptEnabled: boolean;\n  builderPageComponentPath: string;\n  hasAppModule: boolean;\n  addExternalPackage: (pkgName: string) => void;\n}\n", "import type { VueDevToolsSys } from \"./index\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\nimport type { EnvInfo } from \"../../../types\";\nexport async function getVueApiKey(sys: VueDevToolsSys) {\n  const publicApiKey =\n    sys.configType === \"vite\"\n      ? VUE_VITE_BUILDER_KEY_ENV\n      : VUE_WEBPACK_BUILDER_KEY_ENV;\n  const env = await getDotEnvValue(sys, [\".env\"], publicApiKey);\n  return env;\n}\n\nexport async function setVueApiKey(sys: VueDevToolsSys, publicApiKey: string) {\n  const env = await getVueApiKey(sys);\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const VUE_VITE_BUILDER_KEY_ENV = `VITE_PUBLIC_BUILDER_KEY`;\n\nexport const VUE_WEBPACK_BUILDER_KEY_ENV = `PUBLIC_BUILDER_KEY`;\n", "import type { VueDevToolsSys } from \"./index\";\nimport type { ComponentInfo } from \"../../../types\";\n\nexport async function parseVueComponent(\n  sys: VueDevToolsSys,\n  filePath: string,\n  readAllInputTypes: boolean,\n): Promise<ComponentInfo | null> {\n  try {\n    const content = await sys.readFile(filePath);\n    if (!content) return null;\n\n    const relativePath = sys.relative(sys.getAppRootDir(), filePath);\n    const fileName =\n      filePath.split(\"/\").pop()?.replace(\".vue\", \"\") || \"UnknownComponent\";\n    const componentName = pascalCase(fileName);\n\n    //  Check for VUE 3 composition API and extract props\n    const inputs = extractVueProps(content, readAllInputTypes);\n    const apiType = detectVueApiType(content);\n\n    return {\n      // to DO: ADD VUE specific data\n      id: generateComponentId(filePath),\n      name: componentName,\n      filePath: relativePath,\n      relFilePath: relativePath,\n      inputs,\n      framework: \"vue\",\n      exportType: \"default\",\n      exportName: \"default\",\n      importName: componentName,\n      importPath: relativePath,\n      vueApiType: apiType,\n    };\n  } catch (error) {\n    console.warn(`Failed to parse Vue component ${filePath}:`, error);\n    return null;\n  }\n}\n\nexport async function getVueComponentsFromPath(\n  sys: VueDevToolsSys,\n  filePath: string,\n  readAllInputTypes: boolean,\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".vue\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      const component = await parseVueComponent(\n        sys,\n        filePath,\n        readAllInputTypes,\n      );\n      return component ? [component] : null;\n    }\n  }\n  return null;\n}\n\nfunction detectVueApiType(\n  content: string,\n): \"composition-setup\" | \"composition\" | \"options\" {\n  // Check for <script setup>\n  if (/<script[^>]*\\s+setup[^>]*>/.test(content)) {\n    return \"composition-setup\";\n  }\n\n  // Check for Composition API patterns in regular <script>\n  if (\n    /import\\s+\\{[^}]*\\b(ref|reactive|computed|watch|onMounted|defineComponent)\\b[^}]*\\}\\s+from\\s+['\"]vue['\"]/.test(\n      content,\n    )\n  ) {\n    return \"composition\";\n  }\n\n  // Check for setup() function\n  if (/setup\\s*\\([^)]*\\)\\s*\\{/.test(content)) {\n    return \"composition\";\n  }\n\n  // Default to Options API\n  return \"options\";\n}\n\nfunction extractVueProps(content: string, readAllInputTypes: boolean): any[] {\n  if (!readAllInputTypes) {\n    return [];\n  }\n\n  const props: any[] = [];\n\n  // Extract from defineProps() - Composition API with <script setup>\n  const definePropsPatterns = [\n    /defineProps<\\s*\\{([^}]+)\\}\\s*>\\s*\\(\\s*\\)/g,\n    /defineProps\\s*\\(\\s*\\{([^}]+)\\}\\s*\\)/g,\n    /defineProps\\s*\\(\\s*\\[([^\\]]+)\\]\\s*\\)/g,\n  ];\n\n  for (const pattern of definePropsPatterns) {\n    let match;\n    while ((match = pattern.exec(content)) !== null) {\n      const propsContent = match[1];\n\n      if (propsContent.includes(\":\")) {\n        props.push(...parseObjectProps(propsContent));\n      } else {\n        props.push(...parseArrayProps(propsContent));\n      }\n    }\n  }\n\n  //  Extract from Options API props\n  const optionsPropsPattern = /props\\s*:\\s*(\\{[^}]+\\}|\\[[^\\]]+\\])/g;\n  let optionsMatch;\n  while ((optionsMatch = optionsPropsPattern.exec(content)) !== null) {\n    const propsContent = optionsMatch[1];\n\n    if (propsContent.startsWith(\"{\")) {\n      // Object syntax: props: { prop: Type }\n      const objectContent = propsContent.slice(1, -1);\n      props.push(...parseObjectProps(objectContent));\n    } else {\n      // Array syntax: props: ['prop1', 'prop2']\n      const arrayContent = propsContent.slice(1, -1);\n      props.push(...parseArrayProps(arrayContent));\n    }\n  }\n\n  //  Extract from setup(props) parameter in Composition API\n  const setupPropsPattern =\n    /setup\\s*\\(\\s*props\\s*(?::\\s*\\{([^}]+)\\})?\\s*[,)]?/g;\n  let setupMatch;\n  while ((setupMatch = setupPropsPattern.exec(content)) !== null) {\n    if (setupMatch[1]) {\n      props.push(...parseObjectProps(setupMatch[1]));\n    }\n  }\n\n  return deduplicateProps(props);\n}\n\nfunction parseObjectProps(propsContent: string): any[] {\n  const props: any[] = [];\n\n  // Handle TypeScript interface syntax: prop: type\n  const interfacePattern = /(\\w+)\\s*:\\s*([^,;]+)/g;\n  let match;\n  while ((match = interfacePattern.exec(propsContent)) !== null) {\n    const [, name, type] = match;\n    props.push({\n      name: name.trim(),\n      type: mapVueTypeToGeneric(type.trim()),\n      required: !type.includes(\"?\") && !type.includes(\"undefined\"),\n    });\n  }\n\n  // Handle Vue Options API object syntax: prop: { type: String, required: true }\n  const objectPattern = /(\\w+)\\s*:\\s*\\{([^}]+)\\}/g;\n  while ((match = objectPattern.exec(propsContent)) !== null) {\n    const [, name, definition] = match;\n    const typeMatch = definition.match(/type\\s*:\\s*(\\w+)/);\n    const requiredMatch = definition.match(/required\\s*:\\s*(true|false)/);\n    const defaultMatch = definition.match(/default\\s*:\\s*([^,}]+)/);\n\n    props.push({\n      name: name.trim(),\n      type: typeMatch ? mapVueTypeToGeneric(typeMatch[1]) : \"any\",\n      required: requiredMatch ? requiredMatch[1] === \"true\" : false,\n      defaultValue: defaultMatch ? defaultMatch[1].trim() : undefined,\n    });\n  }\n\n  const simplePattern = /(\\w+)\\s*:\\s*(\\w+)(?=\\s*[,}])/g;\n  while ((match = simplePattern.exec(propsContent)) !== null) {\n    const [, name, type] = match;\n\n    if (!props.some((p) => p.name === name.trim())) {\n      props.push({\n        name: name.trim(),\n        type: mapVueTypeToGeneric(type.trim()),\n        required: false,\n      });\n    }\n  }\n\n  return props;\n}\n\nfunction parseArrayProps(propsContent: string): any[] {\n  const props: any[] = [];\n  const propNames = propsContent\n    .split(\",\")\n    .map((prop) => prop.trim().replace(/['\"]/g, \"\"))\n    .filter((prop) => prop.length > 0);\n\n  for (const name of propNames) {\n    props.push({\n      name,\n      type: \"any\",\n      required: false,\n    });\n  }\n\n  return props;\n}\n\nfunction mapVueTypeToGeneric(vueType: string): string {\n  const typeMap: Record<string, string> = {\n    String: \"string\",\n    Number: \"number\",\n    Boolean: \"boolean\",\n    Array: \"any[]\",\n    Object: \"object\",\n    Function: \"function\",\n    Date: \"Date\",\n    Symbol: \"symbol\",\n    string: \"string\",\n    number: \"number\",\n    boolean: \"boolean\",\n    object: \"object\",\n    function: \"function\",\n  };\n\n  const cleanType = vueType\n    .replace(/\\s*\\|\\s*undefined/g, \"\")\n    .replace(/\\?$/, \"\");\n\n  return typeMap[cleanType] || cleanType || \"any\";\n}\n\nfunction deduplicateProps(props: any[]): any[] {\n  const seen = new Set<string>();\n  return props.filter((prop) => {\n    if (seen.has(prop.name)) {\n      return false;\n    }\n    seen.add(prop.name);\n    return true;\n  });\n}\n\nfunction pascalCase(str: string): string {\n  return str\n    .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : \"\"))\n    .replace(/^(.)/, (_, char) => (char ? char.toUpperCase() : \"\"));\n}\n\nfunction generateComponentId(filePath: string): string {\n  return filePath\n    .replace(/[^a-zA-Z0-9]/g, \"-\")\n    .replace(/-+/g, \"-\")\n    .replace(/^-|-$/g, \"\")\n    .toLowerCase();\n}\n", "import type { ComponentInfo, ComponentRegistry } from \"../../../types\";\nimport type { VueDevToolsSys } from \"./index\";\nimport { parseVueComponent } from \"./vue-components\";\nimport { getVueApiKey } from \"./vue-api-key\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\n\nexport async function vueComponentRegistry(\n  sys: VueDevToolsSys,\n  options: { readAllInputTypes: boolean },\n): Promise<ComponentRegistry> {\n  const components = await findVueComponents(sys, options.readAllInputTypes);\n  const vueApiKey = await getVueApiKey(sys);\n\n  return {\n    components,\n    registryPath: sys.registryPath,\n    registryDisplayPath: sys.relative(sys.getAppRootDir(), sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(components),\n    publicApiKey: vueApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n}\n\nasync function findVueComponents(\n  sys: VueDevToolsSys,\n  readAllInputTypes: boolean,\n): Promise<ComponentInfo[]> {\n  const components: ComponentInfo[] = [];\n  const vueFiles = await scanDirectoryForVueFiles(sys, sys.getAppRootDir());\n\n  for (const filePath of vueFiles) {\n    const component = await parseVueComponent(sys, filePath, readAllInputTypes);\n    if (component) {\n      components.push(component);\n    }\n  }\n\n  return components;\n}\n\nasync function scanDirectoryForVueFiles(\n  sys: VueDevToolsSys,\n  dir: string,\n): Promise<string[]> {\n  const vueFiles: string[] = [];\n\n  const scanDir = async (currentDir: string) => {\n    try {\n      const entries = await sys.readdir(currentDir);\n      for (const entry of entries) {\n        const fullPath = sys.join(currentDir, entry);\n        const stat = await sys.stat(fullPath);\n\n        if (stat.isDirectory()) {\n          // Skip common directories that don't contain components\n          if (\n            !entry.startsWith(\".\") &&\n            entry !== \"node_modules\" &&\n            entry !== \"dist\" &&\n            entry !== \"build\" &&\n            entry !== \".nuxt\" &&\n            entry !== \".output\"\n          ) {\n            await scanDir(fullPath);\n          }\n        } else if (entry.endsWith(\".vue\")) {\n          vueFiles.push(fullPath);\n        }\n      }\n    } catch (e) {\n      // Ignore errors when scanning directories\n    }\n  };\n\n  await scanDir(dir);\n\n  // For Nuxt projects\n  const nuxtDirs = [\"components\", \"pages\", \"layouts\"];\n  for (const nuxtDir of nuxtDirs) {\n    const nuxtPath = sys.join(dir, nuxtDir);\n    try {\n      const stat = await sys.stat(nuxtPath);\n      if (stat.isDirectory()) {\n        await scanDir(nuxtPath);\n      }\n    } catch (e) {}\n  }\n\n  return vueFiles;\n}\n", "import type { VueDevToolsSys } from \"./index\";\nimport type { ModifiedFile } from \"../../../types\";\nimport { getImportPath } from \"../../../common/utils\";\n\nexport async function vueEnsureBuilderSetup(\n  sys: VueDevToolsSys,\n): Promise<{ errors: string[] }> {\n  const results = {\n    errors: [] as string[],\n  };\n\n  try {\n    // For now, just ensure the registry exists\n    await vueEnsureBuilderRegistry(sys);\n  } catch (error) {\n    results.errors.push(error instanceof Error ? error.message : String(error));\n  }\n\n  return results;\n}\n\nexport async function vueEnsureFigmaImportSetup(\n  sys: VueDevToolsSys,\n): Promise<ModifiedFile[]> {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  // Ensure the registry exists first\n  modifiedFiles.push(...(await vueEnsureBuilderRegistry(sys)));\n\n  const routeFileName = `FigmaImports.vue`;\n  const routePath = sys.join(sys.componentsDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getVueBuilderComponent(sys, routePath, \"figma-imports\"),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n  return modifiedFiles;\n}\n\nexport async function vueEnsureBuilderRegistry(\n  sys: VueDevToolsSys,\n): Promise<ModifiedFile[]> {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, getVueBuilderRegistry(sys));\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nfunction getVueBuilderComponent(\n  sys: VueDevToolsSys,\n  routePath: string,\n  modelName: string = \"page\",\n): string {\n  const registryImportPath = getImportPath(sys, routePath, sys.registryPath);\n  const ts = sys.typescriptEnabled;\n\n  if (sys.isNuxt) {\n    // Nuxt-specific implementation\n    return `<template>\n  <div>\n    <div v-if=\"pending\">Loading...</div>\n    <div v-else-if=\"error\">Error loading content</div>\n    <div v-else-if=\"!data && !$preview\">404 - Content not found</div>\n    <Content\n      v-else\n      :model=\"model\"\n      :content=\"data\"\n      :api-key=\"apiKey\"\n      :custom-components=\"customComponents\"\n    />\n  </div>\n</template>\n\n<script${ts ? ' lang=\"ts\"' : \"\"} setup>\nimport { Content } from '@builder.io/sdk-vue'\nimport { CUSTOM_COMPONENTS } from '${registryImportPath}'\n\nconst model = '${modelName}'\nconst apiKey = useRuntimeConfig().public.builderApiKey\n\nconst customComponents = CUSTOM_COMPONENTS\n\nconst { data, pending, error } = await useFetch(\\`https://cdn.builder.io/api/v3/content/\\${model}\\`, {\n  query: {\n    apiKey,\n    'userAttributes.urlPath': useRoute().path,\n  }\n})\n</script>`;\n  }\n\n  // Regular Vue implementation\n  return `<template>\n  <div>\n    <div v-if=\"loading\">Loading...</div>\n    <div v-else-if=\"!content && !isPreviewing\">404 - Content not found</div>\n    <Content\n      v-else\n      :model=\"model\"\n      :content=\"content\"\n      :api-key=\"apiKey\"\n      :custom-components=\"customComponents\"\n    />\n  </div>\n</template>\n\n<script${ts ? ' lang=\"ts\"' : \"\"}>\nimport { defineComponent, ref, onMounted } from 'vue'\nimport { Content, fetchOneEntry, isPreviewing } from '@builder.io/sdk-vue'\nimport { CUSTOM_COMPONENTS } from '${registryImportPath}'\n\nexport default defineComponent({\n  name: 'FigmaImports',\n  components: {\n    Content\n  },\n  setup() {\n    const model = '${modelName}'\n    const apiKey = ${getApiKeyReference(sys)}\n    const content = ref${ts ? \"<any>\" : \"\"}(null)\n    const loading = ref(true)\n    const customComponents = CUSTOM_COMPONENTS\n\n    onMounted(async () => {\n      try {\n        const builderContent = await fetchOneEntry({\n          model,\n          apiKey,\n          userAttributes: {\n            urlPath: window.location.pathname,\n          },\n        })\n\n        content.value = builderContent\n      } catch (error) {\n        console.error('Error fetching content:', error)\n      } finally {\n        loading.value = false\n      }\n    })\n\n    return {\n      model,\n      apiKey,\n      content,\n      loading,\n      customComponents,\n      isPreviewing: isPreviewing()\n    }\n  }\n})\n</script>`;\n}\n\nfunction getApiKeyReference(sys: VueDevToolsSys): string {\n  if (sys.isNuxt) {\n    return \"useRuntimeConfig().public.builderApiKey\";\n  }\n\n  if (sys.configType === \"vite\") {\n    return \"import.meta.env.VITE_BUILDER_API_KEY\";\n  }\n\n  return \"process.env.VUE_APP_BUILDER_API_KEY\";\n}\n\nfunction getVueBuilderRegistry(sys: VueDevToolsSys): string {\n  return `import type { RegisteredComponent } from \"@builder.io/sdk-vue\";\n\nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n  // Add your Vue components here\n  // Example:\n  // {\n  //   component: MyComponent,\n  //   name: 'MyComponent',\n  //   inputs: [\n  //     {\n  //       name: 'title',\n  //       type: 'string',\n  //       defaultValue: 'Hello World'\n  //     }\n  //   ]\n  // }\n];\n`;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getVueApiKey, setVueApiKey } from \"./vue-api-key\";\nimport { vueComponentRegistry } from \"./vue-registry\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { findBuilderRegistry, hasTsconfig } from \"../../../common/fs\";\nimport {\n  vueEnsureBuilderSetup,\n  vueEnsureFigmaImportSetup,\n} from \"./vue-ensure-builder-setup\";\n\nexport async function createVueDevTools(sys: CreateDevToolsOptions) {\n  const vueSys = await createVueDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      return {\n        templateContentId: \"vue-demo-template-id\", //NEED a vue template id\n        pathname: \"/builder-demo\",\n        title: \"Builder + Vue Demo Page\",\n      };\n    },\n    ensureBuilderSetup: async () => {\n      const result = await vueEnsureBuilderSetup(vueSys);\n      // Convert errors to ModifiedFile format if needed\n      if (result.errors.length > 0) {\n        return [];\n      }\n      return [];\n    },\n    ensureFigmaImportPage: () => {\n      return vueEnsureFigmaImportSetup(vueSys);\n    },\n\n    getRegistryPath: () => {\n      return vueSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return vueComponentRegistry(vueSys, {\n        readAllInputTypes: !!opts?.readAllInputTypes,\n      });\n    },\n    addExternalPackage: (pkgName: string) => {\n      vueSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const registry = await vueComponentRegistry(vueSys, {\n        readAllInputTypes: false,\n      });\n      const component = registry.components.find((c) => c.id === opts.cmpId);\n      return {\n        ...registry,\n        component: component!,\n      };\n    },\n    registerComponent: async (opts) => {\n      // Not needed for Vue\n      return vueComponentRegistry(vueSys, { readAllInputTypes: false });\n    },\n    setRegisteredComponentInfo: async (opts) => {\n      // Not needed for Vue\n      return vueComponentRegistry(vueSys, { readAllInputTypes: false });\n    },\n    setRegisteredComponentInput: async (opts) => {\n      // Not needed for Vue\n      return vueComponentRegistry(vueSys, { readAllInputTypes: false });\n    },\n    unregisterComponent: async (opts) => {\n      // Not needed for Vue\n      return vueComponentRegistry(vueSys, { readAllInputTypes: false });\n    },\n    getPublicApiKey: () => {\n      return getVueApiKey(vueSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setVueApiKey(vueSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@builder.io/dev-tools\" },\n          { name: \"@builder.io/sdk-vue\" },\n        ];\n      }\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/vue\" },\n        { name: \"@builder.io/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getBuilderCache(vueSys),\n    setCache: (cache) => setBuilderCache(vueSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createVueDevToolsSys(sys: DevToolsSys) {\n  const vueConfigPath = await getVueConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const externalPackages: Record<string, string> = {};\n\n  const vueSys: VueDevToolsSys = {\n    ...sys,\n    srcDir: null,\n    builderComponentPath: \"\",\n    componentsDir: \"\",\n    registryPath: \"\",\n    vueConfigPath,\n    typescriptEnabled,\n    configType: \"\",\n    isNuxt: await isNuxtProject(sys),\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[sys.join(rootDir, pkgName, \"index.ts\")] =\n        `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n  };\n\n  if (vueConfigPath.includes(\"webpack.config\")) {\n    vueSys.configType = \"webpack\";\n  }\n\n  if (\n    vueConfigPath.includes(\"vite.config\") ||\n    vueConfigPath.includes(\"nuxt.config\")\n  ) {\n    vueSys.configType = \"vite\";\n  }\n\n  // Set up Vue-specific paths\n  const usesSrc = await sys.exists(srcDir);\n  vueSys.srcDir = usesSrc ? srcDir : null;\n\n  // Find components directory\n  const possibleComponentsDirs = [\n    sys.join(rootDir, \"components\"),\n    sys.join(rootDir, \"src\", \"components\"),\n    sys.join(rootDir, \"app\", \"components\"), // Nuxt 3\n  ];\n\n  for (const dir of possibleComponentsDirs) {\n    if (await sys.exists(dir)) {\n      vueSys.componentsDir = dir;\n      break;\n    }\n  }\n\n  if (!vueSys.componentsDir) {\n    // Create default components directory\n    vueSys.componentsDir = usesSrc\n      ? sys.join(srcDir, \"components\")\n      : sys.join(rootDir, \"components\");\n  }\n\n  vueSys.registryPath = await findBuilderRegistry(sys, vueSys.componentsDir);\n\n  return vueSys;\n}\n\nasync function getVueConfigPath(sys: DevToolsSys) {\n  const configs = [\n    \"nuxt.config.ts\",\n    \"nuxt.config.js\",\n    \"vite.config.ts\",\n    \"vite.config.js\",\n    \"webpack.config.js\",\n    \"webpack.config.ts\",\n    \"vue.config.js\",\n    \"vue.config.ts\",\n  ];\n  for (const configName of configs) {\n    const configPath = sys.join(sys.getAppRootDir(), configName);\n    if (await sys.exists(configPath)) {\n      return configPath;\n    }\n  }\n\n  if (sys.ignoreMissingConfig) {\n    return \"\";\n  }\n  throw new Error(\n    `Could not find Vue config file. Searched for ${configs.join(\n      \", \",\n    )} in \"${sys.getAppRootDir()}\".`,\n  );\n}\n\nasync function isNuxtProject(sys: DevToolsSys): Promise<boolean> {\n  const nuxtConfigs = [\"nuxt.config.ts\", \"nuxt.config.js\"];\n  for (const configName of nuxtConfigs) {\n    const configPath = sys.join(sys.getAppRootDir(), configName);\n    if (await sys.exists(configPath)) {\n      return true;\n    }\n  }\n\n  // Check package.json for Nuxt dependency\n  try {\n    const pkgJsonPath = sys.join(sys.getAppRootDir(), \"package.json\");\n    if (await sys.exists(pkgJsonPath)) {\n      const pkgJson = JSON.parse((await sys.readFile(pkgJsonPath)) || \"{}\");\n      const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n      return !!(deps.nuxt || deps[\"@nuxt/kit\"] || deps[\"nuxt3\"]);\n    }\n  } catch (e) {\n    // Ignore errors\n  }\n\n  return false;\n}\n\nexport interface VueDevToolsSys extends DevToolsSys {\n  srcDir: string | null;\n  componentsDir: string;\n  builderComponentPath: string;\n  registryPath: string;\n  vueConfigPath: string;\n  typescriptEnabled: boolean;\n  configType: \"webpack\" | \"vite\" | \"\";\n  isNuxt: boolean;\n  addExternalPackage: (pkgName: string) => void;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.throwUnsupportedData = exports.throwUnknownDataType = exports.getType = void 0;\nfunction getType(o) {\n    return Object.prototype.toString.call(o);\n}\nexports.getType = getType;\nfunction throwUnknownDataType(o) {\n    throw new TypeError('unsupported data type: ' + getType(o));\n}\nexports.throwUnknownDataType = throwUnknownDataType;\nfunction throwUnsupportedData(name) {\n    throw new TypeError('unsupported data type: ' + name);\n}\nexports.throwUnsupportedData = throwUnsupportedData;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.s_to_num = exports.int_str_to_s = exports.num_to_s = exports.big_int_to_s = exports.int_to_s = exports.s_to_big_int = exports.s_to_int = void 0;\nlet i_to_s = '';\nfor (let i = 0; i < 10; i++) {\n    const c = String.fromCharCode(48 + i);\n    i_to_s += c;\n}\nfor (let i = 0; i < 26; i++) {\n    const c = String.fromCharCode(65 + i);\n    i_to_s += c;\n}\nfor (let i = 0; i < 26; i++) {\n    const c = String.fromCharCode(65 + 32 + i);\n    i_to_s += c;\n}\nconst N = i_to_s.length;\nconst s_to_i = {};\nfor (let i = 0; i < N; i++) {\n    const s = i_to_s[i];\n    s_to_i[s] = i;\n}\nfunction s_to_int(s) {\n    let acc = 0;\n    let pow = 1;\n    for (let i = s.length - 1; i >= 0; i--) {\n        const c = s[i];\n        let x = s_to_i[c];\n        x *= pow;\n        acc += x;\n        pow *= N;\n    }\n    return acc;\n}\nexports.s_to_int = s_to_int;\nfunction s_to_big_int(s) {\n    let acc = BigInt(0);\n    let pow = BigInt(1);\n    const n = BigInt(N);\n    for (let i = s.length - 1; i >= 0; i--) {\n        const c = s[i];\n        let x = BigInt(s_to_i[c]);\n        x *= pow;\n        acc += x;\n        pow *= n;\n    }\n    return acc;\n}\nexports.s_to_big_int = s_to_big_int;\nfunction int_to_s(int) {\n    if (int === 0) {\n        return i_to_s[0];\n    }\n    const acc = [];\n    while (int !== 0) {\n        const i = int % N;\n        const c = i_to_s[i];\n        acc.push(c);\n        int -= i;\n        int /= N;\n    }\n    return acc.reverse().join('');\n}\nexports.int_to_s = int_to_s;\nfunction big_int_to_s(int) {\n    const zero = BigInt(0);\n    const n = BigInt(N);\n    if (int === zero) {\n        return i_to_s[0];\n    }\n    const acc = [];\n    while (int !== zero) {\n        const i = int % n;\n        const c = i_to_s[Number(i)];\n        acc.push(c);\n        int /= n;\n    }\n    return acc.reverse().join('');\n}\nexports.big_int_to_s = big_int_to_s;\nfunction reverse(s) {\n    return s.split('').reverse().join('');\n}\nfunction num_to_s(num) {\n    if (num < 0) {\n        return '-' + num_to_s(-num);\n    }\n    let [a, b] = num.toString().split('.');\n    if (!b) {\n        if (a.includes('e')) {\n            // e.g. 2e-13 -> 2.0e-13\n            const [a1, a2] = a.split('e');\n            a = a1;\n            b = '0e' + a2;\n        }\n        else {\n            return int_to_s(num);\n        }\n    }\n    let c;\n    if (b) {\n        [b, c] = b.split('e');\n    }\n    a = int_str_to_s(a);\n    b = reverse(b);\n    b = int_str_to_s(b);\n    let str = a + '.' + b;\n    if (c) {\n        str += '.';\n        switch (c[0]) {\n            case '+':\n                c = c.slice(1);\n                break;\n            case '-':\n                str += '-';\n                c = c.slice(1);\n                break;\n        }\n        c = int_str_to_s(c);\n        str += c;\n    }\n    return str;\n}\nexports.num_to_s = num_to_s;\nfunction int_str_to_s(int_str) {\n    const num = +int_str;\n    if (num.toString() === int_str && num + 1 !== num && num - 1 !== num) {\n        return int_to_s(num);\n    }\n    return ':' + big_int_to_s(BigInt(int_str));\n}\nexports.int_str_to_s = int_str_to_s;\nfunction s_to_int_str(s) {\n    if (s[0] === ':') {\n        return s_to_big_int(s.substring(1)).toString();\n    }\n    return s_to_int(s).toString();\n}\nfunction s_to_num(s) {\n    if (s[0] === '-') {\n        return -s_to_num(s.substr(1));\n    }\n    let [a, b, c] = s.split('.');\n    if (!b) {\n        return s_to_int(a);\n    }\n    a = s_to_int_str(a);\n    b = s_to_int_str(b);\n    b = reverse(b);\n    let str = a + '.' + b;\n    if (c) {\n        str += 'e';\n        let neg = false;\n        if (c[0] === '-') {\n            neg = true;\n            c = c.slice(1);\n        }\n        c = s_to_int_str(c);\n        str += neg ? -c : +c;\n    }\n    return +str;\n}\nexports.s_to_num = s_to_num;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeStr = exports.encodeStr = exports.decodeBool = exports.encodeBool = exports.decodeKey = exports.decodeNum = exports.encodeNum = void 0;\nconst number_1 = require(\"./number\");\nfunction encodeNum(num) {\n    const a = 'n|' + (0, number_1.num_to_s)(num);\n    return a;\n    // let b = num.toString()\n    // return a.length < b.length ? a : num\n}\nexports.encodeNum = encodeNum;\nfunction decodeNum(s) {\n    s = s.replace('n|', '');\n    return (0, number_1.s_to_num)(s);\n}\nexports.decodeNum = decodeNum;\nfunction decodeKey(key) {\n    return typeof key === 'number' ? key : (0, number_1.s_to_int)(key);\n}\nexports.decodeKey = decodeKey;\nfunction encodeBool(b) {\n    // return 'b|' + bool_to_s(b)\n    return b ? 'b|T' : 'b|F';\n}\nexports.encodeBool = encodeBool;\nfunction decodeBool(s) {\n    switch (s) {\n        case 'b|T':\n            return true;\n        case 'b|F':\n            return false;\n    }\n    return !!s;\n}\nexports.decodeBool = decodeBool;\nfunction encodeStr(str) {\n    const prefix = str[0] + str[1];\n    switch (prefix) {\n        case 'b|':\n        case 'o|':\n        case 'n|':\n        case 'a|':\n        case 's|':\n            str = 's|' + str;\n    }\n    return str;\n}\nexports.encodeStr = encodeStr;\nfunction decodeStr(s) {\n    const prefix = s[0] + s[1];\n    return prefix === 's|' ? s.substr(2) : s;\n}\nexports.decodeStr = decodeStr;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.config = void 0;\nexports.config = {\n    // default will not sort the object key\n    sort_key: false,\n    // default will convert into null silently like JSON.stringify\n    error_on_nan: false,\n    error_on_infinite: false,\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addValue = exports.makeInMemoryMemory = exports.makeInMemoryCache = exports.makeInMemoryStore = exports.memToValues = void 0;\nconst config_1 = require(\"./config\");\nconst debug_1 = require(\"./debug\");\nconst encode_1 = require(\"./encode\");\nconst number_1 = require(\"./number\");\nfunction memToValues(mem) {\n    return mem.store.toArray();\n}\nexports.memToValues = memToValues;\nfunction makeInMemoryStore() {\n    const mem = [];\n    return {\n        forEach(cb) {\n            for (let i = 0; i < mem.length; i++) {\n                if (cb(mem[i]) === 'break') {\n                    return;\n                }\n            }\n        },\n        add(value) {\n            mem.push(value);\n        },\n        toArray() {\n            return mem;\n        },\n    };\n}\nexports.makeInMemoryStore = makeInMemoryStore;\nfunction makeInMemoryCache() {\n    const valueMem = Object.create(null);\n    const schemaMem = Object.create(null);\n    return {\n        getValue(key) {\n            return valueMem[key];\n        },\n        getSchema(key) {\n            return schemaMem[key];\n        },\n        forEachValue(cb) {\n            for (const [key, value] of Object.entries(valueMem)) {\n                if (cb(key, value) === 'break') {\n                    return;\n                }\n            }\n        },\n        forEachSchema(cb) {\n            for (const [key, value] of Object.entries(schemaMem)) {\n                if (cb(key, value) === 'break') {\n                    return;\n                }\n            }\n        },\n        setValue(key, value) {\n            valueMem[key] = value;\n        },\n        setSchema(key, value) {\n            schemaMem[key] = value;\n        },\n        hasValue(key) {\n            return key in valueMem;\n        },\n        hasSchema(key) {\n            return key in schemaMem;\n        },\n    };\n}\nexports.makeInMemoryCache = makeInMemoryCache;\nfunction makeInMemoryMemory() {\n    return {\n        store: makeInMemoryStore(),\n        cache: makeInMemoryCache(),\n        keyCount: 0,\n    };\n}\nexports.makeInMemoryMemory = makeInMemoryMemory;\nfunction getValueKey(mem, value) {\n    if (mem.cache.hasValue(value)) {\n        return mem.cache.getValue(value);\n    }\n    const id = mem.keyCount++;\n    const key = (0, number_1.num_to_s)(id);\n    mem.store.add(value);\n    mem.cache.setValue(value, key);\n    return key;\n}\n/** @remark in-place sort the keys */\nfunction getSchema(mem, keys) {\n    if (config_1.config.sort_key) {\n        keys.sort();\n    }\n    const schema = keys.join(',');\n    if (mem.cache.hasSchema(schema)) {\n        return mem.cache.getSchema(schema);\n    }\n    const key_id = addValue(mem, keys, undefined);\n    mem.cache.setSchema(schema, key_id);\n    return key_id;\n}\nfunction addValue(mem, o, parent) {\n    if (o === null) {\n        return '';\n    }\n    switch (typeof o) {\n        case 'undefined':\n            if (Array.isArray(parent)) {\n                return addValue(mem, null, parent);\n            }\n            break;\n        case 'object':\n            if (o === null) {\n                return getValueKey(mem, null);\n            }\n            if (Array.isArray(o)) {\n                let acc = 'a';\n                for (let i = 0; i < o.length; i++) {\n                    const v = o[i];\n                    const key = v === null ? '_' : addValue(mem, v, o);\n                    acc += '|' + key;\n                }\n                if (acc === 'a') {\n                    acc = 'a|';\n                }\n                return getValueKey(mem, acc);\n            }\n            else {\n                const keys = Object.keys(o);\n                if (keys.length === 0) {\n                    return getValueKey(mem, 'o|');\n                }\n                let acc = 'o';\n                const key_id = getSchema(mem, keys);\n                acc += '|' + key_id;\n                for (const key of keys) {\n                    const value = o[key];\n                    const v = addValue(mem, value, o);\n                    acc += '|' + v;\n                }\n                return getValueKey(mem, acc);\n            }\n        case 'boolean':\n            return getValueKey(mem, (0, encode_1.encodeBool)(o));\n        case 'number':\n            if (Number.isNaN(o)) {\n                if (config_1.config.error_on_nan) {\n                    (0, debug_1.throwUnsupportedData)('[number NaN]');\n                }\n                return ''; // treat it as null like JSON.stringify\n            }\n            if (Number.POSITIVE_INFINITY === o || Number.NEGATIVE_INFINITY === o) {\n                if (config_1.config.error_on_infinite) {\n                    (0, debug_1.throwUnsupportedData)('[number Infinity]');\n                }\n                return ''; // treat it as null like JSON.stringify\n            }\n            return getValueKey(mem, (0, encode_1.encodeNum)(o));\n        case 'string':\n            return getValueKey(mem, (0, encode_1.encodeStr)(o));\n    }\n    return (0, debug_1.throwUnknownDataType)(o);\n}\nexports.addValue = addValue;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decompress = exports.decode = exports.compress = void 0;\nconst debug_1 = require(\"./debug\");\nconst encode_1 = require(\"./encode\");\nconst memory_1 = require(\"./memory\");\nfunction compress(o) {\n    const mem = (0, memory_1.makeInMemoryMemory)();\n    const root = (0, memory_1.addValue)(mem, o, undefined);\n    const values = (0, memory_1.memToValues)(mem);\n    return [values, root];\n}\nexports.compress = compress;\nfunction decodeObject(values, s) {\n    if (s === 'o|') {\n        return {};\n    }\n    const o = {};\n    const vs = s.split('|');\n    const key_id = vs[1];\n    let keys = decode(values, key_id);\n    const n = vs.length;\n    if (n - 2 === 1 && !Array.isArray(keys)) {\n        // single-key object using existing value as key\n        keys = [keys];\n    }\n    for (let i = 2; i < n; i++) {\n        const k = keys[i - 2];\n        let v = vs[i];\n        v = decode(values, v);\n        o[k] = v;\n    }\n    return o;\n}\nfunction decodeArray(values, s) {\n    if (s === 'a|') {\n        return [];\n    }\n    const vs = s.split('|');\n    const n = vs.length - 1;\n    const xs = new Array(n);\n    for (let i = 0; i < n; i++) {\n        let v = vs[i + 1];\n        v = decode(values, v);\n        xs[i] = v;\n    }\n    return xs;\n}\nfunction decode(values, key) {\n    if (key === '' || key === '_') {\n        return null;\n    }\n    const id = (0, encode_1.decodeKey)(key);\n    const v = values[id];\n    if (v === null) {\n        return v;\n    }\n    switch (typeof v) {\n        case 'undefined':\n            return v;\n        case 'number':\n            return v;\n        case 'string':\n            const prefix = v[0] + v[1];\n            switch (prefix) {\n                case 'b|':\n                    return (0, encode_1.decodeBool)(v);\n                case 'o|':\n                    return decodeObject(values, v);\n                case 'n|':\n                    return (0, encode_1.decodeNum)(v);\n                case 'a|':\n                    return decodeArray(values, v);\n                default:\n                    return (0, encode_1.decodeStr)(v);\n            }\n    }\n    return (0, debug_1.throwUnknownDataType)(v);\n}\nexports.decode = decode;\nfunction decompress(c) {\n    const [values, root] = c;\n    return decode(values, root);\n}\nexports.decompress = decompress;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.trimUndefinedRecursively = exports.trimUndefined = void 0;\nfunction trimUndefined(object) {\n    for (const key in object) {\n        if (object[key] === undefined) {\n            delete object[key];\n        }\n    }\n}\nexports.trimUndefined = trimUndefined;\nfunction trimUndefinedRecursively(object) {\n    trimUndefinedRecursivelyLoop(object, new Set());\n}\nexports.trimUndefinedRecursively = trimUndefinedRecursively;\nfunction trimUndefinedRecursivelyLoop(object, tracks) {\n    tracks.add(object);\n    for (const key in object) {\n        if (object[key] === undefined) {\n            delete object[key];\n        }\n        else {\n            const value = object[key];\n            if (value && typeof value === 'object' && !tracks.has(value)) {\n                trimUndefinedRecursivelyLoop(value, tracks);\n            }\n        }\n    }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.config = exports.trimUndefinedRecursively = exports.trimUndefined = exports.addValue = exports.decode = exports.decompress = exports.compress = void 0;\n/* for direct usage */\nvar core_1 = require(\"./core\");\nObject.defineProperty(exports, \"compress\", { enumerable: true, get: function () { return core_1.compress; } });\nObject.defineProperty(exports, \"decompress\", { enumerable: true, get: function () { return core_1.decompress; } });\n/* for custom wrapper */\nvar core_2 = require(\"./core\");\nObject.defineProperty(exports, \"decode\", { enumerable: true, get: function () { return core_2.decode; } });\nvar memory_1 = require(\"./memory\");\nObject.defineProperty(exports, \"addValue\", { enumerable: true, get: function () { return memory_1.addValue; } });\n/* to remove undefined object fields */\nvar helpers_1 = require(\"./helpers\");\nObject.defineProperty(exports, \"trimUndefined\", { enumerable: true, get: function () { return helpers_1.trimUndefined; } });\nObject.defineProperty(exports, \"trimUndefinedRecursively\", { enumerable: true, get: function () { return helpers_1.trimUndefinedRecursively; } });\n/* to config */\nvar config_1 = require(\"./config\");\nObject.defineProperty(exports, \"config\", { enumerable: true, get: function () { return config_1.config; } });\n", "import type {\n  DevToolsAdapter,\n  DevToolsSys,\n  ExportedRegistry,\n  MinimalComponentInfo,\n} from \"../types\";\nimport { clone, normalizePathSlash } from \"../common/utils\";\nimport { compress, decompress, type Compressed } from \"compress-json\";\n\nexport async function exportRegistry(\n  sys: DevToolsSys,\n  devTools: DevToolsAdapter,\n) {\n  const registry = await devTools.getRegistry();\n\n  const exportedRegistry: ExportedRegistry = {\n    components: registry.components\n      .filter((c) => c.isRegistered)\n      .map((c) => {\n        const minimal: MinimalComponentInfo = {\n          filePath: normalizePathSlash(\n            sys.relative(sys.getAppRootDir(), c.filePath),\n          ),\n          name: c.name,\n          image: c.image,\n          description: c.description,\n          exportName: c.exportName,\n          inputs: clone(c.inputs),\n        };\n        return clone(minimal);\n      }),\n    version: 1,\n  };\n\n  sys.debug(\n    `exporting registry components:`,\n    exportedRegistry.components.length,\n  );\n\n  const compressed = compress(exportedRegistry);\n\n  return btoa(JSON.stringify(compressed));\n}\n\nexport async function importRegistry(\n  sys: DevToolsSys,\n  devTools: DevToolsAdapter,\n  registryToImport: string,\n) {\n  if (typeof registryToImport !== \"string\") {\n    throw new Error(`Invalid registry to import`);\n  }\n\n  const registry = await devTools.getRegistry();\n\n  const compressed = JSON.parse(atob(registryToImport)) as Compressed;\n\n  const importedRegistry = decompress(compressed) as ExportedRegistry;\n\n  let updatedRegistry = clone(registry);\n\n  sys.debug(\n    `importing registry components:`,\n    importedRegistry.components.length,\n  );\n\n  for (const cmpToRegister of importedRegistry.components) {\n    const filePath = normalizePathSlash(sys.normalize(cmpToRegister.filePath));\n    const cmp = registry.components.find(\n      (c) =>\n        normalizePathSlash(c.filePath).endsWith(filePath) &&\n        c.exportName === cmpToRegister.exportName,\n    );\n    if (!cmp) {\n      console.error(\n        `Could not find component to register: ${cmpToRegister.filePath}, ${cmpToRegister.exportName}`,\n      );\n      continue;\n    }\n\n    sys.debug(`register (${cmp.id})`, cmp.filePath);\n\n    await devTools.registerComponent({\n      cmpId: cmp.id,\n    });\n\n    for (const input of cmpToRegister.inputs) {\n      sys.debug(`set input (${cmp.id})`);\n      await devTools.setRegisteredComponentInput({\n        cmpId: cmp.id,\n        name: input.name,\n        type: input.type,\n        required: input.required,\n        defaultValue: input.defaultValue,\n        friendlyName: input.friendlyName,\n        helperText: input.helperText,\n      });\n    }\n\n    sys.debug(`set input (${cmp.id}) info`);\n    const r = await devTools.setRegisteredComponentInfo({\n      cmpId: cmp.id,\n      name: cmpToRegister.name,\n      image: cmpToRegister.image,\n      description: cmpToRegister.description,\n    });\n\n    updatedRegistry = clone(r);\n  }\n\n  return updatedRegistry;\n}\n", "import type { SDKFrameworks, SDKVersionInfo } from \"../../types\";\n\nimport { SDK_VERSIONS } from \"../../types\";\n\nexport const SUPPORTED_FRAMEWORKS = {\n  react: \"react\",\n  remix: \"remix\",\n  angular: \"angular\",\n  next: \"next\",\n  qwik: \"qwik\",\n  vue: \"vue\",\n  native: \"native\",\n};\n\nconst SDK_PER_FRAMEWORK: SDKFrameworks = {\n  [SUPPORTED_FRAMEWORKS.react]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: true,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: false,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.remix]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: false,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: true,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.angular]: [\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: true,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.next]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: true,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: false,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.qwik]: [\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: true,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.vue]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: true,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: false,\n    },\n  ],\n};\n\nexport function getSDKDetailsForFramework(framework: string): SDKVersionInfo[] {\n  return SDK_PER_FRAMEWORK[framework];\n}\n", "import type { DevToolsSys } from \"../types\";\n\nexport interface Package {\n  name: string;\n  subPackages: string[];\n}\n\nexport type DependencyStructure = Package[];\n\nexport async function findAllDependencies(\n  sys: DevToolsSys,\n  rootDir: string,\n): Promise<DependencyStructure> {\n  const packages: DependencyStructure = [];\n  const processedPackages: Set<string> = new Set();\n\n  async function processPackage(packageDir: string): Promise<Package | null> {\n    const packageJsonPath = sys.join(packageDir, \"package.json\");\n\n    try {\n      const hasPackageJson = await sys.exists(packageJsonPath);\n      if (!hasPackageJson) {\n        return null;\n      }\n      const packageJsonContent = await sys.readFile(packageJsonPath);\n      if (packageJsonContent === null) {\n        throw new Error(`Failed to read package.json at ${packageJsonPath}`);\n      }\n      const packageJson = JSON.parse(packageJsonContent);\n\n      if (\n        //Skip packages with no name\n        typeof packageJson.name !== \"string\" ||\n        packageJson.name.trim() === \"\"\n      ) {\n        return null;\n      }\n\n      if (processedPackages.has(packageJson.name)) {\n        return null; // Skip if already processed\n      }\n      processedPackages.add(packageJson.name);\n\n      const currentPackage: Package = {\n        name: packageJson.name,\n        subPackages: [],\n      };\n\n      // Check for subpackages within the current package\n      const packageContents = await sys.readdir(packageDir);\n      for (const item of packageContents) {\n        if (\n          item !== \"node_modules\" &&\n          (await sys.stat(sys.join(packageDir, item))).isDirectory()\n        ) {\n          currentPackage.subPackages.push(item);\n        }\n      }\n\n      packages.push(currentPackage);\n      return currentPackage;\n    } catch (error) {\n      sys.Sentry?.captureException(error, {\n        level: \"warning\",\n      });\n      return null;\n    }\n  }\n\n  // Process main package dependencies\n  try {\n    const mainPackageJsonPath = sys.join(rootDir, \"package.json\");\n    const hasPackageJson = await sys.exists(mainPackageJsonPath);\n    if (hasPackageJson) {\n      const mainPackageJsonContent = await sys.readFile(mainPackageJsonPath);\n      if (mainPackageJsonContent !== null) {\n        const mainPackageJson = JSON.parse(mainPackageJsonContent);\n        const allDependencies = {\n          ...mainPackageJson.dependencies,\n          ...mainPackageJson.devDependencies,\n        };\n\n        for (const depName of Object.keys(allDependencies)) {\n          const depPath = sys.join(rootDir, \"node_modules\", depName);\n          await processPackage(depPath);\n        }\n\n        // Process workspaces if present\n        if (Array.isArray(mainPackageJson.workspaces)) {\n          for (const workspace of mainPackageJson.workspaces) {\n            const workspacePaths = await sys.readdir(\n              sys.join(rootDir, workspace),\n            );\n            for (const workspacePath of workspacePaths) {\n              const fullWorkspacePath = sys.join(\n                rootDir,\n                workspace,\n                workspacePath,\n              );\n              await processPackage(fullWorkspacePath);\n            }\n          }\n        }\n      }\n    }\n  } catch (error) {\n    sys.Sentry?.captureException(error, {\n      level: \"warning\",\n    });\n  }\n\n  return packages;\n}\n", "import type { CreateDevToolsOptions, DevTools } from \"../types\";\nimport { detectFrameworks } from \"./detect-frameworks\";\nimport { createNextDevTools } from \"./adapters/next\";\nimport { createQwikCityDevTools } from \"./adapters/qwik-city\";\nimport { createRemixDevTools } from \"./adapters/remix\";\nimport { createReactDevTools } from \"./adapters/react\";\nimport { createAngularDevTools } from \"./adapters/angular\";\nimport { createVueDevTools } from \"./adapters/vue\";\nimport { exportRegistry, importRegistry } from \"./import-export-registry\";\nimport { SUPPORTED_FRAMEWORKS } from \"../common/builder/builder-sdks\";\nimport { findAllDependencies } from \"./find-dependencies\";\n\nconst FRAMEWORK_ADAPTERS: { [name: string]: typeof createQwikCityDevTools } = {\n  \"@builder.io/qwik-city\": createQwikCityDevTools,\n  next: createNextDevTools,\n  \"@remix-run/react\": createRemixDevTools,\n  react: createReactDevTools,\n  \"@angular/core\": createAngularDevTools,\n  vue: createVueDevTools,\n  native: createReactDevTools,\n};\n\nconst FRAMEWORK_FRIENDLY_NAMES: { [name: string]: string } = {\n  \"@builder.io/qwik-city\": SUPPORTED_FRAMEWORKS.qwik,\n  next: SUPPORTED_FRAMEWORKS.next,\n  \"@remix-run/react\": SUPPORTED_FRAMEWORKS.remix,\n  react: SUPPORTED_FRAMEWORKS.react,\n  \"@angular/core\": SUPPORTED_FRAMEWORKS.angular,\n  vue: SUPPORTED_FRAMEWORKS.vue,\n  native: SUPPORTED_FRAMEWORKS.native,\n};\n\nexport async function createDevTools(\n  opts: CreateDevToolsOptions,\n  nativeOverride = false,\n): Promise<DevTools> {\n  if (!opts.ts) {\n    throw new Error(\n      \"createDevTools() requires a TypeScript instance passed to the 'ts' option\",\n    );\n  }\n\n  if (!opts.frameworks || opts.frameworks.length === 0) {\n    opts.frameworks = await detectFrameworks(opts);\n  }\n\n  if (opts.frameworks.length === 0 && nativeOverride) {\n    opts.frameworks.push({ name: \"native\" });\n  }\n\n  if (opts.frameworks.length === 0) {\n    throw new Error(`Supported Devtools framework for not found`);\n  }\n\n  for (const framework of opts.frameworks) {\n    const createDevToolsAdapter = FRAMEWORK_ADAPTERS[framework.name];\n    if (createDevToolsAdapter) {\n      try {\n        const devToolsAdapter = await createDevToolsAdapter(opts);\n        const devTools: DevTools = {\n          ...devToolsAdapter,\n          exportRegistry: () => {\n            return exportRegistry(opts, devToolsAdapter);\n          },\n          importRegistry: (exportedRegistry) => {\n            return importRegistry(opts, devToolsAdapter, exportedRegistry);\n          },\n          framework: FRAMEWORK_FRIENDLY_NAMES[framework.name],\n          findAllDependencies: async () => {\n            return await findAllDependencies(opts, opts.getRepoRootDir());\n          },\n        };\n        return devTools;\n      } catch (err) {\n        opts.Sentry?.captureException(err, {\n          level: \"warning\",\n        });\n      }\n    }\n  }\n\n  throw new Error(\n    `Devtools framework not found for ${opts.getAppRootDir()}, ${JSON.stringify(\n      opts.frameworks,\n      null,\n      2,\n    )}`,\n  );\n}\n", "import type { Duplex } from \"stream\";\nimport type { DevToolsSys } from \"../types\";\n\n/**\n * Tracks active WebSocket connections to prevent memory leaks\n */\nexport class ConnectionTracker {\n  private connections = new Set<Duplex>();\n  private maxConnections = 1000; // Prevent memory leaks - global limit\n  private sys: DevToolsSys;\n  private healthCheckInterval: ReturnType<typeof setInterval> | null = null;\n  private readonly HEALTH_CHECK_INTERVAL_MS = 30000; // 30 seconds\n\n  constructor(sys: DevToolsSys) {\n    this.sys = sys;\n    this.startHealthMonitoring();\n  }\n\n  /**\n   * Add a connection to tracking\n   */\n  addConnection(socket: Duplex, req?: any): boolean {\n    if (this.connections.size >= this.maxConnections) {\n      const message = `Max connections (${this.maxConnections}) reached, rejecting new connection`;\n      console.error(`[ConnectionTracker] ${message}`);\n\n      this.sys.Sentry?.captureMessage(message, {\n        level: \"error\",\n        tags: {\n          component: \"ConnectionTracker\",\n          maxConnections: this.maxConnections.toString(),\n          currentConnections: this.connections.size.toString(),\n          requestUrl: req?.url || \"unknown\",\n          requestMethod: req?.method || \"unknown\",\n          userAgent: req?.headers?.[\"user-agent\"] || \"unknown\",\n          origin: req?.headers?.origin || \"unknown\",\n          referer: req?.headers?.referer || \"unknown\",\n        },\n        extra: {\n          connectionLimit: this.maxConnections,\n          activeConnections: this.connections.size,\n          requestHeaders: req?.headers || {},\n          requestUrl: req?.url,\n        },\n      });\n\n      return false;\n    }\n\n    this.connections.add(socket);\n\n    // Set up cleanup when socket closes\n    socket.on(\"close\", () => {\n      this.removeConnection(socket);\n    });\n\n    socket.on(\"error\", () => {\n      this.removeConnection(socket);\n    });\n\n    return true;\n  }\n\n  /**\n   * Remove a connection from tracking\n   */\n  removeConnection(socket: Duplex): void {\n    this.connections.delete(socket);\n  }\n\n  /**\n   * Get current connection count\n   */\n  getConnectionCount(): number {\n    return this.connections.size;\n  }\n\n  /**\n   * Clean up all connections\n   */\n  cleanup(): void {\n    for (const socket of this.connections) {\n      if (socket.writable) {\n        socket.write(\"HTTP/1.1 503 Service Unavailable\\r\\n\\r\\n\");\n      }\n      socket.destroy();\n    }\n    this.connections.clear();\n    this.stopHealthMonitoring();\n  }\n\n  /**\n   * Start health monitoring for connections\n   */\n  private startHealthMonitoring(): void {\n    if (this.healthCheckInterval) {\n      return; // Already running\n    }\n\n    this.healthCheckInterval = setInterval(() => {\n      this.performHealthCheck();\n    }, this.HEALTH_CHECK_INTERVAL_MS);\n  }\n\n  /**\n   * Stop health monitoring\n   */\n  private stopHealthMonitoring(): void {\n    if (this.healthCheckInterval) {\n      clearInterval(this.healthCheckInterval);\n      this.healthCheckInterval = null;\n    }\n  }\n\n  /**\n   * Perform health check on all connections\n   */\n  private performHealthCheck(): void {\n    const staleConnections: Duplex[] = [];\n\n    for (const socket of this.connections) {\n      // Check if socket is still writable and not destroyed\n      if (socket.destroyed || !socket.writable) {\n        staleConnections.push(socket);\n        continue;\n      }\n    }\n\n    for (const socket of staleConnections) {\n      this.removeConnection(socket);\n      try {\n        socket.destroy();\n      } catch (error) {\n        // Socket might already be destroyed\n      }\n    }\n  }\n}\n", "// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n\nimport type { DevToolsPath } from \"../types\";\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\nexport function createPath(opts: { cwd?: () => string }): DevToolsPath {\n  function assertPath(path: any) {\n    if (typeof path !== \"string\") {\n      throw new TypeError(\n        \"Path must be a string. Received \" + JSON.stringify(path),\n      );\n    }\n  }\n\n  // Resolves . and .. elements in a path with directory names\n  function normalizeStringPosix(path: string, allowAboveRoot: boolean): string {\n    let res = \"\";\n    let lastSegmentLength = 0;\n    let lastSlash = -1;\n    let dots = 0;\n    let code;\n    for (let i = 0; i <= path.length; ++i) {\n      if (i < path.length) {\n        code = path.charCodeAt(i);\n      } else if (code === 47 /*/*/) {\n        break;\n      } else {\n        code = 47 /*/*/;\n      }\n      if (code === 47 /*/*/) {\n        if (lastSlash === i - 1 || dots === 1) {\n          // NOOP\n        } else if (lastSlash !== i - 1 && dots === 2) {\n          if (\n            res.length < 2 ||\n            lastSegmentLength !== 2 ||\n            res.charCodeAt(res.length - 1) !== 46 /*.*/ ||\n            res.charCodeAt(res.length - 2) !== 46 /*.*/\n          ) {\n            if (res.length > 2) {\n              const lastSlashIndex = res.lastIndexOf(\"/\");\n              if (lastSlashIndex !== res.length - 1) {\n                if (lastSlashIndex === -1) {\n                  res = \"\";\n                  lastSegmentLength = 0;\n                } else {\n                  res = res.slice(0, lastSlashIndex);\n                  lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\");\n                }\n                lastSlash = i;\n                dots = 0;\n                continue;\n              }\n            } else if (res.length === 2 || res.length === 1) {\n              res = \"\";\n              lastSegmentLength = 0;\n              lastSlash = i;\n              dots = 0;\n              continue;\n            }\n          }\n          if (allowAboveRoot) {\n            if (res.length > 0) {\n              res += \"/..\";\n            } else {\n              res = \"..\";\n            }\n            lastSegmentLength = 2;\n          }\n        } else {\n          if (res.length > 0) {\n            res += \"/\" + path.slice(lastSlash + 1, i);\n          } else {\n            res = path.slice(lastSlash + 1, i);\n          }\n          lastSegmentLength = i - lastSlash - 1;\n        }\n        lastSlash = i;\n        dots = 0;\n      } else if (code === 46 /*.*/ && dots !== -1) {\n        ++dots;\n      } else {\n        dots = -1;\n      }\n    }\n    return res;\n  }\n\n  // path.resolve([from ...], to)\n  const resolve = function resolve(...paths: string[]) {\n    let resolvedPath = \"\";\n    let resolvedAbsolute = false;\n\n    for (let i = paths.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n      let path: string | undefined;\n      if (i >= 0) {\n        path = paths[i];\n      } else {\n        if (opts.cwd) {\n          path = opts.cwd();\n        } else {\n          path = \"/\";\n        }\n      }\n\n      assertPath(path);\n\n      // Skip empty entries\n      if (path.length === 0) {\n        continue;\n      }\n\n      resolvedPath = path + \"/\" + resolvedPath;\n      resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    }\n\n    // At this point the path should be resolved to a full absolute path, but\n    // handle relative paths to be safe (might happen when process.cwd() fails)\n\n    // Normalize the path\n    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n    if (resolvedAbsolute) {\n      if (resolvedPath.length > 0) {\n        return \"/\" + resolvedPath;\n      } else {\n        return \"/\";\n      }\n    } else if (resolvedPath.length > 0) {\n      return resolvedPath;\n    } else {\n      return \".\";\n    }\n  };\n\n  const normalize = function normalize(path: string) {\n    assertPath(path);\n\n    if (path.length === 0) {\n      return \".\";\n    }\n\n    const isAbsolute = path.charCodeAt(0) === 47; /*/*/\n    const trailingSeparator = path.charCodeAt(path.length - 1) === 47; /*/*/\n\n    // Normalize the path\n    path = normalizeStringPosix(path, !isAbsolute);\n\n    if (path.length === 0 && !isAbsolute) {\n      path = \".\";\n    }\n    if (path.length > 0 && trailingSeparator) {\n      path += \"/\";\n    }\n\n    if (isAbsolute) {\n      return \"/\" + path;\n    }\n    return path;\n  };\n\n  const isAbsolute = function isAbsolute(path: string) {\n    assertPath(path);\n    return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n  };\n\n  const join = function join(...paths: string[]) {\n    if (paths.length === 0) {\n      return \".\";\n    }\n    let joined;\n    for (let i = 0; i < paths.length; ++i) {\n      const arg = paths[i];\n      assertPath(arg);\n      if (arg.length > 0) {\n        if (joined === undefined) {\n          joined = arg;\n        } else {\n          joined += \"/\" + arg;\n        }\n      }\n    }\n    if (joined === undefined) {\n      return \".\";\n    }\n    return normalize(joined);\n  };\n\n  const relative = function relative(from: string, to: string) {\n    assertPath(from);\n    assertPath(to);\n\n    if (from === to) {\n      return \"\";\n    }\n\n    from = resolve(from);\n    to = resolve(to);\n\n    if (from === to) {\n      return \"\";\n    }\n\n    // Trim any leading backslashes\n    let fromStart = 1;\n    for (; fromStart < from.length; ++fromStart) {\n      if (from.charCodeAt(fromStart) !== 47 /*/*/) {\n        break;\n      }\n    }\n    const fromEnd = from.length;\n    const fromLen = fromEnd - fromStart;\n\n    // Trim any leading backslashes\n    let toStart = 1;\n    for (; toStart < to.length; ++toStart) {\n      if (to.charCodeAt(toStart) !== 47 /*/*/) {\n        break;\n      }\n    }\n    const toEnd = to.length;\n    const toLen = toEnd - toStart;\n\n    // Compare paths to find the longest common path from root\n    const length = fromLen < toLen ? fromLen : toLen;\n    let lastCommonSep = -1;\n    let i = 0;\n    for (; i <= length; ++i) {\n      if (i === length) {\n        if (toLen > length) {\n          if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n            // We get here if `from` is the exact base path for `to`.\n            // For example: from='/foo/bar'; to='/foo/bar/baz'\n            return to.slice(toStart + i + 1);\n          } else if (i === 0) {\n            // We get here if `from` is the root\n            // For example: from='/'; to='/foo'\n            return to.slice(toStart + i);\n          }\n        } else if (fromLen > length) {\n          if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n            // We get here if `to` is the exact base path for `from`.\n            // For example: from='/foo/bar/baz'; to='/foo/bar'\n            lastCommonSep = i;\n          } else if (i === 0) {\n            // We get here if `to` is the root.\n            // For example: from='/foo'; to='/'\n            lastCommonSep = 0;\n          }\n        }\n        break;\n      }\n      const fromCode = from.charCodeAt(fromStart + i);\n      const toCode = to.charCodeAt(toStart + i);\n      if (fromCode !== toCode) {\n        break;\n      } else if (fromCode === 47 /*/*/) {\n        lastCommonSep = i;\n      }\n    }\n\n    let out = \"\";\n    // Generate the relative path based on the path difference between `to`\n    // and `from`\n    for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n      if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n        if (out.length === 0) {\n          out += \"..\";\n        } else {\n          out += \"/..\";\n        }\n      }\n    }\n\n    // Lastly, append the rest of the destination (`to`) path that comes after\n    // the common path parts\n    if (out.length > 0) {\n      return out + to.slice(toStart + lastCommonSep);\n    } else {\n      toStart += lastCommonSep;\n      if (to.charCodeAt(toStart) === 47 /*/*/) {\n        ++toStart;\n      }\n      return to.slice(toStart);\n    }\n  };\n\n  const dirname = function dirname(path: string) {\n    assertPath(path);\n    if (path.length === 0) {\n      return \".\";\n    }\n    let code = path.charCodeAt(0);\n    const hasRoot = code === 47; /*/*/\n    let end = -1;\n    let matchedSlash = true;\n    for (let i = path.length - 1; i >= 1; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n        // We saw the first non-path separator\n        matchedSlash = false;\n      }\n    }\n\n    if (end === -1) {\n      return hasRoot ? \"/\" : \".\";\n    }\n    if (hasRoot && end === 1) {\n      return \"//\";\n    }\n    return path.slice(0, end);\n  };\n\n  const basename = function basename(path: string, ext?: string) {\n    if (ext !== undefined && typeof ext !== \"string\") {\n      throw new TypeError('\"ext\" argument must be a string');\n    }\n    assertPath(path);\n\n    let start = 0;\n    let end = -1;\n    let matchedSlash = true;\n    let i;\n\n    if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n      if (ext.length === path.length && ext === path) {\n        return \"\";\n      }\n      let extIdx = ext.length - 1;\n      let firstNonSlashEnd = -1;\n      for (i = path.length - 1; i >= 0; --i) {\n        const code = path.charCodeAt(i);\n        if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            start = i + 1;\n            break;\n          }\n        } else {\n          if (firstNonSlashEnd === -1) {\n            // We saw the first non-path separator, remember this index in case\n            // we need it if the extension ends up not matching\n            matchedSlash = false;\n            firstNonSlashEnd = i + 1;\n          }\n          if (extIdx >= 0) {\n            // Try to match the explicit extension\n            if (code === ext.charCodeAt(extIdx)) {\n              if (--extIdx === -1) {\n                // We matched the extension, so mark this as the end of our path\n                // component\n                end = i;\n              }\n            } else {\n              // Extension does not match, so our result is the entire path\n              // component\n              extIdx = -1;\n              end = firstNonSlashEnd;\n            }\n          }\n        }\n      }\n\n      if (start === end) {\n        end = firstNonSlashEnd;\n      } else if (end === -1) {\n        end = path.length;\n      }\n      return path.slice(start, end);\n    } else {\n      for (i = path.length - 1; i >= 0; --i) {\n        if (path.charCodeAt(i) === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            start = i + 1;\n            break;\n          }\n        } else if (end === -1) {\n          // We saw the first non-path separator, mark this as the end of our\n          // path component\n          matchedSlash = false;\n          end = i + 1;\n        }\n      }\n\n      if (end === -1) {\n        return \"\";\n      }\n      return path.slice(start, end);\n    }\n  };\n\n  const extname = function extname(path: string) {\n    assertPath(path);\n    let startDot = -1;\n    let startPart = 0;\n    let end = -1;\n    let matchedSlash = true;\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    let preDotState = 0;\n    for (let i = path.length - 1; i >= 0; --i) {\n      const code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1) {\n          startDot = i;\n        } else if (preDotState !== 1) {\n          preDotState = 1;\n        }\n      } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (\n      startDot === -1 ||\n      end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n    ) {\n      return \"\";\n    }\n    return path.slice(startDot, end);\n  };\n\n  return {\n    relative,\n    resolve,\n    join,\n    isAbsolute,\n    basename,\n    normalize,\n    dirname,\n    extname,\n  };\n}\n", "import type { DevToolsSys, FileChangeCallback, FileChangeInfo } from \"../types\";\nimport { ConnectionTracker } from \"../types/connection-tracker\";\nimport { createPath } from \"./path\";\nimport { detectFrameworks } from \"../core/detect-frameworks\";\n\nexport async function createDevToolsSys(opts: CreateDevToolsSysOptions) {\n  const getRootDir = opts.getRepoRootDir ? opts.getRepoRootDir : () => \"/\";\n  const cwd = opts.cwd ? opts.cwd : () => \"/\";\n\n  const path = createPath({ cwd, ...opts });\n  const fs = new Map<string, string | Uint8Array>();\n\n  const normalize = (p: string) => path.normalize(path.resolve(cwd(), p));\n\n  const isDir = (p: string) => {\n    for (const [fileName] of fs) {\n      if ((fileName + \"/\").startsWith(p)) {\n        return true;\n      }\n    }\n    if (p === getRootDir()) {\n      return true;\n    }\n    return false;\n  };\n\n  const existsSync = (p: string) => {\n    p = normalize(p);\n    if (fs.has(p)) {\n      return true;\n    }\n    return isDir(p);\n  };\n\n  const readdirSync = (p: string) => {\n    p = normalize(p);\n    const dir = p === getRootDir() ? p : p + \"/\";\n    const partCount = dir.split(\"/\").length - 1;\n    const items: string[] = [];\n\n    for (const [dirItem] of fs) {\n      const dirParts = dirItem.split(\"/\").slice(0, partCount);\n      const dirItemTest = dirParts.join(\"/\") + \"/\";\n\n      if (dirItemTest === dir) {\n        const item = dirItem.split(\"/\")[partCount];\n        if (item && !items.includes(item)) {\n          items.push(item);\n        }\n      }\n    }\n\n    return items.sort();\n  };\n\n  const readdirRecursive = async (p: string, skipFolders: string[] = []) => {\n    p = normalize(p);\n    const dir = p === getRootDir() ? p : p + \"/\";\n    const items: string[] = [];\n    const skipFoldersSet = new Set(skipFolders);\n\n    for (const [dirItem] of fs) {\n      if (dirItem.startsWith(dir)) {\n        // Get the relative path from the search directory\n        const relativePath = dirItem.slice(dir.length);\n        // Skip if any parent folder is in skipFolders\n        const shouldSkip = relativePath\n          .split(\"/\")\n          .some((part) => skipFoldersSet.has(part));\n        if (!shouldSkip) {\n          items.push(dirItem);\n        }\n      }\n    }\n\n    return items.sort();\n  };\n\n  const readFileSync = (p: string) => {\n    p = normalize(p);\n    const content = fs.get(p);\n    return typeof content === \"string\" ? content : null;\n  };\n\n  const readFileSyncBuffer = (p: string) => {\n    p = normalize(p);\n    const content = fs.get(p);\n    if (typeof content === \"string\") {\n      return new TextEncoder().encode(content);\n    } else if (content instanceof Uint8Array) {\n      return content;\n    }\n    return null;\n  };\n\n  const statSync = (p: string) => {\n    p = normalize(p);\n    return {\n      isFile: () => fs.has(p),\n      isDirectory: () => !fs.has(p) && isDir(p),\n      size: isDir(p) ? 0 : (fs.get(p)?.length ?? 0),\n    };\n  };\n\n  const hash = async (str: string) => {\n    if (typeof crypto !== \"undefined\") {\n      const encoder = new TextEncoder();\n      const data = encoder.encode(str);\n      const hash = await crypto.subtle.digest(\"SHA-256\", data);\n      return Array.from(new Uint8Array(hash))\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n    }\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n      const chr = str.charCodeAt(i);\n      hash = (hash << 5) - hash + chr;\n      hash |= 0;\n    }\n    return Number(Math.abs(hash)).toString(36);\n  };\n\n  const onChangeCallbacks = new Set<FileChangeCallback>();\n\n  const sys: DevToolsSys = {\n    getRepoRootDir: getRootDir,\n    getAppRootDir: getRootDir,\n    getCwdDir: cwd,\n    cwd,\n    exists: async (p) => existsSync(p),\n    existsSync,\n    readdir: async (p) => readdirSync(p),\n    readdirSync,\n    readdirRecursive,\n    readFile: async (p) => readFileSync(p),\n    readFileSync,\n    readFileSyncBuffer: (p) => readFileSyncBuffer(p),\n    stat: async (p) => statSync(p),\n    statSync,\n    writeFile: async (p, content) => {\n      p = normalize(p);\n      fs.set(p, content);\n\n      const fileInfo: FileChangeInfo = {\n        path: p,\n        basename: path.basename(p),\n        dirname: path.dirname(p),\n        extname: path.extname(p),\n      };\n\n      for (const onChangeCallback of onChangeCallbacks) {\n        await onChangeCallback(fileInfo);\n      }\n    },\n    unlink: async (p) => {\n      p = normalize(p);\n      fs.delete(p);\n    },\n    unlinkSync: (p) => {\n      p = normalize(p);\n      fs.delete(p);\n    },\n    hash,\n    getDeviceId: async () => {\n      if (typeof navigator !== \"undefined\") {\n        return hash(navigator.userAgent);\n      }\n      return ``;\n    },\n    getRepoInfo: async () => {\n      return {\n        hasGit: false,\n        remoteUrl: \"\",\n        defaultBranch: \"\",\n        currentBranch: \"\",\n        commit: \"\",\n      };\n    },\n    formatCode: async (_, code) => {\n      return code;\n    },\n    on: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.add(callback);\n      }\n    },\n    off: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.delete(callback);\n      }\n    },\n    debug: (...args: []) => {\n      console.debug(`[builder-dev-tools]`, ...args);\n    },\n    launchEditor: async () => {\n      return {\n        success: false,\n        message: \"Not implemented\",\n      };\n    },\n    platform: () => {\n      return {\n        runtime: \"\",\n        os: \"\",\n      };\n    },\n    getFrameworks: () => [],\n    ...path,\n    ...opts,\n    version: \"0.0.0\",\n    sdkVersion: null,\n    kind: null,\n    magicast: undefined,\n    spawnSync: undefined,\n    Sentry: undefined,\n    connectionTracker: null as any, // Will be properly initialized below\n  };\n\n  // Create the global ConnectionTracker instance\n  sys.connectionTracker = new ConnectionTracker(sys);\n\n  const frameworks = await detectFrameworks(sys);\n  sys.getFrameworks = opts.getFrameworks\n    ? opts.getFrameworks\n    : () => frameworks;\n  return sys;\n}\n\nexport interface CreateDevToolsSysOptions extends Partial<DevToolsSys> {\n  /**\n   * TypeScript compiler instance.\n   */\n  ts: any;\n}\n\ndeclare const ts: any;\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../..\";\nimport type { EnsureConfigResult } from \"../../../types\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { getExportedStatements } from \"../../../common/ast/exported-statements\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { detectTurbopack } from \"../../detect-frameworks\";\n\nexport async function nextEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  try {\n    let sourceFile = codeToSource(sys, configContent);\n\n    const result: EnsureConfigResult = {\n      content: configContent,\n      filePath: configFilePath,\n      fileName: sys.basename(configFilePath),\n      outcome: \"no-update\",\n    };\n\n    const isTurbopack = await detectTurbopack(sys);\n    if (isTurbopack) {\n      console.warn(\n        `Turbopack does not support the Builder.io devtools cli. Please disable Turbopack or manually integrate Builder.io into your Next.js project.`,\n      );\n      return result;\n    }\n\n    const withFn = getWithFnVariableName(sys, sourceFile);\n    if (withFn) {\n      return result;\n    }\n\n    const cjsExports = getExportedStatements(sys, sourceFile, \"cjs\");\n    const esmExports = getExportedStatements(sys, sourceFile);\n    if (cjsExports.length !== 1 && esmExports.length !== 1) {\n      throw new Error(`Expected an export from file`);\n    }\n\n    if (esmExports.length === 1) {\n      const esmDefaultExport = esmExports[0];\n      if (!esmDefaultExport.isDefaultExport) {\n        throw new Error(`Expected a default export from file`);\n      }\n\n      const exportAssignment = esmDefaultExport.statement;\n      if (!sys.ts.isVariableStatement(exportAssignment)) {\n        throw new Error(\n          `Unexpected export type in ${configFilePath}\\n` +\n            `Found config content:\\n${configContent}\\n\\n` +\n            `The config file must follow one of these formats:\\n` +\n            `1. const nextConfig = { /* config */ }\\n` +\n            `   export default nextConfig\\n\\n` +\n            `2. const nextConfig = (phase, config) => ({ /* config */ })\\n` +\n            `   export default nextConfig\\n\\n` +\n            `3. export default { /* config */ }\\n\\n` +\n            `Current export type: ${\n              exportAssignment.kind\n                ? sys.ts.SyntaxKind[exportAssignment.kind]\n                : \"none\"\n            }`,\n        );\n      }\n\n      const configVariableStatement = esmDefaultExport.statement;\n      if (sys.ts.isVariableStatement(configVariableStatement)) {\n        // export default config\n\n        const declarations = [\n          ...configVariableStatement.declarationList.declarations,\n        ];\n        if (declarations.length !== 1) {\n          throw new Error(`Expected a single variable declaration`);\n        }\n\n        const configDeclaration = declarations[0];\n        if (!configDeclaration.initializer) {\n          throw new Error(`Expected an initializer on the declaration`);\n        }\n\n        const configInitializer = configDeclaration.initializer;\n        if (\n          sys.ts.isObjectLiteralExpression(configInitializer) ||\n          sys.ts.isCallExpression(configInitializer)\n        ) {\n          // const config = {}\n          // export default config\n\n          const fnVariableName = \"BuilderDevTools()\";\n\n          const statements = [...sourceFile.statements];\n          const index = statements.indexOf(configVariableStatement);\n\n          statements[index] = sys.ts.factory.updateVariableStatement(\n            configVariableStatement,\n            configVariableStatement.modifiers,\n            sys.ts.factory.updateVariableDeclarationList(\n              configVariableStatement.declarationList,\n              [\n                sys.ts.factory.updateVariableDeclaration(\n                  configDeclaration,\n                  configDeclaration.name,\n                  configDeclaration.exclamationToken,\n                  configDeclaration.type,\n                  sys.ts.factory.createCallExpression(\n                    sys.ts.factory.createIdentifier(fnVariableName),\n                    undefined,\n                    [configInitializer],\n                  ),\n                ),\n              ],\n            ),\n          );\n\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            defaultImport: \"BuilderDevTools\",\n            importPath: \"@builder.io/dev-tools/next\",\n          });\n\n          result.content = sourceToCode(sys, sourceFile);\n          result.outcome = \"added\";\n\n          return result;\n        }\n\n        throw new Error(\n          `Unexpected initializer on the variable statement in file\\n` +\n            `Found config content:\\n${configContent}\\n\\n` +\n            `The config variable must be initialized with either:\\n` +\n            `1. An object literal: const nextConfig = { /* config */ }\\n` +\n            `2. A function call: const nextConfig = withSomePlugin({ /* config */ })\\n\\n` +\n            `Current initializer type: ${\n              configInitializer?.kind\n                ? sys.ts.SyntaxKind[configInitializer.kind]\n                : \"none\"\n            }\\n` +\n            `Expected types: ObjectLiteralExpression or CallExpression`,\n        );\n      }\n    }\n\n    const defaultExport = cjsExports[0];\n    if (!defaultExport.isDefaultExport) {\n      throw new Error(\n        `Expected a default export from ${configFilePath}\\n` +\n          `Found config content:\\n${configContent}\\n` +\n          `Detected export type: ${defaultExport?.statement.kind ?? \"none\"}\\n` +\n          `Valid formats:\\n` +\n          `1. module.exports = { ... }\\n` +\n          `2. module.exports = (phase, config) => { return { ... } }\\n` +\n          `3. export default { ... }`,\n      );\n    }\n\n    if (\n      sys.ts.isObjectLiteralExpression(defaultExport.node) ||\n      sys.ts.isCallExpression(defaultExport.node)\n    ) {\n      const moduleExportsStatement = defaultExport.statement;\n      if (!sys.ts.isExpressionStatement(moduleExportsStatement)) {\n        throw new Error(\n          `Expected an expression statement for the default export`,\n        );\n      }\n\n      const moduleExports = moduleExportsStatement.expression;\n      if (!sys.ts.isBinaryExpression(moduleExports)) {\n        throw new Error(`Expected a binary expression for the default export`);\n      }\n\n      // module.exports = {}\n      const w = ensureWithFnVariableName(sys, sourceFile);\n      sourceFile = w.sourceFile;\n\n      const statements = [...sourceFile.statements];\n      const index = statements.indexOf(moduleExportsStatement);\n      statements[index] = sys.ts.factory.updateExpressionStatement(\n        moduleExportsStatement,\n        sys.ts.factory.updateBinaryExpression(\n          moduleExports,\n          moduleExports.left,\n          moduleExports.operatorToken,\n          sys.ts.factory.createCallExpression(\n            sys.ts.factory.createIdentifier(w.withFnVariableName),\n            undefined,\n            [moduleExports.right],\n          ),\n        ),\n      );\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      result.content = sourceToCode(sys, sourceFile);\n      result.outcome = \"added\";\n      return result;\n    }\n\n    const nextConfigVariableStatement = defaultExport.statement;\n    if (sys.ts.isVariableStatement(nextConfigVariableStatement)) {\n      // module.exports = nextConfig\n\n      const declarations = [\n        ...nextConfigVariableStatement.declarationList.declarations,\n      ];\n      if (declarations.length !== 1) {\n        throw new Error(`Expected a single variable declaration`);\n      }\n\n      const nextConfigDeclaration = declarations[0];\n      if (!nextConfigDeclaration.initializer) {\n        throw new Error(`Expected an initializer on the declaration`);\n      }\n\n      const nextConfigInitializer = nextConfigDeclaration.initializer;\n      if (\n        sys.ts.isObjectLiteralExpression(nextConfigInitializer) ||\n        sys.ts.isCallExpression(nextConfigInitializer)\n      ) {\n        // const nextConfig = {}\n        // module.exports = nextConfig\n\n        const w = ensureWithFnVariableName(sys, sourceFile);\n        sourceFile = w.sourceFile;\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(nextConfigVariableStatement);\n\n        statements[index] = sys.ts.factory.updateVariableStatement(\n          nextConfigVariableStatement,\n          nextConfigVariableStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            nextConfigVariableStatement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                nextConfigDeclaration,\n                nextConfigDeclaration.name,\n                nextConfigDeclaration.exclamationToken,\n                nextConfigDeclaration.type,\n                sys.ts.factory.createCallExpression(\n                  sys.ts.factory.createIdentifier(w.withFnVariableName),\n                  undefined,\n                  [nextConfigInitializer],\n                ),\n              ),\n            ],\n          ),\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n        return result;\n      }\n\n      throw new Error(\n        `Unexpected initializer on the variable statement in ${configFilePath}\\n` +\n          `Found config content:\\n${configContent}\\n\\n` +\n          `The config variable must be initialized with either:\\n` +\n          `1. An object literal: const nextConfig = { /* config */ }\\n` +\n          `2. A function call: const nextConfig = withSomePlugin({ /* config */ })\\n\\n` +\n          `Current initializer type: ${nextConfigInitializer.kind}\\n` +\n          `Expected types: ${sys.ts.SyntaxKind.ObjectLiteralExpression} or ${sys.ts.SyntaxKind.CallExpression}`,\n      );\n    }\n\n    if (sys.ts.isArrowFunction(defaultExport.node)) {\n      const arrowFn = defaultExport.node;\n\n      const moduleExportsStatement = defaultExport.statement;\n      if (!sys.ts.isExpressionStatement(moduleExportsStatement)) {\n        throw new Error(\n          `Expected an expression statement for the default export`,\n        );\n      }\n\n      const moduleExports = moduleExportsStatement.expression;\n      if (!sys.ts.isBinaryExpression(moduleExports)) {\n        throw new Error(`Expected a binary expression for the default export`);\n      }\n\n      const configFn = defaultExport.node;\n      const fnBody = configFn.body;\n      if (!sys.ts.isBlock(fnBody)) {\n        throw new Error(`Expected a block body on the next config function`);\n      }\n\n      const fnStatements = [...fnBody.statements];\n      const rtnStatementIndex = fnStatements.findIndex((s) =>\n        sys.ts.isReturnStatement(s),\n      );\n      if (rtnStatementIndex === -1) {\n        throw new Error(\n          `Expected a return statement on the next config function`,\n        );\n      }\n      const rtnStatement = fnStatements[\n        rtnStatementIndex\n      ] as ts.ReturnStatement;\n\n      // module.exports = (phase, defaultConfig) => {\n      //   return defaultConfig;\n      // };\n\n      const w = ensureWithFnVariableName(sys, sourceFile);\n      sourceFile = w.sourceFile;\n\n      fnStatements[rtnStatementIndex] = sys.ts.factory.updateReturnStatement(\n        rtnStatement,\n        sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(w.withFnVariableName),\n          undefined,\n          [rtnStatement.expression!],\n        ),\n      );\n\n      const statements = [...sourceFile.statements];\n      const index = statements.indexOf(moduleExportsStatement);\n\n      statements[index] = sys.ts.factory.updateExpressionStatement(\n        moduleExportsStatement,\n        sys.ts.factory.updateBinaryExpression(\n          moduleExports,\n          moduleExports.left,\n          moduleExports.operatorToken,\n          sys.ts.factory.updateArrowFunction(\n            arrowFn,\n            arrowFn.modifiers,\n            arrowFn.typeParameters,\n            arrowFn.parameters,\n            arrowFn.type,\n            arrowFn.equalsGreaterThanToken,\n            sys.ts.factory.updateBlock(fnBody, fnStatements),\n          ),\n        ),\n      );\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      result.content = sourceToCode(sys, sourceFile);\n      result.outcome = \"added\";\n      return result;\n    }\n\n    throw new Error(`Unexpected export type`);\n  } catch (e) {\n    sys.Sentry?.captureException(e, {\n      extra: {\n        configFilePath,\n        configContent,\n      },\n      level: \"warning\",\n    });\n    throw e;\n  }\n}\n\nfunction getWithFnVariableName(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  for (const s of sourceFile.statements) {\n    if (!sys.ts.isVariableStatement(s)) {\n      continue;\n    }\n    for (const d of s.declarationList.declarations) {\n      if (!d.initializer) {\n        continue;\n      }\n      if (!sys.ts.isCallExpression(d.initializer)) {\n        continue;\n      }\n      const requireExp = d.initializer.expression;\n      if (!sys.ts.isCallExpression(requireExp)) {\n        continue;\n      }\n      if (!sys.ts.isIdentifier(requireExp.expression)) {\n        continue;\n      }\n      if (requireExp.expression.text !== \"require\") {\n        continue;\n      }\n      const requirePath = requireExp.arguments[0];\n      if (!requirePath || !sys.ts.isStringLiteral(requirePath)) {\n        continue;\n      }\n      if (requirePath.text !== \"@builder.io/dev-tools/next\") {\n        continue;\n      }\n      if (!sys.ts.isIdentifier(d.name)) {\n        continue;\n      }\n      return d.name.text;\n    }\n  }\n  return null;\n}\n\nfunction ensureWithFnVariableName(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  let withFnVariableName = getWithFnVariableName(sys, sourceFile);\n\n  if (!withFnVariableName) {\n    withFnVariableName = `withBuilderDevTools`;\n\n    sourceFile = sys.ts.factory.updateSourceFile(sourceFile, [\n      sys.ts.factory.createVariableStatement(\n        undefined,\n        sys.ts.factory.createVariableDeclarationList(\n          [\n            sys.ts.factory.createVariableDeclaration(\n              withFnVariableName,\n              undefined,\n              undefined,\n              sys.ts.factory.createCallExpression(\n                sys.ts.factory.createCallExpression(\n                  sys.ts.factory.createIdentifier(\"require\"),\n                  undefined,\n                  [\n                    sys.ts.factory.createStringLiteral(\n                      \"@builder.io/dev-tools/next\",\n                    ),\n                  ],\n                ),\n                undefined,\n                [],\n              ),\n            ),\n          ],\n          sys.ts.NodeFlags.Const,\n        ),\n      ),\n      ...sourceFile.statements,\n    ]);\n  }\n\n  return { withFnVariableName, sourceFile };\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../..\";\nimport type { EnsureConfigResult } from \"../../../types\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { getExportedStatements } from \"../../../common/ast/exported-statements\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\n\nexport async function remixEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  try {\n    let sourceFile = codeToSource(sys, configContent);\n\n    const result: EnsureConfigResult = {\n      content: configContent,\n      filePath: configFilePath,\n      fileName: sys.basename(configFilePath),\n      outcome: \"no-update\",\n    };\n\n    const withFn = getWithFnVariableName(sys, sourceFile);\n    if (withFn) {\n      return result;\n    }\n\n    const cjsExports = getExportedStatements(sys, sourceFile, \"cjs\");\n    const esmExports = getExportedStatements(sys, sourceFile);\n    if (cjsExports.length !== 1 && esmExports.length !== 1) {\n      throw new Error(`Expected an export from ${configFilePath}`);\n    }\n\n    const defaultExport = cjsExports[0];\n\n    if (esmExports.length === 1) {\n      const esmDefaultExport = esmExports[0];\n\n      if (!esmDefaultExport.isDefaultExport) {\n        throw new Error(`Expected a default export from ${configFilePath}`);\n      }\n\n      const exportAssignment = esmDefaultExport.statement;\n      if (!sys.ts.isExportAssignment(exportAssignment)) {\n        throw new Error(`Expected an export assignment from ${configFilePath}`);\n      }\n\n      if (sys.ts.isObjectLiteralExpression(exportAssignment.expression)) {\n        const fnVariableName = \"builderDevTools()\";\n\n        const configObj = updateConfigObjectLiteral(\n          sys,\n          exportAssignment.expression,\n        );\n\n        if (!configObj) {\n          return result;\n        }\n\n        const configObjWithServerDependencies =\n          sys.ts.factory.createCallExpression(\n            sys.ts.factory.createIdentifier(fnVariableName),\n            undefined,\n            [configObj],\n          );\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(exportAssignment);\n        statements[index] = sys.ts.factory.updateExportAssignment(\n          exportAssignment,\n          exportAssignment.modifiers,\n          configObjWithServerDependencies,\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          defaultImport: \"builderDevTools\",\n          importPath: \"@builder.io/dev-tools/remix\",\n        });\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n\n        return result;\n      }\n    }\n\n    if (!defaultExport.isDefaultExport) {\n      throw new Error(`Expected a default export from ${configFilePath}`);\n    }\n\n    if (\n      sys.ts.isObjectLiteralExpression(defaultExport.node) ||\n      sys.ts.isCallExpression(defaultExport.node)\n    ) {\n      const moduleExportsStatement = defaultExport.statement;\n      if (!sys.ts.isExpressionStatement(moduleExportsStatement)) {\n        throw new Error(\n          `Expected an expression statement for the default export`,\n        );\n      }\n\n      const moduleExports = moduleExportsStatement.expression;\n      if (!sys.ts.isBinaryExpression(moduleExports)) {\n        throw new Error(`Expected a binary expression for the default export`);\n      }\n\n      // module.exports = {}\n      const w = ensureWithFnVariableName(sys, sourceFile);\n      sourceFile = w.sourceFile;\n\n      const statements = [...sourceFile.statements];\n      const index = statements.indexOf(moduleExportsStatement);\n      statements[index] = sys.ts.factory.updateExpressionStatement(\n        moduleExportsStatement,\n        sys.ts.factory.updateBinaryExpression(\n          moduleExports,\n          moduleExports.left,\n          moduleExports.operatorToken,\n          sys.ts.factory.createCallExpression(\n            sys.ts.factory.createIdentifier(w.withFnVariableName),\n            undefined,\n            [moduleExports.right],\n          ),\n        ),\n      );\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      result.content = sourceToCode(sys, sourceFile);\n      result.outcome = \"added\";\n      return result;\n    }\n\n    const remixConfigVariableStatement = defaultExport.statement;\n    if (sys.ts.isVariableStatement(remixConfigVariableStatement)) {\n      // module.exports = remixConfig\n\n      const declarations = [\n        ...remixConfigVariableStatement.declarationList.declarations,\n      ];\n      if (declarations.length !== 1) {\n        throw new Error(`Expected a single variable declaration`);\n      }\n\n      const remixConfigDeclaration = declarations[0];\n      if (!remixConfigDeclaration.initializer) {\n        throw new Error(`Expected an initializer on the declaration`);\n      }\n\n      const remixConfigInitializer = remixConfigDeclaration.initializer;\n      if (\n        sys.ts.isObjectLiteralExpression(remixConfigInitializer) ||\n        sys.ts.isCallExpression(remixConfigInitializer)\n      ) {\n        // const remixConfig = {}\n        // module.exports = remixConfig\n\n        const w = ensureWithFnVariableName(sys, sourceFile);\n        sourceFile = w.sourceFile;\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(remixConfigVariableStatement);\n\n        statements[index] = sys.ts.factory.updateVariableStatement(\n          remixConfigVariableStatement,\n          remixConfigVariableStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            remixConfigVariableStatement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                remixConfigDeclaration,\n                remixConfigDeclaration.name,\n                remixConfigDeclaration.exclamationToken,\n                remixConfigDeclaration.type,\n                sys.ts.factory.createCallExpression(\n                  sys.ts.factory.createIdentifier(w.withFnVariableName),\n                  undefined,\n                  [remixConfigInitializer],\n                ),\n              ),\n            ],\n          ),\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n        return result;\n      }\n\n      throw new Error(`Unexpected initializer on the variable statement`);\n    }\n\n    throw new Error(`Unexpected export type`);\n  } catch (e) {\n    sys.Sentry?.captureException(e, {\n      extra: {\n        configFilePath,\n        configContent,\n      },\n      level: \"warning\",\n    });\n    throw e;\n  }\n}\n\nfunction getWithFnVariableName(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  for (const s of sourceFile.statements) {\n    if (!sys.ts.isVariableStatement(s)) {\n      continue;\n    }\n    for (const d of s.declarationList.declarations) {\n      if (!d.initializer) {\n        continue;\n      }\n      if (!sys.ts.isCallExpression(d.initializer)) {\n        continue;\n      }\n      const requireExp = d.initializer.expression;\n      if (!sys.ts.isCallExpression(requireExp)) {\n        continue;\n      }\n      if (!sys.ts.isIdentifier(requireExp.expression)) {\n        continue;\n      }\n      if (requireExp.expression.text !== \"require\") {\n        continue;\n      }\n      const requirePath = requireExp.arguments[0];\n      if (!requirePath || !sys.ts.isStringLiteral(requirePath)) {\n        continue;\n      }\n      if (requirePath.text !== \"@builder.io/dev-tools/remix\") {\n        continue;\n      }\n      if (!sys.ts.isIdentifier(d.name)) {\n        continue;\n      }\n      return d.name.text;\n    }\n  }\n  return null;\n}\n\nfunction ensureWithFnVariableName(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  let withFnVariableName = getWithFnVariableName(sys, sourceFile);\n\n  if (!withFnVariableName) {\n    withFnVariableName = `withBuilderDevTools`;\n\n    sourceFile = sys.ts.factory.updateSourceFile(sourceFile, [\n      sys.ts.factory.createVariableStatement(\n        undefined,\n        sys.ts.factory.createVariableDeclarationList(\n          [\n            sys.ts.factory.createVariableDeclaration(\n              withFnVariableName,\n              undefined,\n              undefined,\n              sys.ts.factory.createCallExpression(\n                sys.ts.factory.createCallExpression(\n                  sys.ts.factory.createIdentifier(\"require\"),\n                  undefined,\n                  [\n                    sys.ts.factory.createStringLiteral(\n                      \"@builder.io/dev-tools/remix\",\n                    ),\n                  ],\n                ),\n                undefined,\n                [],\n              ),\n            ),\n          ],\n          sys.ts.NodeFlags.Const,\n        ),\n      ),\n      ...sourceFile.statements,\n    ]);\n  }\n\n  return { withFnVariableName, sourceFile };\n}\n\nfunction updateConfigObjectLiteral(\n  sys: DevToolsSys,\n  config: ts.ObjectLiteralExpression,\n) {\n  const properties = [...config.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === \"serverDependenciesToBundle\";\n  });\n\n  if (pIndex > -1) {\n    const dependenciesProp = properties[pIndex];\n    if (\n      sys.ts.isPropertyAssignment(dependenciesProp) &&\n      dependenciesProp.initializer &&\n      sys.ts.isArrayLiteralExpression(dependenciesProp.initializer)\n    ) {\n      const serverDependenciesArr = updateServerDependenciesArray(\n        sys,\n        dependenciesProp.initializer as ts.ArrayLiteralExpression,\n      );\n      if (serverDependenciesArr) {\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          dependenciesProp,\n          dependenciesProp.name,\n          serverDependenciesArr,\n        );\n        return sys.ts.factory.updateObjectLiteralExpression(config, properties);\n      }\n    }\n    return null;\n  }\n\n  const serverDependenciesArr = updateServerDependenciesArray(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n  );\n  if (serverDependenciesArr) {\n    return sys.ts.factory.updateObjectLiteralExpression(config, [\n      ...properties,\n      sys.ts.factory.createPropertyAssignment(\n        \"serverDependenciesToBundle\",\n        serverDependenciesArr,\n      ),\n    ]);\n  }\n\n  return null;\n}\n\nfunction updateServerDependenciesArray(\n  sys: DevToolsSys,\n  serverDependenciesArr: ts.ArrayLiteralExpression,\n) {\n  const hasServerDependencies = serverDependenciesArr.elements.some((e) => {\n    if (sys.ts.isCallExpression(e) && sys.ts.isIdentifier(e.expression)) {\n      return e.expression.text === \"@builder.io/react\";\n    }\n    return false;\n  });\n\n  if (hasServerDependencies) {\n    return null;\n  }\n\n  return sys.ts.factory.updateArrayLiteralExpression(serverDependenciesArr, [\n    ...serverDependenciesArr.elements,\n    sys.ts.factory.createIdentifier(`\"@builder.io/react\"`),\n  ]);\n}\n", "import type { EnsureConfigResult } from \"../../../types\";\nimport type { DevToolsSys } from \"../..\";\nimport type ts from \"typescript\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { getExportedStatements } from \"../../../common/ast/exported-statements\";\n\nexport async function viteEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  try {\n    // Use the shared helper to update the Vite config\n    const result = await updateViteConfig(\n      sys,\n      configFilePath,\n      configContent,\n      \"builderDevTools\",\n      \"@builder.io/dev-tools/vite\",\n    );\n\n    return {\n      content: result.content,\n      filePath: result.filePath,\n      fileName: result.fileName,\n      outcome: result.outcome,\n    };\n  } catch (e) {\n    sys.Sentry?.captureException(e, {\n      extra: {\n        configFilePath,\n        configContent,\n      },\n      level: \"warning\",\n    });\n    throw e;\n  }\n}\n\n/**\n * Update a Vite config file to include a plugin\n */\nexport async function updateViteConfig(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n  pluginName: string,\n  importPath: string,\n): Promise<EnsureConfigResult> {\n  try {\n    // Check if plugin is already imported and used in a direct plugins array\n    if (\n      pluginName === \"builderDevTools\" &&\n      configContent.includes(pluginName) &&\n      configContent.includes(importPath) &&\n      (configContent.includes(`plugins: [${pluginName}()]`) ||\n        configContent.includes(`plugins: [ ${pluginName}()]`))\n    ) {\n      return {\n        content: configContent,\n        filePath: configFilePath,\n        fileName: sys.basename(configFilePath),\n        outcome: \"already-exists\",\n      };\n    }\n\n    // Specialized handling for jsxLocPlugin\n    if (\n      pluginName === \"jsxLocPlugin\" &&\n      importPath === \"@builder.io/vite-plugin-jsx-loc\" &&\n      configContent.includes(pluginName) &&\n      configContent.includes(importPath)\n    ) {\n      let sourceFile = codeToSource(sys, configContent);\n      const pluginImported = sourceFile.statements.some((stmt) => {\n        if (sys.ts.isImportDeclaration(stmt)) {\n          const moduleImportPath = (stmt.moduleSpecifier as ts.StringLiteral)\n            .text;\n          if (\n            moduleImportPath === importPath ||\n            moduleImportPath.includes(pluginName)\n          ) {\n            // Check if the named import exists\n            if (\n              stmt.importClause?.namedBindings &&\n              sys.ts.isNamedImports(stmt.importClause.namedBindings)\n            ) {\n              return stmt.importClause.namedBindings.elements.some(\n                (element) => element.name.text === pluginName,\n              );\n            }\n          }\n        }\n        return false;\n      });\n\n      if (pluginImported) {\n        return {\n          content: configContent,\n          filePath: configFilePath,\n          fileName: sys.basename(configFilePath),\n          outcome: \"already-exists\",\n        };\n      }\n    }\n\n    let sourceFile = codeToSource(sys, configContent);\n\n    const esmExports = getExportedStatements(sys, sourceFile);\n    if (esmExports.length !== 1) {\n      throw new Error(`Expected an export from ${configFilePath}`);\n    }\n\n    const defaultExport = esmExports[0];\n    if (!defaultExport.isDefaultExport) {\n      throw new Error(`Expected a default export from ${configFilePath}`);\n    }\n\n    const exportAssignment = defaultExport.statement;\n    if (!sys.ts.isExportAssignment(exportAssignment)) {\n      throw new Error(`Expected an export assignment from ${configFilePath}`);\n    }\n\n    const result: EnsureConfigResult = {\n      content: configContent,\n      filePath: configFilePath,\n      fileName: sys.basename(configFilePath),\n      outcome: \"no-update\",\n    };\n\n    if (\n      sys.ts.isCallExpression(defaultExport.node) &&\n      sys.ts.isIdentifier(defaultExport.node.expression) &&\n      defaultExport.node.expression.text === \"defineConfig\"\n    ) {\n      const defineConfigArgs = [...defaultExport.node.arguments];\n      if (defineConfigArgs.length === 0) {\n        throw new Error(`Expected an argument in defineConfig()`);\n      }\n\n      const defineConfigArg = defineConfigArgs[0];\n      if (sys.ts.isArrowFunction(defineConfigArg)) {\n        const block = updateDefineConfigReturnStatement(\n          sys,\n          defineConfigArg,\n          pluginName,\n        );\n        if (!block) {\n          return result;\n        }\n        defineConfigArgs[0] = sys.ts.factory.updateArrowFunction(\n          defineConfigArg,\n          defineConfigArg.modifiers,\n          defineConfigArg.typeParameters,\n          defineConfigArg.parameters,\n          defineConfigArg.type,\n          defineConfigArg.equalsGreaterThanToken,\n          block,\n        );\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(exportAssignment);\n        statements[index] = sys.ts.factory.updateExportAssignment(\n          exportAssignment,\n          undefined,\n          sys.ts.factory.updateCallExpression(\n            defaultExport.node,\n            defaultExport.node.expression,\n            defaultExport.node.typeArguments,\n            defineConfigArgs,\n          ),\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [pluginName],\n          importPath,\n        });\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n        return result;\n      }\n\n      if (sys.ts.isObjectLiteralExpression(defineConfigArg)) {\n        const configObj = updateConfigObjectLiteral(\n          sys,\n          defineConfigArg,\n          pluginName,\n        );\n        if (!configObj) {\n          return result;\n        }\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(exportAssignment);\n        statements[index] = sys.ts.factory.updateExportAssignment(\n          exportAssignment,\n          undefined,\n          sys.ts.factory.updateCallExpression(\n            defaultExport.node,\n            defaultExport.node.expression,\n            defaultExport.node.typeArguments,\n            [configObj],\n          ),\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [pluginName],\n          importPath,\n        });\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n        return result;\n      }\n\n      throw new Error(`Unsupported argument in defineConfig()`);\n    }\n\n    if (sys.ts.isObjectLiteralExpression(exportAssignment.expression)) {\n      const configObj = updateConfigObjectLiteral(\n        sys,\n        exportAssignment.expression,\n        pluginName,\n      );\n      if (!configObj) {\n        return result;\n      }\n\n      const statements = [...sourceFile.statements];\n      const index = statements.indexOf(exportAssignment);\n      statements[index] = sys.ts.factory.updateExportAssignment(\n        exportAssignment,\n        exportAssignment.modifiers,\n        configObj,\n      );\n\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      sourceFile = ensureImport(sys, sourceFile, {\n        namedImports: [pluginName],\n        importPath,\n      });\n\n      result.content = sourceToCode(sys, sourceFile);\n      result.outcome = \"added\";\n      return result;\n    }\n\n    throw new Error(`Unable to parse ${configFilePath}`);\n  } catch (e) {\n    sys.Sentry?.captureException(e, {\n      extra: {\n        configFilePath,\n        configContent,\n      },\n      level: \"warning\",\n    });\n    throw e;\n  }\n}\n\n/**\n * Update the return statement in a defineConfig function\n */\nfunction updateDefineConfigReturnStatement(\n  sys: DevToolsSys,\n  defineConfigArg: ts.ArrowFunction | ts.FunctionExpression,\n  pluginName: string,\n) {\n  let fnBody = defineConfigArg.body;\n  if (!sys.ts.isBlock(fnBody)) {\n    // For single expression arrows like ({ ... }) that don't have a block\n    if (\n      sys.ts.isParenthesizedExpression(fnBody) &&\n      sys.ts.isObjectLiteralExpression(fnBody.expression)\n    ) {\n      const configObj = updateConfigObjectLiteral(\n        sys,\n        fnBody.expression,\n        pluginName,\n      );\n      if (configObj) {\n        return configObj;\n      }\n    }\n    return null;\n  }\n\n  const bodyStatements = [...fnBody.statements];\n  let rIndex = bodyStatements.findIndex((s) => {\n    return sys.ts.isReturnStatement(s);\n  });\n\n  if (rIndex === -1) {\n    const rtnStatement = sys.ts.factory.createReturnStatement(\n      sys.ts.factory.createObjectLiteralExpression(),\n    );\n    bodyStatements.push(rtnStatement);\n    rIndex = bodyStatements.length - 1;\n  }\n\n  const rtnStatement = bodyStatements[rIndex] as ts.ReturnStatement;\n  if (\n    !rtnStatement.expression ||\n    !sys.ts.isObjectLiteralExpression(rtnStatement.expression)\n  ) {\n    return null;\n  }\n\n  const configObj = updateConfigObjectLiteral(\n    sys,\n    rtnStatement.expression,\n    pluginName,\n  );\n  if (configObj) {\n    bodyStatements[rIndex] = sys.ts.factory.updateReturnStatement(\n      rtnStatement,\n      configObj,\n    );\n    return sys.ts.factory.updateBlock(fnBody, bodyStatements);\n  }\n\n  return null;\n}\n\n/**\n * Update the configuration object literal to include the plugin\n */\nfunction updateConfigObjectLiteral(\n  sys: DevToolsSys,\n  config: ts.ObjectLiteralExpression,\n  pluginName: string,\n) {\n  if (isRemixFramework(sys)) {\n    const remixConfig = updateCommonJsLibrary(sys, config);\n    if (remixConfig) {\n      config = remixConfig;\n    }\n  }\n  const properties = [...config.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === \"plugins\";\n  });\n\n  if (pIndex > -1) {\n    const pluginsProp = properties[pIndex];\n    if (sys.ts.isPropertyAssignment(pluginsProp) && pluginsProp.initializer) {\n      // Check if it's a simple array literal\n      if (sys.ts.isArrayLiteralExpression(pluginsProp.initializer)) {\n        const pluginsArr = updatePluginsArray(\n          sys,\n          pluginsProp.initializer as ts.ArrayLiteralExpression,\n          pluginName,\n        );\n        if (pluginsArr) {\n          properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n            pluginsProp,\n            pluginsProp.name,\n            pluginsArr,\n          );\n          return sys.ts.factory.updateObjectLiteralExpression(\n            config,\n            properties,\n          );\n        }\n      } else {\n        // For complex expressions (arrays with chained methods like filter, map, etc.)\n        // Create a new array with spread syntax: [...existingExpression, newPlugin()]\n        const spreadElement = sys.ts.factory.createSpreadElement(\n          pluginsProp.initializer,\n        );\n        const newPluginCall = sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(pluginName),\n          undefined,\n          [],\n        );\n\n        const newArrayExpression = sys.ts.factory.createArrayLiteralExpression(\n          [spreadElement, newPluginCall],\n          true,\n        );\n\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          pluginsProp,\n          pluginsProp.name,\n          newArrayExpression,\n        );\n\n        return sys.ts.factory.updateObjectLiteralExpression(config, properties);\n      }\n    }\n    return null;\n  }\n\n  const pluginsArr = updatePluginsArray(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n    pluginName,\n  );\n  if (pluginsArr) {\n    return sys.ts.factory.updateObjectLiteralExpression(config, [\n      ...properties,\n      sys.ts.factory.createPropertyAssignment(\"plugins\", pluginsArr),\n    ]);\n  }\n\n  return null;\n}\n\n/**\n * Update the plugins array to include the plugin\n */\nfunction updatePluginsArray(\n  sys: DevToolsSys,\n  pluginsArr: ts.ArrayLiteralExpression,\n  pluginName: string,\n) {\n  // First, we need to check if any of the plugins match the name\n  const hasPlugin = pluginsArr.elements.some((e) => {\n    // Direct call to the plugin: pluginName()\n    if (sys.ts.isCallExpression(e) && sys.ts.isIdentifier(e.expression)) {\n      return e.expression.text === pluginName;\n    }\n\n    // Conditional expression: condition && pluginName()\n    if (sys.ts.isBinaryExpression(e)) {\n      if (e.operatorToken.kind === sys.ts.SyntaxKind.AmpersandAmpersandToken) {\n        const right = e.right;\n        if (\n          sys.ts.isCallExpression(right) &&\n          sys.ts.isIdentifier(right.expression)\n        ) {\n          return right.expression.text === pluginName;\n        }\n      }\n    }\n\n    // Ternary expression: condition ? pluginName() : otherPlugin()\n    if (sys.ts.isConditionalExpression(e)) {\n      const whenTrue = e.whenTrue;\n      const whenFalse = e.whenFalse;\n\n      if (\n        sys.ts.isCallExpression(whenTrue) &&\n        sys.ts.isIdentifier(whenTrue.expression)\n      ) {\n        if (whenTrue.expression.text === pluginName) return true;\n      }\n\n      if (\n        sys.ts.isCallExpression(whenFalse) &&\n        sys.ts.isIdentifier(whenFalse.expression)\n      ) {\n        if (whenFalse.expression.text === pluginName) return true;\n      }\n    }\n\n    // Check for plugins inside filter(), map() or other array methods\n    if (\n      sys.ts.isCallExpression(e) &&\n      sys.ts.isPropertyAccessExpression(e.expression)\n    ) {\n      // For methods like .filter(Boolean), .map(), etc.\n      const source = e.expression.expression;\n      if (sys.ts.isArrayLiteralExpression(source)) {\n        // Recursively check the array elements\n        return source.elements.some((element) =>\n          checkForPluginInExpression(sys, element, pluginName),\n        );\n      }\n    }\n\n    return false;\n  });\n\n  if (hasPlugin) {\n    return null;\n  }\n\n  return sys.ts.factory.updateArrayLiteralExpression(pluginsArr, [\n    ...pluginsArr.elements,\n    sys.ts.factory.createCallExpression(\n      sys.ts.factory.createIdentifier(pluginName),\n      undefined,\n      [],\n    ),\n  ]);\n}\n\n/**\n * Recursively check for plugin in any type of expression\n */\nfunction checkForPluginInExpression(\n  sys: DevToolsSys,\n  expr: ts.Expression,\n  pluginName: string,\n): boolean {\n  // Direct call to the plugin\n  if (sys.ts.isCallExpression(expr) && sys.ts.isIdentifier(expr.expression)) {\n    return expr.expression.text === pluginName;\n  }\n\n  // Conditional expression: condition && pluginName()\n  if (sys.ts.isBinaryExpression(expr)) {\n    return (\n      checkForPluginInExpression(sys, expr.left, pluginName) ||\n      checkForPluginInExpression(sys, expr.right, pluginName)\n    );\n  }\n\n  // Ternary expression\n  if (sys.ts.isConditionalExpression(expr)) {\n    return (\n      checkForPluginInExpression(sys, expr.whenTrue, pluginName) ||\n      checkForPluginInExpression(sys, expr.whenFalse, pluginName)\n    );\n  }\n\n  return false;\n}\n\n/**\n * Update an object literal to include the external dependencies for Remix\n */\nfunction updateCommonJsLibrary(\n  sys: DevToolsSys,\n  config: ts.ObjectLiteralExpression,\n) {\n  const properties = [...config.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === \"ssr\";\n  });\n\n  if (pIndex > -1) {\n    // if ssr object exists, update it\n    const ssrProp = properties[pIndex];\n    if (\n      sys.ts.isPropertyAssignment(ssrProp) &&\n      ssrProp.initializer &&\n      sys.ts.isObjectLiteralExpression(ssrProp.initializer)\n    ) {\n      const ssrObj = updateExistingSsrProperty(\n        sys,\n        ssrProp.initializer as ts.ObjectLiteralExpression,\n      );\n      if (ssrObj) {\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          ssrProp,\n          ssrProp.name,\n          ssrObj,\n        );\n        return sys.ts.factory.updateObjectLiteralExpression(config, properties);\n      }\n    }\n    return null;\n  }\n\n  // If no ssr object with noExternal array, create one\n  const dependenciesArr = updateExternalDependenciesArray(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n  );\n  if (dependenciesArr) {\n    const pluginsIndex = properties.findIndex((p) => {\n      const n = getTextOfPropertyName(sys, p);\n      return n === \"plugins\";\n    });\n\n    // Create properties with plugins first, then ssr\n    const newProperties = [...properties];\n    const ssrProp = sys.ts.factory.createPropertyAssignment(\n      \"ssr\",\n      sys.ts.factory.createObjectLiteralExpression([\n        sys.ts.factory.createPropertyAssignment(\"noExternal\", dependenciesArr),\n      ]),\n    );\n\n    // Insert ssr before plugins to match the expected order\n    if (pluginsIndex > -1) {\n      newProperties.splice(pluginsIndex, 0, ssrProp);\n    } else {\n      newProperties.push(ssrProp);\n    }\n\n    return sys.ts.factory.updateObjectLiteralExpression(config, newProperties);\n  }\n\n  return null;\n}\n\n/**\n * Update the existing SSR property to include external dependencies\n */\nfunction updateExistingSsrProperty(\n  sys: DevToolsSys,\n  ssrObj: ts.ObjectLiteralExpression,\n) {\n  const properties = [...ssrObj.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === \"noExternal\";\n  });\n\n  if (pIndex > -1) {\n    const dependencyArrayProp = properties[pIndex];\n    if (\n      sys.ts.isPropertyAssignment(dependencyArrayProp) &&\n      dependencyArrayProp.initializer &&\n      sys.ts.isArrayLiteralExpression(dependencyArrayProp.initializer)\n    ) {\n      const dependenciesArr = updateExternalDependenciesArray(\n        sys,\n        dependencyArrayProp.initializer as ts.ArrayLiteralExpression,\n      );\n      if (dependenciesArr) {\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          dependencyArrayProp,\n          dependencyArrayProp.name,\n          dependenciesArr,\n        );\n        return sys.ts.factory.updateObjectLiteralExpression(ssrObj, properties);\n      }\n    }\n    return null;\n  }\n\n  const dependenciesArr = updateExternalDependenciesArray(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n  );\n  if (dependenciesArr) {\n    return sys.ts.factory.updateObjectLiteralExpression(ssrObj, [\n      ...properties,\n      sys.ts.factory.createPropertyAssignment(\"noExternal\", dependenciesArr),\n    ]);\n  }\n}\n\n/**\n * Update the external dependencies array to include Builder.io dependencies\n */\nfunction updateExternalDependenciesArray(\n  sys: DevToolsSys,\n  dependenciesArr: ts.ArrayLiteralExpression,\n) {\n  const hasDependency = dependenciesArr.elements.some((e) => {\n    if (sys.ts.isStringLiteral(e)) {\n      return e.text === \"@builder.io/react\";\n    }\n    return false;\n  });\n\n  if (hasDependency) {\n    return null;\n  }\n\n  return sys.ts.factory.updateArrayLiteralExpression(dependenciesArr, [\n    ...dependenciesArr.elements,\n    sys.ts.factory.createStringLiteral(\"@builder.io/react\"),\n  ]);\n}\n\n/**\n * Get the text of a property name\n */\nfunction getTextOfPropertyName(\n  sys: DevToolsSys,\n  p: ts.ObjectLiteralElementLike,\n): string {\n  if (sys.ts.isPropertyAssignment(p) || sys.ts.isMethodDeclaration(p)) {\n    if (sys.ts.isIdentifier(p.name)) {\n      return p.name.text;\n    }\n    if (sys.ts.isStringLiteral(p.name)) {\n      return p.name.text;\n    }\n  }\n  return \"\";\n}\n\n/**\n * Check if the current project is using Remix framework\n */\nfunction isRemixFramework(sys: DevToolsSys) {\n  return sys.getFrameworks().some((f) => f.name === \"@remix-run/react\");\n}\n", "import type { EnsureConfigResult } from \"../../../types\";\nimport type { DevToolsSys } from \"../..\";\n\nexport async function webpackEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  sys.debug(`Updating Webpack config to include Builder.io plugin...`);\n\n  return {\n    content: configContent,\n    fileName: sys.basename(configFilePath),\n    filePath: configFilePath,\n    outcome: \"added\",\n  };\n}\n", "import type { EnsureConfigResult } from \"../../../types\";\nimport type { DevToolsSys } from \"../..\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\n\nexport async function angularEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  sys.debug(`Angular config updates are currently in progress...`);\n\n  try {\n    await updatePackage(sys);\n  } catch (e) {\n    sys.Sentry?.captureException(\n      new Error(\"Unable to update package.json.\", { cause: e }),\n    );\n  }\n\n  await angularEnsureMainFileUpdate(sys);\n\n  return {\n    content: configContent,\n    fileName: sys.basename(configFilePath),\n    filePath: configFilePath,\n    outcome: \"added\",\n  };\n}\n\nexport async function angularEnsureMainFileUpdate(sys: DevToolsSys) {\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  if (!(await sys.exists(srcDir))) {\n    throw new Error(\n      `Could not find src directory. Searched for src in \"${sys.getAppRootDir()}\".`,\n    );\n  }\n\n  const mainFilePath = sys.join(srcDir, \"main.ts\");\n\n  const mainFileCode = await sys.readFile(mainFilePath);\n\n  if (!mainFileCode) {\n    throw new Error(`Unable to read main.ts at ${mainFilePath}`);\n  }\n\n  const updatedCode = await angularEnsureMainFileCode(sys, mainFileCode);\n\n  await sys.writeFile(mainFilePath, updatedCode);\n}\n\nexport async function angularEnsureMainFileCode(\n  sys: DevToolsSys,\n  code: string,\n) {\n  let content = code;\n  let sourceFile = codeToSource(sys, code);\n\n  let builderDevToolsFunctionCalled = false;\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isCallExpression(s.expression) &&\n      sys.ts.isPropertyAccessExpression(s.expression.expression) &&\n      sys.ts.isCallExpression(s.expression.expression.expression) &&\n      sys.ts.isIdentifier(s.expression.expression.expression.expression) &&\n      s.expression.expression.expression.expression.text === \"builderDevTools\"\n    ) {\n      builderDevToolsFunctionCalled = true;\n      break;\n    }\n  }\n\n  sourceFile = ensureImport(sys, sourceFile, {\n    namedImports: [\"builderDevTools\"],\n    importPath: \"@builder.io/dev-tools/angular\",\n  });\n\n  const builderDevToolsCode = `\\nbuilderDevTools().catch((err: Error) =>\n    console.error(\"Error starting dev tools:\", err)\n  );`;\n\n  content = sourceToCode(sys, sourceFile);\n\n  if (!builderDevToolsFunctionCalled) {\n    content += builderDevToolsCode;\n  }\n\n  return content;\n}\n\nexport async function updatePackage(sys: DevToolsSys) {\n  const rootDir = sys.getRepoRootDir();\n  const pkgJsonPath = sys.join(rootDir, \"package.json\");\n  const pkgJsonCode = await sys.readFile(pkgJsonPath);\n  if (!pkgJsonCode) {\n    throw new Error(`Unable to read package.json at ${pkgJsonPath}`);\n  }\n  const newPkgJsonCode = packageConcurrentlyScriptUpdate(sys, pkgJsonCode);\n  if (!newPkgJsonCode) {\n    return;\n  }\n  await sys.writeFile(pkgJsonPath, newPkgJsonCode);\n}\n\nexport function packageConcurrentlyScriptUpdate(\n  sys: DevToolsSys,\n  code: string,\n): string | undefined {\n  const pkgJson = JSON.parse(code);\n  pkgJson.scripts = pkgJson.scripts || {};\n  if (pkgJson.scripts[DEV_TOOLS_SCRIPT_NAME]) {\n    return;\n  }\n  const firstScript =\n    pkgJson.scripts[\"start\"] || pkgJson.scripts[\"dev\"] || \"ng serve\";\n\n  if (!firstScript.includes(\"concurrently\")) {\n    const repoRootDir = sys.getRepoRootDir();\n    const appRootDir = sys.getAppRootDir();\n    const args =\n      repoRootDir === appRootDir\n        ? \"\"\n        : ` --cwd ${sys.relative(repoRootDir, appRootDir)}`;\n    const newScript = `concurrently \\\"${firstScript}\\\" \\\"${DEV_TOOLS_COMMAND}${args}\\\"`;\n    pkgJson.scripts[\"start\"] = newScript;\n    pkgJson.scripts[DEV_TOOLS_SCRIPT_NAME] = newScript;\n  }\n\n  return JSON.stringify(pkgJson, null, 2) + \"\\n\";\n}\n\nexport const DEV_TOOLS_SCRIPT_NAME = \"builder-dev\";\n\nexport const DEV_TOOLS_COMMAND = \"npx builder-dev-tools\";\n", "import type { BuildToolConfig, DevToolsSys } from \"../types\";\nimport { detectFrameworks } from \"./detect-frameworks\";\nimport { normalizeLineBreaks } from \"../common/ast/normalize-statements\";\nimport { nextEnsureConfigPlugin } from \"./adapters/next/next-ensure-config-plugin\";\nimport { remixEnsureConfigPlugin } from \"./adapters/remix/remix-ensure-config-plugin\";\nimport { viteEnsureConfigPlugin } from \"./adapters/vite/vite-ensure-config-plugin\";\nimport { webpackEnsureConfigPlugin } from \"./adapters/webpack/webpack-ensure-config-plugin\";\nimport { angularEnsureConfigPlugin } from \"./adapters/angular/angular-ensure-config-plugin\";\n\nconst BUILD_TOOLS = [\n  {\n    id: \"next\",\n    configFileNames: [\"next.config.ts\", \"next.config.js\", \"next.config.mjs\"],\n    ensureConfigPlugin: nextEnsureConfigPlugin,\n  },\n  {\n    id: \"vite\",\n    configFileNames: [\"vite.config.ts\", \"vite.config.js\"],\n    ensureConfigPlugin: viteEnsureConfigPlugin,\n  },\n  {\n    id: \"remix\",\n    configFileNames: [\"remix.config.ts\", \"remix.config.js\"],\n    ensureConfigPlugin: remixEnsureConfigPlugin,\n  },\n  {\n    id: \"webpack\",\n    configFileNames: [\"webpack.config.ts\", \"webpack.config.js\"],\n    ensureConfigPlugin: webpackEnsureConfigPlugin,\n  },\n  {\n    id: \"angular\",\n    configFileNames: [\"angular.json\", \"project.json\"],\n    ensureConfigPlugin: angularEnsureConfigPlugin,\n  },\n];\n\nexport async function findBuildToolConfig(sys: DevToolsSys) {\n  const fsRoot = sys.resolve(\"/\");\n\n  for (const b of BUILD_TOOLS) {\n    for (const fileName of b.configFileNames) {\n      let dir = sys.getAppRootDir(); // Instead of using sys.cwd() use the root dir\n      for (let i = 0; i < 10; i++) {\n        try {\n          const filePath = sys.join(dir, fileName);\n          const content = sys.readFileSync(filePath);\n          if (typeof content === \"string\") {\n            const buildToolConfig: BuildToolConfig = {\n              id: b.id,\n              filePath,\n              content,\n            };\n            return buildToolConfig;\n          }\n\n          if (dir === fsRoot) {\n            break;\n          }\n          dir = sys.dirname(dir);\n        } catch (e: any) {\n          const message = e?.message ?? \"\";\n          // Check next config file if current one doesn't exist\n          if (message.includes(\"Invalid path\")) {\n            break;\n          } else {\n            throw e;\n          }\n        }\n      }\n    }\n  }\n\n  const frameworks = await detectFrameworks(sys);\n\n  if (frameworks.some((f) => f.name === \"next\")) {\n    const filePath = sys.join(sys.getAppRootDir(), `next.config.js`);\n    await sys.writeFile(filePath, DEFAULT_NEXT_CONFIG);\n    const nextConfig: BuildToolConfig = {\n      id: \"next\",\n      filePath,\n      content: DEFAULT_NEXT_CONFIG,\n    };\n    return nextConfig;\n  }\n\n  return null;\n}\n\nexport async function ensureConfigPlugin(sys: DevToolsSys) {\n  const config = await findBuildToolConfig(sys);\n  if (!config) {\n    throw new Error(\n      `Unable to find config file, such as next.config.js or vite.config.js.`,\n    );\n  }\n\n  const b = BUILD_TOOLS.find((b) => b.id === config!.id)!;\n\n  const result = await b.ensureConfigPlugin(\n    sys,\n    config.filePath,\n    config.content,\n  );\n\n  if (result.outcome === \"added\" || result.outcome === \"already-exists\") {\n    sys.debug(`Successfully updated ${config.filePath}`);\n    result.content = normalizeLineBreaks(result.content);\n    result.content = await sys.formatCode(result.filePath, result.content);\n    await sys.writeFile(config.filePath, result.content);\n  }\n\n  return result;\n}\n\nconst DEFAULT_NEXT_CONFIG = `\n/** @type {import('next').NextConfig} */\nconst nextConfig = {\n}\n \nmodule.exports = nextConfig\n`.trimStart();\n", "import { DEV_TOOLS_CLIENT_SCRIPT_PATH } from \"../common/constants\";\nimport { version } from \"./index\";\n\nexport function getClientScript(devToolsServerUrl: string) {\n  try {\n    if (\n      typeof devToolsServerUrl !== \"string\" ||\n      devToolsServerUrl.trim().length === 0\n    ) {\n      console.error(`Missing devtool server url`);\n      return ``;\n    }\n\n    const url = new URL(DEV_TOOLS_CLIENT_SCRIPT_PATH, devToolsServerUrl);\n    url.searchParams.set(\"v\", version);\n    const v = JSON.stringify(version);\n\n    let c = `/* Builder Devtools v${version} */\\n`;\n    c += `(() => {\\n`;\n\n    c += `  if (typeof document !== \"undefined\") {\\n`;\n    c += `    let devToolsScript = document.head.querySelector(\"script[data-builder-dev-tools]\");\\n`;\n    c += `    if (!devToolsScript) {\\n`;\n    c += `      devToolsScript = document.createElement(\"script\");\\n`;\n    c += `      devToolsScript.setAttribute(\"src\", ${JSON.stringify(url)});\\n`;\n    c += `      devToolsScript.setAttribute(\"data-builder-dev-tools\", ${v});\\n`;\n    c += `      devToolsScript.setAttribute(\"async\", \"\");\\n`;\n    c += `      document.head.appendChild(devToolsScript);\\n`;\n    c += `    }\\n`;\n    c += `  }\\n`;\n\n    c += `})();\\n`;\n\n    return c;\n  } catch (e: any) {\n    console.error(`Failed to create devtools client script: ${e.message || e}`);\n    return ``;\n  }\n}\n", "import { pkgVersion } from \"../cli/version\";\n\nexport type {\n  ComponentInfo,\n  ComponentInput,\n  ComponentRegistry,\n  DevTools,\n  DevToolsSys,\n  ExportType,\n  Framework,\n  LoadComponent,\n} from \"../types\";\nexport { createDevTools } from \"./create-dev-tools\";\nexport { createDevToolsSys } from \"../common/mem-sys\";\nexport {\n  detectFrameworks,\n  detectFrameworksFromPackageJson,\n} from \"./detect-frameworks\";\nexport {\n  ensureConfigPlugin,\n  findBuildToolConfig,\n} from \"./ensure-config-plugin\";\nexport { getClientScript } from \"./client-script\";\nexport { parseDotEnvContent } from \"../common/dotenv\";\n\nexport const version = pkgVersion;\n", "/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cPlusPlus(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '(?!struct)('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n  const CPP_PRIMITIVE_TYPES = {\n    className: 'type',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_KEYWORDS = [\n    'alignas',\n    'alignof',\n    'and',\n    'and_eq',\n    'asm',\n    'atomic_cancel',\n    'atomic_commit',\n    'atomic_noexcept',\n    'auto',\n    'bitand',\n    'bitor',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'co_await',\n    'co_return',\n    'co_yield',\n    'compl',\n    'concept',\n    'const_cast|10',\n    'consteval',\n    'constexpr',\n    'constinit',\n    'continue',\n    'decltype',\n    'default',\n    'delete',\n    'do',\n    'dynamic_cast|10',\n    'else',\n    'enum',\n    'explicit',\n    'export',\n    'extern',\n    'false',\n    'final',\n    'for',\n    'friend',\n    'goto',\n    'if',\n    'import',\n    'inline',\n    'module',\n    'mutable',\n    'namespace',\n    'new',\n    'noexcept',\n    'not',\n    'not_eq',\n    'nullptr',\n    'operator',\n    'or',\n    'or_eq',\n    'override',\n    'private',\n    'protected',\n    'public',\n    'reflexpr',\n    'register',\n    'reinterpret_cast|10',\n    'requires',\n    'return',\n    'sizeof',\n    'static_assert',\n    'static_cast|10',\n    'struct',\n    'switch',\n    'synchronized',\n    'template',\n    'this',\n    'thread_local',\n    'throw',\n    'transaction_safe',\n    'transaction_safe_dynamic',\n    'true',\n    'try',\n    'typedef',\n    'typeid',\n    'typename',\n    'union',\n    'using',\n    'virtual',\n    'volatile',\n    'while',\n    'xor',\n    'xor_eq'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_TYPES = [\n    'bool',\n    'char',\n    'char16_t',\n    'char32_t',\n    'char8_t',\n    'double',\n    'float',\n    'int',\n    'long',\n    'short',\n    'void',\n    'wchar_t',\n    'unsigned',\n    'signed',\n    'const',\n    'static'\n  ];\n\n  const TYPE_HINTS = [\n    'any',\n    'auto_ptr',\n    'barrier',\n    'binary_semaphore',\n    'bitset',\n    'complex',\n    'condition_variable',\n    'condition_variable_any',\n    'counting_semaphore',\n    'deque',\n    'false_type',\n    'future',\n    'imaginary',\n    'initializer_list',\n    'istringstream',\n    'jthread',\n    'latch',\n    'lock_guard',\n    'multimap',\n    'multiset',\n    'mutex',\n    'optional',\n    'ostringstream',\n    'packaged_task',\n    'pair',\n    'promise',\n    'priority_queue',\n    'queue',\n    'recursive_mutex',\n    'recursive_timed_mutex',\n    'scoped_lock',\n    'set',\n    'shared_future',\n    'shared_lock',\n    'shared_mutex',\n    'shared_timed_mutex',\n    'shared_ptr',\n    'stack',\n    'string_view',\n    'stringstream',\n    'timed_mutex',\n    'thread',\n    'true_type',\n    'tuple',\n    'unique_lock',\n    'unique_ptr',\n    'unordered_map',\n    'unordered_multimap',\n    'unordered_multiset',\n    'unordered_set',\n    'variant',\n    'vector',\n    'weak_ptr',\n    'wstring',\n    'wstring_view'\n  ];\n\n  const FUNCTION_HINTS = [\n    'abort',\n    'abs',\n    'acos',\n    'apply',\n    'as_const',\n    'asin',\n    'atan',\n    'atan2',\n    'calloc',\n    'ceil',\n    'cerr',\n    'cin',\n    'clog',\n    'cos',\n    'cosh',\n    'cout',\n    'declval',\n    'endl',\n    'exchange',\n    'exit',\n    'exp',\n    'fabs',\n    'floor',\n    'fmod',\n    'forward',\n    'fprintf',\n    'fputs',\n    'free',\n    'frexp',\n    'fscanf',\n    'future',\n    'invoke',\n    'isalnum',\n    'isalpha',\n    'iscntrl',\n    'isdigit',\n    'isgraph',\n    'islower',\n    'isprint',\n    'ispunct',\n    'isspace',\n    'isupper',\n    'isxdigit',\n    'labs',\n    'launder',\n    'ldexp',\n    'log',\n    'log10',\n    'make_pair',\n    'make_shared',\n    'make_shared_for_overwrite',\n    'make_tuple',\n    'make_unique',\n    'malloc',\n    'memchr',\n    'memcmp',\n    'memcpy',\n    'memset',\n    'modf',\n    'move',\n    'pow',\n    'printf',\n    'putchar',\n    'puts',\n    'realloc',\n    'scanf',\n    'sin',\n    'sinh',\n    'snprintf',\n    'sprintf',\n    'sqrt',\n    'sscanf',\n    'std',\n    'stderr',\n    'stdin',\n    'stdout',\n    'strcat',\n    'strchr',\n    'strcmp',\n    'strcpy',\n    'strcspn',\n    'strlen',\n    'strncat',\n    'strncmp',\n    'strncpy',\n    'strpbrk',\n    'strrchr',\n    'strspn',\n    'strstr',\n    'swap',\n    'tan',\n    'tanh',\n    'terminate',\n    'to_underlying',\n    'tolower',\n    'toupper',\n    'vfprintf',\n    'visit',\n    'vprintf',\n    'vsprintf'\n  ];\n\n  const LITERALS = [\n    'NULL',\n    'false',\n    'nullopt',\n    'nullptr',\n    'true'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const BUILT_IN = [ '_Pragma' ];\n\n  const CPP_KEYWORDS = {\n    type: RESERVED_TYPES,\n    keyword: RESERVED_KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_IN,\n    _type_hints: TYPE_HINTS\n  };\n\n  const FUNCTION_DISPATCH = {\n    className: 'function.dispatch',\n    relevance: 0,\n    keywords: {\n      // Only for relevance, not highlighting.\n      _hint: FUNCTION_HINTS },\n    begin: regex.concat(\n      /\\b/,\n      /(?!decltype)/,\n      /(?!if)/,\n      /(?!for)/,\n      /(?!switch)/,\n      /(?!while)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n  };\n\n  const EXPRESSION_CONTAINS = [\n    FUNCTION_DISPATCH,\n    PREPROCESSOR,\n    CPP_PRIMITIVE_TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ TITLE_MODE ],\n        relevance: 0\n      },\n      // needed because we do not have look-behind on the below rule\n      // to prevent it from grabbing the final : in a :: pair\n      {\n        begin: /::/,\n        relevance: 0\n      },\n      // initializers\n      {\n        begin: /:/,\n        endsWithParent: true,\n        contains: [\n          STRINGS,\n          NUMBERS\n        ]\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: 'C++',\n    aliases: [\n      'cc',\n      'c++',\n      'h++',\n      'hpp',\n      'hh',\n      'hxx',\n      'cxx'\n    ],\n    keywords: CPP_KEYWORDS,\n    illegal: '</',\n    classNameAliases: { 'function.dispatch': 'built_in' },\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      FUNCTION_DISPATCH,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        { // containers: ie, `vector <int> rooms (9);`\n          begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\s*<(?!<)',\n          end: '>',\n          keywords: CPP_KEYWORDS,\n          contains: [\n            'self',\n            CPP_PRIMITIVE_TYPES\n          ]\n        },\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: CPP_KEYWORDS\n        },\n        {\n          match: [\n            // extra complexity to deal with `enum class` and `enum struct`\n            /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n            /\\s+/,\n            /\\w+/\n          ],\n          className: {\n            1: 'keyword',\n            3: 'title.class'\n          }\n        }\n      ])\n  };\n}\n\n/*\nLanguage: Arduino\nAuthor: Stefania Mellai <s.mellai@arduino.cc>\nDescription: The Arduino\u00AE Language is a superset of C++. This rules are designed to highlight the Arduino\u00AE source code. For info about language see http://www.arduino.cc.\nWebsite: https://www.arduino.cc\n*/\n\n\n/** @type LanguageFn */\nfunction arduino(hljs) {\n  const ARDUINO_KW = {\n    type: [\n      \"boolean\",\n      \"byte\",\n      \"word\",\n      \"String\"\n    ],\n    built_in: [\n      \"KeyboardController\",\n      \"MouseController\",\n      \"SoftwareSerial\",\n      \"EthernetServer\",\n      \"EthernetClient\",\n      \"LiquidCrystal\",\n      \"RobotControl\",\n      \"GSMVoiceCall\",\n      \"EthernetUDP\",\n      \"EsploraTFT\",\n      \"HttpClient\",\n      \"RobotMotor\",\n      \"WiFiClient\",\n      \"GSMScanner\",\n      \"FileSystem\",\n      \"Scheduler\",\n      \"GSMServer\",\n      \"YunClient\",\n      \"YunServer\",\n      \"IPAddress\",\n      \"GSMClient\",\n      \"GSMModem\",\n      \"Keyboard\",\n      \"Ethernet\",\n      \"Console\",\n      \"GSMBand\",\n      \"Esplora\",\n      \"Stepper\",\n      \"Process\",\n      \"WiFiUDP\",\n      \"GSM_SMS\",\n      \"Mailbox\",\n      \"USBHost\",\n      \"Firmata\",\n      \"PImage\",\n      \"Client\",\n      \"Server\",\n      \"GSMPIN\",\n      \"FileIO\",\n      \"Bridge\",\n      \"Serial\",\n      \"EEPROM\",\n      \"Stream\",\n      \"Mouse\",\n      \"Audio\",\n      \"Servo\",\n      \"File\",\n      \"Task\",\n      \"GPRS\",\n      \"WiFi\",\n      \"Wire\",\n      \"TFT\",\n      \"GSM\",\n      \"SPI\",\n      \"SD\"\n    ],\n    _hints: [\n      \"setup\",\n      \"loop\",\n      \"runShellCommandAsynchronously\",\n      \"analogWriteResolution\",\n      \"retrieveCallingNumber\",\n      \"printFirmwareVersion\",\n      \"analogReadResolution\",\n      \"sendDigitalPortPair\",\n      \"noListenOnLocalhost\",\n      \"readJoystickButton\",\n      \"setFirmwareVersion\",\n      \"readJoystickSwitch\",\n      \"scrollDisplayRight\",\n      \"getVoiceCallStatus\",\n      \"scrollDisplayLeft\",\n      \"writeMicroseconds\",\n      \"delayMicroseconds\",\n      \"beginTransmission\",\n      \"getSignalStrength\",\n      \"runAsynchronously\",\n      \"getAsynchronously\",\n      \"listenOnLocalhost\",\n      \"getCurrentCarrier\",\n      \"readAccelerometer\",\n      \"messageAvailable\",\n      \"sendDigitalPorts\",\n      \"lineFollowConfig\",\n      \"countryNameWrite\",\n      \"runShellCommand\",\n      \"readStringUntil\",\n      \"rewindDirectory\",\n      \"readTemperature\",\n      \"setClockDivider\",\n      \"readLightSensor\",\n      \"endTransmission\",\n      \"analogReference\",\n      \"detachInterrupt\",\n      \"countryNameRead\",\n      \"attachInterrupt\",\n      \"encryptionType\",\n      \"readBytesUntil\",\n      \"robotNameWrite\",\n      \"readMicrophone\",\n      \"robotNameRead\",\n      \"cityNameWrite\",\n      \"userNameWrite\",\n      \"readJoystickY\",\n      \"readJoystickX\",\n      \"mouseReleased\",\n      \"openNextFile\",\n      \"scanNetworks\",\n      \"noInterrupts\",\n      \"digitalWrite\",\n      \"beginSpeaker\",\n      \"mousePressed\",\n      \"isActionDone\",\n      \"mouseDragged\",\n      \"displayLogos\",\n      \"noAutoscroll\",\n      \"addParameter\",\n      \"remoteNumber\",\n      \"getModifiers\",\n      \"keyboardRead\",\n      \"userNameRead\",\n      \"waitContinue\",\n      \"processInput\",\n      \"parseCommand\",\n      \"printVersion\",\n      \"readNetworks\",\n      \"writeMessage\",\n      \"blinkVersion\",\n      \"cityNameRead\",\n      \"readMessage\",\n      \"setDataMode\",\n      \"parsePacket\",\n      \"isListening\",\n      \"setBitOrder\",\n      \"beginPacket\",\n      \"isDirectory\",\n      \"motorsWrite\",\n      \"drawCompass\",\n      \"digitalRead\",\n      \"clearScreen\",\n      \"serialEvent\",\n      \"rightToLeft\",\n      \"setTextSize\",\n      \"leftToRight\",\n      \"requestFrom\",\n      \"keyReleased\",\n      \"compassRead\",\n      \"analogWrite\",\n      \"interrupts\",\n      \"WiFiServer\",\n      \"disconnect\",\n      \"playMelody\",\n      \"parseFloat\",\n      \"autoscroll\",\n      \"getPINUsed\",\n      \"setPINUsed\",\n      \"setTimeout\",\n      \"sendAnalog\",\n      \"readSlider\",\n      \"analogRead\",\n      \"beginWrite\",\n      \"createChar\",\n      \"motorsStop\",\n      \"keyPressed\",\n      \"tempoWrite\",\n      \"readButton\",\n      \"subnetMask\",\n      \"debugPrint\",\n      \"macAddress\",\n      \"writeGreen\",\n      \"randomSeed\",\n      \"attachGPRS\",\n      \"readString\",\n      \"sendString\",\n      \"remotePort\",\n      \"releaseAll\",\n      \"mouseMoved\",\n      \"background\",\n      \"getXChange\",\n      \"getYChange\",\n      \"answerCall\",\n      \"getResult\",\n      \"voiceCall\",\n      \"endPacket\",\n      \"constrain\",\n      \"getSocket\",\n      \"writeJSON\",\n      \"getButton\",\n      \"available\",\n      \"connected\",\n      \"findUntil\",\n      \"readBytes\",\n      \"exitValue\",\n      \"readGreen\",\n      \"writeBlue\",\n      \"startLoop\",\n      \"IPAddress\",\n      \"isPressed\",\n      \"sendSysex\",\n      \"pauseMode\",\n      \"gatewayIP\",\n      \"setCursor\",\n      \"getOemKey\",\n      \"tuneWrite\",\n      \"noDisplay\",\n      \"loadImage\",\n      \"switchPIN\",\n      \"onRequest\",\n      \"onReceive\",\n      \"changePIN\",\n      \"playFile\",\n      \"noBuffer\",\n      \"parseInt\",\n      \"overflow\",\n      \"checkPIN\",\n      \"knobRead\",\n      \"beginTFT\",\n      \"bitClear\",\n      \"updateIR\",\n      \"bitWrite\",\n      \"position\",\n      \"writeRGB\",\n      \"highByte\",\n      \"writeRed\",\n      \"setSpeed\",\n      \"readBlue\",\n      \"noStroke\",\n      \"remoteIP\",\n      \"transfer\",\n      \"shutdown\",\n      \"hangCall\",\n      \"beginSMS\",\n      \"endWrite\",\n      \"attached\",\n      \"maintain\",\n      \"noCursor\",\n      \"checkReg\",\n      \"checkPUK\",\n      \"shiftOut\",\n      \"isValid\",\n      \"shiftIn\",\n      \"pulseIn\",\n      \"connect\",\n      \"println\",\n      \"localIP\",\n      \"pinMode\",\n      \"getIMEI\",\n      \"display\",\n      \"noBlink\",\n      \"process\",\n      \"getBand\",\n      \"running\",\n      \"beginSD\",\n      \"drawBMP\",\n      \"lowByte\",\n      \"setBand\",\n      \"release\",\n      \"bitRead\",\n      \"prepare\",\n      \"pointTo\",\n      \"readRed\",\n      \"setMode\",\n      \"noFill\",\n      \"remove\",\n      \"listen\",\n      \"stroke\",\n      \"detach\",\n      \"attach\",\n      \"noTone\",\n      \"exists\",\n      \"buffer\",\n      \"height\",\n      \"bitSet\",\n      \"circle\",\n      \"config\",\n      \"cursor\",\n      \"random\",\n      \"IRread\",\n      \"setDNS\",\n      \"endSMS\",\n      \"getKey\",\n      \"micros\",\n      \"millis\",\n      \"begin\",\n      \"print\",\n      \"write\",\n      \"ready\",\n      \"flush\",\n      \"width\",\n      \"isPIN\",\n      \"blink\",\n      \"clear\",\n      \"press\",\n      \"mkdir\",\n      \"rmdir\",\n      \"close\",\n      \"point\",\n      \"yield\",\n      \"image\",\n      \"BSSID\",\n      \"click\",\n      \"delay\",\n      \"read\",\n      \"text\",\n      \"move\",\n      \"peek\",\n      \"beep\",\n      \"rect\",\n      \"line\",\n      \"open\",\n      \"seek\",\n      \"fill\",\n      \"size\",\n      \"turn\",\n      \"stop\",\n      \"home\",\n      \"find\",\n      \"step\",\n      \"tone\",\n      \"sqrt\",\n      \"RSSI\",\n      \"SSID\",\n      \"end\",\n      \"bit\",\n      \"tan\",\n      \"cos\",\n      \"sin\",\n      \"pow\",\n      \"map\",\n      \"abs\",\n      \"max\",\n      \"min\",\n      \"get\",\n      \"run\",\n      \"put\"\n    ],\n    literal: [\n      \"DIGITAL_MESSAGE\",\n      \"FIRMATA_STRING\",\n      \"ANALOG_MESSAGE\",\n      \"REPORT_DIGITAL\",\n      \"REPORT_ANALOG\",\n      \"INPUT_PULLUP\",\n      \"SET_PIN_MODE\",\n      \"INTERNAL2V56\",\n      \"SYSTEM_RESET\",\n      \"LED_BUILTIN\",\n      \"INTERNAL1V1\",\n      \"SYSEX_START\",\n      \"INTERNAL\",\n      \"EXTERNAL\",\n      \"DEFAULT\",\n      \"OUTPUT\",\n      \"INPUT\",\n      \"HIGH\",\n      \"LOW\"\n    ]\n  };\n\n  const ARDUINO = cPlusPlus(hljs);\n\n  const kws = /** @type {Record<string,any>} */ (ARDUINO.keywords);\n\n  kws.type = [\n    ...kws.type,\n    ...ARDUINO_KW.type\n  ];\n  kws.literal = [\n    ...kws.literal,\n    ...ARDUINO_KW.literal\n  ];\n  kws.built_in = [\n    ...kws.built_in,\n    ...ARDUINO_KW.built_in\n  ];\n  kws._hints = ARDUINO_KW._hints;\n\n  ARDUINO.name = 'Arduino';\n  ARDUINO.aliases = [ 'ino' ];\n  ARDUINO.supersetOf = \"cpp\";\n\n  return ARDUINO;\n}\n\nexport { arduino as default };\n", "/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n  const regex = hljs.regex;\n  const VAR = {};\n  const BRACED_VAR = {\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [\n      \"self\",\n      {\n        begin: /:-/,\n        contains: [ VAR ]\n      } // default values\n    ]\n  };\n  Object.assign(VAR, {\n    className: 'variable',\n    variants: [\n      { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n        // negative look-ahead tries to avoid matching patterns that are not\n        // Perl at all like $ident$, @ident@, etc.\n        `(?![\\\\w\\\\d])(?![$])`) },\n      BRACED_VAR\n    ]\n  });\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\(/,\n    end: /\\)/,\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n  const HERE_DOC = {\n    begin: /<<-?\\s*(?=\\w+)/,\n    starts: { contains: [\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(\\w+)/,\n        end: /(\\w+)/,\n        className: 'string'\n      })\n    ] }\n  };\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      SUBST\n    ]\n  };\n  SUBST.contains.push(QUOTE_STRING);\n  const ESCAPED_QUOTE = {\n    match: /\\\\\"/\n  };\n  const APOS_STRING = {\n    className: 'string',\n    begin: /'/,\n    end: /'/\n  };\n  const ESCAPED_APOS = {\n    match: /\\\\'/\n  };\n  const ARITHMETIC = {\n    begin: /\\$?\\(\\(/,\n    end: /\\)\\)/,\n    contains: [\n      {\n        begin: /\\d+#[0-9a-f]+/,\n        className: \"number\"\n      },\n      hljs.NUMBER_MODE,\n      VAR\n    ]\n  };\n  const SH_LIKE_SHELLS = [\n    \"fish\",\n    \"bash\",\n    \"zsh\",\n    \"sh\",\n    \"csh\",\n    \"ksh\",\n    \"tcsh\",\n    \"dash\",\n    \"scsh\",\n  ];\n  const KNOWN_SHEBANG = hljs.SHEBANG({\n    binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n    relevance: 10\n  });\n  const FUNCTION = {\n    className: 'function',\n    begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n    returnBegin: true,\n    contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n    relevance: 0\n  };\n\n  const KEYWORDS = [\n    \"if\",\n    \"then\",\n    \"else\",\n    \"elif\",\n    \"fi\",\n    \"for\",\n    \"while\",\n    \"until\",\n    \"in\",\n    \"do\",\n    \"done\",\n    \"case\",\n    \"esac\",\n    \"function\",\n    \"select\"\n  ];\n\n  const LITERALS = [\n    \"true\",\n    \"false\"\n  ];\n\n  // to consume paths to prevent keyword matches inside them\n  const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n  // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n  const SHELL_BUILT_INS = [\n    \"break\",\n    \"cd\",\n    \"continue\",\n    \"eval\",\n    \"exec\",\n    \"exit\",\n    \"export\",\n    \"getopts\",\n    \"hash\",\n    \"pwd\",\n    \"readonly\",\n    \"return\",\n    \"shift\",\n    \"test\",\n    \"times\",\n    \"trap\",\n    \"umask\",\n    \"unset\"\n  ];\n\n  const BASH_BUILT_INS = [\n    \"alias\",\n    \"bind\",\n    \"builtin\",\n    \"caller\",\n    \"command\",\n    \"declare\",\n    \"echo\",\n    \"enable\",\n    \"help\",\n    \"let\",\n    \"local\",\n    \"logout\",\n    \"mapfile\",\n    \"printf\",\n    \"read\",\n    \"readarray\",\n    \"source\",\n    \"type\",\n    \"typeset\",\n    \"ulimit\",\n    \"unalias\"\n  ];\n\n  const ZSH_BUILT_INS = [\n    \"autoload\",\n    \"bg\",\n    \"bindkey\",\n    \"bye\",\n    \"cap\",\n    \"chdir\",\n    \"clone\",\n    \"comparguments\",\n    \"compcall\",\n    \"compctl\",\n    \"compdescribe\",\n    \"compfiles\",\n    \"compgroups\",\n    \"compquote\",\n    \"comptags\",\n    \"comptry\",\n    \"compvalues\",\n    \"dirs\",\n    \"disable\",\n    \"disown\",\n    \"echotc\",\n    \"echoti\",\n    \"emulate\",\n    \"fc\",\n    \"fg\",\n    \"float\",\n    \"functions\",\n    \"getcap\",\n    \"getln\",\n    \"history\",\n    \"integer\",\n    \"jobs\",\n    \"kill\",\n    \"limit\",\n    \"log\",\n    \"noglob\",\n    \"popd\",\n    \"print\",\n    \"pushd\",\n    \"pushln\",\n    \"rehash\",\n    \"sched\",\n    \"setcap\",\n    \"setopt\",\n    \"stat\",\n    \"suspend\",\n    \"ttyctl\",\n    \"unfunction\",\n    \"unhash\",\n    \"unlimit\",\n    \"unsetopt\",\n    \"vared\",\n    \"wait\",\n    \"whence\",\n    \"where\",\n    \"which\",\n    \"zcompile\",\n    \"zformat\",\n    \"zftp\",\n    \"zle\",\n    \"zmodload\",\n    \"zparseopts\",\n    \"zprof\",\n    \"zpty\",\n    \"zregexparse\",\n    \"zsocket\",\n    \"zstyle\",\n    \"ztcp\"\n  ];\n\n  const GNU_CORE_UTILS = [\n    \"chcon\",\n    \"chgrp\",\n    \"chown\",\n    \"chmod\",\n    \"cp\",\n    \"dd\",\n    \"df\",\n    \"dir\",\n    \"dircolors\",\n    \"ln\",\n    \"ls\",\n    \"mkdir\",\n    \"mkfifo\",\n    \"mknod\",\n    \"mktemp\",\n    \"mv\",\n    \"realpath\",\n    \"rm\",\n    \"rmdir\",\n    \"shred\",\n    \"sync\",\n    \"touch\",\n    \"truncate\",\n    \"vdir\",\n    \"b2sum\",\n    \"base32\",\n    \"base64\",\n    \"cat\",\n    \"cksum\",\n    \"comm\",\n    \"csplit\",\n    \"cut\",\n    \"expand\",\n    \"fmt\",\n    \"fold\",\n    \"head\",\n    \"join\",\n    \"md5sum\",\n    \"nl\",\n    \"numfmt\",\n    \"od\",\n    \"paste\",\n    \"ptx\",\n    \"pr\",\n    \"sha1sum\",\n    \"sha224sum\",\n    \"sha256sum\",\n    \"sha384sum\",\n    \"sha512sum\",\n    \"shuf\",\n    \"sort\",\n    \"split\",\n    \"sum\",\n    \"tac\",\n    \"tail\",\n    \"tr\",\n    \"tsort\",\n    \"unexpand\",\n    \"uniq\",\n    \"wc\",\n    \"arch\",\n    \"basename\",\n    \"chroot\",\n    \"date\",\n    \"dirname\",\n    \"du\",\n    \"echo\",\n    \"env\",\n    \"expr\",\n    \"factor\",\n    // \"false\", // keyword literal already\n    \"groups\",\n    \"hostid\",\n    \"id\",\n    \"link\",\n    \"logname\",\n    \"nice\",\n    \"nohup\",\n    \"nproc\",\n    \"pathchk\",\n    \"pinky\",\n    \"printenv\",\n    \"printf\",\n    \"pwd\",\n    \"readlink\",\n    \"runcon\",\n    \"seq\",\n    \"sleep\",\n    \"stat\",\n    \"stdbuf\",\n    \"stty\",\n    \"tee\",\n    \"test\",\n    \"timeout\",\n    // \"true\", // keyword literal already\n    \"tty\",\n    \"uname\",\n    \"unlink\",\n    \"uptime\",\n    \"users\",\n    \"who\",\n    \"whoami\",\n    \"yes\"\n  ];\n\n  return {\n    name: 'Bash',\n    aliases: [ 'sh' ],\n    keywords: {\n      $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: [\n        ...SHELL_BUILT_INS,\n        ...BASH_BUILT_INS,\n        // Shell modifiers\n        \"set\",\n        \"shopt\",\n        ...ZSH_BUILT_INS,\n        ...GNU_CORE_UTILS\n      ]\n    },\n    contains: [\n      KNOWN_SHEBANG, // to catch known shells and boost relevancy\n      hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n      FUNCTION,\n      ARITHMETIC,\n      hljs.HASH_COMMENT_MODE,\n      HERE_DOC,\n      PATH_MODE,\n      QUOTE_STRING,\n      ESCAPED_QUOTE,\n      APOS_STRING,\n      ESCAPED_APOS,\n      VAR\n    ]\n  };\n}\n\nexport { bash as default };\n", "/*\nLanguage: C\nCategory: common, system\nWebsite: https://en.wikipedia.org/wiki/C_(programming_language)\n*/\n\n/** @type LanguageFn */\nfunction c(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n\n  const TYPES = {\n    className: 'type',\n    variants: [\n      { begin: '\\\\b[a-z\\\\d_]*_t\\\\b' },\n      { match: /\\batomic_[a-z]{3,6}\\b/ }\n    ]\n\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + \"|.)\",\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  const C_KEYWORDS = [\n    \"asm\",\n    \"auto\",\n    \"break\",\n    \"case\",\n    \"continue\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"enum\",\n    \"extern\",\n    \"for\",\n    \"fortran\",\n    \"goto\",\n    \"if\",\n    \"inline\",\n    \"register\",\n    \"restrict\",\n    \"return\",\n    \"sizeof\",\n    \"struct\",\n    \"switch\",\n    \"typedef\",\n    \"union\",\n    \"volatile\",\n    \"while\",\n    \"_Alignas\",\n    \"_Alignof\",\n    \"_Atomic\",\n    \"_Generic\",\n    \"_Noreturn\",\n    \"_Static_assert\",\n    \"_Thread_local\",\n    // aliases\n    \"alignas\",\n    \"alignof\",\n    \"noreturn\",\n    \"static_assert\",\n    \"thread_local\",\n    // not a C keyword but is, for all intents and purposes, treated exactly like one.\n    \"_Pragma\"\n  ];\n\n  const C_TYPES = [\n    \"float\",\n    \"double\",\n    \"signed\",\n    \"unsigned\",\n    \"int\",\n    \"short\",\n    \"long\",\n    \"char\",\n    \"void\",\n    \"_Bool\",\n    \"_Complex\",\n    \"_Imaginary\",\n    \"_Decimal32\",\n    \"_Decimal64\",\n    \"_Decimal128\",\n    // modifiers\n    \"const\",\n    \"static\",\n    // aliases\n    \"complex\",\n    \"bool\",\n    \"imaginary\"\n  ];\n\n  const KEYWORDS = {\n    keyword: C_KEYWORDS,\n    type: C_TYPES,\n    literal: 'true false NULL',\n    // TODO: apply hinting work similar to what was done in cpp.js\n    built_in: 'std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream '\n      + 'auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set '\n      + 'unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos '\n      + 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp '\n      + 'fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper '\n      + 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow '\n      + 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp '\n      + 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan '\n      + 'vfprintf vprintf vsprintf endl initializer_list unique_ptr',\n  };\n\n  const EXPRESSION_CONTAINS = [\n    PREPROCESSOR,\n    TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ hljs.inherit(TITLE_MODE, { className: \"title.function\" }) ],\n        relevance: 0\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              TYPES\n            ]\n          }\n        ]\n      },\n      TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: \"C\",\n    aliases: [ 'h' ],\n    keywords: KEYWORDS,\n    // Until differentiations are added between `c` and `cpp`, `c` will\n    // not be auto-detected to avoid auto-detect conflicts between C and C++\n    disableAutodetect: true,\n    illegal: '</',\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: KEYWORDS\n        },\n        {\n          className: 'class',\n          beginKeywords: 'enum class struct union',\n          end: /[{;:<>=]/,\n          contains: [\n            { beginKeywords: \"final class struct\" },\n            hljs.TITLE_MODE\n          ]\n        }\n      ]),\n    exports: {\n      preprocessor: PREPROCESSOR,\n      strings: STRINGS,\n      keywords: KEYWORDS\n    }\n  };\n}\n\nexport { c as default };\n", "/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cpp(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '(?!struct)('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n  const CPP_PRIMITIVE_TYPES = {\n    className: 'type',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_KEYWORDS = [\n    'alignas',\n    'alignof',\n    'and',\n    'and_eq',\n    'asm',\n    'atomic_cancel',\n    'atomic_commit',\n    'atomic_noexcept',\n    'auto',\n    'bitand',\n    'bitor',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'co_await',\n    'co_return',\n    'co_yield',\n    'compl',\n    'concept',\n    'const_cast|10',\n    'consteval',\n    'constexpr',\n    'constinit',\n    'continue',\n    'decltype',\n    'default',\n    'delete',\n    'do',\n    'dynamic_cast|10',\n    'else',\n    'enum',\n    'explicit',\n    'export',\n    'extern',\n    'false',\n    'final',\n    'for',\n    'friend',\n    'goto',\n    'if',\n    'import',\n    'inline',\n    'module',\n    'mutable',\n    'namespace',\n    'new',\n    'noexcept',\n    'not',\n    'not_eq',\n    'nullptr',\n    'operator',\n    'or',\n    'or_eq',\n    'override',\n    'private',\n    'protected',\n    'public',\n    'reflexpr',\n    'register',\n    'reinterpret_cast|10',\n    'requires',\n    'return',\n    'sizeof',\n    'static_assert',\n    'static_cast|10',\n    'struct',\n    'switch',\n    'synchronized',\n    'template',\n    'this',\n    'thread_local',\n    'throw',\n    'transaction_safe',\n    'transaction_safe_dynamic',\n    'true',\n    'try',\n    'typedef',\n    'typeid',\n    'typename',\n    'union',\n    'using',\n    'virtual',\n    'volatile',\n    'while',\n    'xor',\n    'xor_eq'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_TYPES = [\n    'bool',\n    'char',\n    'char16_t',\n    'char32_t',\n    'char8_t',\n    'double',\n    'float',\n    'int',\n    'long',\n    'short',\n    'void',\n    'wchar_t',\n    'unsigned',\n    'signed',\n    'const',\n    'static'\n  ];\n\n  const TYPE_HINTS = [\n    'any',\n    'auto_ptr',\n    'barrier',\n    'binary_semaphore',\n    'bitset',\n    'complex',\n    'condition_variable',\n    'condition_variable_any',\n    'counting_semaphore',\n    'deque',\n    'false_type',\n    'future',\n    'imaginary',\n    'initializer_list',\n    'istringstream',\n    'jthread',\n    'latch',\n    'lock_guard',\n    'multimap',\n    'multiset',\n    'mutex',\n    'optional',\n    'ostringstream',\n    'packaged_task',\n    'pair',\n    'promise',\n    'priority_queue',\n    'queue',\n    'recursive_mutex',\n    'recursive_timed_mutex',\n    'scoped_lock',\n    'set',\n    'shared_future',\n    'shared_lock',\n    'shared_mutex',\n    'shared_timed_mutex',\n    'shared_ptr',\n    'stack',\n    'string_view',\n    'stringstream',\n    'timed_mutex',\n    'thread',\n    'true_type',\n    'tuple',\n    'unique_lock',\n    'unique_ptr',\n    'unordered_map',\n    'unordered_multimap',\n    'unordered_multiset',\n    'unordered_set',\n    'variant',\n    'vector',\n    'weak_ptr',\n    'wstring',\n    'wstring_view'\n  ];\n\n  const FUNCTION_HINTS = [\n    'abort',\n    'abs',\n    'acos',\n    'apply',\n    'as_const',\n    'asin',\n    'atan',\n    'atan2',\n    'calloc',\n    'ceil',\n    'cerr',\n    'cin',\n    'clog',\n    'cos',\n    'cosh',\n    'cout',\n    'declval',\n    'endl',\n    'exchange',\n    'exit',\n    'exp',\n    'fabs',\n    'floor',\n    'fmod',\n    'forward',\n    'fprintf',\n    'fputs',\n    'free',\n    'frexp',\n    'fscanf',\n    'future',\n    'invoke',\n    'isalnum',\n    'isalpha',\n    'iscntrl',\n    'isdigit',\n    'isgraph',\n    'islower',\n    'isprint',\n    'ispunct',\n    'isspace',\n    'isupper',\n    'isxdigit',\n    'labs',\n    'launder',\n    'ldexp',\n    'log',\n    'log10',\n    'make_pair',\n    'make_shared',\n    'make_shared_for_overwrite',\n    'make_tuple',\n    'make_unique',\n    'malloc',\n    'memchr',\n    'memcmp',\n    'memcpy',\n    'memset',\n    'modf',\n    'move',\n    'pow',\n    'printf',\n    'putchar',\n    'puts',\n    'realloc',\n    'scanf',\n    'sin',\n    'sinh',\n    'snprintf',\n    'sprintf',\n    'sqrt',\n    'sscanf',\n    'std',\n    'stderr',\n    'stdin',\n    'stdout',\n    'strcat',\n    'strchr',\n    'strcmp',\n    'strcpy',\n    'strcspn',\n    'strlen',\n    'strncat',\n    'strncmp',\n    'strncpy',\n    'strpbrk',\n    'strrchr',\n    'strspn',\n    'strstr',\n    'swap',\n    'tan',\n    'tanh',\n    'terminate',\n    'to_underlying',\n    'tolower',\n    'toupper',\n    'vfprintf',\n    'visit',\n    'vprintf',\n    'vsprintf'\n  ];\n\n  const LITERALS = [\n    'NULL',\n    'false',\n    'nullopt',\n    'nullptr',\n    'true'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const BUILT_IN = [ '_Pragma' ];\n\n  const CPP_KEYWORDS = {\n    type: RESERVED_TYPES,\n    keyword: RESERVED_KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_IN,\n    _type_hints: TYPE_HINTS\n  };\n\n  const FUNCTION_DISPATCH = {\n    className: 'function.dispatch',\n    relevance: 0,\n    keywords: {\n      // Only for relevance, not highlighting.\n      _hint: FUNCTION_HINTS },\n    begin: regex.concat(\n      /\\b/,\n      /(?!decltype)/,\n      /(?!if)/,\n      /(?!for)/,\n      /(?!switch)/,\n      /(?!while)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n  };\n\n  const EXPRESSION_CONTAINS = [\n    FUNCTION_DISPATCH,\n    PREPROCESSOR,\n    CPP_PRIMITIVE_TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ TITLE_MODE ],\n        relevance: 0\n      },\n      // needed because we do not have look-behind on the below rule\n      // to prevent it from grabbing the final : in a :: pair\n      {\n        begin: /::/,\n        relevance: 0\n      },\n      // initializers\n      {\n        begin: /:/,\n        endsWithParent: true,\n        contains: [\n          STRINGS,\n          NUMBERS\n        ]\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: 'C++',\n    aliases: [\n      'cc',\n      'c++',\n      'h++',\n      'hpp',\n      'hh',\n      'hxx',\n      'cxx'\n    ],\n    keywords: CPP_KEYWORDS,\n    illegal: '</',\n    classNameAliases: { 'function.dispatch': 'built_in' },\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      FUNCTION_DISPATCH,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        { // containers: ie, `vector <int> rooms (9);`\n          begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\s*<(?!<)',\n          end: '>',\n          keywords: CPP_KEYWORDS,\n          contains: [\n            'self',\n            CPP_PRIMITIVE_TYPES\n          ]\n        },\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: CPP_KEYWORDS\n        },\n        {\n          match: [\n            // extra complexity to deal with `enum class` and `enum struct`\n            /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n            /\\s+/,\n            /\\w+/\n          ],\n          className: {\n            1: 'keyword',\n            3: 'title.class'\n          }\n        }\n      ])\n  };\n}\n\nexport { cpp as default };\n", "/*\nLanguage: C#\nAuthor: Jason Diamond <jason@diamond.name>\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n  const BUILT_IN_KEYWORDS = [\n    'bool',\n    'byte',\n    'char',\n    'decimal',\n    'delegate',\n    'double',\n    'dynamic',\n    'enum',\n    'float',\n    'int',\n    'long',\n    'nint',\n    'nuint',\n    'object',\n    'sbyte',\n    'short',\n    'string',\n    'ulong',\n    'uint',\n    'ushort'\n  ];\n  const FUNCTION_MODIFIERS = [\n    'public',\n    'private',\n    'protected',\n    'static',\n    'internal',\n    'protected',\n    'abstract',\n    'async',\n    'extern',\n    'override',\n    'unsafe',\n    'virtual',\n    'new',\n    'sealed',\n    'partial'\n  ];\n  const LITERAL_KEYWORDS = [\n    'default',\n    'false',\n    'null',\n    'true'\n  ];\n  const NORMAL_KEYWORDS = [\n    'abstract',\n    'as',\n    'base',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'const',\n    'continue',\n    'do',\n    'else',\n    'event',\n    'explicit',\n    'extern',\n    'finally',\n    'fixed',\n    'for',\n    'foreach',\n    'goto',\n    'if',\n    'implicit',\n    'in',\n    'interface',\n    'internal',\n    'is',\n    'lock',\n    'namespace',\n    'new',\n    'operator',\n    'out',\n    'override',\n    'params',\n    'private',\n    'protected',\n    'public',\n    'readonly',\n    'record',\n    'ref',\n    'return',\n    'scoped',\n    'sealed',\n    'sizeof',\n    'stackalloc',\n    'static',\n    'struct',\n    'switch',\n    'this',\n    'throw',\n    'try',\n    'typeof',\n    'unchecked',\n    'unsafe',\n    'using',\n    'virtual',\n    'void',\n    'volatile',\n    'while'\n  ];\n  const CONTEXTUAL_KEYWORDS = [\n    'add',\n    'alias',\n    'and',\n    'ascending',\n    'async',\n    'await',\n    'by',\n    'descending',\n    'equals',\n    'from',\n    'get',\n    'global',\n    'group',\n    'init',\n    'into',\n    'join',\n    'let',\n    'nameof',\n    'not',\n    'notnull',\n    'on',\n    'or',\n    'orderby',\n    'partial',\n    'remove',\n    'select',\n    'set',\n    'unmanaged',\n    'value|0',\n    'var',\n    'when',\n    'where',\n    'with',\n    'yield'\n  ];\n\n  const KEYWORDS = {\n    keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n    built_in: BUILT_IN_KEYWORDS,\n    literal: LITERAL_KEYWORDS\n  };\n  const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n  const VERBATIM_STRING = {\n    className: 'string',\n    begin: '@\"',\n    end: '\"',\n    contains: [ { begin: '\"\"' } ]\n  };\n  const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n  const SUBST = {\n    className: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS\n  };\n  const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n  const INTERPOLATED_STRING = {\n    className: 'string',\n    begin: /\\$\"/,\n    end: '\"',\n    illegal: /\\n/,\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      hljs.BACKSLASH_ESCAPE,\n      SUBST_NO_LF\n    ]\n  };\n  const INTERPOLATED_VERBATIM_STRING = {\n    className: 'string',\n    begin: /\\$@\"/,\n    end: '\"',\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      { begin: '\"\"' },\n      SUBST\n    ]\n  };\n  const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n    illegal: /\\n/,\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      { begin: '\"\"' },\n      SUBST_NO_LF\n    ]\n  });\n  SUBST.contains = [\n    INTERPOLATED_VERBATIM_STRING,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBERS,\n    hljs.C_BLOCK_COMMENT_MODE\n  ];\n  SUBST_NO_LF.contains = [\n    INTERPOLATED_VERBATIM_STRING_NO_LF,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING_NO_LF,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBERS,\n    hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n  ];\n  const STRING = { variants: [\n    INTERPOLATED_VERBATIM_STRING,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ] };\n\n  const GENERIC_MODIFIER = {\n    begin: \"<\",\n    end: \">\",\n    contains: [\n      { beginKeywords: \"in out\" },\n      TITLE_MODE\n    ]\n  };\n  const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n  const AT_IDENTIFIER = {\n    // prevents expressions like `@class` from incorrect flagging\n    // `class` as a keyword\n    begin: \"@\" + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  return {\n    name: 'C#',\n    aliases: [\n      'cs',\n      'c#'\n    ],\n    keywords: KEYWORDS,\n    illegal: /::/,\n    contains: [\n      hljs.COMMENT(\n        '///',\n        '$',\n        {\n          returnBegin: true,\n          contains: [\n            {\n              className: 'doctag',\n              variants: [\n                {\n                  begin: '///',\n                  relevance: 0\n                },\n                { begin: '<!--|-->' },\n                {\n                  begin: '</?',\n                  end: '>'\n                }\n              ]\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'meta',\n        begin: '#',\n        end: '$',\n        keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n      },\n      STRING,\n      NUMBERS,\n      {\n        beginKeywords: 'class interface',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:,]/,\n        contains: [\n          { beginKeywords: \"where class\" },\n          TITLE_MODE,\n          GENERIC_MODIFIER,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        beginKeywords: 'namespace',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:]/,\n        contains: [\n          TITLE_MODE,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        beginKeywords: 'record',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:]/,\n        contains: [\n          TITLE_MODE,\n          GENERIC_MODIFIER,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        // [Attributes(\"\")]\n        className: 'meta',\n        begin: '^\\\\s*\\\\[(?=[\\\\w])',\n        excludeBegin: true,\n        end: '\\\\]',\n        excludeEnd: true,\n        contains: [\n          {\n            className: 'string',\n            begin: /\"/,\n            end: /\"/\n          }\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new return throw await else',\n        relevance: 0\n      },\n      {\n        className: 'function',\n        begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n        returnBegin: true,\n        end: /\\s*[{;=]/,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          // prevents these from being highlighted `title`\n          {\n            beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n            relevance: 0\n          },\n          {\n            begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n            returnBegin: true,\n            contains: [\n              hljs.TITLE_MODE,\n              GENERIC_MODIFIER\n            ],\n            relevance: 0\n          },\n          { match: /\\(\\)/ },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              STRING,\n              NUMBERS,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      AT_IDENTIFIER\n    ]\n  };\n}\n\nexport { csharp as default };\n", "const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.NUMBER_RE + '(' +\n        '%|em|ex|ch|rem' +\n        '|vw|vh|vmin|vmax' +\n        '|cm|mm|in|pt|pc|px' +\n        '|deg|grad|rad|turn' +\n        '|s|ms' +\n        '|Hz|kHz' +\n        '|dpi|dpcm|dppx' +\n        ')?',\n      relevance: 0\n    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'all',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-variant',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'gap',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inline-size',\n  'isolation',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-break',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'row-gap',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n  const regex = hljs.regex;\n  const modes = MODES(hljs);\n  const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n  const AT_MODIFIERS = \"and or not only\";\n  const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const STRINGS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ];\n\n  return {\n    name: 'CSS',\n    case_insensitive: true,\n    illegal: /[=|'\\$]/,\n    keywords: { keyframePosition: \"from to\" },\n    classNameAliases: {\n      // for visual continuity with `tag {}` and because we\n      // don't have a great class for this?\n      keyframePosition: \"selector-tag\" },\n    contains: [\n      modes.BLOCK_COMMENT,\n      VENDOR_PREFIX,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      modes.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: /#[A-Za-z0-9_-]+/,\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.' + IDENT_RE,\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        variants: [\n          { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n          { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n        ]\n      },\n      // we may actually need this (12/2020)\n      // { // pseudo-selector params\n      //   begin: /\\(/,\n      //   end: /\\)/,\n      //   contains: [ hljs.CSS_NUMBER_MODE ]\n      // },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      // attribute values\n      {\n        begin: /:/,\n        end: /[;}{]/,\n        contains: [\n          modes.BLOCK_COMMENT,\n          modes.HEXCOLOR,\n          modes.IMPORTANT,\n          modes.CSS_NUMBER_MODE,\n          ...STRINGS,\n          // needed to highlight these as strings and to avoid issues with\n          // illegal characters that might be inside urls that would tigger the\n          // languages illegal stack\n          {\n            begin: /(url|data-uri)\\(/,\n            end: /\\)/,\n            relevance: 0, // from keywords\n            keywords: { built_in: \"url data-uri\" },\n            contains: [\n              ...STRINGS,\n              {\n                className: \"string\",\n                // any character other than `)` as in `url()` will be the start\n                // of a string, which ends with `)` (from the parent mode)\n                begin: /[^)]/,\n                endsWithParent: true,\n                excludeEnd: true\n              }\n            ]\n          },\n          modes.FUNCTION_DISPATCH\n        ]\n      },\n      {\n        begin: regex.lookahead(/@/),\n        end: '[{;]',\n        relevance: 0,\n        illegal: /:/, // break on Less variables @var: ...\n        contains: [\n          {\n            className: 'keyword',\n            begin: AT_PROPERTY_RE\n          },\n          {\n            begin: /\\s/,\n            endsWithParent: true,\n            excludeEnd: true,\n            relevance: 0,\n            keywords: {\n              $pattern: /[a-z-]+/,\n              keyword: AT_MODIFIERS,\n              attribute: MEDIA_FEATURES.join(\" \")\n            },\n            contains: [\n              {\n                begin: /[a-z-]+(?=:)/,\n                className: \"attribute\"\n              },\n              ...STRINGS,\n              modes.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n      }\n    ]\n  };\n}\n\nexport { css as default };\n", "/*\nLanguage: Diff\nDescription: Unified and context diff\nAuthor: Vasily Polovnyov <vast@whiteants.net>\nWebsite: https://www.gnu.org/software/diffutils/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction diff(hljs) {\n  const regex = hljs.regex;\n  return {\n    name: 'Diff',\n    aliases: [ 'patch' ],\n    contains: [\n      {\n        className: 'meta',\n        relevance: 10,\n        match: regex.either(\n          /^@@ +-\\d+,\\d+ +\\+\\d+,\\d+ +@@/,\n          /^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/,\n          /^--- +\\d+,\\d+ +----$/\n        )\n      },\n      {\n        className: 'comment',\n        variants: [\n          {\n            begin: regex.either(\n              /Index: /,\n              /^index/,\n              /={3,}/,\n              /^-{3}/,\n              /^\\*{3} /,\n              /^\\+{3}/,\n              /^diff --git/\n            ),\n            end: /$/\n          },\n          { match: /^\\*{15}$/ }\n        ]\n      },\n      {\n        className: 'addition',\n        begin: /^\\+/,\n        end: /$/\n      },\n      {\n        className: 'deletion',\n        begin: /^-/,\n        end: /$/\n      },\n      {\n        className: 'addition',\n        begin: /^!/,\n        end: /$/\n      }\n    ]\n  };\n}\n\nexport { diff as default };\n", "/*\nLanguage: Go\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\nDescription: Google go language (golang). For info about language\nWebsite: http://golang.org/\nCategory: common, system\n*/\n\nfunction go(hljs) {\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"iota\",\n    \"nil\"\n  ];\n  const BUILT_INS = [\n    \"append\",\n    \"cap\",\n    \"close\",\n    \"complex\",\n    \"copy\",\n    \"imag\",\n    \"len\",\n    \"make\",\n    \"new\",\n    \"panic\",\n    \"print\",\n    \"println\",\n    \"real\",\n    \"recover\",\n    \"delete\"\n  ];\n  const TYPES = [\n    \"bool\",\n    \"byte\",\n    \"complex64\",\n    \"complex128\",\n    \"error\",\n    \"float32\",\n    \"float64\",\n    \"int8\",\n    \"int16\",\n    \"int32\",\n    \"int64\",\n    \"string\",\n    \"uint8\",\n    \"uint16\",\n    \"uint32\",\n    \"uint64\",\n    \"int\",\n    \"uint\",\n    \"uintptr\",\n    \"rune\"\n  ];\n  const KWS = [\n    \"break\",\n    \"case\",\n    \"chan\",\n    \"const\",\n    \"continue\",\n    \"default\",\n    \"defer\",\n    \"else\",\n    \"fallthrough\",\n    \"for\",\n    \"func\",\n    \"go\",\n    \"goto\",\n    \"if\",\n    \"import\",\n    \"interface\",\n    \"map\",\n    \"package\",\n    \"range\",\n    \"return\",\n    \"select\",\n    \"struct\",\n    \"switch\",\n    \"type\",\n    \"var\",\n  ];\n  const KEYWORDS = {\n    keyword: KWS,\n    type: TYPES,\n    literal: LITERALS,\n    built_in: BUILT_INS\n  };\n  return {\n    name: 'Go',\n    aliases: [ 'golang' ],\n    keywords: KEYWORDS,\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'string',\n        variants: [\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {\n            begin: '`',\n            end: '`'\n          }\n        ]\n      },\n      {\n        className: 'number',\n        variants: [\n          {\n            begin: hljs.C_NUMBER_RE + '[i]',\n            relevance: 1\n          },\n          hljs.C_NUMBER_MODE\n        ]\n      },\n      { begin: /:=/ // relevance booster\n      },\n      {\n        className: 'function',\n        beginKeywords: 'func',\n        end: '\\\\s*(\\\\{|$)',\n        excludeEnd: true,\n        contains: [\n          hljs.TITLE_MODE,\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            endsParent: true,\n            keywords: KEYWORDS,\n            illegal: /[\"']/\n          }\n        ]\n      }\n    ]\n  };\n}\n\nexport { go as default };\n", "/*\n Language: GraphQL\n Author: John Foster (GH jf990), and others\n Description: GraphQL is a query language for APIs\n Category: web, common\n*/\n\n/** @type LanguageFn */\nfunction graphql(hljs) {\n  const regex = hljs.regex;\n  const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;\n  return {\n    name: \"GraphQL\",\n    aliases: [ \"gql\" ],\n    case_insensitive: true,\n    disableAutodetect: false,\n    keywords: {\n      keyword: [\n        \"query\",\n        \"mutation\",\n        \"subscription\",\n        \"type\",\n        \"input\",\n        \"schema\",\n        \"directive\",\n        \"interface\",\n        \"union\",\n        \"scalar\",\n        \"fragment\",\n        \"enum\",\n        \"on\"\n      ],\n      literal: [\n        \"true\",\n        \"false\",\n        \"null\"\n      ]\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      {\n        scope: \"punctuation\",\n        match: /[.]{3}/,\n        relevance: 0\n      },\n      {\n        scope: \"punctuation\",\n        begin: /[\\!\\(\\)\\:\\=\\[\\]\\{\\|\\}]{1}/,\n        relevance: 0\n      },\n      {\n        scope: \"variable\",\n        begin: /\\$/,\n        end: /\\W/,\n        excludeEnd: true,\n        relevance: 0\n      },\n      {\n        scope: \"meta\",\n        match: /@\\w+/,\n        excludeEnd: true\n      },\n      {\n        scope: \"symbol\",\n        begin: regex.concat(GQL_NAME, regex.lookahead(/\\s*:/)),\n        relevance: 0\n      }\n    ],\n    illegal: [\n      /[;<']/,\n      /BEGIN/\n    ]\n  };\n}\n\nexport { graphql as default };\n", "/*\nLanguage: TOML, also INI\nDescription: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.\nContributors: Guillaume Gomez <guillaume1.gomez@gmail.com>\nCategory: common, config\nWebsite: https://github.com/toml-lang/toml\n*/\n\nfunction ini(hljs) {\n  const regex = hljs.regex;\n  const NUMBERS = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      { begin: /([+-]+)?[\\d]+_[\\d_]+/ },\n      { begin: hljs.NUMBER_RE }\n    ]\n  };\n  const COMMENTS = hljs.COMMENT();\n  COMMENTS.variants = [\n    {\n      begin: /;/,\n      end: /$/\n    },\n    {\n      begin: /#/,\n      end: /$/\n    }\n  ];\n  const VARIABLES = {\n    className: 'variable',\n    variants: [\n      { begin: /\\$[\\w\\d\"][\\w\\d_]*/ },\n      { begin: /\\$\\{(.*?)\\}/ }\n    ]\n  };\n  const LITERALS = {\n    className: 'literal',\n    begin: /\\bon|off|true|false|yes|no\\b/\n  };\n  const STRINGS = {\n    className: \"string\",\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: \"'''\",\n        end: \"'''\",\n        relevance: 10\n      },\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"',\n        relevance: 10\n      },\n      {\n        begin: '\"',\n        end: '\"'\n      },\n      {\n        begin: \"'\",\n        end: \"'\"\n      }\n    ]\n  };\n  const ARRAY = {\n    begin: /\\[/,\n    end: /\\]/,\n    contains: [\n      COMMENTS,\n      LITERALS,\n      VARIABLES,\n      STRINGS,\n      NUMBERS,\n      'self'\n    ],\n    relevance: 0\n  };\n\n  const BARE_KEY = /[A-Za-z0-9_-]+/;\n  const QUOTED_KEY_DOUBLE_QUOTE = /\"(\\\\\"|[^\"])*\"/;\n  const QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;\n  const ANY_KEY = regex.either(\n    BARE_KEY, QUOTED_KEY_DOUBLE_QUOTE, QUOTED_KEY_SINGLE_QUOTE\n  );\n  const DOTTED_KEY = regex.concat(\n    ANY_KEY, '(\\\\s*\\\\.\\\\s*', ANY_KEY, ')*',\n    regex.lookahead(/\\s*=\\s*[^#\\s]/)\n  );\n\n  return {\n    name: 'TOML, also INI',\n    aliases: [ 'toml' ],\n    case_insensitive: true,\n    illegal: /\\S/,\n    contains: [\n      COMMENTS,\n      {\n        className: 'section',\n        begin: /\\[+/,\n        end: /\\]+/\n      },\n      {\n        begin: DOTTED_KEY,\n        className: 'attr',\n        starts: {\n          end: /$/,\n          contains: [\n            COMMENTS,\n            ARRAY,\n            LITERALS,\n            VARIABLES,\n            STRINGS,\n            NUMBERS\n          ]\n        }\n      }\n    ]\n  };\n}\n\nexport { ini as default };\n", "// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n  if (depth === -1) return \"\";\n\n  return re.replace(substitution, _ => {\n    return recurRegex(re, substitution, depth - 1);\n  });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n  const regex = hljs.regex;\n  const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n  const GENERIC_IDENT_RE = JAVA_IDENT_RE\n    + recurRegex('(?:<' + JAVA_IDENT_RE + '~~~(?:\\\\s*,\\\\s*' + JAVA_IDENT_RE + '~~~)*>)?', /~~~/g, 2);\n  const MAIN_KEYWORDS = [\n    'synchronized',\n    'abstract',\n    'private',\n    'var',\n    'static',\n    'if',\n    'const ',\n    'for',\n    'while',\n    'strictfp',\n    'finally',\n    'protected',\n    'import',\n    'native',\n    'final',\n    'void',\n    'enum',\n    'else',\n    'break',\n    'transient',\n    'catch',\n    'instanceof',\n    'volatile',\n    'case',\n    'assert',\n    'package',\n    'default',\n    'public',\n    'try',\n    'switch',\n    'continue',\n    'throws',\n    'protected',\n    'public',\n    'private',\n    'module',\n    'requires',\n    'exports',\n    'do',\n    'sealed',\n    'yield',\n    'permits'\n  ];\n\n  const BUILT_INS = [\n    'super',\n    'this'\n  ];\n\n  const LITERALS = [\n    'false',\n    'true',\n    'null'\n  ];\n\n  const TYPES = [\n    'char',\n    'boolean',\n    'long',\n    'float',\n    'int',\n    'byte',\n    'short',\n    'double'\n  ];\n\n  const KEYWORDS = {\n    keyword: MAIN_KEYWORDS,\n    literal: LITERALS,\n    type: TYPES,\n    built_in: BUILT_INS\n  };\n\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + JAVA_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [ \"self\" ] // allow nested () inside our annotation\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    relevance: 0,\n    contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n    endsParent: true\n  };\n\n  return {\n    name: 'Java',\n    aliases: [ 'jsp' ],\n    keywords: KEYWORDS,\n    illegal: /<\\/|#/,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              // eat up @'s in emails to prevent them to be recognized as doctags\n              begin: /\\w+@/,\n              relevance: 0\n            },\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      // relevance boost\n      {\n        begin: /import java\\.[a-z]+\\./,\n        keywords: \"import\",\n        relevance: 2\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        begin: /\"\"\"/,\n        end: /\"\"\"/,\n        className: \"string\",\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        match: [\n          /\\b(?:class|interface|enum|extends|implements|new)/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        // Exceptions for hyphenated keywords\n        match: /non-sealed/,\n        scope: \"keyword\"\n      },\n      {\n        begin: [\n          regex.concat(/(?!else)/, JAVA_IDENT_RE),\n          /\\s+/,\n          JAVA_IDENT_RE,\n          /\\s+/,\n          /=(?!=)/\n        ],\n        className: {\n          1: \"type\",\n          3: \"variable\",\n          5: \"operator\"\n        }\n      },\n      {\n        begin: [\n          /record/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        },\n        contains: [\n          PARAMS,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new throw return else',\n        relevance: 0\n      },\n      {\n        begin: [\n          '(?:' + GENERIC_IDENT_RE + '\\\\s+)',\n          hljs.UNDERSCORE_IDENT_RE,\n          /\\s*(?=\\()/\n        ],\n        className: { 2: \"title.function\" },\n        keywords: KEYWORDS,\n        contains: [\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              ANNOTATION,\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              NUMERIC,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      NUMERIC,\n      ANNOTATION\n    ]\n  };\n}\n\nexport { java as default };\n", "const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: 'html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: 'css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: 'gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ]),\n      IDENT_RE$1, regex.lookahead(/\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        className: 'attr',\n        begin: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\nexport { javascript as default };\n", "/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n  const ATTRIBUTE = {\n    className: 'attr',\n    begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n    relevance: 1.01\n  };\n  const PUNCTUATION = {\n    match: /[{}[\\],:]/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\"\n  ];\n  // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n  // - to use the very tight `illegal: \\S` rule later to flag any other character\n  // - as illegal indicating that despite looking like JSON we do not truly have\n  // - JSON and thus improve false-positively greatly since JSON will try and claim\n  // - all sorts of JSON looking stuff\n  const LITERALS_MODE = {\n    scope: \"literal\",\n    beginKeywords: LITERALS.join(\" \"),\n  };\n\n  return {\n    name: 'JSON',\n    keywords:{\n      literal: LITERALS,\n    },\n    contains: [\n      ATTRIBUTE,\n      PUNCTUATION,\n      hljs.QUOTE_STRING_MODE,\n      LITERALS_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ],\n    illegal: '\\\\S'\n  };\n}\n\nexport { json as default };\n", "// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\n Language: Kotlin\n Description: Kotlin is an OSS statically typed programming language that targets the JVM, Android, JavaScript and Native.\n Author: Sergey Mashkov <cy6erGn0m@gmail.com>\n Website: https://kotlinlang.org\n Category: common\n */\n\n\nfunction kotlin(hljs) {\n  const KEYWORDS = {\n    keyword:\n      'abstract as val var vararg get set class object open private protected public noinline '\n      + 'crossinline dynamic final enum if else do while for when throw try catch finally '\n      + 'import package is in fun override companion reified inline lateinit init '\n      + 'interface annotation data sealed internal infix operator out by constructor super '\n      + 'tailrec where const inner suspend typealias external expect actual',\n    built_in:\n      'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',\n    literal:\n      'true false null'\n  };\n  const KEYWORDS_WITH_LABEL = {\n    className: 'keyword',\n    begin: /\\b(break|continue|return|this)\\b/,\n    starts: { contains: [\n      {\n        className: 'symbol',\n        begin: /@\\w+/\n      }\n    ] }\n  };\n  const LABEL = {\n    className: 'symbol',\n    begin: hljs.UNDERSCORE_IDENT_RE + '@'\n  };\n\n  // for string templates\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [ hljs.C_NUMBER_MODE ]\n  };\n  const VARIABLE = {\n    className: 'variable',\n    begin: '\\\\$' + hljs.UNDERSCORE_IDENT_RE\n  };\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"(?=[^\"])',\n        contains: [\n          VARIABLE,\n          SUBST\n        ]\n      },\n      // Can't use built-in modes easily, as we want to use STRING in the meta\n      // context as 'meta-string' and there's no syntax to remove explicitly set\n      // classNames in built-in modes.\n      {\n        begin: '\\'',\n        end: '\\'',\n        illegal: /\\n/,\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        illegal: /\\n/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          VARIABLE,\n          SUBST\n        ]\n      }\n    ]\n  };\n  SUBST.contains.push(STRING);\n\n  const ANNOTATION_USE_SITE = {\n    className: 'meta',\n    begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'\n  };\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + hljs.UNDERSCORE_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          hljs.inherit(STRING, { className: 'string' }),\n          \"self\"\n        ]\n      }\n    ]\n  };\n\n  // https://kotlinlang.org/docs/reference/whatsnew11.html#underscores-in-numeric-literals\n  // According to the doc above, the number mode of kotlin is the same as java 8,\n  // so the code below is copied from java.js\n  const KOTLIN_NUMBER_MODE = NUMERIC;\n  const KOTLIN_NESTED_COMMENT = hljs.COMMENT(\n    '/\\\\*', '\\\\*/',\n    { contains: [ hljs.C_BLOCK_COMMENT_MODE ] }\n  );\n  const KOTLIN_PAREN_TYPE = { variants: [\n    {\n      className: 'type',\n      begin: hljs.UNDERSCORE_IDENT_RE\n    },\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      contains: [] // defined later\n    }\n  ] };\n  const KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;\n  KOTLIN_PAREN_TYPE2.variants[1].contains = [ KOTLIN_PAREN_TYPE ];\n  KOTLIN_PAREN_TYPE.variants[1].contains = [ KOTLIN_PAREN_TYPE2 ];\n\n  return {\n    name: 'Kotlin',\n    aliases: [\n      'kt',\n      'kts'\n    ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      KOTLIN_NESTED_COMMENT,\n      KEYWORDS_WITH_LABEL,\n      LABEL,\n      ANNOTATION_USE_SITE,\n      ANNOTATION,\n      {\n        className: 'function',\n        beginKeywords: 'fun',\n        end: '[(]|$',\n        returnBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        relevance: 5,\n        contains: [\n          {\n            begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n            returnBegin: true,\n            relevance: 0,\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n          },\n          {\n            className: 'type',\n            begin: /</,\n            end: />/,\n            keywords: 'reified',\n            relevance: 0\n          },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            endsParent: true,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              {\n                begin: /:/,\n                end: /[=,\\/]/,\n                endsWithParent: true,\n                contains: [\n                  KOTLIN_PAREN_TYPE,\n                  hljs.C_LINE_COMMENT_MODE,\n                  KOTLIN_NESTED_COMMENT\n                ],\n                relevance: 0\n              },\n              hljs.C_LINE_COMMENT_MODE,\n              KOTLIN_NESTED_COMMENT,\n              ANNOTATION_USE_SITE,\n              ANNOTATION,\n              STRING,\n              hljs.C_NUMBER_MODE\n            ]\n          },\n          KOTLIN_NESTED_COMMENT\n        ]\n      },\n      {\n        begin: [\n          /class|interface|trait/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        beginScope: {\n          3: \"title.class\"\n        },\n        keywords: 'class interface trait',\n        end: /[:\\{(]|$/,\n        excludeEnd: true,\n        illegal: 'extends implements',\n        contains: [\n          { beginKeywords: 'public protected internal private constructor' },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            className: 'type',\n            begin: /</,\n            end: />/,\n            excludeBegin: true,\n            excludeEnd: true,\n            relevance: 0\n          },\n          {\n            className: 'type',\n            begin: /[,:]\\s*/,\n            end: /[<\\(,){\\s]|$/,\n            excludeBegin: true,\n            returnEnd: true\n          },\n          ANNOTATION_USE_SITE,\n          ANNOTATION\n        ]\n      },\n      STRING,\n      {\n        className: 'meta',\n        begin: \"^#!/usr/bin/env\",\n        end: '$',\n        illegal: '\\n'\n      },\n      KOTLIN_NUMBER_MODE\n    ]\n  };\n}\n\nexport { kotlin as default };\n", "const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.NUMBER_RE + '(' +\n        '%|em|ex|ch|rem' +\n        '|vw|vh|vmin|vmax' +\n        '|cm|mm|in|pt|pc|px' +\n        '|deg|grad|rad|turn' +\n        '|s|ms' +\n        '|Hz|kHz' +\n        '|dpi|dpcm|dppx' +\n        ')?',\n      relevance: 0\n    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'all',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-variant',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'gap',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inline-size',\n  'isolation',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-break',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'row-gap',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n// some grammars use them all as a single group\nconst PSEUDO_SELECTORS = PSEUDO_CLASSES.concat(PSEUDO_ELEMENTS);\n\n/*\nLanguage: Less\nDescription: It's CSS, with just a little more.\nAuthor:   Max Mikhailov <seven.phases.max@gmail.com>\nWebsite: http://lesscss.org\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction less(hljs) {\n  const modes = MODES(hljs);\n  const PSEUDO_SELECTORS$1 = PSEUDO_SELECTORS;\n\n  const AT_MODIFIERS = \"and or not only\";\n  const IDENT_RE = '[\\\\w-]+'; // yes, Less identifiers may begin with a digit\n  const INTERP_IDENT_RE = '(' + IDENT_RE + '|@\\\\{' + IDENT_RE + '\\\\})';\n\n  /* Generic Modes */\n\n  const RULES = []; const VALUE_MODES = []; // forward def. for recursive modes\n\n  const STRING_MODE = function(c) {\n    return {\n    // Less strings are not multiline (also include '~' for more consistent coloring of \"escaped\" strings)\n      className: 'string',\n      begin: '~?' + c + '.*?' + c\n    };\n  };\n\n  const IDENT_MODE = function(name, begin, relevance) {\n    return {\n      className: name,\n      begin: begin,\n      relevance: relevance\n    };\n  };\n\n  const AT_KEYWORDS = {\n    $pattern: /[a-z-]+/,\n    keyword: AT_MODIFIERS,\n    attribute: MEDIA_FEATURES.join(\" \")\n  };\n\n  const PARENS_MODE = {\n    // used only to properly balance nested parens inside mixin call, def. arg list\n    begin: '\\\\(',\n    end: '\\\\)',\n    contains: VALUE_MODES,\n    keywords: AT_KEYWORDS,\n    relevance: 0\n  };\n\n  // generic Less highlighter (used almost everywhere except selectors):\n  VALUE_MODES.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING_MODE(\"'\"),\n    STRING_MODE('\"'),\n    modes.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(\n    {\n      begin: '(url|data-uri)\\\\(',\n      starts: {\n        className: 'string',\n        end: '[\\\\)\\\\n]',\n        excludeEnd: true\n      }\n    },\n    modes.HEXCOLOR,\n    PARENS_MODE,\n    IDENT_MODE('variable', '@@?' + IDENT_RE, 10),\n    IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'),\n    IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string\n    { // @media features (it\u2019s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):\n      className: 'attribute',\n      begin: IDENT_RE + '\\\\s*:',\n      end: ':',\n      returnBegin: true,\n      excludeEnd: true\n    },\n    modes.IMPORTANT,\n    { beginKeywords: 'and not' },\n    modes.FUNCTION_DISPATCH\n  );\n\n  const VALUE_WITH_RULESETS = VALUE_MODES.concat({\n    begin: /\\{/,\n    end: /\\}/,\n    contains: RULES\n  });\n\n  const MIXIN_GUARD_MODE = {\n    beginKeywords: 'when',\n    endsWithParent: true,\n    contains: [ { beginKeywords: 'and not' } ].concat(VALUE_MODES) // using this form to override VALUE\u2019s 'function' match\n  };\n\n  /* Rule-Level Modes */\n\n  const RULE_MODE = {\n    begin: INTERP_IDENT_RE + '\\\\s*:',\n    returnBegin: true,\n    end: /[;}]/,\n    relevance: 0,\n    contains: [\n      { begin: /-(webkit|moz|ms|o)-/ },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b',\n        end: /(?=:)/,\n        starts: {\n          endsWithParent: true,\n          illegal: '[<=$]',\n          relevance: 0,\n          contains: VALUE_MODES\n        }\n      }\n    ]\n  };\n\n  const AT_RULE_MODE = {\n    className: 'keyword',\n    begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b',\n    starts: {\n      end: '[;{}]',\n      keywords: AT_KEYWORDS,\n      returnEnd: true,\n      contains: VALUE_MODES,\n      relevance: 0\n    }\n  };\n\n  // variable definitions and calls\n  const VAR_RULE_MODE = {\n    className: 'variable',\n    variants: [\n      // using more strict pattern for higher relevance to increase chances of Less detection.\n      // this is *the only* Less specific statement used in most of the sources, so...\n      // (we\u2019ll still often loose to the css-parser unless there's '//' comment,\n      // simply because 1 variable just can't beat 99 properties :)\n      {\n        begin: '@' + IDENT_RE + '\\\\s*:',\n        relevance: 15\n      },\n      { begin: '@' + IDENT_RE }\n    ],\n    starts: {\n      end: '[;}]',\n      returnEnd: true,\n      contains: VALUE_WITH_RULESETS\n    }\n  };\n\n  const SELECTOR_MODE = {\n    // first parse unambiguous selectors (i.e. those not starting with tag)\n    // then fall into the scary lookahead-discriminator variant.\n    // this mode also handles mixin definitions and calls\n    variants: [\n      {\n        begin: '[\\\\.#:&\\\\[>]',\n        end: '[;{}]' // mixin calls end with ';'\n      },\n      {\n        begin: INTERP_IDENT_RE,\n        end: /\\{/\n      }\n    ],\n    returnBegin: true,\n    returnEnd: true,\n    illegal: '[<=\\'$\"]',\n    relevance: 0,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      MIXIN_GUARD_MODE,\n      IDENT_MODE('keyword', 'all\\\\b'),\n      IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'), // otherwise it\u2019s identified as tag\n      \n      {\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n        className: 'selector-tag'\n      },\n      modes.CSS_NUMBER_MODE,\n      IDENT_MODE('selector-tag', INTERP_IDENT_RE, 0),\n      IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE),\n      IDENT_MODE('selector-class', '\\\\.' + INTERP_IDENT_RE, 0),\n      IDENT_MODE('selector-tag', '&', 0),\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        begin: ':(' + PSEUDO_CLASSES.join('|') + ')'\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')'\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        relevance: 0,\n        contains: VALUE_WITH_RULESETS\n      }, // argument list of parametric mixins\n      { begin: '!important' }, // eat !important after mixin call or it will be colored as tag\n      modes.FUNCTION_DISPATCH\n    ]\n  };\n\n  const PSEUDO_SELECTOR_MODE = {\n    begin: IDENT_RE + ':(:)?' + `(${PSEUDO_SELECTORS$1.join('|')})`,\n    returnBegin: true,\n    contains: [ SELECTOR_MODE ]\n  };\n\n  RULES.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    AT_RULE_MODE,\n    VAR_RULE_MODE,\n    PSEUDO_SELECTOR_MODE,\n    RULE_MODE,\n    SELECTOR_MODE,\n    MIXIN_GUARD_MODE,\n    modes.FUNCTION_DISPATCH\n  );\n\n  return {\n    name: 'Less',\n    case_insensitive: true,\n    illegal: '[=>\\'/<($\"]',\n    contains: RULES\n  };\n}\n\nexport { less as default };\n", "/*\nLanguage: Lua\nDescription: Lua is a powerful, efficient, lightweight, embeddable scripting language.\nAuthor: Andrew Fedorov <dmmdrs@mail.ru>\nCategory: common, scripting\nWebsite: https://www.lua.org\n*/\n\nfunction lua(hljs) {\n  const OPENING_LONG_BRACKET = '\\\\[=*\\\\[';\n  const CLOSING_LONG_BRACKET = '\\\\]=*\\\\]';\n  const LONG_BRACKETS = {\n    begin: OPENING_LONG_BRACKET,\n    end: CLOSING_LONG_BRACKET,\n    contains: [ 'self' ]\n  };\n  const COMMENTS = [\n    hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'),\n    hljs.COMMENT(\n      '--' + OPENING_LONG_BRACKET,\n      CLOSING_LONG_BRACKET,\n      {\n        contains: [ LONG_BRACKETS ],\n        relevance: 10\n      }\n    )\n  ];\n  return {\n    name: 'Lua',\n    keywords: {\n      $pattern: hljs.UNDERSCORE_IDENT_RE,\n      literal: \"true false nil\",\n      keyword: \"and break do else elseif end for goto if in local not or repeat return then until while\",\n      built_in:\n        // Metatags and globals:\n        '_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len '\n        + '__gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert '\n        // Standard methods and properties:\n        + 'collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring '\n        + 'module next pairs pcall print rawequal rawget rawset require select setfenv '\n        + 'setmetatable tonumber tostring type unpack xpcall arg self '\n        // Library methods and properties (one line per library):\n        + 'coroutine resume yield status wrap create running debug getupvalue '\n        + 'debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv '\n        + 'io lines write close flush open output type read stderr stdin input stdout popen tmpfile '\n        + 'math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan '\n        + 'os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall '\n        + 'string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower '\n        + 'table setn insert getn foreachi maxn foreach concat sort remove'\n    },\n    contains: COMMENTS.concat([\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: '\\\\)',\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*' }),\n          {\n            className: 'params',\n            begin: '\\\\(',\n            endsWithParent: true,\n            contains: COMMENTS\n          }\n        ].concat(COMMENTS)\n      },\n      hljs.C_NUMBER_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: OPENING_LONG_BRACKET,\n        end: CLOSING_LONG_BRACKET,\n        contains: [ LONG_BRACKETS ],\n        relevance: 5\n      }\n    ])\n  };\n}\n\nexport { lua as default };\n", "/*\nLanguage: Makefile\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nContributors: Jo\u00EBl Porquet <joel@porquet.org>\nWebsite: https://www.gnu.org/software/make/manual/html_node/Introduction.html\nCategory: common\n*/\n\nfunction makefile(hljs) {\n  /* Variables: simple (eg $(var)) and special (eg $@) */\n  const VARIABLE = {\n    className: 'variable',\n    variants: [\n      {\n        begin: '\\\\$\\\\(' + hljs.UNDERSCORE_IDENT_RE + '\\\\)',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      { begin: /\\$[@%<?\\^\\+\\*]/ }\n    ]\n  };\n  /* Quoted string with variables inside */\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VARIABLE\n    ]\n  };\n  /* Function: $(func arg,...) */\n  const FUNC = {\n    className: 'variable',\n    begin: /\\$\\([\\w-]+\\s/,\n    end: /\\)/,\n    keywords: { built_in:\n        'subst patsubst strip findstring filter filter-out sort '\n        + 'word wordlist firstword lastword dir notdir suffix basename '\n        + 'addsuffix addprefix join wildcard realpath abspath error warning '\n        + 'shell origin flavor foreach if or and call eval file value' },\n    contains: [ VARIABLE ]\n  };\n  /* Variable assignment */\n  const ASSIGNMENT = { begin: '^' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*(?=[:+?]?=)' };\n  /* Meta targets (.PHONY) */\n  const META = {\n    className: 'meta',\n    begin: /^\\.PHONY:/,\n    end: /$/,\n    keywords: {\n      $pattern: /[\\.\\w]+/,\n      keyword: '.PHONY'\n    }\n  };\n  /* Targets */\n  const TARGET = {\n    className: 'section',\n    begin: /^[^\\s]+:/,\n    end: /$/,\n    contains: [ VARIABLE ]\n  };\n  return {\n    name: 'Makefile',\n    aliases: [\n      'mk',\n      'mak',\n      'make',\n    ],\n    keywords: {\n      $pattern: /[\\w-]+/,\n      keyword: 'define endef undefine ifdef ifndef ifeq ifneq else endif '\n      + 'include -include sinclude override export unexport private vpath'\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      VARIABLE,\n      QUOTE_STRING,\n      FUNC,\n      ASSIGNMENT,\n      META,\n      TARGET\n    ]\n  };\n}\n\nexport { makefile as default };\n", "/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n  const regex = hljs.regex;\n  const INLINE_HTML = {\n    begin: /<\\/?[A-Za-z_]/,\n    end: '>',\n    subLanguage: 'xml',\n    relevance: 0\n  };\n  const HORIZONTAL_RULE = {\n    begin: '^[-\\\\*]{3,}',\n    end: '$'\n  };\n  const CODE = {\n    className: 'code',\n    variants: [\n      // TODO: fix to allow these to work with sublanguage also\n      { begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*' },\n      { begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*' },\n      // needed to allow markdown as a sublanguage to work\n      {\n        begin: '```',\n        end: '```+[ ]*$'\n      },\n      {\n        begin: '~~~',\n        end: '~~~+[ ]*$'\n      },\n      { begin: '`.+?`' },\n      {\n        begin: '(?=^( {4}|\\\\t))',\n        // use contains to gobble up multiple lines to allow the block to be whatever size\n        // but only have a single open/close tag vs one per line\n        contains: [\n          {\n            begin: '^( {4}|\\\\t)',\n            end: '(\\\\n)$'\n          }\n        ],\n        relevance: 0\n      }\n    ]\n  };\n  const LIST = {\n    className: 'bullet',\n    begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n    end: '\\\\s+',\n    excludeEnd: true\n  };\n  const LINK_REFERENCE = {\n    begin: /^\\[[^\\n]+\\]:/,\n    returnBegin: true,\n    contains: [\n      {\n        className: 'symbol',\n        begin: /\\[/,\n        end: /\\]/,\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'link',\n        begin: /:\\s*/,\n        end: /$/,\n        excludeBegin: true\n      }\n    ]\n  };\n  const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n  const LINK = {\n    variants: [\n      // too much like nested array access in so many languages\n      // to have any real relevance\n      {\n        begin: /\\[.+?\\]\\[.*?\\]/,\n        relevance: 0\n      },\n      // popular internet URLs\n      {\n        begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n        relevance: 2\n      },\n      {\n        begin: regex.concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n        relevance: 2\n      },\n      // relative urls\n      {\n        begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n        relevance: 1\n      },\n      // whatever else, lower relevance (might not be a link at all)\n      {\n        begin: /\\[.*?\\]\\(.*?\\)/,\n        relevance: 0\n      }\n    ],\n    returnBegin: true,\n    contains: [\n      {\n        // empty strings for alt or link text\n        match: /\\[(?=\\])/ },\n      {\n        className: 'string',\n        relevance: 0,\n        begin: '\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        returnEnd: true\n      },\n      {\n        className: 'link',\n        relevance: 0,\n        begin: '\\\\]\\\\(',\n        end: '\\\\)',\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'symbol',\n        relevance: 0,\n        begin: '\\\\]\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        excludeEnd: true\n      }\n    ]\n  };\n  const BOLD = {\n    className: 'strong',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /_{2}(?!\\s)/,\n        end: /_{2}/\n      },\n      {\n        begin: /\\*{2}(?!\\s)/,\n        end: /\\*{2}/\n      }\n    ]\n  };\n  const ITALIC = {\n    className: 'emphasis',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /\\*(?![*\\s])/,\n        end: /\\*/\n      },\n      {\n        begin: /_(?![_\\s])/,\n        end: /_/,\n        relevance: 0\n      }\n    ]\n  };\n\n  // 3 level deep nesting is not allowed because it would create confusion\n  // in cases like `***testing***` because where we don't know if the last\n  // `***` is starting a new bold/italic or finishing the last one\n  const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\n  const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\n  BOLD.contains.push(ITALIC_WITHOUT_BOLD);\n  ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\n\n  let CONTAINABLE = [\n    INLINE_HTML,\n    LINK\n  ];\n\n  [\n    BOLD,\n    ITALIC,\n    BOLD_WITHOUT_ITALIC,\n    ITALIC_WITHOUT_BOLD\n  ].forEach(m => {\n    m.contains = m.contains.concat(CONTAINABLE);\n  });\n\n  CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n  const HEADER = {\n    className: 'section',\n    variants: [\n      {\n        begin: '^#{1,6}',\n        end: '$',\n        contains: CONTAINABLE\n      },\n      {\n        begin: '(?=^.+?\\\\n[=-]{2,}$)',\n        contains: [\n          { begin: '^[=-]*$' },\n          {\n            begin: '^',\n            end: \"\\\\n\",\n            contains: CONTAINABLE\n          }\n        ]\n      }\n    ]\n  };\n\n  const BLOCKQUOTE = {\n    className: 'quote',\n    begin: '^>\\\\s+',\n    contains: CONTAINABLE,\n    end: '$'\n  };\n\n  return {\n    name: 'Markdown',\n    aliases: [\n      'md',\n      'mkdown',\n      'mkd'\n    ],\n    contains: [\n      HEADER,\n      INLINE_HTML,\n      LIST,\n      BOLD,\n      ITALIC,\n      BLOCKQUOTE,\n      CODE,\n      HORIZONTAL_RULE,\n      LINK,\n      LINK_REFERENCE\n    ]\n  };\n}\n\nexport { markdown as default };\n", "/*\nLanguage: Objective-C\nAuthor: Valerii Hiora <valerii.hiora@gmail.com>\nContributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>, Matt Diephouse <matt@diephouse.com>, Andrew Farmer <ahfarmer@gmail.com>, Minh Nguy\u1EC5n <mxn@1ec5.org>\nWebsite: https://developer.apple.com/documentation/objectivec\nCategory: common\n*/\n\nfunction objectivec(hljs) {\n  const API_CLASS = {\n    className: 'built_in',\n    begin: '\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\w+'\n  };\n  const IDENTIFIER_RE = /[a-zA-Z@][a-zA-Z0-9_]*/;\n  const TYPES = [\n    \"int\",\n    \"float\",\n    \"char\",\n    \"unsigned\",\n    \"signed\",\n    \"short\",\n    \"long\",\n    \"double\",\n    \"wchar_t\",\n    \"unichar\",\n    \"void\",\n    \"bool\",\n    \"BOOL\",\n    \"id|0\",\n    \"_Bool\"\n  ];\n  const KWS = [\n    \"while\",\n    \"export\",\n    \"sizeof\",\n    \"typedef\",\n    \"const\",\n    \"struct\",\n    \"for\",\n    \"union\",\n    \"volatile\",\n    \"static\",\n    \"mutable\",\n    \"if\",\n    \"do\",\n    \"return\",\n    \"goto\",\n    \"enum\",\n    \"else\",\n    \"break\",\n    \"extern\",\n    \"asm\",\n    \"case\",\n    \"default\",\n    \"register\",\n    \"explicit\",\n    \"typename\",\n    \"switch\",\n    \"continue\",\n    \"inline\",\n    \"readonly\",\n    \"assign\",\n    \"readwrite\",\n    \"self\",\n    \"@synchronized\",\n    \"id\",\n    \"typeof\",\n    \"nonatomic\",\n    \"IBOutlet\",\n    \"IBAction\",\n    \"strong\",\n    \"weak\",\n    \"copy\",\n    \"in\",\n    \"out\",\n    \"inout\",\n    \"bycopy\",\n    \"byref\",\n    \"oneway\",\n    \"__strong\",\n    \"__weak\",\n    \"__block\",\n    \"__autoreleasing\",\n    \"@private\",\n    \"@protected\",\n    \"@public\",\n    \"@try\",\n    \"@property\",\n    \"@end\",\n    \"@throw\",\n    \"@catch\",\n    \"@finally\",\n    \"@autoreleasepool\",\n    \"@synthesize\",\n    \"@dynamic\",\n    \"@selector\",\n    \"@optional\",\n    \"@required\",\n    \"@encode\",\n    \"@package\",\n    \"@import\",\n    \"@defs\",\n    \"@compatibility_alias\",\n    \"__bridge\",\n    \"__bridge_transfer\",\n    \"__bridge_retained\",\n    \"__bridge_retain\",\n    \"__covariant\",\n    \"__contravariant\",\n    \"__kindof\",\n    \"_Nonnull\",\n    \"_Nullable\",\n    \"_Null_unspecified\",\n    \"__FUNCTION__\",\n    \"__PRETTY_FUNCTION__\",\n    \"__attribute__\",\n    \"getter\",\n    \"setter\",\n    \"retain\",\n    \"unsafe_unretained\",\n    \"nonnull\",\n    \"nullable\",\n    \"null_unspecified\",\n    \"null_resettable\",\n    \"class\",\n    \"instancetype\",\n    \"NS_DESIGNATED_INITIALIZER\",\n    \"NS_UNAVAILABLE\",\n    \"NS_REQUIRES_SUPER\",\n    \"NS_RETURNS_INNER_POINTER\",\n    \"NS_INLINE\",\n    \"NS_AVAILABLE\",\n    \"NS_DEPRECATED\",\n    \"NS_ENUM\",\n    \"NS_OPTIONS\",\n    \"NS_SWIFT_UNAVAILABLE\",\n    \"NS_ASSUME_NONNULL_BEGIN\",\n    \"NS_ASSUME_NONNULL_END\",\n    \"NS_REFINED_FOR_SWIFT\",\n    \"NS_SWIFT_NAME\",\n    \"NS_SWIFT_NOTHROW\",\n    \"NS_DURING\",\n    \"NS_HANDLER\",\n    \"NS_ENDHANDLER\",\n    \"NS_VALUERETURN\",\n    \"NS_VOIDRETURN\"\n  ];\n  const LITERALS = [\n    \"false\",\n    \"true\",\n    \"FALSE\",\n    \"TRUE\",\n    \"nil\",\n    \"YES\",\n    \"NO\",\n    \"NULL\"\n  ];\n  const BUILT_INS = [\n    \"dispatch_once_t\",\n    \"dispatch_queue_t\",\n    \"dispatch_sync\",\n    \"dispatch_async\",\n    \"dispatch_once\"\n  ];\n  const KEYWORDS = {\n    \"variable.language\": [\n      \"this\",\n      \"super\"\n    ],\n    $pattern: IDENTIFIER_RE,\n    keyword: KWS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    type: TYPES\n  };\n  const CLASS_KEYWORDS = {\n    $pattern: IDENTIFIER_RE,\n    keyword: [\n      \"@interface\",\n      \"@class\",\n      \"@protocol\",\n      \"@implementation\"\n    ]\n  };\n  return {\n    name: 'Objective-C',\n    aliases: [\n      'mm',\n      'objc',\n      'obj-c',\n      'obj-c++',\n      'objective-c++'\n    ],\n    keywords: KEYWORDS,\n    illegal: '</',\n    contains: [\n      API_CLASS,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n      {\n        className: 'string',\n        variants: [\n          {\n            begin: '@\"',\n            end: '\"',\n            illegal: '\\\\n',\n            contains: [ hljs.BACKSLASH_ESCAPE ]\n          }\n        ]\n      },\n      {\n        className: 'meta',\n        begin: /#\\s*[a-z]+\\b/,\n        end: /$/,\n        keywords: { keyword:\n            'if else elif endif define undef warning error line '\n            + 'pragma ifdef ifndef include' },\n        contains: [\n          {\n            begin: /\\\\\\n/,\n            relevance: 0\n          },\n          hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }),\n          {\n            className: 'string',\n            begin: /<.*?>/,\n            end: /$/,\n            illegal: '\\\\n'\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        className: 'class',\n        begin: '(' + CLASS_KEYWORDS.keyword.join('|') + ')\\\\b',\n        end: /(\\{|$)/,\n        excludeEnd: true,\n        keywords: CLASS_KEYWORDS,\n        contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n      },\n      {\n        begin: '\\\\.' + hljs.UNDERSCORE_IDENT_RE,\n        relevance: 0\n      }\n    ]\n  };\n}\n\nexport { objectivec as default };\n", "/*\nLanguage: Perl\nAuthor: Peter Leonov <gojpeg@yandex.ru>\nWebsite: https://www.perl.org\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction perl(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = [\n    'abs',\n    'accept',\n    'alarm',\n    'and',\n    'atan2',\n    'bind',\n    'binmode',\n    'bless',\n    'break',\n    'caller',\n    'chdir',\n    'chmod',\n    'chomp',\n    'chop',\n    'chown',\n    'chr',\n    'chroot',\n    'close',\n    'closedir',\n    'connect',\n    'continue',\n    'cos',\n    'crypt',\n    'dbmclose',\n    'dbmopen',\n    'defined',\n    'delete',\n    'die',\n    'do',\n    'dump',\n    'each',\n    'else',\n    'elsif',\n    'endgrent',\n    'endhostent',\n    'endnetent',\n    'endprotoent',\n    'endpwent',\n    'endservent',\n    'eof',\n    'eval',\n    'exec',\n    'exists',\n    'exit',\n    'exp',\n    'fcntl',\n    'fileno',\n    'flock',\n    'for',\n    'foreach',\n    'fork',\n    'format',\n    'formline',\n    'getc',\n    'getgrent',\n    'getgrgid',\n    'getgrnam',\n    'gethostbyaddr',\n    'gethostbyname',\n    'gethostent',\n    'getlogin',\n    'getnetbyaddr',\n    'getnetbyname',\n    'getnetent',\n    'getpeername',\n    'getpgrp',\n    'getpriority',\n    'getprotobyname',\n    'getprotobynumber',\n    'getprotoent',\n    'getpwent',\n    'getpwnam',\n    'getpwuid',\n    'getservbyname',\n    'getservbyport',\n    'getservent',\n    'getsockname',\n    'getsockopt',\n    'given',\n    'glob',\n    'gmtime',\n    'goto',\n    'grep',\n    'gt',\n    'hex',\n    'if',\n    'index',\n    'int',\n    'ioctl',\n    'join',\n    'keys',\n    'kill',\n    'last',\n    'lc',\n    'lcfirst',\n    'length',\n    'link',\n    'listen',\n    'local',\n    'localtime',\n    'log',\n    'lstat',\n    'lt',\n    'ma',\n    'map',\n    'mkdir',\n    'msgctl',\n    'msgget',\n    'msgrcv',\n    'msgsnd',\n    'my',\n    'ne',\n    'next',\n    'no',\n    'not',\n    'oct',\n    'open',\n    'opendir',\n    'or',\n    'ord',\n    'our',\n    'pack',\n    'package',\n    'pipe',\n    'pop',\n    'pos',\n    'print',\n    'printf',\n    'prototype',\n    'push',\n    'q|0',\n    'qq',\n    'quotemeta',\n    'qw',\n    'qx',\n    'rand',\n    'read',\n    'readdir',\n    'readline',\n    'readlink',\n    'readpipe',\n    'recv',\n    'redo',\n    'ref',\n    'rename',\n    'require',\n    'reset',\n    'return',\n    'reverse',\n    'rewinddir',\n    'rindex',\n    'rmdir',\n    'say',\n    'scalar',\n    'seek',\n    'seekdir',\n    'select',\n    'semctl',\n    'semget',\n    'semop',\n    'send',\n    'setgrent',\n    'sethostent',\n    'setnetent',\n    'setpgrp',\n    'setpriority',\n    'setprotoent',\n    'setpwent',\n    'setservent',\n    'setsockopt',\n    'shift',\n    'shmctl',\n    'shmget',\n    'shmread',\n    'shmwrite',\n    'shutdown',\n    'sin',\n    'sleep',\n    'socket',\n    'socketpair',\n    'sort',\n    'splice',\n    'split',\n    'sprintf',\n    'sqrt',\n    'srand',\n    'stat',\n    'state',\n    'study',\n    'sub',\n    'substr',\n    'symlink',\n    'syscall',\n    'sysopen',\n    'sysread',\n    'sysseek',\n    'system',\n    'syswrite',\n    'tell',\n    'telldir',\n    'tie',\n    'tied',\n    'time',\n    'times',\n    'tr',\n    'truncate',\n    'uc',\n    'ucfirst',\n    'umask',\n    'undef',\n    'unless',\n    'unlink',\n    'unpack',\n    'unshift',\n    'untie',\n    'until',\n    'use',\n    'utime',\n    'values',\n    'vec',\n    'wait',\n    'waitpid',\n    'wantarray',\n    'warn',\n    'when',\n    'while',\n    'write',\n    'x|0',\n    'xor',\n    'y|0'\n  ];\n\n  // https://perldoc.perl.org/perlre#Modifiers\n  const REGEX_MODIFIERS = /[dualxmsipngr]{0,12}/; // aa and xx are valid, making max length 12\n  const PERL_KEYWORDS = {\n    $pattern: /[\\w.]+/,\n    keyword: KEYWORDS.join(\" \")\n  };\n  const SUBST = {\n    className: 'subst',\n    begin: '[$@]\\\\{',\n    end: '\\\\}',\n    keywords: PERL_KEYWORDS\n  };\n  const METHOD = {\n    begin: /->\\{/,\n    end: /\\}/\n    // contains defined later\n  };\n  const VAR = { variants: [\n    { begin: /\\$\\d/ },\n    { begin: regex.concat(\n      /[$%@](\\^\\w\\b|#\\w+(::\\w+)*|\\{\\w+\\}|\\w+(::\\w*)*)/,\n      // negative look-ahead tries to avoid matching patterns that are not\n      // Perl at all like $ident$, @ident@, etc.\n      `(?![A-Za-z])(?![@$%])`\n    ) },\n    {\n      begin: /[$%@][^\\s\\w{]/,\n      relevance: 0\n    }\n  ] };\n  const STRING_CONTAINS = [\n    hljs.BACKSLASH_ESCAPE,\n    SUBST,\n    VAR\n  ];\n  const REGEX_DELIMS = [\n    /!/,\n    /\\//,\n    /\\|/,\n    /\\?/,\n    /'/,\n    /\"/, // valid but infrequent and weird\n    /#/ // valid but infrequent and weird\n  ];\n  /**\n   * @param {string|RegExp} prefix\n   * @param {string|RegExp} open\n   * @param {string|RegExp} close\n   */\n  const PAIRED_DOUBLE_RE = (prefix, open, close = '\\\\1') => {\n    const middle = (close === '\\\\1')\n      ? close\n      : regex.concat(close, open);\n    return regex.concat(\n      regex.concat(\"(?:\", prefix, \")\"),\n      open,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      middle,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      close,\n      REGEX_MODIFIERS\n    );\n  };\n  /**\n   * @param {string|RegExp} prefix\n   * @param {string|RegExp} open\n   * @param {string|RegExp} close\n   */\n  const PAIRED_RE = (prefix, open, close) => {\n    return regex.concat(\n      regex.concat(\"(?:\", prefix, \")\"),\n      open,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      close,\n      REGEX_MODIFIERS\n    );\n  };\n  const PERL_DEFAULT_CONTAINS = [\n    VAR,\n    hljs.HASH_COMMENT_MODE,\n    hljs.COMMENT(\n      /^=\\w/,\n      /=cut/,\n      { endsWithParent: true }\n    ),\n    METHOD,\n    {\n      className: 'string',\n      contains: STRING_CONTAINS,\n      variants: [\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\(',\n          end: '\\\\)',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\[',\n          end: '\\\\]',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\{',\n          end: '\\\\}',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\|',\n          end: '\\\\|',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*<',\n          end: '>',\n          relevance: 5\n        },\n        {\n          begin: 'qw\\\\s+q',\n          end: 'q',\n          relevance: 5\n        },\n        {\n          begin: '\\'',\n          end: '\\'',\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: '\"',\n          end: '\"'\n        },\n        {\n          begin: '`',\n          end: '`',\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: /\\{\\w+\\}/,\n          relevance: 0\n        },\n        {\n          begin: '-?\\\\w+\\\\s*=>',\n          relevance: 0\n        }\n      ]\n    },\n    {\n      className: 'number',\n      begin: '(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b',\n      relevance: 0\n    },\n    { // regexp container\n      begin: '(\\\\/\\\\/|' + hljs.RE_STARTERS_RE + '|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*',\n      keywords: 'split return print reverse grep',\n      relevance: 0,\n      contains: [\n        hljs.HASH_COMMENT_MODE,\n        {\n          className: 'regexp',\n          variants: [\n            // allow matching common delimiters\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", regex.either(...REGEX_DELIMS, { capture: true })) },\n            // and then paired delmis\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\(\", \"\\\\)\") },\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\[\", \"\\\\]\") },\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\{\", \"\\\\}\") }\n          ],\n          relevance: 2\n        },\n        {\n          className: 'regexp',\n          variants: [\n            {\n              // could be a comment in many languages so do not count\n              // as relevant\n              begin: /(m|qr)\\/\\//,\n              relevance: 0\n            },\n            // prefix is optional with /regex/\n            { begin: PAIRED_RE(\"(?:m|qr)?\", /\\//, /\\//) },\n            // allow matching common delimiters\n            { begin: PAIRED_RE(\"m|qr\", regex.either(...REGEX_DELIMS, { capture: true }), /\\1/) },\n            // allow common paired delmins\n            { begin: PAIRED_RE(\"m|qr\", /\\(/, /\\)/) },\n            { begin: PAIRED_RE(\"m|qr\", /\\[/, /\\]/) },\n            { begin: PAIRED_RE(\"m|qr\", /\\{/, /\\}/) }\n          ]\n        }\n      ]\n    },\n    {\n      className: 'function',\n      beginKeywords: 'sub',\n      end: '(\\\\s*\\\\(.*?\\\\))?[;{]',\n      excludeEnd: true,\n      relevance: 5,\n      contains: [ hljs.TITLE_MODE ]\n    },\n    {\n      begin: '-\\\\w\\\\b',\n      relevance: 0\n    },\n    {\n      begin: \"^__DATA__$\",\n      end: \"^__END__$\",\n      subLanguage: 'mojolicious',\n      contains: [\n        {\n          begin: \"^@@.*\",\n          end: \"$\",\n          className: \"comment\"\n        }\n      ]\n    }\n  ];\n  SUBST.contains = PERL_DEFAULT_CONTAINS;\n  METHOD.contains = PERL_DEFAULT_CONTAINS;\n\n  return {\n    name: 'Perl',\n    aliases: [\n      'pl',\n      'pm'\n    ],\n    keywords: PERL_KEYWORDS,\n    contains: PERL_DEFAULT_CONTAINS\n  };\n}\n\nexport { perl as default };\n", "/*\nLanguage: PHP\nAuthor: Victor Karamzin <Victor.Karamzin@enterra-inc.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: https://www.php.net\nCategory: common\n*/\n\n/**\n * @param {HLJSApi} hljs\n * @returns {LanguageDetail}\n * */\nfunction php(hljs) {\n  const regex = hljs.regex;\n  // negative look-ahead tries to avoid matching patterns that are not\n  // Perl at all like $ident$, @ident@, etc.\n  const NOT_PERL_ETC = /(?![A-Za-z0-9])(?![$])/;\n  const IDENT_RE = regex.concat(\n    /[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/,\n    NOT_PERL_ETC);\n  // Will not detect camelCase classes\n  const PASCAL_CASE_CLASS_NAME_RE = regex.concat(\n    /(\\\\?[A-Z][a-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}/,\n    NOT_PERL_ETC);\n  const VARIABLE = {\n    scope: 'variable',\n    match: '\\\\$+' + IDENT_RE,\n  };\n  const PREPROCESSOR = {\n    scope: 'meta',\n    variants: [\n      { begin: /<\\?php/, relevance: 10 }, // boost for obvious PHP\n      { begin: /<\\?=/ },\n      // less relevant per PSR-1 which says not to use short-tags\n      { begin: /<\\?/, relevance: 0.1 },\n      { begin: /\\?>/ } // end php tag\n    ]\n  };\n  const SUBST = {\n    scope: 'subst',\n    variants: [\n      { begin: /\\$\\w+/ },\n      {\n        begin: /\\{\\$/,\n        end: /\\}/\n      }\n    ]\n  };\n  const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null, });\n  const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n    illegal: null,\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n  });\n\n  const HEREDOC = {\n    begin: /<<<[ \\t]*(?:(\\w+)|\"(\\w+)\")\\n/,\n    end: /[ \\t]*(\\w+)\\b/,\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n    'on:begin': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; },\n    'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); },\n  };\n\n  const NOWDOC = hljs.END_SAME_AS_BEGIN({\n    begin: /<<<[ \\t]*'(\\w+)'\\n/,\n    end: /[ \\t]*(\\w+)\\b/,\n  });\n  // list of valid whitespaces because non-breaking space might be part of a IDENT_RE\n  const WHITESPACE = '[ \\t\\n]';\n  const STRING = {\n    scope: 'string',\n    variants: [\n      DOUBLE_QUOTED,\n      SINGLE_QUOTED,\n      HEREDOC,\n      NOWDOC\n    ]\n  };\n  const NUMBER = {\n    scope: 'number',\n    variants: [\n      { begin: `\\\\b0[bB][01]+(?:_[01]+)*\\\\b` }, // Binary w/ underscore support\n      { begin: `\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\b` }, // Octals w/ underscore support\n      { begin: `\\\\b0[xX][\\\\da-fA-F]+(?:_[\\\\da-fA-F]+)*\\\\b` }, // Hex w/ underscore support\n      // Decimals w/ underscore support, with optional fragments and scientific exponent (e) suffix.\n      { begin: `(?:\\\\b\\\\d+(?:_\\\\d+)*(\\\\.(?:\\\\d+(?:_\\\\d+)*))?|\\\\B\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?` }\n    ],\n    relevance: 0\n  };\n  const LITERALS = [\n    \"false\",\n    \"null\",\n    \"true\"\n  ];\n  const KWS = [\n    // Magic constants:\n    // <https://www.php.net/manual/en/language.constants.predefined.php>\n    \"__CLASS__\",\n    \"__DIR__\",\n    \"__FILE__\",\n    \"__FUNCTION__\",\n    \"__COMPILER_HALT_OFFSET__\",\n    \"__LINE__\",\n    \"__METHOD__\",\n    \"__NAMESPACE__\",\n    \"__TRAIT__\",\n    // Function that look like language construct or language construct that look like function:\n    // List of keywords that may not require parenthesis\n    \"die\",\n    \"echo\",\n    \"exit\",\n    \"include\",\n    \"include_once\",\n    \"print\",\n    \"require\",\n    \"require_once\",\n    // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table\n    // 'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class ' +\n    // Other keywords:\n    // <https://www.php.net/manual/en/reserved.php>\n    // <https://www.php.net/manual/en/language.types.type-juggling.php>\n    \"array\",\n    \"abstract\",\n    \"and\",\n    \"as\",\n    \"binary\",\n    \"bool\",\n    \"boolean\",\n    \"break\",\n    \"callable\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"clone\",\n    \"const\",\n    \"continue\",\n    \"declare\",\n    \"default\",\n    \"do\",\n    \"double\",\n    \"else\",\n    \"elseif\",\n    \"empty\",\n    \"enddeclare\",\n    \"endfor\",\n    \"endforeach\",\n    \"endif\",\n    \"endswitch\",\n    \"endwhile\",\n    \"enum\",\n    \"eval\",\n    \"extends\",\n    \"final\",\n    \"finally\",\n    \"float\",\n    \"for\",\n    \"foreach\",\n    \"from\",\n    \"global\",\n    \"goto\",\n    \"if\",\n    \"implements\",\n    \"instanceof\",\n    \"insteadof\",\n    \"int\",\n    \"integer\",\n    \"interface\",\n    \"isset\",\n    \"iterable\",\n    \"list\",\n    \"match|0\",\n    \"mixed\",\n    \"new\",\n    \"never\",\n    \"object\",\n    \"or\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"readonly\",\n    \"real\",\n    \"return\",\n    \"string\",\n    \"switch\",\n    \"throw\",\n    \"trait\",\n    \"try\",\n    \"unset\",\n    \"use\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"xor\",\n    \"yield\"\n  ];\n\n  const BUILT_INS = [\n    // Standard PHP library:\n    // <https://www.php.net/manual/en/book.spl.php>\n    \"Error|0\",\n    \"AppendIterator\",\n    \"ArgumentCountError\",\n    \"ArithmeticError\",\n    \"ArrayIterator\",\n    \"ArrayObject\",\n    \"AssertionError\",\n    \"BadFunctionCallException\",\n    \"BadMethodCallException\",\n    \"CachingIterator\",\n    \"CallbackFilterIterator\",\n    \"CompileError\",\n    \"Countable\",\n    \"DirectoryIterator\",\n    \"DivisionByZeroError\",\n    \"DomainException\",\n    \"EmptyIterator\",\n    \"ErrorException\",\n    \"Exception\",\n    \"FilesystemIterator\",\n    \"FilterIterator\",\n    \"GlobIterator\",\n    \"InfiniteIterator\",\n    \"InvalidArgumentException\",\n    \"IteratorIterator\",\n    \"LengthException\",\n    \"LimitIterator\",\n    \"LogicException\",\n    \"MultipleIterator\",\n    \"NoRewindIterator\",\n    \"OutOfBoundsException\",\n    \"OutOfRangeException\",\n    \"OuterIterator\",\n    \"OverflowException\",\n    \"ParentIterator\",\n    \"ParseError\",\n    \"RangeException\",\n    \"RecursiveArrayIterator\",\n    \"RecursiveCachingIterator\",\n    \"RecursiveCallbackFilterIterator\",\n    \"RecursiveDirectoryIterator\",\n    \"RecursiveFilterIterator\",\n    \"RecursiveIterator\",\n    \"RecursiveIteratorIterator\",\n    \"RecursiveRegexIterator\",\n    \"RecursiveTreeIterator\",\n    \"RegexIterator\",\n    \"RuntimeException\",\n    \"SeekableIterator\",\n    \"SplDoublyLinkedList\",\n    \"SplFileInfo\",\n    \"SplFileObject\",\n    \"SplFixedArray\",\n    \"SplHeap\",\n    \"SplMaxHeap\",\n    \"SplMinHeap\",\n    \"SplObjectStorage\",\n    \"SplObserver\",\n    \"SplPriorityQueue\",\n    \"SplQueue\",\n    \"SplStack\",\n    \"SplSubject\",\n    \"SplTempFileObject\",\n    \"TypeError\",\n    \"UnderflowException\",\n    \"UnexpectedValueException\",\n    \"UnhandledMatchError\",\n    // Reserved interfaces:\n    // <https://www.php.net/manual/en/reserved.interfaces.php>\n    \"ArrayAccess\",\n    \"BackedEnum\",\n    \"Closure\",\n    \"Fiber\",\n    \"Generator\",\n    \"Iterator\",\n    \"IteratorAggregate\",\n    \"Serializable\",\n    \"Stringable\",\n    \"Throwable\",\n    \"Traversable\",\n    \"UnitEnum\",\n    \"WeakReference\",\n    \"WeakMap\",\n    // Reserved classes:\n    // <https://www.php.net/manual/en/reserved.classes.php>\n    \"Directory\",\n    \"__PHP_Incomplete_Class\",\n    \"parent\",\n    \"php_user_filter\",\n    \"self\",\n    \"static\",\n    \"stdClass\"\n  ];\n\n  /** Dual-case keywords\n   *\n   * [\"then\",\"FILE\"] =>\n   *     [\"then\", \"THEN\", \"FILE\", \"file\"]\n   *\n   * @param {string[]} items */\n  const dualCase = (items) => {\n    /** @type string[] */\n    const result = [];\n    items.forEach(item => {\n      result.push(item);\n      if (item.toLowerCase() === item) {\n        result.push(item.toUpperCase());\n      } else {\n        result.push(item.toLowerCase());\n      }\n    });\n    return result;\n  };\n\n  const KEYWORDS = {\n    keyword: KWS,\n    literal: dualCase(LITERALS),\n    built_in: BUILT_INS,\n  };\n\n  /**\n   * @param {string[]} items */\n  const normalizeKeywords = (items) => {\n    return items.map(item => {\n      return item.replace(/\\|\\d+$/, \"\");\n    });\n  };\n\n  const CONSTRUCTOR_CALL = { variants: [\n    {\n      match: [\n        /new/,\n        regex.concat(WHITESPACE, \"+\"),\n        // to prevent built ins from being confused as the class constructor call\n        regex.concat(\"(?!\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n        PASCAL_CASE_CLASS_NAME_RE,\n      ],\n      scope: {\n        1: \"keyword\",\n        4: \"title.class\",\n      },\n    }\n  ] };\n\n  const CONSTANT_REFERENCE = regex.concat(IDENT_RE, \"\\\\b(?!\\\\()\");\n\n  const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { variants: [\n    {\n      match: [\n        regex.concat(\n          /::/,\n          regex.lookahead(/(?!class\\b)/)\n        ),\n        CONSTANT_REFERENCE,\n      ],\n      scope: { 2: \"variable.constant\", },\n    },\n    {\n      match: [\n        /::/,\n        /class/,\n      ],\n      scope: { 2: \"variable.language\", },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        regex.concat(\n          /::/,\n          regex.lookahead(/(?!class\\b)/)\n        ),\n        CONSTANT_REFERENCE,\n      ],\n      scope: {\n        1: \"title.class\",\n        3: \"variable.constant\",\n      },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        regex.concat(\n          \"::\",\n          regex.lookahead(/(?!class\\b)/)\n        ),\n      ],\n      scope: { 1: \"title.class\", },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        /::/,\n        /class/,\n      ],\n      scope: {\n        1: \"title.class\",\n        3: \"variable.language\",\n      },\n    }\n  ] };\n\n  const NAMED_ARGUMENT = {\n    scope: 'attr',\n    match: regex.concat(IDENT_RE, regex.lookahead(':'), regex.lookahead(/(?!::)/)),\n  };\n  const PARAMS_MODE = {\n    relevance: 0,\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    contains: [\n      NAMED_ARGUMENT,\n      VARIABLE,\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n      hljs.C_BLOCK_COMMENT_MODE,\n      STRING,\n      NUMBER,\n      CONSTRUCTOR_CALL,\n    ],\n  };\n  const FUNCTION_INVOKE = {\n    relevance: 0,\n    match: [\n      /\\b/,\n      // to prevent keywords from being confused as the function title\n      regex.concat(\"(?!fn\\\\b|function\\\\b|\", normalizeKeywords(KWS).join(\"\\\\b|\"), \"|\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n      IDENT_RE,\n      regex.concat(WHITESPACE, \"*\"),\n      regex.lookahead(/(?=\\()/)\n    ],\n    scope: { 3: \"title.function.invoke\", },\n    contains: [ PARAMS_MODE ]\n  };\n  PARAMS_MODE.contains.push(FUNCTION_INVOKE);\n\n  const ATTRIBUTE_CONTAINS = [\n    NAMED_ARGUMENT,\n    LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING,\n    NUMBER,\n    CONSTRUCTOR_CALL,\n  ];\n\n  const ATTRIBUTES = {\n    begin: regex.concat(/#\\[\\s*/, PASCAL_CASE_CLASS_NAME_RE),\n    beginScope: \"meta\",\n    end: /]/,\n    endScope: \"meta\",\n    keywords: {\n      literal: LITERALS,\n      keyword: [\n        'new',\n        'array',\n      ]\n    },\n    contains: [\n      {\n        begin: /\\[/,\n        end: /]/,\n        keywords: {\n          literal: LITERALS,\n          keyword: [\n            'new',\n            'array',\n          ]\n        },\n        contains: [\n          'self',\n          ...ATTRIBUTE_CONTAINS,\n        ]\n      },\n      ...ATTRIBUTE_CONTAINS,\n      {\n        scope: 'meta',\n        match: PASCAL_CASE_CLASS_NAME_RE\n      }\n    ]\n  };\n\n  return {\n    case_insensitive: false,\n    keywords: KEYWORDS,\n    contains: [\n      ATTRIBUTES,\n      hljs.HASH_COMMENT_MODE,\n      hljs.COMMENT('//', '$'),\n      hljs.COMMENT(\n        '/\\\\*',\n        '\\\\*/',\n        { contains: [\n          {\n            scope: 'doctag',\n            match: '@[A-Za-z]+'\n          }\n        ] }\n      ),\n      {\n        match: /__halt_compiler\\(\\);/,\n        keywords: '__halt_compiler',\n        starts: {\n          scope: \"comment\",\n          end: hljs.MATCH_NOTHING_RE,\n          contains: [\n            {\n              match: /\\?>/,\n              scope: \"meta\",\n              endsParent: true\n            }\n          ]\n        }\n      },\n      PREPROCESSOR,\n      {\n        scope: 'variable.language',\n        match: /\\$this\\b/\n      },\n      VARIABLE,\n      FUNCTION_INVOKE,\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n      {\n        match: [\n          /const/,\n          /\\s/,\n          IDENT_RE,\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"variable.constant\",\n        },\n      },\n      CONSTRUCTOR_CALL,\n      {\n        scope: 'function',\n        relevance: 0,\n        beginKeywords: 'fn function',\n        end: /[;{]/,\n        excludeEnd: true,\n        illegal: '[$%\\\\[]',\n        contains: [\n          { beginKeywords: 'use', },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            begin: '=>', // No markup, just a relevance booster\n            endsParent: true\n          },\n          {\n            scope: 'params',\n            begin: '\\\\(',\n            end: '\\\\)',\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            contains: [\n              'self',\n              VARIABLE,\n              LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRING,\n              NUMBER\n            ]\n          },\n        ]\n      },\n      {\n        scope: 'class',\n        variants: [\n          {\n            beginKeywords: \"enum\",\n            illegal: /[($\"]/\n          },\n          {\n            beginKeywords: \"class interface trait\",\n            illegal: /[:($\"]/\n          }\n        ],\n        relevance: 0,\n        end: /\\{/,\n        excludeEnd: true,\n        contains: [\n          { beginKeywords: 'extends implements' },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      // both use and namespace still use \"old style\" rules (vs multi-match)\n      // because the namespace name can include `\\` and we still want each\n      // element to be treated as its own *individual* title\n      {\n        beginKeywords: 'namespace',\n        relevance: 0,\n        end: ';',\n        illegal: /[.']/,\n        contains: [ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { scope: \"title.class\" }) ]\n      },\n      {\n        beginKeywords: 'use',\n        relevance: 0,\n        end: ';',\n        contains: [\n          // TODO: title.function vs title.class\n          {\n            match: /\\b(as|const|function)\\b/,\n            scope: \"keyword\"\n          },\n          // TODO: could be title.class or title.function\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      STRING,\n      NUMBER,\n    ]\n  };\n}\n\nexport { php as default };\n", "/*\nLanguage: PHP Template\nRequires: xml.js, php.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nWebsite: https://www.php.net\nCategory: common\n*/\n\nfunction phpTemplate(hljs) {\n  return {\n    name: \"PHP template\",\n    subLanguage: 'xml',\n    contains: [\n      {\n        begin: /<\\?(php|=)?/,\n        end: /\\?>/,\n        subLanguage: 'php',\n        contains: [\n          // We don't want the php closing tag ?> to close the PHP block when\n          // inside any of the following blocks:\n          {\n            begin: '/\\\\*',\n            end: '\\\\*/',\n            skip: true\n          },\n          {\n            begin: 'b\"',\n            end: '\"',\n            skip: true\n          },\n          {\n            begin: 'b\\'',\n            end: '\\'',\n            skip: true\n          },\n          hljs.inherit(hljs.APOS_STRING_MODE, {\n            illegal: null,\n            className: null,\n            contains: null,\n            skip: true\n          }),\n          hljs.inherit(hljs.QUOTE_STRING_MODE, {\n            illegal: null,\n            className: null,\n            contains: null,\n            skip: true\n          })\n        ]\n      }\n    ]\n  };\n}\n\nexport { phpTemplate as default };\n", "/*\nLanguage: Plain text\nAuthor: Egor Rogov (e.rogov@postgrespro.ru)\nDescription: Plain text without any highlighting.\nCategory: common\n*/\n\nfunction plaintext(hljs) {\n  return {\n    name: 'Plain text',\n    aliases: [\n      'text',\n      'txt'\n    ],\n    disableAutodetect: true\n  };\n}\n\nexport { plaintext as default };\n", "/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n  const RESERVED_WORDS = [\n    'and',\n    'as',\n    'assert',\n    'async',\n    'await',\n    'break',\n    'case',\n    'class',\n    'continue',\n    'def',\n    'del',\n    'elif',\n    'else',\n    'except',\n    'finally',\n    'for',\n    'from',\n    'global',\n    'if',\n    'import',\n    'in',\n    'is',\n    'lambda',\n    'match',\n    'nonlocal|10',\n    'not',\n    'or',\n    'pass',\n    'raise',\n    'return',\n    'try',\n    'while',\n    'with',\n    'yield'\n  ];\n\n  const BUILT_INS = [\n    '__import__',\n    'abs',\n    'all',\n    'any',\n    'ascii',\n    'bin',\n    'bool',\n    'breakpoint',\n    'bytearray',\n    'bytes',\n    'callable',\n    'chr',\n    'classmethod',\n    'compile',\n    'complex',\n    'delattr',\n    'dict',\n    'dir',\n    'divmod',\n    'enumerate',\n    'eval',\n    'exec',\n    'filter',\n    'float',\n    'format',\n    'frozenset',\n    'getattr',\n    'globals',\n    'hasattr',\n    'hash',\n    'help',\n    'hex',\n    'id',\n    'input',\n    'int',\n    'isinstance',\n    'issubclass',\n    'iter',\n    'len',\n    'list',\n    'locals',\n    'map',\n    'max',\n    'memoryview',\n    'min',\n    'next',\n    'object',\n    'oct',\n    'open',\n    'ord',\n    'pow',\n    'print',\n    'property',\n    'range',\n    'repr',\n    'reversed',\n    'round',\n    'set',\n    'setattr',\n    'slice',\n    'sorted',\n    'staticmethod',\n    'str',\n    'sum',\n    'super',\n    'tuple',\n    'type',\n    'vars',\n    'zip'\n  ];\n\n  const LITERALS = [\n    '__debug__',\n    'Ellipsis',\n    'False',\n    'None',\n    'NotImplemented',\n    'True'\n  ];\n\n  // https://docs.python.org/3/library/typing.html\n  // TODO: Could these be supplemented by a CamelCase matcher in certain\n  // contexts, leaving these remaining only for relevance hinting?\n  const TYPES = [\n    \"Any\",\n    \"Callable\",\n    \"Coroutine\",\n    \"Dict\",\n    \"List\",\n    \"Literal\",\n    \"Generic\",\n    \"Optional\",\n    \"Sequence\",\n    \"Set\",\n    \"Tuple\",\n    \"Type\",\n    \"Union\"\n  ];\n\n  const KEYWORDS = {\n    $pattern: /[A-Za-z]\\w+|__\\w+__/,\n    keyword: RESERVED_WORDS,\n    built_in: BUILT_INS,\n    literal: LITERALS,\n    type: TYPES\n  };\n\n  const PROMPT = {\n    className: 'meta',\n    begin: /^(>>>|\\.\\.\\.) /\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS,\n    illegal: /#/\n  };\n\n  const LITERAL_BRACKET = {\n    begin: /\\{\\{/,\n    relevance: 0\n  };\n\n  const STRING = {\n    className: 'string',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([uU]|[rR])'/,\n        end: /'/,\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[rR])\"/,\n        end: /\"/,\n        relevance: 10\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])'/,\n        end: /'/\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n        end: /\"/\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'/,\n        end: /'/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n        end: /\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n  const digitpart = '[0-9](_?[0-9])*';\n  const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n  // Whitespace after a number (or any lexical token) is needed only if its absence\n  // would change the tokenization\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n  // We deviate slightly, requiring a word boundary or a keyword\n  // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n  const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // exponentfloat, pointfloat\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n      // optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      // Note: no leading \\b because floats can start with a decimal point\n      // and we don't want to mishandle e.g. `fn(.5)`,\n      // no trailing \\b for pointfloat because it can end with a decimal point\n      // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n      // because both MUST contain a decimal point and so cannot be confused with\n      // the interior part of an identifier\n      {\n        begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n      },\n      {\n        begin: `(${pointfloat})[jJ]?`\n      },\n\n      // decinteger, bininteger, octinteger, hexinteger\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n      // optionally \"long\" in Python 2\n      // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n      // decinteger is optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n      },\n\n      // imagnumber (digitpart-based)\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n      }\n    ]\n  };\n  const COMMENT_TYPE = {\n    className: \"comment\",\n    begin: regex.lookahead(/# type:/),\n    end: /$/,\n    keywords: KEYWORDS,\n    contains: [\n      { // prevent keywords from coloring `type`\n        begin: /# type:/\n      },\n      // comment within a datatype comment includes no keywords\n      {\n        begin: /#/,\n        end: /\\b\\B/,\n        endsWithParent: true\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    variants: [\n      // Exclude params in functions without params\n      {\n        className: \"\",\n        begin: /\\(\\s*\\)/,\n        skip: true\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        excludeBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          PROMPT,\n          NUMBER,\n          STRING,\n          hljs.HASH_COMMENT_MODE\n        ]\n      }\n    ]\n  };\n  SUBST.contains = [\n    STRING,\n    NUMBER,\n    PROMPT\n  ];\n\n  return {\n    name: 'Python',\n    aliases: [\n      'py',\n      'gyp',\n      'ipython'\n    ],\n    unicodeRegex: true,\n    keywords: KEYWORDS,\n    illegal: /(<\\/|\\?)|=>/,\n    contains: [\n      PROMPT,\n      NUMBER,\n      {\n        // very common convention\n        begin: /\\bself\\b/\n      },\n      {\n        // eat \"if\" prior to string so that it won't accidentally be\n        // labeled as an f-string\n        beginKeywords: \"if\",\n        relevance: 0\n      },\n      STRING,\n      COMMENT_TYPE,\n      hljs.HASH_COMMENT_MODE,\n      {\n        match: [\n          /\\bdef/, /\\s+/,\n          IDENT_RE,\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.function\"\n        },\n        contains: [ PARAMS ]\n      },\n      {\n        variants: [\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE, /\\s*/,\n              /\\(\\s*/, IDENT_RE,/\\s*\\)/\n            ],\n          },\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE\n            ],\n          }\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          6: \"title.class.inherited\",\n        }\n      },\n      {\n        className: 'meta',\n        begin: /^[\\t ]*@/,\n        end: /(?=#)|$/,\n        contains: [\n          NUMBER,\n          PARAMS,\n          STRING\n        ]\n      }\n    ]\n  };\n}\n\nexport { python as default };\n", "/*\nLanguage: Python REPL\nRequires: python.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nCategory: common\n*/\n\nfunction pythonRepl(hljs) {\n  return {\n    aliases: [ 'pycon' ],\n    contains: [\n      {\n        className: 'meta.prompt',\n        starts: {\n          // a space separates the REPL prefix from the actual code\n          // this is purely for cleaner HTML output\n          end: / |$/,\n          starts: {\n            end: '$',\n            subLanguage: 'python'\n          }\n        },\n        variants: [\n          { begin: /^>>>(?=[ ]|$)/ },\n          { begin: /^\\.\\.\\.(?=[ ]|$)/ }\n        ]\n      }\n    ]\n  };\n}\n\nexport { pythonRepl as default };\n", "/*\nLanguage: R\nDescription: R is a free software environment for statistical computing and graphics.\nAuthor: Joe Cheng <joe@rstudio.org>\nContributors: Konrad Rudolph <konrad.rudolph@gmail.com>\nWebsite: https://www.r-project.org\nCategory: common,scientific\n*/\n\n/** @type LanguageFn */\nfunction r(hljs) {\n  const regex = hljs.regex;\n  // Identifiers in R cannot start with `_`, but they can start with `.` if it\n  // is not immediately followed by a digit.\n  // R also supports quoted identifiers, which are near-arbitrary sequences\n  // delimited by backticks (`\u2026`), which may contain escape sequences. These are\n  // handled in a separate mode. See `test/markup/r/names.txt` for examples.\n  // FIXME: Support Unicode identifiers.\n  const IDENT_RE = /(?:(?:[a-zA-Z]|\\.[._a-zA-Z])[._a-zA-Z0-9]*)|\\.(?!\\d)/;\n  const NUMBER_TYPES_RE = regex.either(\n    // Special case: only hexadecimal binary powers can contain fractions\n    /0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/,\n    // Hexadecimal numbers without fraction and optional binary power\n    /0[xX][0-9a-fA-F]+(?:[pP][+-]?\\d+)?[Li]?/,\n    // Decimal numbers\n    /(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?[Li]?/\n  );\n  const OPERATORS_RE = /[=!<>:]=|\\|\\||&&|:::?|<-|<<-|->>|->|\\|>|[-+*\\/?!$&|:<=>@^~]|\\*\\*/;\n  const PUNCTUATION_RE = regex.either(\n    /[()]/,\n    /[{}]/,\n    /\\[\\[/,\n    /[[\\]]/,\n    /\\\\/,\n    /,/\n  );\n\n  return {\n    name: 'R',\n\n    keywords: {\n      $pattern: IDENT_RE,\n      keyword:\n        'function if in break next repeat else for while',\n      literal:\n        'NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 '\n        + 'NA_character_|10 NA_complex_|10',\n      built_in:\n        // Builtin constants\n        'LETTERS letters month.abb month.name pi T F '\n        // Primitive functions\n        // These are all the functions in `base` that are implemented as a\n        // `.Primitive`, minus those functions that are also keywords.\n        + 'abs acos acosh all any anyNA Arg as.call as.character '\n        + 'as.complex as.double as.environment as.integer as.logical '\n        + 'as.null.default as.numeric as.raw asin asinh atan atanh attr '\n        + 'attributes baseenv browser c call ceiling class Conj cos cosh '\n        + 'cospi cummax cummin cumprod cumsum digamma dim dimnames '\n        + 'emptyenv exp expression floor forceAndCall gamma gc.time '\n        + 'globalenv Im interactive invisible is.array is.atomic is.call '\n        + 'is.character is.complex is.double is.environment is.expression '\n        + 'is.finite is.function is.infinite is.integer is.language '\n        + 'is.list is.logical is.matrix is.na is.name is.nan is.null '\n        + 'is.numeric is.object is.pairlist is.raw is.recursive is.single '\n        + 'is.symbol lazyLoadDBfetch length lgamma list log max min '\n        + 'missing Mod names nargs nzchar oldClass on.exit pos.to.env '\n        + 'proc.time prod quote range Re rep retracemem return round '\n        + 'seq_along seq_len seq.int sign signif sin sinh sinpi sqrt '\n        + 'standardGeneric substitute sum switch tan tanh tanpi tracemem '\n        + 'trigamma trunc unclass untracemem UseMethod xtfrm',\n    },\n\n    contains: [\n      // Roxygen comments\n      hljs.COMMENT(\n        /#'/,\n        /$/,\n        { contains: [\n          {\n            // Handle `@examples` separately to cause all subsequent code\n            // until the next `@`-tag on its own line to be kept as-is,\n            // preventing highlighting. This code is example R code, so nested\n            // doctags shouldn\u2019t be treated as such. See\n            // `test/markup/r/roxygen.txt` for an example.\n            scope: 'doctag',\n            match: /@examples/,\n            starts: {\n              end: regex.lookahead(regex.either(\n                // end if another doc comment\n                /\\n^#'\\s*(?=@[a-zA-Z]+)/,\n                // or a line with no comment\n                /\\n^(?!#')/\n              )),\n              endsParent: true\n            }\n          },\n          {\n            // Handle `@param` to highlight the parameter name following\n            // after.\n            scope: 'doctag',\n            begin: '@param',\n            end: /$/,\n            contains: [\n              {\n                scope: 'variable',\n                variants: [\n                  { match: IDENT_RE },\n                  { match: /`(?:\\\\.|[^`\\\\])+`/ }\n                ],\n                endsParent: true\n              }\n            ]\n          },\n          {\n            scope: 'doctag',\n            match: /@[a-zA-Z]+/\n          },\n          {\n            scope: 'keyword',\n            match: /\\\\[a-zA-Z]+/\n          }\n        ] }\n      ),\n\n      hljs.HASH_COMMENT_MODE,\n\n      {\n        scope: 'string',\n        contains: [ hljs.BACKSLASH_ESCAPE ],\n        variants: [\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\(/,\n            end: /\\)(-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\{/,\n            end: /\\}(-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\[/,\n            end: /\\](-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\(/,\n            end: /\\)(-*)'/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\{/,\n            end: /\\}(-*)'/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\[/,\n            end: /\\](-*)'/\n          }),\n          {\n            begin: '\"',\n            end: '\"',\n            relevance: 0\n          },\n          {\n            begin: \"'\",\n            end: \"'\",\n            relevance: 0\n          }\n        ],\n      },\n\n      // Matching numbers immediately following punctuation and operators is\n      // tricky since we need to look at the character ahead of a number to\n      // ensure the number is not part of an identifier, and we cannot use\n      // negative look-behind assertions. So instead we explicitly handle all\n      // possible combinations of (operator|punctuation), number.\n      // TODO: replace with negative look-behind when available\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/ },\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+([pP][+-]?\\d+)?[Li]?/ },\n      // { begin: /(?<![a-zA-Z0-9._])(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?[Li]?/ }\n      {\n        relevance: 0,\n        variants: [\n          {\n            scope: {\n              1: 'operator',\n              2: 'number'\n            },\n            match: [\n              OPERATORS_RE,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: {\n              1: 'operator',\n              2: 'number'\n            },\n            match: [\n              /%[^%]*%/,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: {\n              1: 'punctuation',\n              2: 'number'\n            },\n            match: [\n              PUNCTUATION_RE,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: { 2: 'number' },\n            match: [\n              /[^a-zA-Z0-9._]|^/, // not part of an identifier, or start of document\n              NUMBER_TYPES_RE\n            ]\n          }\n        ]\n      },\n\n      // Operators/punctuation when they're not directly followed by numbers\n      {\n        // Relevance boost for the most common assignment form.\n        scope: { 3: 'operator' },\n        match: [\n          IDENT_RE,\n          /\\s+/,\n          /<-/,\n          /\\s+/\n        ]\n      },\n\n      {\n        scope: 'operator',\n        relevance: 0,\n        variants: [\n          { match: OPERATORS_RE },\n          { match: /%[^%]*%/ }\n        ]\n      },\n\n      {\n        scope: 'punctuation',\n        relevance: 0,\n        match: PUNCTUATION_RE\n      },\n\n      {\n        // Escaped identifier\n        begin: '`',\n        end: '`',\n        contains: [ { begin: /\\\\./ } ]\n      }\n    ]\n  };\n}\n\nexport { r as default };\n", "/*\nLanguage: Ruby\nDescription: Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.\nWebsite: https://www.ruby-lang.org/\nAuthor: Anton Kovalyov <anton@kovalyov.net>\nContributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>, Pascal Hurni <phi@ruby-reactive.org>, Cedric Sohrauer <sohrauer@googlemail.com>\nCategory: common\n*/\n\nfunction ruby(hljs) {\n  const regex = hljs.regex;\n  const RUBY_METHOD_RE = '([a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?)';\n  // TODO: move concepts like CAMEL_CASE into `modes.js`\n  const CLASS_NAME_RE = regex.either(\n    /\\b([A-Z]+[a-z0-9]+)+/,\n    // ends in caps\n    /\\b([A-Z]+[a-z0-9]+)+[A-Z]+/,\n  )\n  ;\n  const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\\w+)*/);\n  // very popular ruby built-ins that one might even assume\n  // are actual keywords (despite that not being the case)\n  const PSEUDO_KWS = [\n    \"include\",\n    \"extend\",\n    \"prepend\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"raise\",\n    \"throw\"\n  ];\n  const RUBY_KEYWORDS = {\n    \"variable.constant\": [\n      \"__FILE__\",\n      \"__LINE__\",\n      \"__ENCODING__\"\n    ],\n    \"variable.language\": [\n      \"self\",\n      \"super\",\n    ],\n    keyword: [\n      \"alias\",\n      \"and\",\n      \"begin\",\n      \"BEGIN\",\n      \"break\",\n      \"case\",\n      \"class\",\n      \"defined\",\n      \"do\",\n      \"else\",\n      \"elsif\",\n      \"end\",\n      \"END\",\n      \"ensure\",\n      \"for\",\n      \"if\",\n      \"in\",\n      \"module\",\n      \"next\",\n      \"not\",\n      \"or\",\n      \"redo\",\n      \"require\",\n      \"rescue\",\n      \"retry\",\n      \"return\",\n      \"then\",\n      \"undef\",\n      \"unless\",\n      \"until\",\n      \"when\",\n      \"while\",\n      \"yield\",\n      ...PSEUDO_KWS\n    ],\n    built_in: [\n      \"proc\",\n      \"lambda\",\n      \"attr_accessor\",\n      \"attr_reader\",\n      \"attr_writer\",\n      \"define_method\",\n      \"private_constant\",\n      \"module_function\"\n    ],\n    literal: [\n      \"true\",\n      \"false\",\n      \"nil\"\n    ]\n  };\n  const YARDOCTAG = {\n    className: 'doctag',\n    begin: '@[A-Za-z]+'\n  };\n  const IRB_OBJECT = {\n    begin: '#<',\n    end: '>'\n  };\n  const COMMENT_MODES = [\n    hljs.COMMENT(\n      '#',\n      '$',\n      { contains: [ YARDOCTAG ] }\n    ),\n    hljs.COMMENT(\n      '^=begin',\n      '^=end',\n      {\n        contains: [ YARDOCTAG ],\n        relevance: 10\n      }\n    ),\n    hljs.COMMENT('^__END__', hljs.MATCH_NOTHING_RE)\n  ];\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: RUBY_KEYWORDS\n  };\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ],\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      {\n        begin: /`/,\n        end: /`/\n      },\n      {\n        begin: /%[qQwWx]?\\(/,\n        end: /\\)/\n      },\n      {\n        begin: /%[qQwWx]?\\[/,\n        end: /\\]/\n      },\n      {\n        begin: /%[qQwWx]?\\{/,\n        end: /\\}/\n      },\n      {\n        begin: /%[qQwWx]?</,\n        end: />/\n      },\n      {\n        begin: /%[qQwWx]?\\//,\n        end: /\\//\n      },\n      {\n        begin: /%[qQwWx]?%/,\n        end: /%/\n      },\n      {\n        begin: /%[qQwWx]?-/,\n        end: /-/\n      },\n      {\n        begin: /%[qQwWx]?\\|/,\n        end: /\\|/\n      },\n      // in the following expressions, \\B in the beginning suppresses recognition of ?-sequences\n      // where ? is the last character of a preceding identifier, as in: `func?4`\n      { begin: /\\B\\?(\\\\\\d{1,3})/ },\n      { begin: /\\B\\?(\\\\x[A-Fa-f0-9]{1,2})/ },\n      { begin: /\\B\\?(\\\\u\\{?[A-Fa-f0-9]{1,6}\\}?)/ },\n      { begin: /\\B\\?(\\\\M-\\\\C-|\\\\M-\\\\c|\\\\c\\\\M-|\\\\M-|\\\\C-\\\\M-)[\\x20-\\x7e]/ },\n      { begin: /\\B\\?\\\\(c|C-)[\\x20-\\x7e]/ },\n      { begin: /\\B\\?\\\\?\\S/ },\n      // heredocs\n      {\n        // this guard makes sure that we have an entire heredoc and not a false\n        // positive (auto-detect, etc.)\n        begin: regex.concat(\n          /<<[-~]?'?/,\n          regex.lookahead(/(\\w+)(?=\\W)[^\\n]*\\n(?:[^\\n]*\\n)*?\\s*\\1\\b/)\n        ),\n        contains: [\n          hljs.END_SAME_AS_BEGIN({\n            begin: /(\\w+)/,\n            end: /(\\w+)/,\n            contains: [\n              hljs.BACKSLASH_ESCAPE,\n              SUBST\n            ]\n          })\n        ]\n      }\n    ]\n  };\n\n  // Ruby syntax is underdocumented, but this grammar seems to be accurate\n  // as of version 2.7.2 (confirmed with (irb and `Ripper.sexp(...)`)\n  // https://docs.ruby-lang.org/en/2.7.0/doc/syntax/literals_rdoc.html#label-Numbers\n  const decimal = '[1-9](_?[0-9])*|0';\n  const digits = '[0-9](_?[0-9])*';\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal integer/float, optionally exponential or rational, optionally imaginary\n      { begin: `\\\\b(${decimal})(\\\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\\\b` },\n\n      // explicit decimal/binary/octal/hexadecimal integer,\n      // optionally rational and/or imaginary\n      { begin: \"\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\b\" },\n\n      // 0-prefixed implicit octal integer, optionally rational and/or imaginary\n      { begin: \"\\\\b0(_?[0-7])+r?i?\\\\b\" }\n    ]\n  };\n\n  const PARAMS = {\n    variants: [\n      {\n        match: /\\(\\)/,\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /(?=\\))/,\n        excludeBegin: true,\n        endsParent: true,\n        keywords: RUBY_KEYWORDS,\n      }\n    ]\n  };\n\n  const INCLUDE_EXTEND = {\n    match: [\n      /(include|extend)\\s+/,\n      CLASS_NAME_WITH_NAMESPACE_RE\n    ],\n    scope: {\n      2: \"title.class\"\n    },\n    keywords: RUBY_KEYWORDS\n  };\n\n  const CLASS_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /class\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE,\n          /\\s+<\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE\n        ]\n      },\n      {\n        match: [\n          /\\b(class|module)\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE\n        ]\n      }\n    ],\n    scope: {\n      2: \"title.class\",\n      4: \"title.class.inherited\"\n    },\n    keywords: RUBY_KEYWORDS\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  const METHOD_DEFINITION = {\n    match: [\n      /def/, /\\s+/,\n      RUBY_METHOD_RE\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  const OBJECT_CREATION = {\n    relevance: 0,\n    match: [\n      CLASS_NAME_WITH_NAMESPACE_RE,\n      /\\.new[. (]/\n    ],\n    scope: {\n      1: \"title.class\"\n    }\n  };\n\n  // CamelCase\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match: CLASS_NAME_RE,\n    scope: \"title.class\"\n  };\n\n  const RUBY_DEFAULT_CONTAINS = [\n    STRING,\n    CLASS_DEFINITION,\n    INCLUDE_EXTEND,\n    OBJECT_CREATION,\n    UPPER_CASE_CONSTANT,\n    CLASS_REFERENCE,\n    METHOD_DEFINITION,\n    {\n      // swallow namespace qualifiers before symbols\n      begin: hljs.IDENT_RE + '::' },\n    {\n      className: 'symbol',\n      begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\?)?:',\n      relevance: 0\n    },\n    {\n      className: 'symbol',\n      begin: ':(?!\\\\s)',\n      contains: [\n        STRING,\n        { begin: RUBY_METHOD_RE }\n      ],\n      relevance: 0\n    },\n    NUMBER,\n    {\n      // negative-look forward attempts to prevent false matches like:\n      // @ident@ or $ident$ that might indicate this is not ruby at all\n      className: \"variable\",\n      begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\n    },\n    {\n      className: 'params',\n      begin: /\\|/,\n      end: /\\|/,\n      excludeBegin: true,\n      excludeEnd: true,\n      relevance: 0, // this could be a lot of things (in other languages) other than params\n      keywords: RUBY_KEYWORDS\n    },\n    { // regexp container\n      begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\s*',\n      keywords: 'unless',\n      contains: [\n        {\n          className: 'regexp',\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST\n          ],\n          illegal: /\\n/,\n          variants: [\n            {\n              begin: '/',\n              end: '/[a-z]*'\n            },\n            {\n              begin: /%r\\{/,\n              end: /\\}[a-z]*/\n            },\n            {\n              begin: '%r\\\\(',\n              end: '\\\\)[a-z]*'\n            },\n            {\n              begin: '%r!',\n              end: '![a-z]*'\n            },\n            {\n              begin: '%r\\\\[',\n              end: '\\\\][a-z]*'\n            }\n          ]\n        }\n      ].concat(IRB_OBJECT, COMMENT_MODES),\n      relevance: 0\n    }\n  ].concat(IRB_OBJECT, COMMENT_MODES);\n\n  SUBST.contains = RUBY_DEFAULT_CONTAINS;\n  PARAMS.contains = RUBY_DEFAULT_CONTAINS;\n\n  // >>\n  // ?>\n  const SIMPLE_PROMPT = \"[>?]>\";\n  // irb(main):001:0>\n  const DEFAULT_PROMPT = \"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+[>*]\";\n  const RVM_PROMPT = \"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d+(p\\\\d+)?[^\\\\d][^>]+>\";\n\n  const IRB_DEFAULT = [\n    {\n      begin: /^\\s*=>/,\n      starts: {\n        end: '$',\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    },\n    {\n      className: 'meta.prompt',\n      begin: '^(' + SIMPLE_PROMPT + \"|\" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',\n      starts: {\n        end: '$',\n        keywords: RUBY_KEYWORDS,\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    }\n  ];\n\n  COMMENT_MODES.unshift(IRB_OBJECT);\n\n  return {\n    name: 'Ruby',\n    aliases: [\n      'rb',\n      'gemspec',\n      'podspec',\n      'thor',\n      'irb'\n    ],\n    keywords: RUBY_KEYWORDS,\n    illegal: /\\/\\*/,\n    contains: [ hljs.SHEBANG({ binary: \"ruby\" }) ]\n      .concat(IRB_DEFAULT)\n      .concat(COMMENT_MODES)\n      .concat(RUBY_DEFAULT_CONTAINS)\n  };\n}\n\nexport { ruby as default };\n", "/*\nLanguage: Rust\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\nWebsite: https://www.rust-lang.org\nCategory: common, system\n*/\n\n/** @type LanguageFn */\nfunction rust(hljs) {\n  const regex = hljs.regex;\n  const FUNCTION_INVOKE = {\n    className: \"title.function.invoke\",\n    relevance: 0,\n    begin: regex.concat(\n      /\\b/,\n      /(?!let|for|while|if|else|match\\b)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/\\s*\\(/))\n  };\n  const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\\?';\n  const KEYWORDS = [\n    \"abstract\",\n    \"as\",\n    \"async\",\n    \"await\",\n    \"become\",\n    \"box\",\n    \"break\",\n    \"const\",\n    \"continue\",\n    \"crate\",\n    \"do\",\n    \"dyn\",\n    \"else\",\n    \"enum\",\n    \"extern\",\n    \"false\",\n    \"final\",\n    \"fn\",\n    \"for\",\n    \"if\",\n    \"impl\",\n    \"in\",\n    \"let\",\n    \"loop\",\n    \"macro\",\n    \"match\",\n    \"mod\",\n    \"move\",\n    \"mut\",\n    \"override\",\n    \"priv\",\n    \"pub\",\n    \"ref\",\n    \"return\",\n    \"self\",\n    \"Self\",\n    \"static\",\n    \"struct\",\n    \"super\",\n    \"trait\",\n    \"true\",\n    \"try\",\n    \"type\",\n    \"typeof\",\n    \"unsafe\",\n    \"unsized\",\n    \"use\",\n    \"virtual\",\n    \"where\",\n    \"while\",\n    \"yield\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"Some\",\n    \"None\",\n    \"Ok\",\n    \"Err\"\n  ];\n  const BUILTINS = [\n    // functions\n    'drop ',\n    // traits\n    \"Copy\",\n    \"Send\",\n    \"Sized\",\n    \"Sync\",\n    \"Drop\",\n    \"Fn\",\n    \"FnMut\",\n    \"FnOnce\",\n    \"ToOwned\",\n    \"Clone\",\n    \"Debug\",\n    \"PartialEq\",\n    \"PartialOrd\",\n    \"Eq\",\n    \"Ord\",\n    \"AsRef\",\n    \"AsMut\",\n    \"Into\",\n    \"From\",\n    \"Default\",\n    \"Iterator\",\n    \"Extend\",\n    \"IntoIterator\",\n    \"DoubleEndedIterator\",\n    \"ExactSizeIterator\",\n    \"SliceConcatExt\",\n    \"ToString\",\n    // macros\n    \"assert!\",\n    \"assert_eq!\",\n    \"bitflags!\",\n    \"bytes!\",\n    \"cfg!\",\n    \"col!\",\n    \"concat!\",\n    \"concat_idents!\",\n    \"debug_assert!\",\n    \"debug_assert_eq!\",\n    \"env!\",\n    \"eprintln!\",\n    \"panic!\",\n    \"file!\",\n    \"format!\",\n    \"format_args!\",\n    \"include_bytes!\",\n    \"include_str!\",\n    \"line!\",\n    \"local_data_key!\",\n    \"module_path!\",\n    \"option_env!\",\n    \"print!\",\n    \"println!\",\n    \"select!\",\n    \"stringify!\",\n    \"try!\",\n    \"unimplemented!\",\n    \"unreachable!\",\n    \"vec!\",\n    \"write!\",\n    \"writeln!\",\n    \"macro_rules!\",\n    \"assert_ne!\",\n    \"debug_assert_ne!\"\n  ];\n  const TYPES = [\n    \"i8\",\n    \"i16\",\n    \"i32\",\n    \"i64\",\n    \"i128\",\n    \"isize\",\n    \"u8\",\n    \"u16\",\n    \"u32\",\n    \"u64\",\n    \"u128\",\n    \"usize\",\n    \"f32\",\n    \"f64\",\n    \"str\",\n    \"char\",\n    \"bool\",\n    \"Box\",\n    \"Option\",\n    \"Result\",\n    \"String\",\n    \"Vec\"\n  ];\n  return {\n    name: 'Rust',\n    aliases: [ 'rs' ],\n    keywords: {\n      $pattern: hljs.IDENT_RE + '!?',\n      type: TYPES,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: BUILTINS\n    },\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, {\n        begin: /b?\"/,\n        illegal: null\n      }),\n      {\n        className: 'string',\n        variants: [\n          { begin: /b?r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n          { begin: /b?'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/ }\n        ]\n      },\n      {\n        className: 'symbol',\n        begin: /'[a-zA-Z_][a-zA-Z0-9_]*/\n      },\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b0b([01_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\n                   + NUMBER_SUFFIX }\n        ],\n        relevance: 0\n      },\n      {\n        begin: [\n          /fn/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.function\"\n        }\n      },\n      {\n        className: 'meta',\n        begin: '#!?\\\\[',\n        end: '\\\\]',\n        contains: [\n          {\n            className: 'string',\n            begin: /\"/,\n            end: /\"/\n          }\n        ]\n      },\n      {\n        begin: [\n          /let/,\n          /\\s+/,\n          /(?:mut\\s+)?/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"keyword\",\n          4: \"variable\"\n        }\n      },\n      // must come before impl/for rule later\n      {\n        begin: [\n          /for/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE,\n          /\\s+/,\n          /in/\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"variable\",\n          5: \"keyword\"\n        }\n      },\n      {\n        begin: [\n          /type/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        begin: [\n          /(?:trait|enum|struct|union|impl|for)/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        begin: hljs.IDENT_RE + '::',\n        keywords: {\n          keyword: \"Self\",\n          built_in: BUILTINS,\n          type: TYPES\n        }\n      },\n      {\n        className: \"punctuation\",\n        begin: '->'\n      },\n      FUNCTION_INVOKE\n    ]\n  };\n}\n\nexport { rust as default };\n", "const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.NUMBER_RE + '(' +\n        '%|em|ex|ch|rem' +\n        '|vw|vh|vmin|vmax' +\n        '|cm|mm|in|pt|pc|px' +\n        '|deg|grad|rad|turn' +\n        '|s|ms' +\n        '|Hz|kHz' +\n        '|dpi|dpcm|dppx' +\n        ')?',\n      relevance: 0\n    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'all',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-variant',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'gap',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inline-size',\n  'isolation',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-break',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'row-gap',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n/*\nLanguage: SCSS\nDescription: Scss is an extension of the syntax of CSS.\nAuthor: Kurt Emch <kurt@kurtemch.com>\nWebsite: https://sass-lang.com\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction scss(hljs) {\n  const modes = MODES(hljs);\n  const PSEUDO_ELEMENTS$1 = PSEUDO_ELEMENTS;\n  const PSEUDO_CLASSES$1 = PSEUDO_CLASSES;\n\n  const AT_IDENTIFIER = '@[a-z-]+'; // @font-face\n  const AT_MODIFIERS = \"and or not only\";\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const VARIABLE = {\n    className: 'variable',\n    begin: '(\\\\$' + IDENT_RE + ')\\\\b',\n    relevance: 0\n  };\n\n  return {\n    name: 'SCSS',\n    case_insensitive: true,\n    illegal: '[=/|\\']',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      modes.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: '#[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n        // was there, before, but why?\n        relevance: 0\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(' + PSEUDO_CLASSES$1.join('|') + ')'\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(:)?(' + PSEUDO_ELEMENTS$1.join('|') + ')'\n      },\n      VARIABLE,\n      { // pseudo-selector params\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [ modes.CSS_NUMBER_MODE ]\n      },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      { begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b' },\n      {\n        begin: /:/,\n        end: /[;}{]/,\n        relevance: 0,\n        contains: [\n          modes.BLOCK_COMMENT,\n          VARIABLE,\n          modes.HEXCOLOR,\n          modes.CSS_NUMBER_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          modes.IMPORTANT,\n          modes.FUNCTION_DISPATCH\n        ]\n      },\n      // matching these here allows us to treat them more like regular CSS\n      // rules so everything between the {} gets regular rule highlighting,\n      // which is what we want for page and font-face\n      {\n        begin: '@(page|font-face)',\n        keywords: {\n          $pattern: AT_IDENTIFIER,\n          keyword: '@page @font-face'\n        }\n      },\n      {\n        begin: '@',\n        end: '[{;]',\n        returnBegin: true,\n        keywords: {\n          $pattern: /[a-z-]+/,\n          keyword: AT_MODIFIERS,\n          attribute: MEDIA_FEATURES.join(\" \")\n        },\n        contains: [\n          {\n            begin: AT_IDENTIFIER,\n            className: \"keyword\"\n          },\n          {\n            begin: /[a-z-]+(?=:)/,\n            className: \"attribute\"\n          },\n          VARIABLE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          modes.HEXCOLOR,\n          modes.CSS_NUMBER_MODE\n        ]\n      },\n      modes.FUNCTION_DISPATCH\n    ]\n  };\n}\n\nexport { scss as default };\n", "/*\nLanguage: Shell Session\nRequires: bash.js\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction shell(hljs) {\n  return {\n    name: 'Shell Session',\n    aliases: [\n      'console',\n      'shellsession'\n    ],\n    contains: [\n      {\n        className: 'meta.prompt',\n        // We cannot add \\s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.\n        // For instance, in the following example, it would match \"echo /path/to/home >\" as a prompt:\n        // echo /path/to/home > t.exe\n        begin: /^\\s{0,3}[/~\\w\\d[\\]()@-]*[>%$#][ ]?/,\n        starts: {\n          end: /[^\\\\](?=\\s*$)/,\n          subLanguage: 'bash'\n        }\n      }\n    ]\n  };\n}\n\nexport { shell as default };\n", "/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n  PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n  - PostgreSQL and PL/pgSQL - core\n  - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n  - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n  const regex = hljs.regex;\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/,\n        contains: [ { begin: /''/ } ]\n      }\n    ]\n  };\n  const QUOTED_IDENTIFIER = {\n    begin: /\"/,\n    end: /\"/,\n    contains: [ { begin: /\"\"/ } ]\n  };\n\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n    // \"null\",\n    \"unknown\"\n  ];\n\n  const MULTI_WORD_TYPES = [\n    \"double precision\",\n    \"large object\",\n    \"with timezone\",\n    \"without timezone\"\n  ];\n\n  const TYPES = [\n    'bigint',\n    'binary',\n    'blob',\n    'boolean',\n    'char',\n    'character',\n    'clob',\n    'date',\n    'dec',\n    'decfloat',\n    'decimal',\n    'float',\n    'int',\n    'integer',\n    'interval',\n    'nchar',\n    'nclob',\n    'national',\n    'numeric',\n    'real',\n    'row',\n    'smallint',\n    'time',\n    'timestamp',\n    'varchar',\n    'varying', // modifier (character varying)\n    'varbinary'\n  ];\n\n  const NON_RESERVED_WORDS = [\n    \"add\",\n    \"asc\",\n    \"collation\",\n    \"desc\",\n    \"final\",\n    \"first\",\n    \"last\",\n    \"view\"\n  ];\n\n  // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n  const RESERVED_WORDS = [\n    \"abs\",\n    \"acos\",\n    \"all\",\n    \"allocate\",\n    \"alter\",\n    \"and\",\n    \"any\",\n    \"are\",\n    \"array\",\n    \"array_agg\",\n    \"array_max_cardinality\",\n    \"as\",\n    \"asensitive\",\n    \"asin\",\n    \"asymmetric\",\n    \"at\",\n    \"atan\",\n    \"atomic\",\n    \"authorization\",\n    \"avg\",\n    \"begin\",\n    \"begin_frame\",\n    \"begin_partition\",\n    \"between\",\n    \"bigint\",\n    \"binary\",\n    \"blob\",\n    \"boolean\",\n    \"both\",\n    \"by\",\n    \"call\",\n    \"called\",\n    \"cardinality\",\n    \"cascaded\",\n    \"case\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"char\",\n    \"char_length\",\n    \"character\",\n    \"character_length\",\n    \"check\",\n    \"classifier\",\n    \"clob\",\n    \"close\",\n    \"coalesce\",\n    \"collate\",\n    \"collect\",\n    \"column\",\n    \"commit\",\n    \"condition\",\n    \"connect\",\n    \"constraint\",\n    \"contains\",\n    \"convert\",\n    \"copy\",\n    \"corr\",\n    \"corresponding\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"create\",\n    \"cross\",\n    \"cube\",\n    \"cume_dist\",\n    \"current\",\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_row\",\n    \"current_schema\",\n    \"current_time\",\n    \"current_timestamp\",\n    \"current_path\",\n    \"current_role\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"cursor\",\n    \"cycle\",\n    \"date\",\n    \"day\",\n    \"deallocate\",\n    \"dec\",\n    \"decimal\",\n    \"decfloat\",\n    \"declare\",\n    \"default\",\n    \"define\",\n    \"delete\",\n    \"dense_rank\",\n    \"deref\",\n    \"describe\",\n    \"deterministic\",\n    \"disconnect\",\n    \"distinct\",\n    \"double\",\n    \"drop\",\n    \"dynamic\",\n    \"each\",\n    \"element\",\n    \"else\",\n    \"empty\",\n    \"end\",\n    \"end_frame\",\n    \"end_partition\",\n    \"end-exec\",\n    \"equals\",\n    \"escape\",\n    \"every\",\n    \"except\",\n    \"exec\",\n    \"execute\",\n    \"exists\",\n    \"exp\",\n    \"external\",\n    \"extract\",\n    \"false\",\n    \"fetch\",\n    \"filter\",\n    \"first_value\",\n    \"float\",\n    \"floor\",\n    \"for\",\n    \"foreign\",\n    \"frame_row\",\n    \"free\",\n    \"from\",\n    \"full\",\n    \"function\",\n    \"fusion\",\n    \"get\",\n    \"global\",\n    \"grant\",\n    \"group\",\n    \"grouping\",\n    \"groups\",\n    \"having\",\n    \"hold\",\n    \"hour\",\n    \"identity\",\n    \"in\",\n    \"indicator\",\n    \"initial\",\n    \"inner\",\n    \"inout\",\n    \"insensitive\",\n    \"insert\",\n    \"int\",\n    \"integer\",\n    \"intersect\",\n    \"intersection\",\n    \"interval\",\n    \"into\",\n    \"is\",\n    \"join\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"language\",\n    \"large\",\n    \"last_value\",\n    \"lateral\",\n    \"lead\",\n    \"leading\",\n    \"left\",\n    \"like\",\n    \"like_regex\",\n    \"listagg\",\n    \"ln\",\n    \"local\",\n    \"localtime\",\n    \"localtimestamp\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"match\",\n    \"match_number\",\n    \"match_recognize\",\n    \"matches\",\n    \"max\",\n    \"member\",\n    \"merge\",\n    \"method\",\n    \"min\",\n    \"minute\",\n    \"mod\",\n    \"modifies\",\n    \"module\",\n    \"month\",\n    \"multiset\",\n    \"national\",\n    \"natural\",\n    \"nchar\",\n    \"nclob\",\n    \"new\",\n    \"no\",\n    \"none\",\n    \"normalize\",\n    \"not\",\n    \"nth_value\",\n    \"ntile\",\n    \"null\",\n    \"nullif\",\n    \"numeric\",\n    \"octet_length\",\n    \"occurrences_regex\",\n    \"of\",\n    \"offset\",\n    \"old\",\n    \"omit\",\n    \"on\",\n    \"one\",\n    \"only\",\n    \"open\",\n    \"or\",\n    \"order\",\n    \"out\",\n    \"outer\",\n    \"over\",\n    \"overlaps\",\n    \"overlay\",\n    \"parameter\",\n    \"partition\",\n    \"pattern\",\n    \"per\",\n    \"percent\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"period\",\n    \"portion\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"precedes\",\n    \"precision\",\n    \"prepare\",\n    \"primary\",\n    \"procedure\",\n    \"ptf\",\n    \"range\",\n    \"rank\",\n    \"reads\",\n    \"real\",\n    \"recursive\",\n    \"ref\",\n    \"references\",\n    \"referencing\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"release\",\n    \"result\",\n    \"return\",\n    \"returns\",\n    \"revoke\",\n    \"right\",\n    \"rollback\",\n    \"rollup\",\n    \"row\",\n    \"row_number\",\n    \"rows\",\n    \"running\",\n    \"savepoint\",\n    \"scope\",\n    \"scroll\",\n    \"search\",\n    \"second\",\n    \"seek\",\n    \"select\",\n    \"sensitive\",\n    \"session_user\",\n    \"set\",\n    \"show\",\n    \"similar\",\n    \"sin\",\n    \"sinh\",\n    \"skip\",\n    \"smallint\",\n    \"some\",\n    \"specific\",\n    \"specifictype\",\n    \"sql\",\n    \"sqlexception\",\n    \"sqlstate\",\n    \"sqlwarning\",\n    \"sqrt\",\n    \"start\",\n    \"static\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"submultiset\",\n    \"subset\",\n    \"substring\",\n    \"substring_regex\",\n    \"succeeds\",\n    \"sum\",\n    \"symmetric\",\n    \"system\",\n    \"system_time\",\n    \"system_user\",\n    \"table\",\n    \"tablesample\",\n    \"tan\",\n    \"tanh\",\n    \"then\",\n    \"time\",\n    \"timestamp\",\n    \"timezone_hour\",\n    \"timezone_minute\",\n    \"to\",\n    \"trailing\",\n    \"translate\",\n    \"translate_regex\",\n    \"translation\",\n    \"treat\",\n    \"trigger\",\n    \"trim\",\n    \"trim_array\",\n    \"true\",\n    \"truncate\",\n    \"uescape\",\n    \"union\",\n    \"unique\",\n    \"unknown\",\n    \"unnest\",\n    \"update\",\n    \"upper\",\n    \"user\",\n    \"using\",\n    \"value\",\n    \"values\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"varbinary\",\n    \"varchar\",\n    \"varying\",\n    \"versioning\",\n    \"when\",\n    \"whenever\",\n    \"where\",\n    \"width_bucket\",\n    \"window\",\n    \"with\",\n    \"within\",\n    \"without\",\n    \"year\",\n  ];\n\n  // these are reserved words we have identified to be functions\n  // and should only be highlighted in a dispatch-like context\n  // ie, array_agg(...), etc.\n  const RESERVED_FUNCTIONS = [\n    \"abs\",\n    \"acos\",\n    \"array_agg\",\n    \"asin\",\n    \"atan\",\n    \"avg\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"coalesce\",\n    \"corr\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"cume_dist\",\n    \"dense_rank\",\n    \"deref\",\n    \"element\",\n    \"exp\",\n    \"extract\",\n    \"first_value\",\n    \"floor\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"last_value\",\n    \"lead\",\n    \"listagg\",\n    \"ln\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"max\",\n    \"min\",\n    \"mod\",\n    \"nth_value\",\n    \"ntile\",\n    \"nullif\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"rank\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"row_number\",\n    \"sin\",\n    \"sinh\",\n    \"sqrt\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"substring\",\n    \"substring_regex\",\n    \"sum\",\n    \"tan\",\n    \"tanh\",\n    \"translate\",\n    \"translate_regex\",\n    \"treat\",\n    \"trim\",\n    \"trim_array\",\n    \"unnest\",\n    \"upper\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"width_bucket\",\n  ];\n\n  // these functions can\n  const POSSIBLE_WITHOUT_PARENS = [\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_schema\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"session_user\",\n    \"system_time\",\n    \"system_user\",\n    \"current_time\",\n    \"localtime\",\n    \"current_timestamp\",\n    \"localtimestamp\"\n  ];\n\n  // those exist to boost relevance making these very\n  // \"SQL like\" keyword combos worth +1 extra relevance\n  const COMBOS = [\n    \"create table\",\n    \"insert into\",\n    \"primary key\",\n    \"foreign key\",\n    \"not null\",\n    \"alter table\",\n    \"add constraint\",\n    \"grouping sets\",\n    \"on overflow\",\n    \"character set\",\n    \"respect nulls\",\n    \"ignore nulls\",\n    \"nulls first\",\n    \"nulls last\",\n    \"depth first\",\n    \"breadth first\"\n  ];\n\n  const FUNCTIONS = RESERVED_FUNCTIONS;\n\n  const KEYWORDS = [\n    ...RESERVED_WORDS,\n    ...NON_RESERVED_WORDS\n  ].filter((keyword) => {\n    return !RESERVED_FUNCTIONS.includes(keyword);\n  });\n\n  const VARIABLE = {\n    className: \"variable\",\n    begin: /@[a-z0-9][a-z0-9_]*/,\n  };\n\n  const OPERATOR = {\n    className: \"operator\",\n    begin: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n    relevance: 0,\n  };\n\n  const FUNCTION_CALL = {\n    begin: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n    relevance: 0,\n    keywords: { built_in: FUNCTIONS }\n  };\n\n  // keywords with less than 3 letters are reduced in relevancy\n  function reduceRelevancy(list, {\n    exceptions, when\n  } = {}) {\n    const qualifyFn = when;\n    exceptions = exceptions || [];\n    return list.map((item) => {\n      if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n        return item;\n      } else if (qualifyFn(item)) {\n        return `${item}|0`;\n      } else {\n        return item;\n      }\n    });\n  }\n\n  return {\n    name: 'SQL',\n    case_insensitive: true,\n    // does not include {} or HTML tags `</`\n    illegal: /[{}]|<\\//,\n    keywords: {\n      $pattern: /\\b[\\w\\.]+/,\n      keyword:\n        reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n      literal: LITERALS,\n      type: TYPES,\n      built_in: POSSIBLE_WITHOUT_PARENS\n    },\n    contains: [\n      {\n        begin: regex.either(...COMBOS),\n        relevance: 0,\n        keywords: {\n          $pattern: /[\\w\\.]+/,\n          keyword: KEYWORDS.concat(COMBOS),\n          literal: LITERALS,\n          type: TYPES\n        },\n      },\n      {\n        className: \"type\",\n        begin: regex.either(...MULTI_WORD_TYPES)\n      },\n      FUNCTION_CALL,\n      VARIABLE,\n      STRING,\n      QUOTED_IDENTIFIER,\n      hljs.C_NUMBER_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      COMMENT_MODE,\n      OPERATOR\n    ]\n  };\n}\n\nexport { sql as default };\n", "/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\nconst keywordWrapper = keyword => concat(\n  /\\b/,\n  keyword,\n  /\\w$/.test(keyword) ? /\\b/ : /\\B/\n);\n\n// Keywords that require a leading dot.\nconst dotKeywords = [\n  'Protocol', // contextual\n  'Type' // contextual\n].map(keywordWrapper);\n\n// Keywords that may have a leading dot.\nconst optionalDotKeywords = [\n  'init',\n  'self'\n].map(keywordWrapper);\n\n// should register as keyword, not type\nconst keywordTypes = [\n  'Any',\n  'Self'\n];\n\n// Regular keywords and literals.\nconst keywords = [\n  // strings below will be fed into the regular `keywords` engine while regex\n  // will result in additional modes being created to scan for those keywords to\n  // avoid conflicts with other rules\n  'actor',\n  'any', // contextual\n  'associatedtype',\n  'async',\n  'await',\n  /as\\?/, // operator\n  /as!/, // operator\n  'as', // operator\n  'borrowing', // contextual\n  'break',\n  'case',\n  'catch',\n  'class',\n  'consume', // contextual\n  'consuming', // contextual\n  'continue',\n  'convenience', // contextual\n  'copy', // contextual\n  'default',\n  'defer',\n  'deinit',\n  'didSet', // contextual\n  'distributed',\n  'do',\n  'dynamic', // contextual\n  'each',\n  'else',\n  'enum',\n  'extension',\n  'fallthrough',\n  /fileprivate\\(set\\)/,\n  'fileprivate',\n  'final', // contextual\n  'for',\n  'func',\n  'get', // contextual\n  'guard',\n  'if',\n  'import',\n  'indirect', // contextual\n  'infix', // contextual\n  /init\\?/,\n  /init!/,\n  'inout',\n  /internal\\(set\\)/,\n  'internal',\n  'in',\n  'is', // operator\n  'isolated', // contextual\n  'nonisolated', // contextual\n  'lazy', // contextual\n  'let',\n  'macro',\n  'mutating', // contextual\n  'nonmutating', // contextual\n  /open\\(set\\)/, // contextual\n  'open', // contextual\n  'operator',\n  'optional', // contextual\n  'override', // contextual\n  'postfix', // contextual\n  'precedencegroup',\n  'prefix', // contextual\n  /private\\(set\\)/,\n  'private',\n  'protocol',\n  /public\\(set\\)/,\n  'public',\n  'repeat',\n  'required', // contextual\n  'rethrows',\n  'return',\n  'set', // contextual\n  'some', // contextual\n  'static',\n  'struct',\n  'subscript',\n  'super',\n  'switch',\n  'throws',\n  'throw',\n  /try\\?/, // operator\n  /try!/, // operator\n  'try', // operator\n  'typealias',\n  /unowned\\(safe\\)/, // contextual\n  /unowned\\(unsafe\\)/, // contextual\n  'unowned', // contextual\n  'var',\n  'weak', // contextual\n  'where',\n  'while',\n  'willSet' // contextual\n];\n\n// NOTE: Contextual keywords are reserved only in specific contexts.\n// Ideally, these should be matched using modes to avoid false positives.\n\n// Literals.\nconst literals = [\n  'false',\n  'nil',\n  'true'\n];\n\n// Keywords used in precedence groups.\nconst precedencegroupKeywords = [\n  'assignment',\n  'associativity',\n  'higherThan',\n  'left',\n  'lowerThan',\n  'none',\n  'right'\n];\n\n// Keywords that start with a number sign (#).\n// #(un)available is handled separately.\nconst numberSignKeywords = [\n  '#colorLiteral',\n  '#column',\n  '#dsohandle',\n  '#else',\n  '#elseif',\n  '#endif',\n  '#error',\n  '#file',\n  '#fileID',\n  '#fileLiteral',\n  '#filePath',\n  '#function',\n  '#if',\n  '#imageLiteral',\n  '#keyPath',\n  '#line',\n  '#selector',\n  '#sourceLocation',\n  '#warning'\n];\n\n// Global functions in the Standard Library.\nconst builtIns = [\n  'abs',\n  'all',\n  'any',\n  'assert',\n  'assertionFailure',\n  'debugPrint',\n  'dump',\n  'fatalError',\n  'getVaList',\n  'isKnownUniquelyReferenced',\n  'max',\n  'min',\n  'numericCast',\n  'pointwiseMax',\n  'pointwiseMin',\n  'precondition',\n  'preconditionFailure',\n  'print',\n  'readLine',\n  'repeatElement',\n  'sequence',\n  'stride',\n  'swap',\n  'swift_unboxFromSwiftValueWithType',\n  'transcode',\n  'type',\n  'unsafeBitCast',\n  'unsafeDowncast',\n  'withExtendedLifetime',\n  'withUnsafeMutablePointer',\n  'withUnsafePointer',\n  'withVaList',\n  'withoutActuallyEscaping',\n  'zip'\n];\n\n// Valid first characters for operators.\nconst operatorHead = either(\n  /[/=\\-+!*%<>&|^~?]/,\n  /[\\u00A1-\\u00A7]/,\n  /[\\u00A9\\u00AB]/,\n  /[\\u00AC\\u00AE]/,\n  /[\\u00B0\\u00B1]/,\n  /[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]/,\n  /[\\u2016-\\u2017]/,\n  /[\\u2020-\\u2027]/,\n  /[\\u2030-\\u203E]/,\n  /[\\u2041-\\u2053]/,\n  /[\\u2055-\\u205E]/,\n  /[\\u2190-\\u23FF]/,\n  /[\\u2500-\\u2775]/,\n  /[\\u2794-\\u2BFF]/,\n  /[\\u2E00-\\u2E7F]/,\n  /[\\u3001-\\u3003]/,\n  /[\\u3008-\\u3020]/,\n  /[\\u3030]/\n);\n\n// Valid characters for operators.\nconst operatorCharacter = either(\n  operatorHead,\n  /[\\u0300-\\u036F]/,\n  /[\\u1DC0-\\u1DFF]/,\n  /[\\u20D0-\\u20FF]/,\n  /[\\uFE00-\\uFE0F]/,\n  /[\\uFE20-\\uFE2F]/\n  // TODO: The following characters are also allowed, but the regex isn't supported yet.\n  // /[\\u{E0100}-\\u{E01EF}]/u\n);\n\n// Valid operator.\nconst operator = concat(operatorHead, operatorCharacter, '*');\n\n// Valid first characters for identifiers.\nconst identifierHead = either(\n  /[a-zA-Z_]/,\n  /[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]/,\n  /[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]/,\n  /[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]/,\n  /[\\u1E00-\\u1FFF]/,\n  /[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]/,\n  /[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]/,\n  /[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]/,\n  /[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]/,\n  /[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]/,\n  /[\\uFE47-\\uFEFE\\uFF00-\\uFFFD]/ // Should be /[\\uFE47-\\uFFFD]/, but we have to exclude FEFF.\n  // The following characters are also allowed, but the regexes aren't supported yet.\n  // /[\\u{10000}-\\u{1FFFD}\\u{20000-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}]/u,\n  // /[\\u{50000}-\\u{5FFFD}\\u{60000-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}]/u,\n  // /[\\u{90000}-\\u{9FFFD}\\u{A0000-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}]/u,\n  // /[\\u{D0000}-\\u{DFFFD}\\u{E0000-\\u{EFFFD}]/u\n);\n\n// Valid characters for identifiers.\nconst identifierCharacter = either(\n  identifierHead,\n  /\\d/,\n  /[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F]/\n);\n\n// Valid identifier.\nconst identifier = concat(identifierHead, identifierCharacter, '*');\n\n// Valid type identifier.\nconst typeIdentifier = concat(/[A-Z]/, identifierCharacter, '*');\n\n// Built-in attributes, which are highlighted as keywords.\n// @available is handled separately.\n// https://docs.swift.org/swift-book/documentation/the-swift-programming-language/attributes\nconst keywordAttributes = [\n  'attached',\n  'autoclosure',\n  concat(/convention\\(/, either('swift', 'block', 'c'), /\\)/),\n  'discardableResult',\n  'dynamicCallable',\n  'dynamicMemberLookup',\n  'escaping',\n  'freestanding',\n  'frozen',\n  'GKInspectable',\n  'IBAction',\n  'IBDesignable',\n  'IBInspectable',\n  'IBOutlet',\n  'IBSegueAction',\n  'inlinable',\n  'main',\n  'nonobjc',\n  'NSApplicationMain',\n  'NSCopying',\n  'NSManaged',\n  concat(/objc\\(/, identifier, /\\)/),\n  'objc',\n  'objcMembers',\n  'propertyWrapper',\n  'requires_stored_property_inits',\n  'resultBuilder',\n  'Sendable',\n  'testable',\n  'UIApplicationMain',\n  'unchecked',\n  'unknown',\n  'usableFromInline',\n  'warn_unqualified_access'\n];\n\n// Contextual keywords used in @available and #(un)available.\nconst availabilityKeywords = [\n  'iOS',\n  'iOSApplicationExtension',\n  'macOS',\n  'macOSApplicationExtension',\n  'macCatalyst',\n  'macCatalystApplicationExtension',\n  'watchOS',\n  'watchOSApplicationExtension',\n  'tvOS',\n  'tvOSApplicationExtension',\n  'swift'\n];\n\n/*\nLanguage: Swift\nDescription: Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.\nAuthor: Steven Van Impe <steven.vanimpe@icloud.com>\nContributors: Chris Eidhof <chris@eidhof.nl>, Nate Cook <natecook@gmail.com>, Alexander Lichter <manniL@gmx.net>, Richard Gibson <gibson042@github>\nWebsite: https://swift.org\nCategory: common, system\n*/\n\n\n/** @type LanguageFn */\nfunction swift(hljs) {\n  const WHITESPACE = {\n    match: /\\s+/,\n    relevance: 0\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID411\n  const BLOCK_COMMENT = hljs.COMMENT(\n    '/\\\\*',\n    '\\\\*/',\n    { contains: [ 'self' ] }\n  );\n  const COMMENTS = [\n    hljs.C_LINE_COMMENT_MODE,\n    BLOCK_COMMENT\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID413\n  // https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html\n  const DOT_KEYWORD = {\n    match: [\n      /\\./,\n      either(...dotKeywords, ...optionalDotKeywords)\n    ],\n    className: { 2: \"keyword\" }\n  };\n  const KEYWORD_GUARD = {\n    // Consume .keyword to prevent highlighting properties and methods as keywords.\n    match: concat(/\\./, either(...keywords)),\n    relevance: 0\n  };\n  const PLAIN_KEYWORDS = keywords\n    .filter(kw => typeof kw === 'string')\n    .concat([ \"_|0\" ]); // seems common, so 0 relevance\n  const REGEX_KEYWORDS = keywords\n    .filter(kw => typeof kw !== 'string') // find regex\n    .concat(keywordTypes)\n    .map(keywordWrapper);\n  const KEYWORD = { variants: [\n    {\n      className: 'keyword',\n      match: either(...REGEX_KEYWORDS, ...optionalDotKeywords)\n    }\n  ] };\n  // find all the regular keywords\n  const KEYWORDS = {\n    $pattern: either(\n      /\\b\\w+/, // regular keywords\n      /#\\w+/ // number keywords\n    ),\n    keyword: PLAIN_KEYWORDS\n      .concat(numberSignKeywords),\n    literal: literals\n  };\n  const KEYWORD_MODES = [\n    DOT_KEYWORD,\n    KEYWORD_GUARD,\n    KEYWORD\n  ];\n\n  // https://github.com/apple/swift/tree/main/stdlib/public/core\n  const BUILT_IN_GUARD = {\n    // Consume .built_in to prevent highlighting properties and methods.\n    match: concat(/\\./, either(...builtIns)),\n    relevance: 0\n  };\n  const BUILT_IN = {\n    className: 'built_in',\n    match: concat(/\\b/, either(...builtIns), /(?=\\()/)\n  };\n  const BUILT_INS = [\n    BUILT_IN_GUARD,\n    BUILT_IN\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID418\n  const OPERATOR_GUARD = {\n    // Prevent -> from being highlighting as an operator.\n    match: /->/,\n    relevance: 0\n  };\n  const OPERATOR = {\n    className: 'operator',\n    relevance: 0,\n    variants: [\n      { match: operator },\n      {\n        // dot-operator: only operators that start with a dot are allowed to use dots as\n        // characters (..., ...<, .*, etc). So there rule here is: a dot followed by one or more\n        // characters that may also include dots.\n        match: `\\\\.(\\\\.|${operatorCharacter})+` }\n    ]\n  };\n  const OPERATORS = [\n    OPERATOR_GUARD,\n    OPERATOR\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_numeric-literal\n  // TODO: Update for leading `-` after lookbehind is supported everywhere\n  const decimalDigits = '([0-9]_*)+';\n  const hexDigits = '([0-9a-fA-F]_*)+';\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal floating-point-literal (subsumes decimal-literal)\n      { match: `\\\\b(${decimalDigits})(\\\\.(${decimalDigits}))?` + `([eE][+-]?(${decimalDigits}))?\\\\b` },\n      // hexadecimal floating-point-literal (subsumes hexadecimal-literal)\n      { match: `\\\\b0x(${hexDigits})(\\\\.(${hexDigits}))?` + `([pP][+-]?(${decimalDigits}))?\\\\b` },\n      // octal-literal\n      { match: /\\b0o([0-7]_*)+\\b/ },\n      // binary-literal\n      { match: /\\b0b([01]_*)+\\b/ }\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_string-literal\n  const ESCAPED_CHARACTER = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    variants: [\n      { match: concat(/\\\\/, rawDelimiter, /[0\\\\tnr\"']/) },\n      { match: concat(/\\\\/, rawDelimiter, /u\\{[0-9a-fA-F]{1,8}\\}/) }\n    ]\n  });\n  const ESCAPED_NEWLINE = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    match: concat(/\\\\/, rawDelimiter, /[\\t ]*(?:[\\r\\n]|\\r\\n)/)\n  });\n  const INTERPOLATION = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    label: \"interpol\",\n    begin: concat(/\\\\/, rawDelimiter, /\\(/),\n    end: /\\)/\n  });\n  const MULTILINE_STRING = (rawDelimiter = \"\") => ({\n    begin: concat(rawDelimiter, /\"\"\"/),\n    end: concat(/\"\"\"/, rawDelimiter),\n    contains: [\n      ESCAPED_CHARACTER(rawDelimiter),\n      ESCAPED_NEWLINE(rawDelimiter),\n      INTERPOLATION(rawDelimiter)\n    ]\n  });\n  const SINGLE_LINE_STRING = (rawDelimiter = \"\") => ({\n    begin: concat(rawDelimiter, /\"/),\n    end: concat(/\"/, rawDelimiter),\n    contains: [\n      ESCAPED_CHARACTER(rawDelimiter),\n      INTERPOLATION(rawDelimiter)\n    ]\n  });\n  const STRING = {\n    className: 'string',\n    variants: [\n      MULTILINE_STRING(),\n      MULTILINE_STRING(\"#\"),\n      MULTILINE_STRING(\"##\"),\n      MULTILINE_STRING(\"###\"),\n      SINGLE_LINE_STRING(),\n      SINGLE_LINE_STRING(\"#\"),\n      SINGLE_LINE_STRING(\"##\"),\n      SINGLE_LINE_STRING(\"###\")\n    ]\n  };\n\n  const REGEXP_CONTENTS = [\n    hljs.BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [ hljs.BACKSLASH_ESCAPE ]\n    }\n  ];\n\n  const BARE_REGEXP_LITERAL = {\n    begin: /\\/[^\\s](?=[^/\\n]*\\/)/,\n    end: /\\//,\n    contains: REGEXP_CONTENTS\n  };\n\n  const EXTENDED_REGEXP_LITERAL = (rawDelimiter) => {\n    const begin = concat(rawDelimiter, /\\//);\n    const end = concat(/\\//, rawDelimiter);\n    return {\n      begin,\n      end,\n      contains: [\n        ...REGEXP_CONTENTS,\n        {\n          scope: \"comment\",\n          begin: `#(?!.*${end})`,\n          end: /$/,\n        },\n      ],\n    };\n  };\n\n  // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/lexicalstructure/#Regular-Expression-Literals\n  const REGEXP = {\n    scope: \"regexp\",\n    variants: [\n      EXTENDED_REGEXP_LITERAL('###'),\n      EXTENDED_REGEXP_LITERAL('##'),\n      EXTENDED_REGEXP_LITERAL('#'),\n      BARE_REGEXP_LITERAL\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID412\n  const QUOTED_IDENTIFIER = { match: concat(/`/, identifier, /`/) };\n  const IMPLICIT_PARAMETER = {\n    className: 'variable',\n    match: /\\$\\d+/\n  };\n  const PROPERTY_WRAPPER_PROJECTION = {\n    className: 'variable',\n    match: `\\\\$${identifierCharacter}+`\n  };\n  const IDENTIFIERS = [\n    QUOTED_IDENTIFIER,\n    IMPLICIT_PARAMETER,\n    PROPERTY_WRAPPER_PROJECTION\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Attributes.html\n  const AVAILABLE_ATTRIBUTE = {\n    match: /(@|#(un)?)available/,\n    scope: 'keyword',\n    starts: { contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: availabilityKeywords,\n        contains: [\n          ...OPERATORS,\n          NUMBER,\n          STRING\n        ]\n      }\n    ] }\n  };\n  const KEYWORD_ATTRIBUTE = {\n    scope: 'keyword',\n    match: concat(/@/, either(...keywordAttributes))\n  };\n  const USER_DEFINED_ATTRIBUTE = {\n    scope: 'meta',\n    match: concat(/@/, identifier)\n  };\n  const ATTRIBUTES = [\n    AVAILABLE_ATTRIBUTE,\n    KEYWORD_ATTRIBUTE,\n    USER_DEFINED_ATTRIBUTE\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Types.html\n  const TYPE = {\n    match: lookahead(/\\b[A-Z]/),\n    relevance: 0,\n    contains: [\n      { // Common Apple frameworks, for relevance boost\n        className: 'type',\n        match: concat(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/, identifierCharacter, '+')\n      },\n      { // Type identifier\n        className: 'type',\n        match: typeIdentifier,\n        relevance: 0\n      },\n      { // Optional type\n        match: /[?!]+/,\n        relevance: 0\n      },\n      { // Variadic parameter\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      { // Protocol composition\n        match: concat(/\\s+&\\s+/, lookahead(typeIdentifier)),\n        relevance: 0\n      }\n    ]\n  };\n  const GENERIC_ARGUMENTS = {\n    begin: /</,\n    end: />/,\n    keywords: KEYWORDS,\n    contains: [\n      ...COMMENTS,\n      ...KEYWORD_MODES,\n      ...ATTRIBUTES,\n      OPERATOR_GUARD,\n      TYPE\n    ]\n  };\n  TYPE.contains.push(GENERIC_ARGUMENTS);\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#ID552\n  // Prevents element names from being highlighted as keywords.\n  const TUPLE_ELEMENT_NAME = {\n    match: concat(identifier, /\\s*:/),\n    keywords: \"_|0\",\n    relevance: 0\n  };\n  // Matches tuples as well as the parameter list of a function type.\n  const TUPLE = {\n    begin: /\\(/,\n    end: /\\)/,\n    relevance: 0,\n    keywords: KEYWORDS,\n    contains: [\n      'self',\n      TUPLE_ELEMENT_NAME,\n      ...COMMENTS,\n      REGEXP,\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS,\n      ...ATTRIBUTES,\n      TYPE\n    ]\n  };\n\n  const GENERIC_PARAMETERS = {\n    begin: /</,\n    end: />/,\n    keywords: 'repeat each',\n    contains: [\n      ...COMMENTS,\n      TYPE\n    ]\n  };\n  const FUNCTION_PARAMETER_NAME = {\n    begin: either(\n      lookahead(concat(identifier, /\\s*:/)),\n      lookahead(concat(identifier, /\\s+/, identifier, /\\s*:/))\n    ),\n    end: /:/,\n    relevance: 0,\n    contains: [\n      {\n        className: 'keyword',\n        match: /\\b_\\b/\n      },\n      {\n        className: 'params',\n        match: identifier\n      }\n    ]\n  };\n  const FUNCTION_PARAMETERS = {\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    contains: [\n      FUNCTION_PARAMETER_NAME,\n      ...COMMENTS,\n      ...KEYWORD_MODES,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...ATTRIBUTES,\n      TYPE,\n      TUPLE\n    ],\n    endsParent: true,\n    illegal: /[\"']/\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID362\n  // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/declarations/#Macro-Declaration\n  const FUNCTION_OR_MACRO = {\n    match: [\n      /(func|macro)/,\n      /\\s+/,\n      either(QUOTED_IDENTIFIER.match, identifier, operator)\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      GENERIC_PARAMETERS,\n      FUNCTION_PARAMETERS,\n      WHITESPACE\n    ],\n    illegal: [\n      /\\[/,\n      /%/\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID375\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID379\n  const INIT_SUBSCRIPT = {\n    match: [\n      /\\b(?:subscript|init[?!]?)/,\n      /\\s*(?=[<(])/,\n    ],\n    className: { 1: \"keyword\" },\n    contains: [\n      GENERIC_PARAMETERS,\n      FUNCTION_PARAMETERS,\n      WHITESPACE\n    ],\n    illegal: /\\[|%/\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID380\n  const OPERATOR_DECLARATION = {\n    match: [\n      /operator/,\n      /\\s+/,\n      operator\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title\"\n    }\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID550\n  const PRECEDENCEGROUP = {\n    begin: [\n      /precedencegroup/,\n      /\\s+/,\n      typeIdentifier\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title\"\n    },\n    contains: [ TYPE ],\n    keywords: [\n      ...precedencegroupKeywords,\n      ...literals\n    ],\n    end: /}/\n  };\n\n  // Add supported submodes to string interpolation.\n  for (const variant of STRING.variants) {\n    const interpolation = variant.contains.find(mode => mode.label === \"interpol\");\n    // TODO: Interpolation can contain any expression, so there's room for improvement here.\n    interpolation.keywords = KEYWORDS;\n    const submodes = [\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS\n    ];\n    interpolation.contains = [\n      ...submodes,\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          'self',\n          ...submodes\n        ]\n      }\n    ];\n  }\n\n  return {\n    name: 'Swift',\n    keywords: KEYWORDS,\n    contains: [\n      ...COMMENTS,\n      FUNCTION_OR_MACRO,\n      INIT_SUBSCRIPT,\n      {\n        beginKeywords: 'struct protocol class extension enum actor',\n        end: '\\\\{',\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {\n            className: \"title.class\",\n            begin: /[A-Za-z$_][\\u00C0-\\u02B80-9A-Za-z$_]*/\n          }),\n          ...KEYWORD_MODES\n        ]\n      },\n      OPERATOR_DECLARATION,\n      PRECEDENCEGROUP,\n      {\n        beginKeywords: 'import',\n        end: /$/,\n        contains: [ ...COMMENTS ],\n        relevance: 0\n      },\n      REGEXP,\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS,\n      ...ATTRIBUTES,\n      TYPE,\n      TUPLE\n    ]\n  };\n}\n\nexport { swift as default };\n", "const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: 'html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: 'css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: 'gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ]),\n      IDENT_RE$1, regex.lookahead(/\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        className: 'attr',\n        begin: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n  const tsLanguage = javascript(hljs);\n\n  const IDENT_RE$1 = IDENT_RE;\n  const TYPES = [\n    \"any\",\n    \"void\",\n    \"number\",\n    \"boolean\",\n    \"string\",\n    \"object\",\n    \"never\",\n    \"symbol\",\n    \"bigint\",\n    \"unknown\"\n  ];\n  const NAMESPACE = {\n    beginKeywords: 'namespace',\n    end: /\\{/,\n    excludeEnd: true,\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n  };\n  const INTERFACE = {\n    beginKeywords: 'interface',\n    end: /\\{/,\n    excludeEnd: true,\n    keywords: {\n      keyword: 'interface extends',\n      built_in: TYPES\n    },\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n  };\n  const USE_STRICT = {\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use strict['\"]/\n  };\n  const TS_SPECIFIC_KEYWORDS = [\n    \"type\",\n    \"namespace\",\n    \"interface\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"implements\",\n    \"declare\",\n    \"abstract\",\n    \"readonly\",\n    \"enum\",\n    \"override\"\n  ];\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n    literal: LITERALS,\n    built_in: BUILT_INS.concat(TYPES),\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n  const DECORATOR = {\n    className: 'meta',\n    begin: '@' + IDENT_RE$1,\n  };\n\n  const swapMode = (mode, label, replacement) => {\n    const indx = mode.contains.findIndex(m => m.label === label);\n    if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n    mode.contains.splice(indx, 1, replacement);\n  };\n\n\n  // this should update anywhere keywords is used since\n  // it will be the same actual JS object\n  Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n  tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n  tsLanguage.contains = tsLanguage.contains.concat([\n    DECORATOR,\n    NAMESPACE,\n    INTERFACE,\n  ]);\n\n  // TS gets a simpler shebang rule than JS\n  swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n  // JS use strict rule purposely excludes `asm` which makes no sense\n  swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n  const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n  functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n  Object.assign(tsLanguage, {\n    name: 'TypeScript',\n    aliases: [\n      'ts',\n      'tsx',\n      'mts',\n      'cts'\n    ]\n  });\n\n  return tsLanguage;\n}\n\nexport { typescript as default };\n", "/*\nLanguage: Visual Basic .NET\nDescription: Visual Basic .NET (VB.NET) is a multi-paradigm, object-oriented programming language, implemented on the .NET Framework.\nAuthors: Poren Chiang <ren.chiang@gmail.com>, Jan Pilzer\nWebsite: https://docs.microsoft.com/dotnet/visual-basic/getting-started\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction vbnet(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Character Literal\n   * Either a single character (\"a\"C) or an escaped double quote (\"\"\"\"C).\n   */\n  const CHARACTER = {\n    className: 'string',\n    begin: /\"(\"\"|[^/n])\"C\\b/\n  };\n\n  const STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    illegal: /\\n/,\n    contains: [\n      {\n        // double quote escape\n        begin: /\"\"/ }\n    ]\n  };\n\n  /** Date Literals consist of a date, a time, or both separated by whitespace, surrounded by # */\n  const MM_DD_YYYY = /\\d{1,2}\\/\\d{1,2}\\/\\d{4}/;\n  const YYYY_MM_DD = /\\d{4}-\\d{1,2}-\\d{1,2}/;\n  const TIME_12H = /(\\d|1[012])(:\\d+){0,2} *(AM|PM)/;\n  const TIME_24H = /\\d{1,2}(:\\d{1,2}){1,2}/;\n  const DATE = {\n    className: 'literal',\n    variants: [\n      {\n        // #YYYY-MM-DD# (ISO-Date) or #M/D/YYYY# (US-Date)\n        begin: regex.concat(/# */, regex.either(YYYY_MM_DD, MM_DD_YYYY), / *#/) },\n      {\n        // #H:mm[:ss]# (24h Time)\n        begin: regex.concat(/# */, TIME_24H, / *#/) },\n      {\n        // #h[:mm[:ss]] A# (12h Time)\n        begin: regex.concat(/# */, TIME_12H, / *#/) },\n      {\n        // date plus time\n        begin: regex.concat(\n          /# */,\n          regex.either(YYYY_MM_DD, MM_DD_YYYY),\n          / +/,\n          regex.either(TIME_12H, TIME_24H),\n          / *#/\n        ) }\n    ]\n  };\n\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      {\n        // Float\n        begin: /\\b\\d[\\d_]*((\\.[\\d_]+(E[+-]?[\\d_]+)?)|(E[+-]?[\\d_]+))[RFD@!#]?/ },\n      {\n        // Integer (base 10)\n        begin: /\\b\\d[\\d_]*((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 16)\n        begin: /&H[\\dA-F_]+((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 8)\n        begin: /&O[0-7_]+((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 2)\n        begin: /&B[01_]+((U?[SIL])|[%&])?/ }\n    ]\n  };\n\n  const LABEL = {\n    className: 'label',\n    begin: /^\\w+:/\n  };\n\n  const DOC_COMMENT = hljs.COMMENT(/'''/, /$/, { contains: [\n    {\n      className: 'doctag',\n      begin: /<\\/?/,\n      end: />/\n    }\n  ] });\n\n  const COMMENT = hljs.COMMENT(null, /$/, { variants: [\n    { begin: /'/ },\n    {\n      // TODO: Use multi-class for leading spaces\n      begin: /([\\t ]|^)REM(?=\\s)/ }\n  ] });\n\n  const DIRECTIVES = {\n    className: 'meta',\n    // TODO: Use multi-class for indentation once available\n    begin: /[\\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'const disable else elseif enable end externalsource if region then' },\n    contains: [ COMMENT ]\n  };\n\n  return {\n    name: 'Visual Basic .NET',\n    aliases: [ 'vb' ],\n    case_insensitive: true,\n    classNameAliases: { label: 'symbol' },\n    keywords: {\n      keyword:\n        'addhandler alias aggregate ansi as async assembly auto binary by byref byval ' /* a-b */\n        + 'call case catch class compare const continue custom declare default delegate dim distinct do ' /* c-d */\n        + 'each equals else elseif end enum erase error event exit explicit finally for friend from function ' /* e-f */\n        + 'get global goto group handles if implements imports in inherits interface into iterator ' /* g-i */\n        + 'join key let lib loop me mid module mustinherit mustoverride mybase myclass ' /* j-m */\n        + 'namespace narrowing new next notinheritable notoverridable ' /* n */\n        + 'of off on operator option optional order overloads overridable overrides ' /* o */\n        + 'paramarray partial preserve private property protected public ' /* p */\n        + 'raiseevent readonly redim removehandler resume return ' /* r */\n        + 'select set shadows shared skip static step stop structure strict sub synclock ' /* s */\n        + 'take text then throw to try unicode until using when where while widening with withevents writeonly yield' /* t-y */,\n      built_in:\n        // Operators https://docs.microsoft.com/dotnet/visual-basic/language-reference/operators\n        'addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor '\n        // Type Conversion Functions https://docs.microsoft.com/dotnet/visual-basic/language-reference/functions/type-conversion-functions\n        + 'cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort',\n      type:\n        // Data types https://docs.microsoft.com/dotnet/visual-basic/language-reference/data-types\n        'boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort',\n      literal: 'true false nothing'\n    },\n    illegal:\n      '//|\\\\{|\\\\}|endif|gosub|variant|wend|^\\\\$ ' /* reserved deprecated keywords */,\n    contains: [\n      CHARACTER,\n      STRING,\n      DATE,\n      NUMBER,\n      LABEL,\n      DOC_COMMENT,\n      COMMENT,\n      DIRECTIVES\n    ]\n  };\n}\n\nexport { vbnet as default };\n", "/*\nLanguage: WebAssembly\nWebsite: https://webassembly.org\nDescription:  Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.\nCategory: web, common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction wasm(hljs) {\n  hljs.regex;\n  const BLOCK_COMMENT = hljs.COMMENT(/\\(;/, /;\\)/);\n  BLOCK_COMMENT.contains.push(\"self\");\n  const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);\n\n  const KWS = [\n    \"anyfunc\",\n    \"block\",\n    \"br\",\n    \"br_if\",\n    \"br_table\",\n    \"call\",\n    \"call_indirect\",\n    \"data\",\n    \"drop\",\n    \"elem\",\n    \"else\",\n    \"end\",\n    \"export\",\n    \"func\",\n    \"global.get\",\n    \"global.set\",\n    \"local.get\",\n    \"local.set\",\n    \"local.tee\",\n    \"get_global\",\n    \"get_local\",\n    \"global\",\n    \"if\",\n    \"import\",\n    \"local\",\n    \"loop\",\n    \"memory\",\n    \"memory.grow\",\n    \"memory.size\",\n    \"module\",\n    \"mut\",\n    \"nop\",\n    \"offset\",\n    \"param\",\n    \"result\",\n    \"return\",\n    \"select\",\n    \"set_global\",\n    \"set_local\",\n    \"start\",\n    \"table\",\n    \"tee_local\",\n    \"then\",\n    \"type\",\n    \"unreachable\"\n  ];\n\n  const FUNCTION_REFERENCE = {\n    begin: [\n      /(?:func|call|call_indirect)/,\n      /\\s+/,\n      /\\$[^\\s)]+/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    }\n  };\n\n  const ARGUMENT = {\n    className: \"variable\",\n    begin: /\\$[\\w_]+/\n  };\n\n  const PARENS = {\n    match: /(\\((?!;)|\\))+/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n\n  const NUMBER = {\n    className: \"number\",\n    relevance: 0,\n    // borrowed from Prism, TODO: split out into variants\n    match: /[+-]?\\b(?:\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:[eE][+-]?\\d(?:_?\\d)*)?|0x[\\da-fA-F](?:_?[\\da-fA-F])*(?:\\.[\\da-fA-F](?:_?[\\da-fA-D])*)?(?:[pP][+-]?\\d(?:_?\\d)*)?)\\b|\\binf\\b|\\bnan(?::0x[\\da-fA-F](?:_?[\\da-fA-D])*)?\\b/\n  };\n\n  const TYPE = {\n    // look-ahead prevents us from gobbling up opcodes\n    match: /(i32|i64|f32|f64)(?!\\.)/,\n    className: \"type\"\n  };\n\n  const MATH_OPERATIONS = {\n    className: \"keyword\",\n    // borrowed from Prism, TODO: split out into variants\n    match: /\\b(f32|f64|i32|i64)(?:\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\/i(?:32|64)|copysign|ctz|demote\\/f64|div(?:_[su])?|eqz?|extend_[su]\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\\/f32|reinterpret\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\\/f(?:32|64))?|wrap\\/i64|xor))\\b/\n  };\n\n  const OFFSET_ALIGN = {\n    match: [\n      /(?:offset|align)/,\n      /\\s*/,\n      /=/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"operator\"\n    }\n  };\n\n  return {\n    name: 'WebAssembly',\n    keywords: {\n      $pattern: /[\\w.]+/,\n      keyword: KWS\n    },\n    contains: [\n      LINE_COMMENT,\n      BLOCK_COMMENT,\n      OFFSET_ALIGN,\n      ARGUMENT,\n      PARENS,\n      FUNCTION_REFERENCE,\n      hljs.QUOTE_STRING_MODE,\n      TYPE,\n      MATH_OPERATIONS,\n      NUMBER\n    ]\n  };\n}\n\nexport { wasm as default };\n", "/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n  const regex = hljs.regex;\n  // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n  // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n  // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n  // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n  // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n  const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n  const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n  const XML_ENTITIES = {\n    className: 'symbol',\n    begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n  };\n  const XML_META_KEYWORDS = {\n    begin: /\\s/,\n    contains: [\n      {\n        className: 'keyword',\n        begin: /#?[a-z_][a-z1-9_-]+/,\n        illegal: /\\n/\n      }\n    ]\n  };\n  const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n    begin: /\\(/,\n    end: /\\)/\n  });\n  const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n  const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n  const TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: /=\\s*/,\n        relevance: 0,\n        contains: [\n          {\n            className: 'string',\n            endsParent: true,\n            variants: [\n              {\n                begin: /\"/,\n                end: /\"/,\n                contains: [ XML_ENTITIES ]\n              },\n              {\n                begin: /'/,\n                end: /'/,\n                contains: [ XML_ENTITIES ]\n              },\n              { begin: /[^\\s\"'=<>`]+/ }\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    name: 'HTML, XML',\n    aliases: [\n      'html',\n      'xhtml',\n      'rss',\n      'atom',\n      'xjb',\n      'xsd',\n      'xsl',\n      'plist',\n      'wsf',\n      'svg'\n    ],\n    case_insensitive: true,\n    unicodeRegex: true,\n    contains: [\n      {\n        className: 'meta',\n        begin: /<![a-z]/,\n        end: />/,\n        relevance: 10,\n        contains: [\n          XML_META_KEYWORDS,\n          QUOTE_META_STRING_MODE,\n          APOS_META_STRING_MODE,\n          XML_META_PAR_KEYWORDS,\n          {\n            begin: /\\[/,\n            end: /\\]/,\n            contains: [\n              {\n                className: 'meta',\n                begin: /<![a-z]/,\n                end: />/,\n                contains: [\n                  XML_META_KEYWORDS,\n                  XML_META_PAR_KEYWORDS,\n                  QUOTE_META_STRING_MODE,\n                  APOS_META_STRING_MODE\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      hljs.COMMENT(\n        /<!--/,\n        /-->/,\n        { relevance: 10 }\n      ),\n      {\n        begin: /<!\\[CDATA\\[/,\n        end: /\\]\\]>/,\n        relevance: 10\n      },\n      XML_ENTITIES,\n      // xml processing instructions\n      {\n        className: 'meta',\n        end: /\\?>/,\n        variants: [\n          {\n            begin: /<\\?xml/,\n            relevance: 10,\n            contains: [\n              QUOTE_META_STRING_MODE\n            ]\n          },\n          {\n            begin: /<\\?[a-z][a-z0-9]+/,\n          }\n        ]\n\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending bracket.\n        */\n        begin: /<style(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'style' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/style>/,\n          returnEnd: true,\n          subLanguage: [\n            'css',\n            'xml'\n          ]\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: /<script(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'script' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/script>/,\n          returnEnd: true,\n          subLanguage: [\n            'javascript',\n            'handlebars',\n            'xml'\n          ]\n        }\n      },\n      // we need this for now for jSX\n      {\n        className: 'tag',\n        begin: /<>|<\\/>/\n      },\n      // open tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /</,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE,\n            // <tag/>\n            // <tag>\n            // <tag ...\n            regex.either(/\\/>/, />/, /\\s/)\n          ))\n        ),\n        end: /\\/?>/,\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0,\n            starts: TAG_INTERNALS\n          }\n        ]\n      },\n      // close tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /<\\//,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE, />/\n          ))\n        ),\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0\n          },\n          {\n            begin: />/,\n            relevance: 0,\n            endsParent: true\n          }\n        ]\n      }\n    ]\n  };\n}\n\nexport { xml as default };\n", "/*\nLanguage: YAML\nDescription: Yet Another Markdown Language\nAuthor: Stefan Wienert <stwienert@gmail.com>\nContributors: Carl Baxter <carl@cbax.tech>\nRequires: ruby.js\nWebsite: https://yaml.org\nCategory: common, config\n*/\nfunction yaml(hljs) {\n  const LITERALS = 'true false yes no null';\n\n  // YAML spec allows non-reserved URI characters in tags.\n  const URI_CHARACTERS = '[\\\\w#;/?:@&=+$,.~*\\'()[\\\\]]+';\n\n  // Define keys as starting with a word character\n  // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n  // ...and ending with a colon followed immediately by a space, tab or newline.\n  // The YAML spec allows for much more than this, but this covers most use-cases.\n  const KEY = {\n    className: 'attr',\n    variants: [\n      { begin: '\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)' },\n      { // double quoted keys\n        begin: '\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)' },\n      { // single quoted keys\n        begin: '\\'\\\\w[\\\\w :\\\\/.-]*\\':(?=[ \\t]|$)' }\n    ]\n  };\n\n  const TEMPLATE_VARIABLES = {\n    className: 'template-variable',\n    variants: [\n      { // jinja templates Ansible\n        begin: /\\{\\{/,\n        end: /\\}\\}/\n      },\n      { // Ruby i18n\n        begin: /%\\{/,\n        end: /\\}/\n      }\n    ]\n  };\n  const STRING = {\n    className: 'string',\n    relevance: 0,\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      { begin: /\\S+/ }\n    ],\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      TEMPLATE_VARIABLES\n    ]\n  };\n\n  // Strings inside of value containers (objects) can't contain braces,\n  // brackets, or commas\n  const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\n    {\n      begin: /'/,\n      end: /'/\n    },\n    {\n      begin: /\"/,\n      end: /\"/\n    },\n    { begin: /[^\\s,{}[\\]]+/ }\n  ] });\n\n  const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\n  const TIME_RE = '([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\n  const FRACTION_RE = '(\\\\.[0-9]*)?';\n  const ZONE_RE = '([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\n  const TIMESTAMP = {\n    className: 'number',\n    begin: '\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\b'\n  };\n\n  const VALUE_CONTAINER = {\n    end: ',',\n    endsWithParent: true,\n    excludeEnd: true,\n    keywords: LITERALS,\n    relevance: 0\n  };\n  const OBJECT = {\n    begin: /\\{/,\n    end: /\\}/,\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n  const ARRAY = {\n    begin: '\\\\[',\n    end: '\\\\]',\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n\n  const MODES = [\n    KEY,\n    {\n      className: 'meta',\n      begin: '^---\\\\s*$',\n      relevance: 10\n    },\n    { // multi line string\n      // Blocks start with a | or > followed by a newline\n      //\n      // Indentation of subsequent lines must be the same to\n      // be considered part of the block\n      className: 'string',\n      begin: '[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*'\n    },\n    { // Ruby/Rails erb\n      begin: '<%[%=-]?',\n      end: '[%-]?%>',\n      subLanguage: 'ruby',\n      excludeBegin: true,\n      excludeEnd: true,\n      relevance: 0\n    },\n    { // named tags\n      className: 'type',\n      begin: '!\\\\w+!' + URI_CHARACTERS\n    },\n    // https://yaml.org/spec/1.2/spec.html#id2784064\n    { // verbatim tags\n      className: 'type',\n      begin: '!<' + URI_CHARACTERS + \">\"\n    },\n    { // primary tags\n      className: 'type',\n      begin: '!' + URI_CHARACTERS\n    },\n    { // secondary tags\n      className: 'type',\n      begin: '!!' + URI_CHARACTERS\n    },\n    { // fragment id &ref\n      className: 'meta',\n      begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // fragment reference *ref\n      className: 'meta',\n      begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // array listing\n      className: 'bullet',\n      // TODO: remove |$ hack when we have proper look-ahead support\n      begin: '-(?=[ ]|$)',\n      relevance: 0\n    },\n    hljs.HASH_COMMENT_MODE,\n    {\n      beginKeywords: LITERALS,\n      keywords: { literal: LITERALS }\n    },\n    TIMESTAMP,\n    // numbers are any valid C-style number that\n    // sit isolated from other words\n    {\n      className: 'number',\n      begin: hljs.C_NUMBER_RE + '\\\\b',\n      relevance: 0\n    },\n    OBJECT,\n    ARRAY,\n    STRING\n  ];\n\n  const VALUE_MODES = [ ...MODES ];\n  VALUE_MODES.pop();\n  VALUE_MODES.push(CONTAINER_STRING);\n  VALUE_CONTAINER.contains = VALUE_MODES;\n\n  return {\n    name: 'YAML',\n    case_insensitive: true,\n    aliases: [ 'yml' ],\n    contains: MODES\n  };\n}\n\nexport { yaml as default };\n", "/**\n * @typedef {import('highlight.js').LanguageFn} LanguageFn\n */\n\nimport arduino from 'highlight.js/lib/languages/arduino'\nimport bash from 'highlight.js/lib/languages/bash'\nimport c from 'highlight.js/lib/languages/c'\nimport cpp from 'highlight.js/lib/languages/cpp'\nimport csharp from 'highlight.js/lib/languages/csharp'\nimport css from 'highlight.js/lib/languages/css'\nimport diff from 'highlight.js/lib/languages/diff'\nimport go from 'highlight.js/lib/languages/go'\nimport graphql from 'highlight.js/lib/languages/graphql'\nimport ini from 'highlight.js/lib/languages/ini'\nimport java from 'highlight.js/lib/languages/java'\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport json from 'highlight.js/lib/languages/json'\nimport kotlin from 'highlight.js/lib/languages/kotlin'\nimport less from 'highlight.js/lib/languages/less'\nimport lua from 'highlight.js/lib/languages/lua'\nimport makefile from 'highlight.js/lib/languages/makefile'\nimport markdown from 'highlight.js/lib/languages/markdown'\nimport objectivec from 'highlight.js/lib/languages/objectivec'\nimport perl from 'highlight.js/lib/languages/perl'\nimport php from 'highlight.js/lib/languages/php'\nimport phpTemplate from 'highlight.js/lib/languages/php-template'\nimport plaintext from 'highlight.js/lib/languages/plaintext'\nimport python from 'highlight.js/lib/languages/python'\nimport pythonRepl from 'highlight.js/lib/languages/python-repl'\nimport r from 'highlight.js/lib/languages/r'\nimport ruby from 'highlight.js/lib/languages/ruby'\nimport rust from 'highlight.js/lib/languages/rust'\nimport scss from 'highlight.js/lib/languages/scss'\nimport shell from 'highlight.js/lib/languages/shell'\nimport sql from 'highlight.js/lib/languages/sql'\nimport swift from 'highlight.js/lib/languages/swift'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport vbnet from 'highlight.js/lib/languages/vbnet'\nimport wasm from 'highlight.js/lib/languages/wasm'\nimport xml from 'highlight.js/lib/languages/xml'\nimport yaml from 'highlight.js/lib/languages/yaml'\n\n/**\n * Map of grammars.\n *\n * @type {Record<string, LanguageFn>}\n */\nexport const grammars = {\n  arduino,\n  bash,\n  c,\n  cpp,\n  csharp,\n  css,\n  diff,\n  go,\n  graphql,\n  ini,\n  java,\n  javascript,\n  json,\n  kotlin,\n  less,\n  lua,\n  makefile,\n  markdown,\n  objectivec,\n  perl,\n  php,\n  'php-template': phpTemplate,\n  plaintext,\n  python,\n  'python-repl': pythonRepl,\n  r,\n  ruby,\n  rust,\n  scss,\n  shell,\n  sql,\n  swift,\n  typescript,\n  vbnet,\n  wasm,\n  xml,\n  yaml\n}\n", "/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n  if (obj instanceof Map) {\n    obj.clear =\n      obj.delete =\n      obj.set =\n        function () {\n          throw new Error('map is read-only');\n        };\n  } else if (obj instanceof Set) {\n    obj.add =\n      obj.clear =\n      obj.delete =\n        function () {\n          throw new Error('set is read-only');\n        };\n  }\n\n  // Freeze self\n  Object.freeze(obj);\n\n  Object.getOwnPropertyNames(obj).forEach((name) => {\n    const prop = obj[name];\n    const type = typeof prop;\n\n    // Freeze prop if it is an object or function and also not already frozen\n    if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n      deepFreeze(prop);\n    }\n  });\n\n  return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n  /**\n   * @param {CompiledMode} mode\n   */\n  constructor(mode) {\n    // eslint-disable-next-line no-undefined\n    if (mode.data === undefined) mode.data = {};\n\n    this.data = mode.data;\n    this.isMatchIgnored = false;\n  }\n\n  ignoreMatch() {\n    this.isMatchIgnored = true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n  return value\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#x27;');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n  /** @type Record<string,any> */\n  const result = Object.create(null);\n\n  for (const key in original) {\n    result[key] = original[key];\n  }\n  objects.forEach(function(obj) {\n    for (const key in obj) {\n      result[key] = obj[key];\n    }\n  });\n  return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n  // rarely we can have a sublanguage where language is undefined\n  // TODO: track down why\n  return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n  // sub-language\n  if (name.startsWith(\"language:\")) {\n    return name.replace(\"language:\", \"language-\");\n  }\n  // tiered scope: comment.line\n  if (name.includes(\".\")) {\n    const pieces = name.split(\".\");\n    return [\n      `${prefix}${pieces.shift()}`,\n      ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n    ].join(\" \");\n  }\n  // simple scope\n  return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n  /**\n   * Creates a new HTMLRenderer\n   *\n   * @param {Tree} parseTree - the parse tree (must support `walk` API)\n   * @param {{classPrefix: string}} options\n   */\n  constructor(parseTree, options) {\n    this.buffer = \"\";\n    this.classPrefix = options.classPrefix;\n    parseTree.walk(this);\n  }\n\n  /**\n   * Adds texts to the output stream\n   *\n   * @param {string} text */\n  addText(text) {\n    this.buffer += escapeHTML(text);\n  }\n\n  /**\n   * Adds a node open to the output stream (if needed)\n   *\n   * @param {Node} node */\n  openNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    const className = scopeToCSSClass(node.scope,\n      { prefix: this.classPrefix });\n    this.span(className);\n  }\n\n  /**\n   * Adds a node close to the output stream (if needed)\n   *\n   * @param {Node} node */\n  closeNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    this.buffer += SPAN_CLOSE;\n  }\n\n  /**\n   * returns the accumulated buffer\n  */\n  value() {\n    return this.buffer;\n  }\n\n  // helpers\n\n  /**\n   * Builds a span element\n   *\n   * @param {string} className */\n  span(className) {\n    this.buffer += `<span class=\"${className}\">`;\n  }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/**  */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n  /** @type DataNode */\n  const result = { children: [] };\n  Object.assign(result, opts);\n  return result;\n};\n\nclass TokenTree {\n  constructor() {\n    /** @type DataNode */\n    this.rootNode = newNode();\n    this.stack = [this.rootNode];\n  }\n\n  get top() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  get root() { return this.rootNode; }\n\n  /** @param {Node} node */\n  add(node) {\n    this.top.children.push(node);\n  }\n\n  /** @param {string} scope */\n  openNode(scope) {\n    /** @type Node */\n    const node = newNode({ scope });\n    this.add(node);\n    this.stack.push(node);\n  }\n\n  closeNode() {\n    if (this.stack.length > 1) {\n      return this.stack.pop();\n    }\n    // eslint-disable-next-line no-undefined\n    return undefined;\n  }\n\n  closeAllNodes() {\n    while (this.closeNode());\n  }\n\n  toJSON() {\n    return JSON.stringify(this.rootNode, null, 4);\n  }\n\n  /**\n   * @typedef { import(\"./html_renderer\").Renderer } Renderer\n   * @param {Renderer} builder\n   */\n  walk(builder) {\n    // this does not\n    return this.constructor._walk(builder, this.rootNode);\n    // this works\n    // return TokenTree._walk(builder, this.rootNode);\n  }\n\n  /**\n   * @param {Renderer} builder\n   * @param {Node} node\n   */\n  static _walk(builder, node) {\n    if (typeof node === \"string\") {\n      builder.addText(node);\n    } else if (node.children) {\n      builder.openNode(node);\n      node.children.forEach((child) => this._walk(builder, child));\n      builder.closeNode(node);\n    }\n    return builder;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  static _collapse(node) {\n    if (typeof node === \"string\") return;\n    if (!node.children) return;\n\n    if (node.children.every(el => typeof el === \"string\")) {\n      // node.text = node.children.join(\"\");\n      // delete node.children;\n      node.children = [node.children.join(\"\")];\n    } else {\n      node.children.forEach((child) => {\n        TokenTree._collapse(child);\n      });\n    }\n  }\n}\n\n/**\n  Currently this is all private API, but this is the minimal API necessary\n  that an Emitter must implement to fully support the parser.\n\n  Minimal interface:\n\n  - addText(text)\n  - __addSublanguage(emitter, subLanguageName)\n  - startScope(scope)\n  - endScope()\n  - finalize()\n  - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n  /**\n   * @param {*} options\n   */\n  constructor(options) {\n    super();\n    this.options = options;\n  }\n\n  /**\n   * @param {string} text\n   */\n  addText(text) {\n    if (text === \"\") { return; }\n\n    this.add(text);\n  }\n\n  /** @param {string} scope */\n  startScope(scope) {\n    this.openNode(scope);\n  }\n\n  endScope() {\n    this.closeNode();\n  }\n\n  /**\n   * @param {Emitter & {root: DataNode}} emitter\n   * @param {string} name\n   */\n  __addSublanguage(emitter, name) {\n    /** @type DataNode */\n    const node = emitter.root;\n    if (name) node.scope = `language:${name}`;\n\n    this.add(node);\n  }\n\n  toHTML() {\n    const renderer = new HTMLRenderer(this, this.options);\n    return renderer.value();\n  }\n\n  finalize() {\n    this.closeAllNodes();\n    return true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n  return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n  return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n  return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n  const match = re && re.exec(lexeme);\n  return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n//   interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n//   follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n  let numCaptures = 0;\n\n  return regexps.map((regex) => {\n    numCaptures += 1;\n    const offset = numCaptures;\n    let re = source(regex);\n    let out = '';\n\n    while (re.length > 0) {\n      const match = BACKREF_RE.exec(re);\n      if (!match) {\n        out += re;\n        break;\n      }\n      out += re.substring(0, match.index);\n      re = re.substring(match.index + match[0].length);\n      if (match[0][0] === '\\\\' && match[1]) {\n        // Adjust the backreference.\n        out += '\\\\' + String(Number(match[1]) + offset);\n      } else {\n        out += match[0];\n        if (match[0] === '(') {\n          numCaptures++;\n        }\n      }\n    }\n    return out;\n  }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n  const beginShebang = /^#![ ]*\\//;\n  if (opts.binary) {\n    opts.begin = concat(\n      beginShebang,\n      /.*\\b/,\n      opts.binary,\n      /\\b.*/);\n  }\n  return inherit$1({\n    scope: 'meta',\n    begin: beginShebang,\n    end: /$/,\n    relevance: 0,\n    /** @type {ModeCallback} */\n    \"on:begin\": (m, resp) => {\n      if (m.index !== 0) resp.ignoreMatch();\n    }\n  }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n  begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n  scope: 'string',\n  begin: '\\'',\n  end: '\\'',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n  scope: 'string',\n  begin: '\"',\n  end: '\"',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n  begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n  const mode = inherit$1(\n    {\n      scope: 'comment',\n      begin,\n      end,\n      contains: []\n    },\n    modeOptions\n  );\n  mode.contains.push({\n    scope: 'doctag',\n    // hack to avoid the space from being included. the space is necessary to\n    // match here to prevent the plain text rule below from gobbling up doctags\n    begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n    end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n    excludeBegin: true,\n    relevance: 0\n  });\n  const ENGLISH_WORD = either(\n    // list of common 1 and 2 letter words in English\n    \"I\",\n    \"a\",\n    \"is\",\n    \"so\",\n    \"us\",\n    \"to\",\n    \"at\",\n    \"if\",\n    \"in\",\n    \"it\",\n    \"on\",\n    // note: this is not an exhaustive list of contractions, just popular ones\n    /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n    /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n    /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n  );\n  // looking like plain text, more likely to be a comment\n  mode.contains.push(\n    {\n      // TODO: how to include \", (, ) without breaking grammars that use these for\n      // comment delimiters?\n      // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n      // ---\n\n      // this tries to find sequences of 3 english words in a row (without any\n      // \"programming\" type syntax) this gives us a strong signal that we've\n      // TRULY found a comment - vs perhaps scanning with the wrong language.\n      // It's possible to find something that LOOKS like the start of the\n      // comment - but then if there is no readable text - good chance it is a\n      // false match and not a comment.\n      //\n      // for a visual example please see:\n      // https://github.com/highlightjs/highlight.js/issues/2827\n\n      begin: concat(\n        /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n        '(',\n        ENGLISH_WORD,\n        /[.]?[:]?([.][ ]|[ ])/,\n        '){3}') // look for 3 words in a row\n    }\n  );\n  return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n  scope: 'number',\n  begin: NUMBER_RE,\n  relevance: 0\n};\nconst C_NUMBER_MODE = {\n  scope: 'number',\n  begin: C_NUMBER_RE,\n  relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n  scope: 'number',\n  begin: BINARY_NUMBER_RE,\n  relevance: 0\n};\nconst REGEXP_MODE = {\n  scope: \"regexp\",\n  begin: /\\/(?=[^/\\n]*\\/)/,\n  end: /\\/[gimuy]*/,\n  contains: [\n    BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [BACKSLASH_ESCAPE]\n    }\n  ]\n};\nconst TITLE_MODE = {\n  scope: 'title',\n  begin: IDENT_RE,\n  relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n  scope: 'title',\n  begin: UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\nconst METHOD_GUARD = {\n  // excludes method names from keyword processing\n  begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n  return Object.assign(mode,\n    {\n      /** @type {ModeCallback} */\n      'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n      /** @type {ModeCallback} */\n      'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n    });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  APOS_STRING_MODE: APOS_STRING_MODE,\n  BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n  BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n  BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n  COMMENT: COMMENT,\n  C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n  C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n  C_NUMBER_MODE: C_NUMBER_MODE,\n  C_NUMBER_RE: C_NUMBER_RE,\n  END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n  HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n  IDENT_RE: IDENT_RE,\n  MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n  METHOD_GUARD: METHOD_GUARD,\n  NUMBER_MODE: NUMBER_MODE,\n  NUMBER_RE: NUMBER_RE,\n  PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n  QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n  REGEXP_MODE: REGEXP_MODE,\n  RE_STARTERS_RE: RE_STARTERS_RE,\n  SHEBANG: SHEBANG,\n  TITLE_MODE: TITLE_MODE,\n  UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n  UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`.  The extension then just moves `match` into\n// `begin` when it runs.  Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n  const before = match.input[match.index - 1];\n  if (before === \".\") {\n    response.ignoreMatch();\n  }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.className !== undefined) {\n    mode.scope = mode.className;\n    delete mode.className;\n  }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n  if (!parent) return;\n  if (!mode.beginKeywords) return;\n\n  // for languages with keywords that include non-word characters checking for\n  // a word boundary is not sufficient, so instead we check for a word boundary\n  // or whitespace - this does no harm in any case since our keyword engine\n  // doesn't allow spaces in keywords anyways and we still check for the boundary\n  // first\n  mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n  mode.__beforeBegin = skipIfHasPrecedingDot;\n  mode.keywords = mode.keywords || mode.beginKeywords;\n  delete mode.beginKeywords;\n\n  // prevents double relevance, the keywords themselves provide\n  // relevance, the mode doesn't need to double it\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n  if (!Array.isArray(mode.illegal)) return;\n\n  mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n  if (!mode.match) return;\n  if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n  mode.begin = mode.match;\n  delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n  if (!mode.beforeMatch) return;\n  // starts conflicts with endsParent which we need to make sure the child\n  // rule is not matched multiple times\n  if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n  const originalMode = Object.assign({}, mode);\n  Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n  mode.keywords = originalMode.keywords;\n  mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n  mode.starts = {\n    relevance: 0,\n    contains: [\n      Object.assign(originalMode, { endsParent: true })\n    ]\n  };\n  mode.relevance = 0;\n\n  delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n  'of',\n  'and',\n  'for',\n  'in',\n  'not',\n  'or',\n  'if',\n  'then',\n  'parent', // common variable name\n  'list', // common variable name\n  'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n  /** @type {import(\"highlight.js/private\").KeywordDict} */\n  const compiledKeywords = Object.create(null);\n\n  // input can be a string of keywords, an array of keywords, or a object with\n  // named keys representing scopeName (which can then point to a string or array)\n  if (typeof rawKeywords === 'string') {\n    compileList(scopeName, rawKeywords.split(\" \"));\n  } else if (Array.isArray(rawKeywords)) {\n    compileList(scopeName, rawKeywords);\n  } else {\n    Object.keys(rawKeywords).forEach(function(scopeName) {\n      // collapse all our objects back into the parent object\n      Object.assign(\n        compiledKeywords,\n        compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n      );\n    });\n  }\n  return compiledKeywords;\n\n  // ---\n\n  /**\n   * Compiles an individual list of keywords\n   *\n   * Ex: \"for if when while|5\"\n   *\n   * @param {string} scopeName\n   * @param {Array<string>} keywordList\n   */\n  function compileList(scopeName, keywordList) {\n    if (caseInsensitive) {\n      keywordList = keywordList.map(x => x.toLowerCase());\n    }\n    keywordList.forEach(function(keyword) {\n      const pair = keyword.split('|');\n      compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n    });\n  }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n  // manual scores always win over common keywords\n  // so you can force a score of 1 if you really insist\n  if (providedScore) {\n    return Number(providedScore);\n  }\n\n  return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n  return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n  console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n  console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n  if (seenDeprecations[`${version}/${message}`]) return;\n\n  console.log(`Deprecated as of ${version}. ${message}`);\n  seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n *   { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n *   (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n *   { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5.  This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n  let offset = 0;\n  const scopeNames = mode[key];\n  /** @type Record<number,boolean> */\n  const emit = {};\n  /** @type Record<number,string> */\n  const positions = {};\n\n  for (let i = 1; i <= regexes.length; i++) {\n    positions[i + offset] = scopeNames[i];\n    emit[i + offset] = true;\n    offset += countMatchGroups(regexes[i - 1]);\n  }\n  // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n  // output from inside match groups\n  mode[key] = positions;\n  mode[key]._emit = emit;\n  mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n  if (!Array.isArray(mode.begin)) return;\n\n  if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n    error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n    error(\"beginScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n  mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n  if (!Array.isArray(mode.end)) return;\n\n  if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n    error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n    error(\"endScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.end, { key: \"endScope\" });\n  mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n  {\n    match: [ /def/, /\\w+/ ]\n    scope: { 1: \"keyword\" , 2: \"title\" }\n  }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n  if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n    mode.beginScope = mode.scope;\n    delete mode.scope;\n  }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n  scopeSugar(mode);\n\n  if (typeof mode.beginScope === \"string\") {\n    mode.beginScope = { _wrap: mode.beginScope };\n  }\n  if (typeof mode.endScope === \"string\") {\n    mode.endScope = { _wrap: mode.endScope };\n  }\n\n  beginMultiClass(mode);\n  endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n  /**\n   * Builds a regex with the case sensitivity of the current language\n   *\n   * @param {RegExp | string} value\n   * @param {boolean} [global]\n   */\n  function langRe(value, global) {\n    return new RegExp(\n      source(value),\n      'm'\n      + (language.case_insensitive ? 'i' : '')\n      + (language.unicodeRegex ? 'u' : '')\n      + (global ? 'g' : '')\n    );\n  }\n\n  /**\n    Stores multiple regular expressions and allows you to quickly search for\n    them all in a string simultaneously - returning the first match.  It does\n    this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n    and joined by `|` - using match groups to track position.  When a match is\n    found checking which position in the array has content allows us to figure\n    out which of the original regexes / match groups triggered the match.\n\n    The match object itself (the result of `Regex.exec`) is returned but also\n    enhanced by merging in any meta-data that was registered with the regex.\n    This is how we keep track of which mode matched, and what type of rule\n    (`illegal`, `begin`, end, etc).\n  */\n  class MultiRegex {\n    constructor() {\n      this.matchIndexes = {};\n      // @ts-ignore\n      this.regexes = [];\n      this.matchAt = 1;\n      this.position = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      opts.position = this.position++;\n      // @ts-ignore\n      this.matchIndexes[this.matchAt] = opts;\n      this.regexes.push([opts, re]);\n      this.matchAt += countMatchGroups(re) + 1;\n    }\n\n    compile() {\n      if (this.regexes.length === 0) {\n        // avoids the need to check length every time exec is called\n        // @ts-ignore\n        this.exec = () => null;\n      }\n      const terminators = this.regexes.map(el => el[1]);\n      this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n      this.lastIndex = 0;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      this.matcherRe.lastIndex = this.lastIndex;\n      const match = this.matcherRe.exec(s);\n      if (!match) { return null; }\n\n      // eslint-disable-next-line no-undefined\n      const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n      // @ts-ignore\n      const matchData = this.matchIndexes[i];\n      // trim off any earlier non-relevant match groups (ie, the other regex\n      // match groups that make up the multi-matcher)\n      match.splice(0, i);\n\n      return Object.assign(match, matchData);\n    }\n  }\n\n  /*\n    Created to solve the key deficiently with MultiRegex - there is no way to\n    test for multiple matches at a single location.  Why would we need to do\n    that?  In the future a more dynamic engine will allow certain matches to be\n    ignored.  An example: if we matched say the 3rd regex in a large group but\n    decided to ignore it - we'd need to started testing again at the 4th\n    regex... but MultiRegex itself gives us no real way to do that.\n\n    So what this class creates MultiRegexs on the fly for whatever search\n    position they are needed.\n\n    NOTE: These additional MultiRegex objects are created dynamically.  For most\n    grammars most of the time we will never actually need anything more than the\n    first MultiRegex - so this shouldn't have too much overhead.\n\n    Say this is our search group, and we match regex3, but wish to ignore it.\n\n      regex1 | regex2 | regex3 | regex4 | regex5    ' ie, startAt = 0\n\n    What we need is a new MultiRegex that only includes the remaining\n    possibilities:\n\n      regex4 | regex5                               ' ie, startAt = 3\n\n    This class wraps all that complexity up in a simple API... `startAt` decides\n    where in the array of expressions to start doing the matching. It\n    auto-increments, so if a match is found at position 2, then startAt will be\n    set to 3.  If the end is reached startAt will return to 0.\n\n    MOST of the time the parser will be setting startAt manually to 0.\n  */\n  class ResumableMultiRegex {\n    constructor() {\n      // @ts-ignore\n      this.rules = [];\n      // @ts-ignore\n      this.multiRegexes = [];\n      this.count = 0;\n\n      this.lastIndex = 0;\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    getMatcher(index) {\n      if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n      const matcher = new MultiRegex();\n      this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n      matcher.compile();\n      this.multiRegexes[index] = matcher;\n      return matcher;\n    }\n\n    resumingScanAtSamePosition() {\n      return this.regexIndex !== 0;\n    }\n\n    considerAll() {\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      this.rules.push([re, opts]);\n      if (opts.type === \"begin\") this.count++;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      const m = this.getMatcher(this.regexIndex);\n      m.lastIndex = this.lastIndex;\n      let result = m.exec(s);\n\n      // The following is because we have no easy way to say \"resume scanning at the\n      // existing position but also skip the current rule ONLY\". What happens is\n      // all prior rules are also skipped which can result in matching the wrong\n      // thing. Example of matching \"booger\":\n\n      // our matcher is [string, \"booger\", number]\n      //\n      // ....booger....\n\n      // if \"booger\" is ignored then we'd really need a regex to scan from the\n      // SAME position for only: [string, number] but ignoring \"booger\" (if it\n      // was the first match), a simple resume would scan ahead who knows how\n      // far looking only for \"number\", ignoring potential string matches (or\n      // future \"booger\" matches that might be valid.)\n\n      // So what we do: We execute two matchers, one resuming at the same\n      // position, but the second full matcher starting at the position after:\n\n      //     /--- resume first regex match here (for [number])\n      //     |/---- full match here for [string, \"booger\", number]\n      //     vv\n      // ....booger....\n\n      // Which ever results in a match first is then used. So this 3-4 step\n      // process essentially allows us to say \"match at this position, excluding\n      // a prior rule that was ignored\".\n      //\n      // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n      // 2. Resume matching for [number]\n      // 3. Match at index + 1 for [string, \"booger\", number]\n      // 4. If #2 and #3 result in matches, which came first?\n      if (this.resumingScanAtSamePosition()) {\n        if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n          const m2 = this.getMatcher(0);\n          m2.lastIndex = this.lastIndex + 1;\n          result = m2.exec(s);\n        }\n      }\n\n      if (result) {\n        this.regexIndex += result.position + 1;\n        if (this.regexIndex === this.count) {\n          // wrap-around to considering all matches again\n          this.considerAll();\n        }\n      }\n\n      return result;\n    }\n  }\n\n  /**\n   * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n   * the content and find matches.\n   *\n   * @param {CompiledMode} mode\n   * @returns {ResumableMultiRegex}\n   */\n  function buildModeRegex(mode) {\n    const mm = new ResumableMultiRegex();\n\n    mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n    if (mode.terminatorEnd) {\n      mm.addRule(mode.terminatorEnd, { type: \"end\" });\n    }\n    if (mode.illegal) {\n      mm.addRule(mode.illegal, { type: \"illegal\" });\n    }\n\n    return mm;\n  }\n\n  /** skip vs abort vs ignore\n   *\n   * @skip   - The mode is still entered and exited normally (and contains rules apply),\n   *           but all content is held and added to the parent buffer rather than being\n   *           output when the mode ends.  Mostly used with `sublanguage` to build up\n   *           a single large buffer than can be parsed by sublanguage.\n   *\n   *             - The mode begin ands ends normally.\n   *             - Content matched is added to the parent mode buffer.\n   *             - The parser cursor is moved forward normally.\n   *\n   * @abort  - A hack placeholder until we have ignore.  Aborts the mode (as if it\n   *           never matched) but DOES NOT continue to match subsequent `contains`\n   *           modes.  Abort is bad/suboptimal because it can result in modes\n   *           farther down not getting applied because an earlier rule eats the\n   *           content but then aborts.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is added to the mode buffer.\n   *             - The parser cursor is moved forward accordingly.\n   *\n   * @ignore - Ignores the mode (as if it never matched) and continues to match any\n   *           subsequent `contains` modes.  Ignore isn't technically possible with\n   *           the current parser implementation.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is ignored.\n   *             - The parser cursor is not moved forward.\n   */\n\n  /**\n   * Compiles an individual mode\n   *\n   * This can raise an error if the mode contains certain detectable known logic\n   * issues.\n   * @param {Mode} mode\n   * @param {CompiledMode | null} [parent]\n   * @returns {CompiledMode | never}\n   */\n  function compileMode(mode, parent) {\n    const cmode = /** @type CompiledMode */ (mode);\n    if (mode.isCompiled) return cmode;\n\n    [\n      scopeClassName,\n      // do this early so compiler extensions generally don't have to worry about\n      // the distinction between match/begin\n      compileMatch,\n      MultiClass,\n      beforeMatchExt\n    ].forEach(ext => ext(mode, parent));\n\n    language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n    // __beforeBegin is considered private API, internal use only\n    mode.__beforeBegin = null;\n\n    [\n      beginKeywords,\n      // do this later so compiler extensions that come earlier have access to the\n      // raw array if they wanted to perhaps manipulate it, etc.\n      compileIllegal,\n      // default to 1 relevance if not specified\n      compileRelevance\n    ].forEach(ext => ext(mode, parent));\n\n    mode.isCompiled = true;\n\n    let keywordPattern = null;\n    if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n      // we need a copy because keywords might be compiled multiple times\n      // so we can't go deleting $pattern from the original on the first\n      // pass\n      mode.keywords = Object.assign({}, mode.keywords);\n      keywordPattern = mode.keywords.$pattern;\n      delete mode.keywords.$pattern;\n    }\n    keywordPattern = keywordPattern || /\\w+/;\n\n    if (mode.keywords) {\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n    }\n\n    cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n    if (parent) {\n      if (!mode.begin) mode.begin = /\\B|\\b/;\n      cmode.beginRe = langRe(cmode.begin);\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n      if (mode.end) cmode.endRe = langRe(cmode.end);\n      cmode.terminatorEnd = source(cmode.end) || '';\n      if (mode.endsWithParent && parent.terminatorEnd) {\n        cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n      }\n    }\n    if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n    if (!mode.contains) mode.contains = [];\n\n    mode.contains = [].concat(...mode.contains.map(function(c) {\n      return expandOrCloneMode(c === 'self' ? mode : c);\n    }));\n    mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n    if (mode.starts) {\n      compileMode(mode.starts, parent);\n    }\n\n    cmode.matcher = buildModeRegex(cmode);\n    return cmode;\n  }\n\n  if (!language.compilerExtensions) language.compilerExtensions = [];\n\n  // self is not valid at the top-level\n  if (language.contains && language.contains.includes('self')) {\n    throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");\n  }\n\n  // we need a null object, which inherit will guarantee\n  language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n  return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n  if (!mode) return false;\n\n  return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n  if (mode.variants && !mode.cachedVariants) {\n    mode.cachedVariants = mode.variants.map(function(variant) {\n      return inherit$1(mode, { variants: null }, variant);\n    });\n  }\n\n  // EXPAND\n  // if we have variants then essentially \"replace\" the mode with the variants\n  // this happens in compileMode, where this function is called from\n  if (mode.cachedVariants) {\n    return mode.cachedVariants;\n  }\n\n  // CLONE\n  // if we have dependencies on parents then we need a unique\n  // instance of ourselves, so we can be reused with many\n  // different parents without issue\n  if (dependencyOnParent(mode)) {\n    return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n  }\n\n  if (Object.isFrozen(mode)) {\n    return inherit$1(mode);\n  }\n\n  // no special dependency issues, just return ourselves\n  return mode;\n}\n\nvar version = \"11.9.0\";\n\nclass HTMLInjectionError extends Error {\n  constructor(reason, html) {\n    super(reason);\n    this.name = \"HTMLInjectionError\";\n    this.html = html;\n  }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n  // Global internal variables used within the highlight.js library.\n  /** @type {Record<string, Language>} */\n  const languages = Object.create(null);\n  /** @type {Record<string, string>} */\n  const aliases = Object.create(null);\n  /** @type {HLJSPlugin[]} */\n  const plugins = [];\n\n  // safe/production mode - swallows more errors, tries to keep running\n  // even if a single syntax or parse hits a fatal error\n  let SAFE_MODE = true;\n  const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n  /** @type {Language} */\n  const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n  // Global options used when within external APIs. This is modified when\n  // calling the `hljs.configure` function.\n  /** @type HLJSOptions */\n  let options = {\n    ignoreUnescapedHTML: false,\n    throwUnescapedHTML: false,\n    noHighlightRe: /^(no-?highlight)$/i,\n    languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n    classPrefix: 'hljs-',\n    cssSelector: 'pre code',\n    languages: null,\n    // beta configuration options, subject to change, welcome to discuss\n    // https://github.com/highlightjs/highlight.js/issues/1086\n    __emitter: TokenTreeEmitter\n  };\n\n  /* Utility functions */\n\n  /**\n   * Tests a language name to see if highlighting should be skipped\n   * @param {string} languageName\n   */\n  function shouldNotHighlight(languageName) {\n    return options.noHighlightRe.test(languageName);\n  }\n\n  /**\n   * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n   */\n  function blockLanguage(block) {\n    let classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names.\n    const match = options.languageDetectRe.exec(classes);\n    if (match) {\n      const language = getLanguage(match[1]);\n      if (!language) {\n        warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n        warn(\"Falling back to no-highlight mode for this block.\", block);\n      }\n      return language ? match[1] : 'no-highlight';\n    }\n\n    return classes\n      .split(/\\s+/)\n      .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n  }\n\n  /**\n   * Core highlighting function.\n   *\n   * OLD API\n   * highlight(lang, code, ignoreIllegals, continuation)\n   *\n   * NEW API\n   * highlight(code, {lang, ignoreIllegals})\n   *\n   * @param {string} codeOrLanguageName - the language to use for highlighting\n   * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   *\n   * @returns {HighlightResult} Result - an object that represents the result\n   * @property {string} language - the language name\n   * @property {number} relevance - the relevance score\n   * @property {string} value - the highlighted HTML code\n   * @property {string} code - the original raw code\n   * @property {CompiledMode} top - top of the current mode stack\n   * @property {boolean} illegal - indicates whether any illegal matches were found\n  */\n  function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n    let code = \"\";\n    let languageName = \"\";\n    if (typeof optionsOrCode === \"object\") {\n      code = codeOrLanguageName;\n      ignoreIllegals = optionsOrCode.ignoreIllegals;\n      languageName = optionsOrCode.language;\n    } else {\n      // old API\n      deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n      deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n      languageName = codeOrLanguageName;\n      code = optionsOrCode;\n    }\n\n    // https://github.com/highlightjs/highlight.js/issues/3149\n    // eslint-disable-next-line no-undefined\n    if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n    /** @type {BeforeHighlightContext} */\n    const context = {\n      code,\n      language: languageName\n    };\n    // the plugin can change the desired language or the code to be highlighted\n    // just be changing the object it was passed\n    fire(\"before:highlight\", context);\n\n    // a before plugin can usurp the result completely by providing it's own\n    // in which case we don't even need to call highlight\n    const result = context.result\n      ? context.result\n      : _highlight(context.language, context.code, ignoreIllegals);\n\n    result.code = context.code;\n    // the plugin can change anything in result to suite it\n    fire(\"after:highlight\", result);\n\n    return result;\n  }\n\n  /**\n   * private highlight that's used internally and does not fire callbacks\n   *\n   * @param {string} languageName - the language to use for highlighting\n   * @param {string} codeToHighlight - the code to highlight\n   * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {CompiledMode?} [continuation] - current continuation mode, if any\n   * @returns {HighlightResult} - result of the highlight operation\n  */\n  function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n    const keywordHits = Object.create(null);\n\n    /**\n     * Return keyword data if a match is a keyword\n     * @param {CompiledMode} mode - current mode\n     * @param {string} matchText - the textual match\n     * @returns {KeywordData | false}\n     */\n    function keywordData(mode, matchText) {\n      return mode.keywords[matchText];\n    }\n\n    function processKeywords() {\n      if (!top.keywords) {\n        emitter.addText(modeBuffer);\n        return;\n      }\n\n      let lastIndex = 0;\n      top.keywordPatternRe.lastIndex = 0;\n      let match = top.keywordPatternRe.exec(modeBuffer);\n      let buf = \"\";\n\n      while (match) {\n        buf += modeBuffer.substring(lastIndex, match.index);\n        const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n        const data = keywordData(top, word);\n        if (data) {\n          const [kind, keywordRelevance] = data;\n          emitter.addText(buf);\n          buf = \"\";\n\n          keywordHits[word] = (keywordHits[word] || 0) + 1;\n          if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n          if (kind.startsWith(\"_\")) {\n            // _ implied for relevance only, do not highlight\n            // by applying a class name\n            buf += match[0];\n          } else {\n            const cssClass = language.classNameAliases[kind] || kind;\n            emitKeyword(match[0], cssClass);\n          }\n        } else {\n          buf += match[0];\n        }\n        lastIndex = top.keywordPatternRe.lastIndex;\n        match = top.keywordPatternRe.exec(modeBuffer);\n      }\n      buf += modeBuffer.substring(lastIndex);\n      emitter.addText(buf);\n    }\n\n    function processSubLanguage() {\n      if (modeBuffer === \"\") return;\n      /** @type HighlightResult */\n      let result = null;\n\n      if (typeof top.subLanguage === 'string') {\n        if (!languages[top.subLanguage]) {\n          emitter.addText(modeBuffer);\n          return;\n        }\n        result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n        continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n      } else {\n        result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n      }\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Use case in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      emitter.__addSublanguage(result._emitter, result.language);\n    }\n\n    function processBuffer() {\n      if (top.subLanguage != null) {\n        processSubLanguage();\n      } else {\n        processKeywords();\n      }\n      modeBuffer = '';\n    }\n\n    /**\n     * @param {string} text\n     * @param {string} scope\n     */\n    function emitKeyword(keyword, scope) {\n      if (keyword === \"\") return;\n\n      emitter.startScope(scope);\n      emitter.addText(keyword);\n      emitter.endScope();\n    }\n\n    /**\n     * @param {CompiledScope} scope\n     * @param {RegExpMatchArray} match\n     */\n    function emitMultiClass(scope, match) {\n      let i = 1;\n      const max = match.length - 1;\n      while (i <= max) {\n        if (!scope._emit[i]) { i++; continue; }\n        const klass = language.classNameAliases[scope[i]] || scope[i];\n        const text = match[i];\n        if (klass) {\n          emitKeyword(text, klass);\n        } else {\n          modeBuffer = text;\n          processKeywords();\n          modeBuffer = \"\";\n        }\n        i++;\n      }\n    }\n\n    /**\n     * @param {CompiledMode} mode - new mode to start\n     * @param {RegExpMatchArray} match\n     */\n    function startNewMode(mode, match) {\n      if (mode.scope && typeof mode.scope === \"string\") {\n        emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n      }\n      if (mode.beginScope) {\n        // beginScope just wraps the begin match itself in a scope\n        if (mode.beginScope._wrap) {\n          emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n          modeBuffer = \"\";\n        } else if (mode.beginScope._multi) {\n          // at this point modeBuffer should just be the match\n          emitMultiClass(mode.beginScope, match);\n          modeBuffer = \"\";\n        }\n      }\n\n      top = Object.create(mode, { parent: { value: top } });\n      return top;\n    }\n\n    /**\n     * @param {CompiledMode } mode - the mode to potentially end\n     * @param {RegExpMatchArray} match - the latest match\n     * @param {string} matchPlusRemainder - match plus remainder of content\n     * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n     */\n    function endOfMode(mode, match, matchPlusRemainder) {\n      let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n      if (matched) {\n        if (mode[\"on:end\"]) {\n          const resp = new Response(mode);\n          mode[\"on:end\"](match, resp);\n          if (resp.isMatchIgnored) matched = false;\n        }\n\n        if (matched) {\n          while (mode.endsParent && mode.parent) {\n            mode = mode.parent;\n          }\n          return mode;\n        }\n      }\n      // even if on:end fires an `ignore` it's still possible\n      // that we might trigger the end node because of a parent mode\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, match, matchPlusRemainder);\n      }\n    }\n\n    /**\n     * Handle matching but then ignoring a sequence of text\n     *\n     * @param {string} lexeme - string containing full match text\n     */\n    function doIgnore(lexeme) {\n      if (top.matcher.regexIndex === 0) {\n        // no more regexes to potentially match here, so we move the cursor forward one\n        // space\n        modeBuffer += lexeme[0];\n        return 1;\n      } else {\n        // no need to move the cursor, we still have additional regexes to try and\n        // match at this very spot\n        resumeScanAtSamePosition = true;\n        return 0;\n      }\n    }\n\n    /**\n     * Handle the start of a new potential mode match\n     *\n     * @param {EnhancedMatch} match - the current match\n     * @returns {number} how far to advance the parse cursor\n     */\n    function doBeginMatch(match) {\n      const lexeme = match[0];\n      const newMode = match.rule;\n\n      const resp = new Response(newMode);\n      // first internal before callbacks, then the public ones\n      const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n      for (const cb of beforeCallbacks) {\n        if (!cb) continue;\n        cb(match, resp);\n        if (resp.isMatchIgnored) return doIgnore(lexeme);\n      }\n\n      if (newMode.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (newMode.excludeBegin) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (!newMode.returnBegin && !newMode.excludeBegin) {\n          modeBuffer = lexeme;\n        }\n      }\n      startNewMode(newMode, match);\n      return newMode.returnBegin ? 0 : lexeme.length;\n    }\n\n    /**\n     * Handle the potential end of mode\n     *\n     * @param {RegExpMatchArray} match - the current match\n     */\n    function doEndMatch(match) {\n      const lexeme = match[0];\n      const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n      const endMode = endOfMode(top, match, matchPlusRemainder);\n      if (!endMode) { return NO_MATCH; }\n\n      const origin = top;\n      if (top.endScope && top.endScope._wrap) {\n        processBuffer();\n        emitKeyword(lexeme, top.endScope._wrap);\n      } else if (top.endScope && top.endScope._multi) {\n        processBuffer();\n        emitMultiClass(top.endScope, match);\n      } else if (origin.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (origin.excludeEnd) {\n          modeBuffer = lexeme;\n        }\n      }\n      do {\n        if (top.scope) {\n          emitter.closeNode();\n        }\n        if (!top.skip && !top.subLanguage) {\n          relevance += top.relevance;\n        }\n        top = top.parent;\n      } while (top !== endMode.parent);\n      if (endMode.starts) {\n        startNewMode(endMode.starts, match);\n      }\n      return origin.returnEnd ? 0 : lexeme.length;\n    }\n\n    function processContinuations() {\n      const list = [];\n      for (let current = top; current !== language; current = current.parent) {\n        if (current.scope) {\n          list.unshift(current.scope);\n        }\n      }\n      list.forEach(item => emitter.openNode(item));\n    }\n\n    /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n    let lastMatch = {};\n\n    /**\n     *  Process an individual match\n     *\n     * @param {string} textBeforeMatch - text preceding the match (since the last match)\n     * @param {EnhancedMatch} [match] - the match itself\n     */\n    function processLexeme(textBeforeMatch, match) {\n      const lexeme = match && match[0];\n\n      // add non-matched text to the current mode buffer\n      modeBuffer += textBeforeMatch;\n\n      if (lexeme == null) {\n        processBuffer();\n        return 0;\n      }\n\n      // we've found a 0 width match and we're stuck, so we need to advance\n      // this happens when we have badly behaved rules that have optional matchers to the degree that\n      // sometimes they can end up matching nothing at all\n      // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n      if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n        // spit the \"skipped\" character that our regex choked on back into the output sequence\n        modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n        if (!SAFE_MODE) {\n          /** @type {AnnotatedError} */\n          const err = new Error(`0 width match regex (${languageName})`);\n          err.languageName = languageName;\n          err.badRule = lastMatch.rule;\n          throw err;\n        }\n        return 1;\n      }\n      lastMatch = match;\n\n      if (match.type === \"begin\") {\n        return doBeginMatch(match);\n      } else if (match.type === \"illegal\" && !ignoreIllegals) {\n        // illegal match, we do not continue processing\n        /** @type {AnnotatedError} */\n        const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n        err.mode = top;\n        throw err;\n      } else if (match.type === \"end\") {\n        const processed = doEndMatch(match);\n        if (processed !== NO_MATCH) {\n          return processed;\n        }\n      }\n\n      // edge case for when illegal matches $ (end of line) which is technically\n      // a 0 width match but not a begin/end match so it's not caught by the\n      // first handler (when ignoreIllegals is true)\n      if (match.type === \"illegal\" && lexeme === \"\") {\n        // advance so we aren't stuck in an infinite loop\n        return 1;\n      }\n\n      // infinite loops are BAD, this is a last ditch catch all. if we have a\n      // decent number of iterations yet our index (cursor position in our\n      // parsing) still 3x behind our index then something is very wrong\n      // so we bail\n      if (iterations > 100000 && iterations > match.index * 3) {\n        const err = new Error('potential infinite loop, way more iterations than matches');\n        throw err;\n      }\n\n      /*\n      Why might be find ourselves here?  An potential end match that was\n      triggered but could not be completed.  IE, `doEndMatch` returned NO_MATCH.\n      (this could be because a callback requests the match be ignored, etc)\n\n      This causes no real harm other than stopping a few times too many.\n      */\n\n      modeBuffer += lexeme;\n      return lexeme.length;\n    }\n\n    const language = getLanguage(languageName);\n    if (!language) {\n      error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n      throw new Error('Unknown language: \"' + languageName + '\"');\n    }\n\n    const md = compileLanguage(language);\n    let result = '';\n    /** @type {CompiledMode} */\n    let top = continuation || md;\n    /** @type Record<string,CompiledMode> */\n    const continuations = {}; // keep continuations for sub-languages\n    const emitter = new options.__emitter(options);\n    processContinuations();\n    let modeBuffer = '';\n    let relevance = 0;\n    let index = 0;\n    let iterations = 0;\n    let resumeScanAtSamePosition = false;\n\n    try {\n      if (!language.__emitTokens) {\n        top.matcher.considerAll();\n\n        for (;;) {\n          iterations++;\n          if (resumeScanAtSamePosition) {\n            // only regexes not matched previously will now be\n            // considered for a potential match\n            resumeScanAtSamePosition = false;\n          } else {\n            top.matcher.considerAll();\n          }\n          top.matcher.lastIndex = index;\n\n          const match = top.matcher.exec(codeToHighlight);\n          // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n          if (!match) break;\n\n          const beforeMatch = codeToHighlight.substring(index, match.index);\n          const processedCount = processLexeme(beforeMatch, match);\n          index = match.index + processedCount;\n        }\n        processLexeme(codeToHighlight.substring(index));\n      } else {\n        language.__emitTokens(codeToHighlight, emitter);\n      }\n\n      emitter.finalize();\n      result = emitter.toHTML();\n\n      return {\n        language: languageName,\n        value: result,\n        relevance,\n        illegal: false,\n        _emitter: emitter,\n        _top: top\n      };\n    } catch (err) {\n      if (err.message && err.message.includes('Illegal')) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: true,\n          relevance: 0,\n          _illegalBy: {\n            message: err.message,\n            index,\n            context: codeToHighlight.slice(index - 100, index + 100),\n            mode: err.mode,\n            resultSoFar: result\n          },\n          _emitter: emitter\n        };\n      } else if (SAFE_MODE) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: false,\n          relevance: 0,\n          errorRaised: err,\n          _emitter: emitter,\n          _top: top\n        };\n      } else {\n        throw err;\n      }\n    }\n  }\n\n  /**\n   * returns a valid highlight result, without actually doing any actual work,\n   * auto highlight starts with this and it's possible for small snippets that\n   * auto-detection may not find a better match\n   * @param {string} code\n   * @returns {HighlightResult}\n   */\n  function justTextHighlightResult(code) {\n    const result = {\n      value: escape(code),\n      illegal: false,\n      relevance: 0,\n      _top: PLAINTEXT_LANGUAGE,\n      _emitter: new options.__emitter(options)\n    };\n    result._emitter.addText(code);\n    return result;\n  }\n\n  /**\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - secondBest (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n    @param {string} code\n    @param {Array<string>} [languageSubset]\n    @returns {AutoHighlightResult}\n  */\n  function highlightAuto(code, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    const plaintext = justTextHighlightResult(code);\n\n    const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n      _highlight(name, code, false)\n    );\n    results.unshift(plaintext); // plaintext is always an option\n\n    const sorted = results.sort((a, b) => {\n      // sort base on relevance\n      if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n      // always award the tie to the base language\n      // ie if C++ and Arduino are tied, it's more likely to be C++\n      if (a.language && b.language) {\n        if (getLanguage(a.language).supersetOf === b.language) {\n          return 1;\n        } else if (getLanguage(b.language).supersetOf === a.language) {\n          return -1;\n        }\n      }\n\n      // otherwise say they are equal, which has the effect of sorting on\n      // relevance while preserving the original ordering - which is how ties\n      // have historically been settled, ie the language that comes first always\n      // wins in the case of a tie\n      return 0;\n    });\n\n    const [best, secondBest] = sorted;\n\n    /** @type {AutoHighlightResult} */\n    const result = best;\n    result.secondBest = secondBest;\n\n    return result;\n  }\n\n  /**\n   * Builds new class name for block given the language name\n   *\n   * @param {HTMLElement} element\n   * @param {string} [currentLang]\n   * @param {string} [resultLang]\n   */\n  function updateClassName(element, currentLang, resultLang) {\n    const language = (currentLang && aliases[currentLang]) || resultLang;\n\n    element.classList.add(\"hljs\");\n    element.classList.add(`language-${language}`);\n  }\n\n  /**\n   * Applies highlighting to a DOM node containing code.\n   *\n   * @param {HighlightedHTMLElement} element - the HTML element to highlight\n  */\n  function highlightElement(element) {\n    /** @type HTMLElement */\n    let node = null;\n    const language = blockLanguage(element);\n\n    if (shouldNotHighlight(language)) return;\n\n    fire(\"before:highlightElement\",\n      { el: element, language });\n\n    if (element.dataset.highlighted) {\n      console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n      return;\n    }\n\n    // we should be all text, no child nodes (unescaped HTML) - this is possibly\n    // an HTML injection attack - it's likely too late if this is already in\n    // production (the code has likely already done its damage by the time\n    // we're seeing it)... but we yell loudly about this so that hopefully it's\n    // more likely to be caught in development before making it to production\n    if (element.children.length > 0) {\n      if (!options.ignoreUnescapedHTML) {\n        console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n        console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n        console.warn(\"The element with unescaped HTML:\");\n        console.warn(element);\n      }\n      if (options.throwUnescapedHTML) {\n        const err = new HTMLInjectionError(\n          \"One of your code blocks includes unescaped HTML.\",\n          element.innerHTML\n        );\n        throw err;\n      }\n    }\n\n    node = element;\n    const text = node.textContent;\n    const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n    element.innerHTML = result.value;\n    element.dataset.highlighted = \"yes\";\n    updateClassName(element, language, result.language);\n    element.result = {\n      language: result.language,\n      // TODO: remove with version 11.0\n      re: result.relevance,\n      relevance: result.relevance\n    };\n    if (result.secondBest) {\n      element.secondBest = {\n        language: result.secondBest.language,\n        relevance: result.secondBest.relevance\n      };\n    }\n\n    fire(\"after:highlightElement\", { el: element, result, text });\n  }\n\n  /**\n   * Updates highlight.js global options with the passed options\n   *\n   * @param {Partial<HLJSOptions>} userOptions\n   */\n  function configure(userOptions) {\n    options = inherit(options, userOptions);\n  }\n\n  // TODO: remove v12, deprecated\n  const initHighlighting = () => {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlighting() deprecated.  Use highlightAll() now.\");\n  };\n\n  // TODO: remove v12, deprecated\n  function initHighlightingOnLoad() {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated.  Use highlightAll() now.\");\n  }\n\n  let wantsHighlight = false;\n\n  /**\n   * auto-highlights all pre>code elements on the page\n   */\n  function highlightAll() {\n    // if we are called too early in the loading process\n    if (document.readyState === \"loading\") {\n      wantsHighlight = true;\n      return;\n    }\n\n    const blocks = document.querySelectorAll(options.cssSelector);\n    blocks.forEach(highlightElement);\n  }\n\n  function boot() {\n    // if a highlight was requested before DOM was loaded, do now\n    if (wantsHighlight) highlightAll();\n  }\n\n  // make sure we are in the browser environment\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    window.addEventListener('DOMContentLoaded', boot, false);\n  }\n\n  /**\n   * Register a language grammar module\n   *\n   * @param {string} languageName\n   * @param {LanguageFn} languageDefinition\n   */\n  function registerLanguage(languageName, languageDefinition) {\n    let lang = null;\n    try {\n      lang = languageDefinition(hljs);\n    } catch (error$1) {\n      error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n      // hard or soft error\n      if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n      // languages that have serious errors are replaced with essentially a\n      // \"plaintext\" stand-in so that the code blocks will still get normal\n      // css classes applied to them - and one bad language won't break the\n      // entire highlighter\n      lang = PLAINTEXT_LANGUAGE;\n    }\n    // give it a temporary name if it doesn't have one in the meta-data\n    if (!lang.name) lang.name = languageName;\n    languages[languageName] = lang;\n    lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n    if (lang.aliases) {\n      registerAliases(lang.aliases, { languageName });\n    }\n  }\n\n  /**\n   * Remove a language grammar module\n   *\n   * @param {string} languageName\n   */\n  function unregisterLanguage(languageName) {\n    delete languages[languageName];\n    for (const alias of Object.keys(aliases)) {\n      if (aliases[alias] === languageName) {\n        delete aliases[alias];\n      }\n    }\n  }\n\n  /**\n   * @returns {string[]} List of language internal names\n   */\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  /**\n   * @param {string} name - name of the language to retrieve\n   * @returns {Language | undefined}\n   */\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /**\n   *\n   * @param {string|string[]} aliasList - single alias or list of aliases\n   * @param {{languageName: string}} opts\n   */\n  function registerAliases(aliasList, { languageName }) {\n    if (typeof aliasList === 'string') {\n      aliasList = [aliasList];\n    }\n    aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n  }\n\n  /**\n   * Determines if a given language has auto-detection enabled\n   * @param {string} name - name of the language\n   */\n  function autoDetection(name) {\n    const lang = getLanguage(name);\n    return lang && !lang.disableAutodetect;\n  }\n\n  /**\n   * Upgrades the old highlightBlock plugins to the new\n   * highlightElement API\n   * @param {HLJSPlugin} plugin\n   */\n  function upgradePluginAPI(plugin) {\n    // TODO: remove with v12\n    if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n      plugin[\"before:highlightElement\"] = (data) => {\n        plugin[\"before:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n    if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n      plugin[\"after:highlightElement\"] = (data) => {\n        plugin[\"after:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function addPlugin(plugin) {\n    upgradePluginAPI(plugin);\n    plugins.push(plugin);\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function removePlugin(plugin) {\n    const index = plugins.indexOf(plugin);\n    if (index !== -1) {\n      plugins.splice(index, 1);\n    }\n  }\n\n  /**\n   *\n   * @param {PluginEvent} event\n   * @param {any} args\n   */\n  function fire(event, args) {\n    const cb = event;\n    plugins.forEach(function(plugin) {\n      if (plugin[cb]) {\n        plugin[cb](args);\n      }\n    });\n  }\n\n  /**\n   * DEPRECATED\n   * @param {HighlightedHTMLElement} el\n   */\n  function deprecateHighlightBlock(el) {\n    deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n    deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n    return highlightElement(el);\n  }\n\n  /* Interface definition */\n  Object.assign(hljs, {\n    highlight,\n    highlightAuto,\n    highlightAll,\n    highlightElement,\n    // TODO: Remove with v12 API\n    highlightBlock: deprecateHighlightBlock,\n    configure,\n    initHighlighting,\n    initHighlightingOnLoad,\n    registerLanguage,\n    unregisterLanguage,\n    listLanguages,\n    getLanguage,\n    registerAliases,\n    autoDetection,\n    inherit,\n    addPlugin,\n    removePlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  hljs.regex = {\n    concat: concat,\n    lookahead: lookahead,\n    either: either,\n    optional: optional,\n    anyNumberOfTimes: anyNumberOfTimes\n  };\n\n  for (const key in MODES) {\n    // @ts-ignore\n    if (typeof MODES[key] === \"object\") {\n      // @ts-ignore\n      deepFreeze(MODES[key]);\n    }\n  }\n\n  // merge all the modes/regexes into our main object\n  Object.assign(hljs, MODES);\n\n  return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n", "// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\nimport HighlightJS from '../lib/core.js';\nexport { HighlightJS };\nexport default HighlightJS;\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootData} RootData\n *\n * @typedef {import('highlight.js').Emitter} Emitter\n * @typedef {import('highlight.js').HLJSOptions} HljsOptions\n * @typedef {import('highlight.js').HighlightResult} HighlightResult\n * @typedef {import('highlight.js').LanguageFn} LanguageFn\n */\n\n/**\n * @typedef {Object} ExtraOptions\n *   Extra fields.\n * @property {ReadonlyArray<string> | null | undefined} [subset]\n *   List of allowed languages (default: all registered languages).\n *\n * @typedef {Object} Options\n *   Configuration for `highlight`.\n * @property {string | null | undefined} [prefix='hljs-']\n *   Class prefix (default: `'hljs-'`).\n *\n * @typedef {Options & ExtraOptions} AutoOptions\n *   Configuration for `highlightAuto`.\n */\n\nimport {ok as assert} from 'devlop'\nimport HighlightJs from 'highlight.js/lib/core'\n\n/** @type {AutoOptions} */\nconst emptyOptions = {}\n\nconst defaultPrefix = 'hljs-'\n\n/**\n * Create a `lowlight` instance.\n *\n * @param {Readonly<Record<string, LanguageFn>> | null | undefined} [grammars]\n *   Grammars to add (optional).\n * @returns\n *   Lowlight.\n */\nexport function createLowlight(grammars) {\n  const high = HighlightJs.newInstance()\n\n  if (grammars) {\n    register(grammars)\n  }\n\n  return {\n    highlight,\n    highlightAuto,\n    listLanguages,\n    register,\n    registerAlias,\n    registered\n  }\n\n  /**\n   * Highlight `value` (code) as `language` (name).\n   *\n   * @example\n   *   ```js\n   *   import {common, createLowlight} from 'lowlight'\n   *\n   *   const lowlight = createLowlight(common)\n   *\n   *   console.log(lowlight.highlight('css', 'em { color: red }'))\n   *   ```\n   *\n   *   Yields:\n   *\n   *   ```js\n   *   {type: 'root', children: [Array], data: {language: 'css', relevance: 3}}\n   *   ```\n   *\n   * @param {string} language\n   *   Programming language name.\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<Options> | null | undefined} [options={}]\n   *   Configuration (optional).\n   * @returns {Root}\n   *   Tree; with the following `data` fields: `language` (`string`), detected\n   *   programming language name; `relevance` (`number`), how sure lowlight is\n   *   that the given code is in the language.\n   */\n  function highlight(language, value, options) {\n    assert(typeof language === 'string', 'expected `string` as `name`')\n    assert(typeof value === 'string', 'expected `string` as `value`')\n    const settings = options || emptyOptions\n    const prefix =\n      typeof settings.prefix === 'string' ? settings.prefix : defaultPrefix\n\n    if (!high.getLanguage(language)) {\n      throw new Error('Unknown language: `' + language + '` is not registered')\n    }\n\n    // See: <https://github.com/highlightjs/highlight.js/issues/3621#issuecomment-1528841888>\n    high.configure({__emitter: HastEmitter, classPrefix: prefix})\n\n    const result = /** @type {HighlightResult & {_emitter: HastEmitter}} */ (\n      high.highlight(value, {ignoreIllegals: true, language})\n    )\n\n    // `highlight.js` seems to use this (currently) for broken grammars, so let\u2019s\n    // keep it in there just to be sure.\n    /* c8 ignore next 5 */\n    if (result.errorRaised) {\n      throw new Error('Could not highlight with `Highlight.js`', {\n        cause: result.errorRaised\n      })\n    }\n\n    const root = result._emitter.root\n\n    // Cast because it is always defined.\n    const data = /** @type {RootData} */ (root.data)\n\n    data.language = result.language\n    data.relevance = result.relevance\n\n    return root\n  }\n\n  /**\n   * Highlight `value` (code) and guess its programming language.\n   *\n   * @example\n   *   ```js\n   *   import {common, createLowlight} from 'lowlight'\n   *\n   *   const lowlight = createLowlight(common)\n   *\n   *   console.log(lowlight.highlightAuto('\"hello, \" + name + \"!\"'))\n   *   ```\n   *\n   *   Yields:\n   *\n   *   ```js\n   *   {type: 'root', children: [Array], data: {language: 'arduino', relevance: 2}}\n   *   ```\n   *\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<AutoOptions> | null | undefined} [options={}]\n   *   Configuration (optional).\n   * @returns {Root}\n   *   Tree; with the following `data` fields: `language` (`string`), detected\n   *   programming language name; `relevance` (`number`), how sure lowlight is\n   *   that the given code is in the language.\n   */\n  function highlightAuto(value, options) {\n    assert(typeof value === 'string', 'expected `string` as `value`')\n    const settings = options || emptyOptions\n    const subset = settings.subset || listLanguages()\n\n    let index = -1\n    let relevance = 0\n    /** @type {Root | undefined} */\n    let result\n\n    while (++index < subset.length) {\n      const name = subset[index]\n\n      if (!high.getLanguage(name)) continue\n\n      const current = highlight(name, value, options)\n\n      if (\n        current.data &&\n        current.data.relevance !== undefined &&\n        current.data.relevance > relevance\n      ) {\n        relevance = current.data.relevance\n        result = current\n      }\n    }\n\n    return (\n      result || {\n        type: 'root',\n        children: [],\n        data: {language: undefined, relevance}\n      }\n    )\n  }\n\n  /**\n   * List registered languages.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import markdown from 'highlight.js/lib/languages/markdown'\n   *\n   *   const lowlight = createLowlight()\n   *\n   *   console.log(lowlight.listLanguages()) // => []\n   *\n   *   lowlight.register({markdown})\n   *\n   *   console.log(lowlight.listLanguages()) // => ['markdown']\n   *   ```\n   *\n   * @returns {Array<string>}\n   *   Names of registered language.\n   */\n  function listLanguages() {\n    return high.listLanguages()\n  }\n\n  /**\n   * Register languages.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import xml from 'highlight.js/lib/languages/xml'\n   *\n   *   const lowlight = createLowlight()\n   *\n   *   lowlight.register({xml})\n   *\n   *   // Note: `html` is an alias for `xml`.\n   *   console.log(lowlight.highlight('html', '<em>Emphasis</em>'))\n   *   ```\n   *\n   *   Yields:\n   *\n   *   ```js\n   *   {type: 'root', children: [Array], data: {language: 'html', relevance: 2}}\n   *   ```\n   *\n   * @overload\n   * @param {Readonly<Record<string, LanguageFn>>} grammars\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {string} name\n   * @param {LanguageFn} grammar\n   * @returns {undefined}\n   *\n   * @param {Readonly<Record<string, LanguageFn>> | string} grammarsOrName\n   *   Grammars or programming language name.\n   * @param {LanguageFn | undefined} [grammar]\n   *   Grammar, if with name.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function register(grammarsOrName, grammar) {\n    if (typeof grammarsOrName === 'string') {\n      assert(grammar !== undefined, 'expected `grammar`')\n      high.registerLanguage(grammarsOrName, grammar)\n    } else {\n      /** @type {string} */\n      let name\n\n      for (name in grammarsOrName) {\n        if (Object.hasOwn(grammarsOrName, name)) {\n          high.registerLanguage(name, grammarsOrName[name])\n        }\n      }\n    }\n  }\n\n  /**\n   * Register aliases.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import markdown from 'highlight.js/lib/languages/markdown'\n   *\n   *   const lowlight = createLowlight()\n   *\n   *   lowlight.register({markdown})\n   *\n   *   // lowlight.highlight('mdown', '<em>Emphasis</em>')\n   *   // ^ would throw: Error: Unknown language: `mdown` is not registered\n   *\n   *   lowlight.registerAlias({markdown: ['mdown', 'mkdn', 'mdwn', 'ron']})\n   *   lowlight.highlight('mdown', '<em>Emphasis</em>')\n   *   // ^ Works!\n   *   ```\n   *\n   * @overload\n   * @param {Readonly<Record<string, ReadonlyArray<string> | string>>} aliases\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {string} language\n   * @param {ReadonlyArray<string> | string} alias\n   * @returns {undefined}\n   *\n   * @param {Readonly<Record<string, ReadonlyArray<string> | string>> | string} aliasesOrName\n   *   Map of programming language names to one or more aliases, or programming\n   *   language name.\n   * @param {ReadonlyArray<string> | string | undefined} [alias]\n   *   One or more aliases for the programming language, if with `name`.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function registerAlias(aliasesOrName, alias) {\n    if (typeof aliasesOrName === 'string') {\n      assert(alias !== undefined)\n      high.registerAliases(\n        // Note: copy needed because hljs doesn\u2019t accept readonly arrays yet.\n        typeof alias === 'string' ? alias : [...alias],\n        {languageName: aliasesOrName}\n      )\n    } else {\n      /** @type {string} */\n      let key\n\n      for (key in aliasesOrName) {\n        if (Object.hasOwn(aliasesOrName, key)) {\n          const aliases = aliasesOrName[key]\n          high.registerAliases(\n            // Note: copy needed because hljs doesn\u2019t accept readonly arrays yet.\n            typeof aliases === 'string' ? aliases : [...aliases],\n            {languageName: key}\n          )\n        }\n      }\n    }\n  }\n\n  /**\n   * Check whether an alias or name is registered.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import javascript from 'highlight.js/lib/languages/javascript'\n   *\n   *   const lowlight = createLowlight({javascript})\n   *\n   *   console.log(lowlight.registered('funkyscript')) // => `false`\n   *\n   *   lowlight.registerAlias({javascript: 'funkyscript'})\n   *   console.log(lowlight.registered('funkyscript')) // => `true`\n   *   ```\n   *\n   * @param {string} aliasOrName\n   *   Name of a language or alias for one.\n   * @returns {boolean}\n   *   Whether `aliasOrName` is registered.\n   */\n  function registered(aliasOrName) {\n    return Boolean(high.getLanguage(aliasOrName))\n  }\n}\n\n/** @type {Emitter} */\nclass HastEmitter {\n  /**\n   * @param {Readonly<HljsOptions>} options\n   *   Configuration.\n   * @returns\n   *   Instance.\n   */\n  constructor(options) {\n    /** @type {HljsOptions} */\n    this.options = options\n    /** @type {Root} */\n    this.root = {\n      type: 'root',\n      children: [],\n      data: {language: undefined, relevance: 0}\n    }\n    /** @type {[Root, ...Array<Element>]} */\n    this.stack = [this.root]\n  }\n\n  /**\n   * @param {string} value\n   *   Text to add.\n   * @returns {undefined}\n   *   Nothing.\n   *\n   */\n  addText(value) {\n    if (value === '') return\n\n    const current = this.stack[this.stack.length - 1]\n    const tail = current.children[current.children.length - 1]\n\n    if (tail && tail.type === 'text') {\n      tail.value += value\n    } else {\n      current.children.push({type: 'text', value})\n    }\n  }\n\n  /**\n   *\n   * @param {unknown} rawName\n   *   Name to add.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  startScope(rawName) {\n    this.openNode(String(rawName))\n  }\n\n  /**\n   * @returns {undefined}\n   *   Nothing.\n   */\n  endScope() {\n    this.closeNode()\n  }\n\n  /**\n   * @param {HastEmitter} other\n   *   Other emitter.\n   * @param {string} name\n   *   Name of the sublanguage.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  __addSublanguage(other, name) {\n    const current = this.stack[this.stack.length - 1]\n    // Assume only element content.\n    const results = /** @type {Array<ElementContent>} */ (other.root.children)\n\n    if (name) {\n      current.children.push({\n        type: 'element',\n        tagName: 'span',\n        properties: {className: [name]},\n        children: results\n      })\n    } else {\n      current.children.push(...results)\n    }\n  }\n\n  /**\n   * @param {string} name\n   *   Name to add.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  openNode(name) {\n    const self = this\n    // First \u201Cclass\u201D gets the prefix. Rest gets a repeated underscore suffix.\n    // See: <https://github.com/highlightjs/highlight.js/commit/51806aa>\n    // See: <https://github.com/wooorm/lowlight/issues/43>\n    const className = name.split('.').map(function (d, i) {\n      return i ? d + '_'.repeat(i) : self.options.classPrefix + d\n    })\n    const current = this.stack[this.stack.length - 1]\n    /** @type {Element} */\n    const child = {\n      type: 'element',\n      tagName: 'span',\n      properties: {className},\n      children: []\n    }\n\n    current.children.push(child)\n    this.stack.push(child)\n  }\n\n  /**\n   * @returns {undefined}\n   *   Nothing.\n   */\n  closeNode() {\n    this.stack.pop()\n  }\n\n  /**\n   * @returns {undefined}\n   *   Nothing.\n   */\n  finalize() {}\n\n  /**\n   * @returns {string}\n   *   Nothing.\n   */\n  toHTML() {\n    return ''\n  }\n}\n", "// Note: types exposed from `index.d.ts`.\nexport {grammars as all} from './lib/all.js'\nexport {grammars as common} from './lib/common.js'\nexport {createLowlight} from './lib/index.js'\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n", "// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n", "import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` \u2192 `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootData} RootData\n * @typedef {import('hast').Text} Text\n *\n * @typedef {import('lowlight').AutoOptions} LowlightAutoOptions\n * @typedef {import('lowlight').LanguageFn} LanguageFn\n */\n\n/**\n * @typedef AutoFieldsExtra\n *   Extra fields.\n * @property {Sheet | null | undefined} [sheet]\n *   Sheet (optional).\n *\n * @typedef {Pick<LowlightAutoOptions, 'subset'>} AutoFieldsPicked\n *   Picked fields.\n *\n * @typedef {AutoFieldsExtra & AutoFieldsPicked} AutoOptions\n *   Configuration for `highlightAuto`.\n *\n * @typedef Result\n *   Result.\n * @property {string | undefined} language\n *   Detected programming language.\n * @property {number | undefined} relevance\n *   How sure `lowlight` is that the given code is in the language.\n * @property {string} value\n *   Highlighted code.\n *\n * @typedef {Record<string, Style>} Sheet\n *   Map `highlight.js` classes to styles functions.\n *\n *   The `hljs-` prefix must not be used in those classes.\n *   The \u201Cdescendant selector\u201D (a space) is supported.\n *\n *   For convenience [chalk\u2019s chaining of styles][styles] is suggested.\n *   An abbreviated example is as follows:\n *\n *   ```js\n *   {\n *     'comment': chalk.gray,\n *     'meta meta-string': chalk.cyan,\n *     'meta keyword': chalk.magenta,\n *     'emphasis': chalk.italic,\n *     'strong': chalk.bold,\n *     'formula': chalk.inverse\n *   }\n *   ```\n *\n * @callback Style\n *   Color something.\n * @param {string} value\n *   Input.\n * @returns {string}\n *   Output.\n */\n\nimport {Chalk} from 'chalk'\nimport {createLowlight} from 'lowlight'\n\nconst chalk = new Chalk({level: 2})\n\n/**\n * Default style sheet.\n *\n * @type {Readonly<Sheet>}\n */\nconst defaultSheet = {\n  comment: chalk.gray,\n  quote: chalk.gray,\n\n  keyword: chalk.green,\n  'selector-tag': chalk.green,\n  addition: chalk.green,\n\n  number: chalk.cyan,\n  string: chalk.cyan,\n  'meta meta-string': chalk.cyan,\n  literal: chalk.cyan,\n  doctag: chalk.cyan,\n  regexp: chalk.cyan,\n\n  title: chalk.blue,\n  section: chalk.blue,\n  name: chalk.blue,\n  'selector-id': chalk.blue,\n  'selector-class': chalk.blue,\n\n  attribute: chalk.yellow,\n  attr: chalk.yellow,\n  variable: chalk.yellow,\n  'template-variable': chalk.yellow,\n  'class title': chalk.yellow,\n  type: chalk.yellow,\n\n  symbol: chalk.magenta,\n  bullet: chalk.magenta,\n  subst: chalk.magenta,\n  meta: chalk.magenta,\n  'meta keyword': chalk.magenta,\n  'selector-attr': chalk.magenta,\n  'selector-pseudo': chalk.magenta,\n  link: chalk.magenta,\n\n  /* eslint-disable camelcase */\n  built_in: chalk.red,\n  /* eslint-enable camelcase */\n  deletion: chalk.red,\n\n  emphasis: chalk.italic,\n  strong: chalk.bold,\n  formula: chalk.inverse\n}\n\n/**\n * Create an `emphasize` instance.\n *\n * @param {Readonly<Record<string, LanguageFn>> | null | undefined} [grammars]\n *   Grammars to add (optional).\n * @returns\n *   Emphasize.\n */\nexport function createEmphasize(grammars) {\n  const lowlight = createLowlight(grammars)\n\n  return {\n    highlight,\n    highlightAuto,\n    listLanguages: lowlight.listLanguages,\n    register: lowlight.register,\n    registerAlias: lowlight.registerAlias,\n    registered: lowlight.registered\n  }\n\n  /**\n   * Highlight `value` (code) as `language` (name).\n   *\n   * @param {string} language\n   *   Programming language name.\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<Sheet> | null | undefined} [sheet]\n   *   Style sheet (optional).\n   * @returns {Result}\n   *   Result.\n   */\n  function highlight(language, value, sheet) {\n    const result = lowlight.highlight(language, value)\n    const data = /** @type {RootData} */ (result.data)\n\n    return {\n      language: data.language,\n      relevance: data.relevance,\n      value: visit(sheet || defaultSheet, result)\n    }\n  }\n\n  /**\n   * Highlight `value` (code) and guess its programming language.\n   *\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<AutoOptions> | Readonly<Sheet> | null | undefined} [options]\n   *   Configuration or style sheet (optional).\n   * @returns {Result}\n   *   Result.\n   */\n  function highlightAuto(value, options) {\n    /** @type {Readonly<Sheet> | null | undefined} */\n    let sheet\n    /** @type {Readonly<LowlightAutoOptions> | undefined} */\n    let config\n\n    if (options && ('subset' in options || 'sheet' in options)) {\n      const settings = /** @type {Readonly<AutoOptions>} */ (options)\n      config = {subset: settings.subset}\n      sheet = settings.sheet\n    } else {\n      sheet = /** @type {Readonly<Sheet> | null | undefined} */ (options)\n    }\n\n    const result = lowlight.highlightAuto(value, config)\n    const data = /** @type {RootData} */ (result.data)\n    return {\n      language: data.language,\n      relevance: data.relevance,\n      value: visit(sheet || defaultSheet, result)\n    }\n  }\n}\n\n/**\n * Visit one `node`.\n *\n * @param {Readonly<Sheet>} sheet\n *   Sheet.\n * @param {Readonly<Element> | Readonly<Root> | Readonly<Text>} node\n *   Node.\n * @returns {string}\n *   Result.\n */\nfunction visit(sheet, node) {\n  const names = new Set(\n    node.type === 'element' && Array.isArray(node.properties.className)\n      ? node.properties.className.map(function (d) {\n          return String(d).replace(/^hljs-/, '')\n        })\n      : []\n  )\n  /** @type {Sheet} */\n  const scoped = {}\n  /** @type {Style | undefined} */\n  let style\n  /** @type {string} */\n  let content = ''\n  /** @type {string} */\n  let key\n\n  for (key in sheet) {\n    if (Object.hasOwn(sheet, key)) {\n      const parts = key.split(' ')\n      const color = sheet[key]\n\n      if (names.has(parts[0])) {\n        if (parts.length === 1) {\n          style = color\n        } else {\n          scoped[parts.slice(1).join(' ')] = color\n        }\n      } else {\n        scoped[key] = color\n      }\n    }\n  }\n\n  if ('value' in node) {\n    content = node.value\n  } else if ('children' in node) {\n    content = all(\n      scoped,\n      /** @type {ReadonlyArray<Element | Text>} */ (node.children)\n    )\n  }\n\n  if (style) {\n    content = style(content)\n  }\n\n  return content\n}\n\n/**\n * Visit children in `node`.\n *\n * @param {Readonly<Sheet>} sheet\n *   Sheet.\n * @param {ReadonlyArray<Element | Text>} nodes\n *   Nodes.\n * @returns {string}\n *   Result.\n */\nfunction all(sheet, nodes) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < nodes.length) {\n    result.push(visit(sheet, nodes[index]))\n  }\n\n  return result.join('')\n}\n", "/**\n * @typedef {import('lowlight').LanguageFn} LanguageFn\n * @typedef {import('./lib/index.js').AutoOptions} AutoOptions\n * @typedef {import('./lib/index.js').Result} Result\n * @typedef {import('./lib/index.js').Sheet} Sheet\n */\n\nexport {all, common} from 'lowlight'\nexport {createEmphasize} from './lib/index.js'\n", "import * as Sentry from \"@sentry/node\";\nimport * as Amplitude from \"@amplitude/analytics-node\";\n\nexport async function exit(code: number): Promise<never> {\n  if (process.env.NODE_ENV !== \"test\") {\n    try {\n      await Promise.allSettled([Sentry.flush(2000), Amplitude.flush().promise]);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n  process.exit(code);\n}\n", "export const apiAirV2Host = process.env.AIR_HOST || \"https://api.builder.io\";\n", "{\n  \"name\": \"@builder.io/dev-tools\",\n  \"version\": \"1.17.21\",\n  \"description\": \"Builder.io Visual CMS Devtools\",\n  \"type\": \"module\",\n  \"main\": \"./core/index.cjs\",\n  \"module\": \"./core/index.mjs\",\n  \"types\": \"./core/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./core/index.d.ts\",\n      \"import\": \"./core/index.mjs\",\n      \"require\": \"./core/index.cjs\"\n    },\n    \"./core\": {\n      \"types\": \"./core/index.d.ts\",\n      \"import\": \"./core/index.mjs\",\n      \"require\": \"./core/index.cjs\"\n    },\n    \"./figma\": {\n      \"types\": \"./figma/index.d.ts\",\n      \"import\": \"./figma/index.mjs\",\n      \"require\": \"./figma/index.cjs\"\n    },\n    \"./figma/jsx-runtime\": {\n      \"types\": \"./figma/jsx-runtime/index.d.ts\",\n      \"import\": \"./figma/jsx-runtime/index.mjs\",\n      \"require\": \"./figma/jsx-runtime/index.cjs\"\n    },\n    \"./next\": {\n      \"types\": \"./next/index.d.ts\",\n      \"import\": \"./next/index.mjs\",\n      \"require\": \"./next/index.cjs\"\n    },\n    \"./node\": {\n      \"types\": \"./node/index.d.ts\",\n      \"import\": \"./node/index.mjs\",\n      \"require\": \"./node/index.cjs\"\n    },\n    \"./remix\": {\n      \"types\": \"./remix/index.d.ts\",\n      \"import\": \"./remix/index.mjs\",\n      \"require\": \"./remix/index.cjs\"\n    },\n    \"./remix/server-build\": {\n      \"types\": \"./remix/server-build/index.d.ts\",\n      \"import\": \"./remix/server-build/index.mjs\",\n      \"require\": \"./remix/server-build/index.cjs\"\n    },\n    \"./server\": {\n      \"types\": \"./server/index.d.ts\",\n      \"import\": \"./server/index.mjs\",\n      \"require\": \"./server/index.cjs\"\n    },\n    \"./vite\": {\n      \"types\": \"./vite/index.d.ts\",\n      \"import\": \"./vite/index.mjs\",\n      \"require\": \"./vite/index.cjs\"\n    },\n    \"./webpack\": {\n      \"types\": \"./webpack/index.d.ts\",\n      \"import\": \"./webpack/index.mjs\",\n      \"require\": \"./webpack/index.cjs\"\n    },\n    \"./angular\": {\n      \"types\": \"./angular/index.d.ts\",\n      \"import\": \"./angular/index.mjs\",\n      \"require\": \"./angular/index.cjs\"\n    }\n  },\n  \"bin\": {\n    \"builder-dev-tools\": \"cli/main.cjs\",\n    \"builder.io\": \"cli/main.cjs\",\n    \"builderio\": \"cli/main.cjs\"\n  },\n  \"files\": [\n    \"core\",\n    \"cli\",\n    \"next\",\n    \"node\",\n    \"remix\",\n    \"server\",\n    \"types\",\n    \"vite\",\n    \"webpack\",\n    \"angular\",\n    \"figma\"\n  ],\n  \"dependencies\": {\n    \"@amplitude/analytics-node\": \"^1.3.8\",\n    \"@clack/prompts\": \"^0.10.1\",\n    \"@lvce-editor/ripgrep\": \"1.6.0\",\n    \"@sentry/node\": \"^9.16.0\",\n    \"@types/ws\": \"^8.18.1\",\n    \"bufferutil\": \"^4.0.8\",\n    \"chokidar\": \"^4.0.1\",\n    \"cli-progress\": \"^3.12.0\",\n    \"cookie-parser\": \"^1.4.7\",\n    \"detect-port\": \"^2.1.0\",\n    \"express\": \"^4.18.2\",\n    \"get-port\": \"^7.1.0\",\n    \"glob\": \"10.4\",\n    \"http-proxy-3\": \"^1.22.0\",\n    \"ignore\": \"^6.0.2\",\n    \"launch-editor\": \"^2.11.1\",\n    \"micromatch\": \"^4.0.5\",\n    \"open\": \"^10.1.0\",\n    \"prettier\": \"^3.3.3\",\n    \"prompts\": \"^2.4.2\",\n    \"strip-ansi\": \"^7.1.2\",\n    \"tsx\": \"^4.19.3\",\n    \"typescript\": \"^5.1.6\",\n    \"undici\": \"^5.14.0\",\n    \"utf-8-validate\": \"^6.0.3\",\n    \"ws\": \"^8.18.3\"\n  },\n  \"optionalDependencies\": {\n    \"@lydell/node-pty\": \"^1.1.0\"\n  },\n  \"homepage\": \"https://builder.io/\",\n  \"keywords\": [\n    \"builder.io\",\n    \"builderio\",\n    \"dev-tools\",\n    \"devtools\",\n    \"visual editor\",\n    \"visual cms\",\n    \"cms\",\n    \"drag and drop\",\n    \"react\",\n    \"remix\",\n    \"next\",\n    \"qwik\",\n    \"vcp\",\n    \"visual copilot\",\n    \"figma to code\",\n    \"design to code\",\n    \"figma to react\",\n    \"figma\"\n  ],\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"license\": \"MIT\",\n  \"private\": true,\n  \"devDependencies\": {\n    \"@figma/rest-api-spec\": \"^0.31.0\",\n    \"@types/cli-progress\": \"^3.11.6\",\n    \"node-fetch\": \"^2.7.0\"\n  }\n}\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\nvar MAX_CACHED_INPUTS = 32;\n\n/**\n * Takes some function `f(input) -> result` and returns a memoized version of\n * `f`.\n *\n * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The\n * memoization is a dumb-simple, linear least-recently-used cache.\n */\nfunction lruMemoize(f) {\n  var cache = [];\n\n  return function(input) {\n    for (var i = 0; i < cache.length; i++) {\n      if (cache[i].input === input) {\n        var temp = cache[0];\n        cache[0] = cache[i];\n        cache[i] = temp;\n        return cache[0].result;\n      }\n    }\n\n    var result = f(input);\n\n    cache.unshift({\n      input,\n      result,\n    });\n\n    if (cache.length > MAX_CACHED_INPUTS) {\n      cache.pop();\n    }\n\n    return result;\n  };\n}\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nvar normalize = lruMemoize(function normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n  // Split the path into parts between `/` characters. This is much faster than\n  // using `.split(/\\/+/g)`.\n  var parts = [];\n  var start = 0;\n  var i = 0;\n  while (true) {\n    start = i;\n    i = path.indexOf(\"/\", start);\n    if (i === -1) {\n      parts.push(path.slice(start));\n      break;\n    } else {\n      parts.push(path.slice(start, i));\n      while (i < path.length && path[i] === \"/\") {\n        i++;\n      }\n    }\n  }\n\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n});\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\nfunction compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   \u201Csources\u201D entry.  This value is prepended to the individual\n    //   entries in the \u201Csource\u201D field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   \u201CsourceRoot\u201D, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._ignoreInvalidMapping = util.getArg(aArgs, 'ignoreInvalidMapping', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer, generatorOps) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, {\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    }));\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      if (this._validateMapping(generated, original, source, name) === false) {\n        return;\n      }\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n      var message = 'original.line and original.column are not numbers -- you probably meant to omit ' +\n      'the original mapping entirely and only map the generated position. If so, pass ' +\n      'null for the original mapping instead of an object with empty or null values.'\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message);\n      }\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      var message = 'Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      });\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message)\n      }\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\nfunction SortTemplate(comparator) {\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot, false) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n  return doQuickSort;\n}\n\nfunction cloneSort(comparator) {\n  let template = SortTemplate.toString();\n  let templateFn = new Function(`return ${template}`)();\n  return templateFn(comparator);\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\n\nlet sortCache = new WeakMap();\nexports.quickSort = function (ary, comparator, start = 0) {\n  let doQuickSort = sortCache.get(comparator);\n  if (doQuickSort === void 0) {\n    doQuickSort = cloneSort(comparator);\n    sortCache.set(comparator, doQuickSort);\n  }\n  doQuickSort(ary, comparator, start, ary.length - 1);\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    var boundCallback = aCallback.bind(context);\n    var names = this._names;\n    var sources = this._sources;\n    var sourceMapURL = this._sourceMapURL;\n\n    for (var i = 0, n = mappings.length; i < n; i++) {\n      var mapping = mappings[i];\n      var source = mapping.source === null ? null : sources.at(mapping.source);\n      if(source !== null) {\n        source = util.computeSourceURL(sourceRoot, source, sourceMapURL);\n      }\n      boundCallback({\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : names.at(mapping.name)\n      });\n    }\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\n\nconst compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;\nfunction sortGenerated(array, start) {\n  let l = array.length;\n  let n = array.length - start;\n  if (n <= 1) {\n    return;\n  } else if (n == 2) {\n    let a = array[start];\n    let b = array[start + 1];\n    if (compareGenerated(a, b) > 0) {\n      array[start] = b;\n      array[start + 1] = a;\n    }\n  } else if (n < 20) {\n    for (let i = start; i < l; i++) {\n      for (let j = i; j > start; j--) {\n        let a = array[j - 1];\n        let b = array[j];\n        if (compareGenerated(a, b) <= 0) {\n          break;\n        }\n        array[j - 1] = b;\n        array[j] = a;\n      }\n    }\n  } else {\n    quickSort(array, compareGenerated, start);\n  }\n}\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    let subarrayStart = 0;\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n\n        sortGenerated(generatedMappings, subarrayStart);\n        subarrayStart = generatedMappings.length;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = [];\n        while (index < end) {\n          base64VLQ.decode(aStr, index, temp);\n          value = temp.value;\n          index = temp.rest;\n          segment.push(value);\n        }\n\n        if (segment.length === 2) {\n          throw new Error('Found a source, but no line and column');\n        }\n\n        if (segment.length === 3) {\n          throw new Error('Found a source and line, but no column');\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          let currentSource = mapping.source;\n          while (originalMappings.length <= currentSource) {\n            originalMappings.push(null);\n          }\n          if (originalMappings[currentSource] === null) {\n            originalMappings[currentSource] = [];\n          }\n          originalMappings[currentSource].push(mapping);\n        }\n      }\n    }\n\n    sortGenerated(generatedMappings, subarrayStart);\n    this.__generatedMappings = generatedMappings;\n\n    for (var i = 0; i < originalMappings.length; i++) {\n      if (originalMappings[i] != null) {\n        quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);\n      }\n    }\n    this.__originalMappings = [].concat(...originalMappings);\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content || content === '') {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        if(source !== null) {\n          source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        }\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n", "/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n", "export type Pos = {\n  start: number;\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  line: number;\n  column: number;\n  index: number;\n\n  constructor(line: number, col: number, index: number) {\n    this.line = line;\n    this.column = col;\n    this.index = index;\n  }\n}\n\nexport class SourceLocation {\n  start: Position;\n  end: Position;\n  filename: string;\n  identifierName: string | undefined | null;\n\n  constructor(start: Position, end?: Position) {\n    this.start = start;\n    // (may start as null, but initialized later)\n    this.end = end;\n  }\n}\n\n/**\n * creates a new position with a non-zero column offset from the given position.\n * This function should be only be used when we create AST node out of the token\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\n * function does not skip whitespaces.\n */\nexport function createPositionWithColumnOffset(\n  position: Position,\n  columnOffset: number,\n) {\n  const { line, column, index } = position;\n  return new Position(line, column + columnOffset, index + columnOffset);\n}\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nconst code = \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\nexport default {\n  ImportMetaOutsideModule: {\n    message: `import.meta may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n  ImportOutsideModule: {\n    message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n} satisfies ParseErrorTemplates;\n", "const NodeDescriptions = {\n  ArrayPattern: \"array destructuring pattern\",\n  AssignmentExpression: \"assignment expression\",\n  AssignmentPattern: \"assignment expression\",\n  ArrowFunctionExpression: \"arrow function expression\",\n  ConditionalExpression: \"conditional expression\",\n  CatchClause: \"catch clause\",\n  ForOfStatement: \"for-of statement\",\n  ForInStatement: \"for-in statement\",\n  ForStatement: \"for-loop\",\n  FormalParameters: \"function parameter list\",\n  Identifier: \"identifier\",\n  ImportSpecifier: \"import specifier\",\n  ImportDefaultSpecifier: \"import default specifier\",\n  ImportNamespaceSpecifier: \"import namespace specifier\",\n  ObjectPattern: \"object destructuring pattern\",\n  ParenthesizedExpression: \"parenthesized expression\",\n  RestElement: \"rest element\",\n  UpdateExpression: {\n    true: \"prefix operation\",\n    false: \"postfix operation\",\n  },\n  VariableDeclarator: \"variable declaration\",\n  YieldExpression: \"yield expression\",\n};\n\ntype NodeTypesWithDescriptions = keyof Omit<\n  typeof NodeDescriptions,\n  \"UpdateExpression\"\n>;\n\ntype NodeWithDescription =\n  | {\n      type: \"UpdateExpression\";\n      prefix: boolean;\n    }\n  | {\n      type: NodeTypesWithDescriptions;\n    };\n\n// eslint-disable-next-line no-confusing-arrow\nconst toNodeDescription = (node: NodeWithDescription) =>\n  node.type === \"UpdateExpression\"\n    ? NodeDescriptions.UpdateExpression[`${node.prefix}`]\n    : NodeDescriptions[node.type];\n\nexport default toNodeDescription;\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport type LValAncestor =\n  | { type: \"UpdateExpression\"; prefix: boolean }\n  | {\n      type:\n        | \"ArrayPattern\"\n        | \"AssignmentExpression\"\n        | \"CatchClause\"\n        | \"ForOfStatement\"\n        | \"FormalParameters\"\n        | \"ForInStatement\"\n        | \"ForStatement\"\n        | \"ImportSpecifier\"\n        | \"ImportNamespaceSpecifier\"\n        | \"ImportDefaultSpecifier\"\n        | \"ParenthesizedExpression\"\n        | \"ObjectPattern\"\n        | \"RestElement\"\n        | \"VariableDeclarator\";\n    };\n\nexport default {\n  AccessorIsGenerator: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `A ${kind}ter cannot be a generator.`,\n  ArgumentsInClass:\n    \"'arguments' is only allowed in functions and class methods.\",\n  AsyncFunctionInSingleStatementContext:\n    \"Async functions can only be declared at the top level or inside a block.\",\n  AwaitBindingIdentifier:\n    \"Can not use 'await' as identifier inside an async function.\",\n  AwaitBindingIdentifierInStaticBlock:\n    \"Can not use 'await' as identifier inside a static block.\",\n  AwaitExpressionFormalParameter:\n    \"'await' is not allowed in async function parameters.\",\n  AwaitUsingNotInAsyncContext:\n    \"'await using' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncContext:\n    \"'await' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n  BadGetterArity: \"A 'get' accessor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n  BadSetterRestParameter:\n    \"A 'set' accessor function argument must not be a rest parameter.\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n  ConstructorClassPrivateField:\n    \"Classes may not have a private field named '#constructor'.\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n  ConstructorIsAsync: \"Constructor can't be an async function.\",\n  ConstructorIsGenerator: \"Constructor can't be a generator.\",\n  DeclarationMissingInitializer: ({\n    kind,\n  }: {\n    kind: \"await using\" | \"const\" | \"destructuring\" | \"using\";\n  }) => `Missing initializer in ${kind} declaration.`,\n  DecoratorArgumentsOutsideParentheses:\n    \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n  DecoratorBeforeExport:\n    \"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\",\n  DecoratorsBeforeAfterExport:\n    \"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\",\n  DecoratorConstructor:\n    \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass:\n    \"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeferImportRequiresNamespace:\n    'Only `import defer * as x from \"./module\"` is valid.',\n  DeletePrivateField: \"Deleting a private field is not allowed.\",\n  DestructureNamedImport:\n    \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class.\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: ({ exportName }: { exportName: string }) =>\n    `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  DynamicImportPhaseRequiresImportExpressions: ({ phase }: { phase: string }) =>\n    `'import.${phase}(...)' can only be parsed when using the 'createImportExpressions' option.`,\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: ({\n    localName,\n    exportName,\n  }: {\n    localName: string;\n    exportName: string;\n  }) =>\n    `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n  ExportDefaultFromAsIdentifier:\n    \"'from' is not allowed as an identifier after 'export default'.\",\n\n  ForInOfLoopInitializer: ({\n    type,\n  }: {\n    type: \"ForInStatement\" | \"ForOfStatement\";\n  }) =>\n    `'${\n      type === \"ForInStatement\" ? \"for-in\" : \"for-of\"\n    }' loop variable declaration may not have an initializer.`,\n  ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n\n  ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n  ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n  GeneratorInSingleStatementContext:\n    \"Generators can only be declared at the top level or inside a block.\",\n\n  IllegalBreakContinue: ({\n    type,\n  }: {\n    type: \"BreakStatement\" | \"ContinueStatement\";\n  }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n\n  IllegalLanguageModeDirective:\n    \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportAttributesUseAssert:\n    \"The `assert` keyword in import attributes is deprecated and it has been replaced by the `with` keyword. You can enable the `deprecatedAssertSyntax: true` option in the import attributes plugin to suppress this error.\",\n  ImportBindingIsString: ({ importName }: { importName: string }) =>\n    `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n  ImportCallArgumentTrailingComma:\n    \"Trailing comma is disallowed inside import(...) arguments.\",\n  ImportCallArity: ({ maxArgumentCount }: { maxArgumentCount: 1 | 2 }) =>\n    `\\`import()\\` requires exactly ${\n      maxArgumentCount === 1 ? \"one argument\" : \"one or two arguments\"\n    }.`,\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  ImportJSONBindingNotDefault:\n    \"A JSON module can only be imported with `default`.\",\n  ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n  ImportReflectionNotBinding:\n    'Only `import module x from \"./module\"` is valid.',\n  IncompatibleRegExpUVFlags:\n    \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: ({ radix }: { radix: number }) =>\n    `Expected number in radix ${radix}.`,\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Escape sequence in keyword ${reservedWord}.`,\n  InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\n    `Invalid identifier ${identifierName}.`,\n  InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsOptionalChaining: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid optional chaining in the left-hand side of ${toNodeDescription(\n      ancestor,\n    )}.`,\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent:\n    \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\n    `Unexpected character '${unexpected}'.`,\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: ({\n    identifierName,\n  }: {\n    identifierName: string;\n  }) => `Private name #${identifierName} is not defined.`,\n  InvalidPropertyBindingPattern: \"Binding member expression.\",\n  InvalidRecordProperty:\n    \"Only properties and spread elements are allowed in record definitions.\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n  LabelRedeclaration: ({ labelName }: { labelName: string }) =>\n    `Label '${labelName}' is already declared.`,\n  LetInLexicalBinding: \"'let' is disallowed as a lexically bound name.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n  MalformedRegExpFlags: \"Invalid regular expression flag.\",\n  MissingClassName: \"A class name is required.\",\n  MissingEqInAssignment:\n    \"Only '=' operator can be used for specifying default value.\",\n  MissingSemicolon: \"Missing semicolon.\",\n  MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\n    `This experimental syntax requires enabling the parser plugin: ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  // FIXME: Would be nice to make this \"missingPlugins\" instead.\n  // Also, seems like we can drop the \"(s)\" from the message and just make it \"s\".\n  MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\n    `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n  MixingCoalesceWithLogical:\n    \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n  ModuleAttributeDifferentFromType:\n    \"The only accepted module attribute is `type`.\",\n  ModuleAttributeInvalidValue:\n    \"Only string literals are allowed as module attribute values.\",\n  ModuleAttributesWithDuplicateKeys: ({ key }: { key: string }) =>\n    `Duplicate key \"${key}\" is not allowed in module attributes.`,\n  ModuleExportNameHasLoneSurrogate: ({\n    surrogateCharCode,\n  }: {\n    surrogateCharCode: number;\n  }) =>\n    `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(\n      16,\n    )}'.`,\n  ModuleExportUndefined: ({ localName }: { localName: string }) =>\n    `Export '${localName}' is not defined.`,\n  MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n  NewlineAfterThrow: \"Illegal newline after throw.\",\n  NoCatchOrFinally: \"Missing catch or finally clause.\",\n  NumberIdentifier: \"Identifier directly after number.\",\n  NumericSeparatorInEscapeSequence:\n    \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n  ObsoleteAwaitStar:\n    \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew:\n    \"Constructors in/after an Optional Chain are not allowed.\",\n  OptionalChainingNoTemplate:\n    \"Tagged Template Literals are not allowed in optionalChain.\",\n  OverrideOnConstructor:\n    \"'override' modifier cannot appear on a constructor declaration.\",\n  ParamDupe: \"Argument name clash.\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n  PatternHasMethod: \"Object pattern can't contain methods.\",\n  PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\n    `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n  PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Duplicate private name #${identifierName}.`,\n  RecordExpressionBarIncorrectEndSyntaxType:\n    \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionBarIncorrectStartSyntaxType:\n    \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionHashIncorrectStartSyntaxType:\n    \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n  SloppyFunction:\n    \"In non-strict mode code, functions can only be declared at top level or inside a block.\",\n  SloppyFunctionAnnexB:\n    \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n  SourcePhaseImportRequiresDefault:\n    'Only `import source x from \"./module\"` is valid.',\n  StaticPrototype: \"Classes may not have static property named prototype.\",\n  SuperNotAllowed:\n    \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super.\",\n  TrailingDecorator: \"Decorators must be attached to a class element.\",\n  TupleExpressionBarIncorrectEndSyntaxType:\n    \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionBarIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionHashIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n  UnexpectedAwaitAfterPipelineBody:\n    'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n  UnexpectedImportExport:\n    \"'import' and 'export' may only appear at the top level.\",\n  UnexpectedKeyword: ({ keyword }: { keyword: string }) =>\n    `Unexpected keyword '${keyword}'.`,\n  UnexpectedLeadingDecorator:\n    \"Leading decorators must be attached to a class declaration.\",\n  UnexpectedLexicalDeclaration:\n    \"Lexical declaration cannot appear in a single-statement context.\",\n  UnexpectedNewTarget:\n    \"`new.target` can only be used in functions or class properties.\",\n  UnexpectedNumericSeparator:\n    \"A numeric separator is only allowed between two digits.\",\n  UnexpectedPrivateField: \"Unexpected private name.\",\n  UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Unexpected reserved word '${reservedWord}'.`,\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: ({\n    expected,\n    unexpected,\n  }: {\n    expected?: string | null;\n    unexpected?: string | null;\n  }) =>\n    `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${\n      expected ? `, expected \"${expected}\"` : \"\"\n    }`,\n  UnexpectedTokenUnaryExponentiation:\n    \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnexpectedUsingDeclaration:\n    \"Using declaration cannot appear in the top level when source type is `script`.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport:\n    \"A decorated export must export a class declaration.\",\n  UnsupportedDefaultExport:\n    \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport:\n    \"`import` can only be used in `import()` or `import.meta`.\",\n  UnsupportedMetaProperty: ({\n    target,\n    onlyValidPropertyName,\n  }: {\n    target: string;\n    onlyValidPropertyName: string;\n  }) =>\n    `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\n  UnsupportedParameterDecorator:\n    \"Decorators cannot be used to decorate parameters.\",\n  UnsupportedPropertyDecorator:\n    \"Decorators cannot be used to decorate object literal properties.\",\n  UnsupportedSuper:\n    \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n  UnterminatedComment: \"Unterminated comment.\",\n  UnterminatedRegExp: \"Unterminated regular expression.\",\n  UnterminatedString: \"Unterminated string constant.\",\n  UnterminatedTemplate: \"Unterminated template.\",\n  UsingDeclarationExport: \"Using declaration cannot be exported.\",\n  UsingDeclarationHasBindingPattern:\n    \"Using declaration cannot have destructuring patterns.\",\n  VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Identifier '${identifierName}' has already been declared.`,\n  YieldBindingIdentifier:\n    \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  ZeroDigitNumericSeparator:\n    \"Numeric separator can not be used after leading 0.\",\n} satisfies ParseErrorTemplates;\n", "import type { ParseErrorTemplates } from \"../parse-error\";\n\nexport default {\n  StrictDelete: \"Deleting local variable in strict mode.\",\n\n  // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\n  // is represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-IdentifierReference\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\n    `Assigning to '${referenceName}' in strict mode.`,\n\n  // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\n  // represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\n    `Binding '${bindingName}' in strict mode.`,\n\n  StrictFunction:\n    \"In strict mode code, functions can only be declared at top level or inside a block.\",\n\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n\n  StrictWith: \"'with' in strict mode.\",\n} satisfies ParseErrorTemplates;\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\n  \"ArrowFunctionExpression\",\n  \"AssignmentExpression\",\n  \"ConditionalExpression\",\n  \"YieldExpression\",\n] as const);\n\ntype GetSetMemberType<T extends Set<any>> =\n  T extends Set<infer M> ? M : unknown;\n\nexport type UnparenthesizedPipeBodyTypes = GetSetMemberType<\n  typeof UnparenthesizedPipeBodyDescriptions\n>;\n\nexport default {\n  // This error is only used by the smart-mix proposal\n  PipeBodyIsTighter:\n    \"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n  PipeTopicRequiresHackPipes:\n    'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PipeTopicUnbound:\n    \"Topic reference is unbound; it must be inside a pipe body.\",\n  PipeTopicUnconfiguredToken: ({ token }: { token: string }) =>\n    `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n  PipeTopicUnused:\n    \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipeUnparenthesizedBody: ({ type }: { type: UnparenthesizedPipeBodyTypes }) =>\n    `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n      type,\n    })}; please wrap it in parentheses.`,\n\n  // Messages whose codes start with “Pipeline” or “PrimaryTopic”\n  // are retained for backwards compatibility\n  // with the deprecated smart-mix pipe operator proposal plugin.\n  // They are subject to removal in a future major version.\n  PipelineBodyNoArrow:\n    'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n  PipelineBodySequenceExpression:\n    \"Pipeline body may not be a comma-separated sequence expression.\",\n  PipelineHeadSequenceExpression:\n    \"Pipeline head should not be a comma-separated sequence expression.\",\n  PipelineTopicUnused:\n    \"Pipeline is in topic style but does not use topic reference.\",\n  PrimaryTopicNotAllowed:\n    \"Topic reference was used in a lexical context without topic binding.\",\n  PrimaryTopicRequiresSmartPipeline:\n    'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n} satisfies ParseErrorTemplates;\n", "import { Position } from \"./util/location.ts\";\n\ntype SyntaxPlugin =\n  | \"flow\"\n  | \"typescript\"\n  | \"jsx\"\n  | \"pipelineOperator\"\n  | \"placeholders\";\n\ntype ParseErrorCode =\n  | \"BABEL_PARSER_SYNTAX_ERROR\"\n  | \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\n// Babel uses \"normal\" SyntaxErrors for it's errors, but adds some extra\n// functionality. This functionality is defined in the\n// `ParseErrorSpecification` interface below. We may choose to change to someday\n// give our errors their own full-blown class, but until then this allow us to\n// keep all the desirable properties of SyntaxErrors (like their name in stack\n// traces, etc.), and also allows us to punt on any publicly facing\n// class-hierarchy decisions until Babel 8.\ninterface ParseErrorSpecification<ErrorDetails> {\n  // Look, these *could* be readonly, but then Flow complains when we initially\n  // set them. We could do a whole dance and make a special interface that's not\n  // readonly for when we create the error, then cast it to the readonly\n  // interface for public use, but the previous implementation didn't have them\n  // as readonly, so let's just not worry about it for now.\n  code: ParseErrorCode;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  missingPlugin?: string | string[];\n  loc: Position;\n  details: ErrorDetails;\n\n  // We should consider removing this as it now just contains the same\n  // information as `loc.index`.\n  pos: number;\n}\n\nexport type ParseError<ErrorDetails> = SyntaxError &\n  ParseErrorSpecification<ErrorDetails>;\n\n// By `ParseErrorConstructor`, we mean something like the new-less style\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\n// separate classes from `SyntaxError`'s.\n//\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\nexport type ParseErrorConstructor<ErrorDetails> = (\n  loc: Position,\n  details: ErrorDetails,\n) => ParseError<ErrorDetails>;\n\ntype ToMessage<ErrorDetails> = (self: ErrorDetails) => string;\n\ntype ParseErrorCredentials<ErrorDetails> = {\n  code: string;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  toMessage: ToMessage<ErrorDetails>;\n};\n\nfunction defineHidden(obj: object, key: string, value: unknown) {\n  Object.defineProperty(obj, key, {\n    enumerable: false,\n    configurable: true,\n    value,\n  });\n}\n\nfunction toParseErrorConstructor<ErrorDetails extends object>({\n  toMessage,\n  code,\n  reasonCode,\n  syntaxPlugin,\n}: ParseErrorCredentials<ErrorDetails>): ParseErrorConstructor<ErrorDetails> {\n  const hasMissingPlugin =\n    reasonCode === \"MissingPlugin\" || reasonCode === \"MissingOneOfPlugins\";\n\n  if (!process.env.BABEL_8_BREAKING) {\n    const oldReasonCodes: Record<string, string> = {\n      AccessorCannotDeclareThisParameter: \"AccesorCannotDeclareThisParameter\",\n      AccessorCannotHaveTypeParameters: \"AccesorCannotHaveTypeParameters\",\n      ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n        \"ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference\",\n      SetAccessorCannotHaveOptionalParameter:\n        \"SetAccesorCannotHaveOptionalParameter\",\n      SetAccessorCannotHaveRestParameter: \"SetAccesorCannotHaveRestParameter\",\n      SetAccessorCannotHaveReturnType: \"SetAccesorCannotHaveReturnType\",\n    };\n    if (oldReasonCodes[reasonCode]) {\n      reasonCode = oldReasonCodes[reasonCode];\n    }\n  }\n\n  return function constructor(loc: Position, details: ErrorDetails) {\n    const error: ParseError<ErrorDetails> = new SyntaxError() as any;\n\n    error.code = code as ParseErrorCode;\n    error.reasonCode = reasonCode;\n    error.loc = loc;\n    error.pos = loc.index;\n\n    error.syntaxPlugin = syntaxPlugin;\n    if (hasMissingPlugin) {\n      error.missingPlugin = (details as any).missingPlugin;\n    }\n\n    type Overrides = {\n      loc?: Position;\n      details?: ErrorDetails;\n    };\n    defineHidden(error, \"clone\", function clone(overrides: Overrides = {}) {\n      const { line, column, index } = overrides.loc ?? loc;\n      return constructor(new Position(line, column, index), {\n        ...details,\n        ...overrides.details,\n      });\n    });\n\n    defineHidden(error, \"details\", details);\n\n    Object.defineProperty(error, \"message\", {\n      configurable: true,\n      get(this: ParseError<ErrorDetails>): string {\n        const message = `${toMessage(details)} (${loc.line}:${loc.column})`;\n        this.message = message;\n        return message;\n      },\n      set(value: string) {\n        Object.defineProperty(this, \"message\", { value, writable: true });\n      },\n    });\n\n    return error;\n  };\n}\n\ntype ParseErrorTemplate =\n  | string\n  | ToMessage<any>\n  | { message: string | ToMessage<any>; code?: ParseErrorCode };\n\nexport type ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\n\n// This is the templated form of `ParseErrorEnum`.\n//\n// Note: We could factor out the return type calculation into something like\n// `ParseErrorConstructor<T extends ParseErrorTemplates>`, and then we could\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\n// doesn't seem to drill down that far when showing you the computed type of\n// an object in an editor, so we'll leave it inlined for now.\nexport function ParseErrorEnum(a: TemplateStringsArray): <\n  T extends ParseErrorTemplates,\n>(\n  parseErrorTemplates: T,\n) => {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\nexport function ParseErrorEnum<T extends ParseErrorTemplates>(\n  parseErrorTemplates: T,\n  syntaxPlugin?: SyntaxPlugin,\n): {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\n//\n// 1. a static error message,\n// 2. `toMessage` functions that define additional necessary `details` needed by\n//    the `ParseError`, or\n// 3. Objects that contain a `message` of one of the above and overridden `code`\n//    and/or `reasonCode`:\n//\n// ParseErrorEnum `optionalSyntaxPlugin` ({\n//   ErrorWithStaticMessage: \"message\",\n//   ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\n//   ErrorWithOverriddenCodeAndOrReasonCode: {\n//     message: ({ type }: { type: string }) => `${type}`),\n//     code: \"AN_ERROR_CODE\",\n//     ...(BABEL_8_BREAKING ? { } : { reasonCode: \"CustomErrorReasonCode\" })\n//   }\n// });\n//\nexport function ParseErrorEnum(\n  argument: TemplateStringsArray | ParseErrorTemplates,\n  syntaxPlugin?: SyntaxPlugin,\n) {\n  // If the first parameter is an array, that means we were called with a tagged\n  // template literal. Extract the syntaxPlugin from this, and call again in\n  // the \"normalized\" form.\n  if (Array.isArray(argument)) {\n    return (parseErrorTemplates: ParseErrorTemplates) =>\n      ParseErrorEnum(parseErrorTemplates, argument[0]);\n  }\n\n  const ParseErrorConstructors = {} as Record<\n    string,\n    ParseErrorConstructor<unknown>\n  >;\n\n  for (const reasonCode of Object.keys(argument)) {\n    const template = (argument as ParseErrorTemplates)[reasonCode];\n    const { message, ...rest } =\n      typeof template === \"string\"\n        ? { message: () => template }\n        : typeof template === \"function\"\n          ? { message: template }\n          : template;\n    const toMessage = typeof message === \"string\" ? () => message : message;\n\n    ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\n      code: \"BABEL_PARSER_SYNTAX_ERROR\",\n      reasonCode,\n      toMessage,\n      ...(syntaxPlugin ? { syntaxPlugin } : {}),\n      ...rest,\n    });\n  }\n\n  return ParseErrorConstructors;\n}\n\nimport ModuleErrors from \"./parse-error/module-errors.ts\";\nimport StandardErrors from \"./parse-error/standard-errors.ts\";\nimport StrictModeErrors from \"./parse-error/strict-mode-errors.ts\";\nimport PipelineOperatorErrors from \"./parse-error/pipeline-operator-errors.ts\";\n\nexport const Errors = {\n  ...ParseErrorEnum(ModuleErrors),\n  ...ParseErrorEnum(StandardErrors),\n  ...ParseErrorEnum(StrictModeErrors),\n  ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors.ts\";\n", "import type { TokenType } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type * as N from \"../types.ts\";\nimport type { Node as NodeType, NodeBase, File } from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\n\nconst { defineProperty } = Object;\nconst toUnenumerable = (object: any, key: string) => {\n  if (object) {\n    defineProperty(object, key, { enumerable: false, value: object[key] });\n  }\n};\n\nfunction toESTreeLocation(node: any) {\n  toUnenumerable(node.loc.start, \"index\");\n  toUnenumerable(node.loc.end, \"index\");\n\n  return node;\n}\n\nexport default (superClass: typeof Parser) =>\n  class ESTreeParserMixin extends superClass implements Parser {\n    parse(): File {\n      const file = toESTreeLocation(super.parse());\n\n      if (this.options.tokens) {\n        file.tokens = file.tokens.map(toESTreeLocation);\n      }\n\n      return file;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\n      let regex: RegExp | null = null;\n      try {\n        regex = new RegExp(pattern, flags);\n      } catch (_) {\n        // In environments that don't support these flags value will\n        // be null as the regex can't be represented natively.\n      }\n      const node = this.estreeParseLiteral<N.EstreeRegExpLiteral>(regex);\n      node.regex = { pattern, flags };\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseBigIntLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n      let bigInt: bigint | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        bigInt = null;\n      }\n      const node = this.estreeParseLiteral<N.EstreeBigIntLiteral>(bigInt);\n      node.bigint = String(node.value || value);\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseDecimalLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/experimental/decimal.md\n      // todo: use BigDecimal when node supports it.\n      const decimal: null = null;\n      const node = this.estreeParseLiteral(decimal);\n      node.decimal = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseLiteral<T extends N.EstreeLiteral>(value: any) {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.parseLiteral<T>(value, \"Literal\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseStringLiteral(value: any): N.Node {\n      return this.estreeParseLiteral(value);\n    }\n\n    parseNumericLiteral(value: any): any {\n      return this.estreeParseLiteral(value);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseNullLiteral(): N.Node {\n      return this.estreeParseLiteral(null);\n    }\n\n    parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.estreeParseLiteral(value);\n    }\n\n    // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n      const expression = directive.value as any as N.EstreeLiteral;\n      delete directive.value;\n\n      expression.type = \"Literal\";\n      // @ts-expect-error N.EstreeLiteral.raw is not defined.\n      expression.raw = expression.extra.raw;\n      expression.value = expression.extra.expressionValue;\n\n      const stmt = directive as any as N.ExpressionStatement;\n      stmt.type = \"ExpressionStatement\";\n      stmt.expression = expression;\n      // @ts-expect-error N.ExpressionStatement.directive is not defined\n      stmt.directive = expression.extra.rawValue;\n\n      delete expression.extra;\n\n      return stmt;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n      super.initFunction(node, isAsync);\n      node.expression = false;\n    }\n\n    checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n      if (node != null && this.isObjectProperty(node)) {\n        // @ts-expect-error plugin typings\n        this.checkDeclaration((node as unknown as N.EstreeProperty).value);\n      } else {\n        super.checkDeclaration(node);\n      }\n    }\n\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n      return (method as unknown as N.EstreeMethodDefinition).value.params;\n    }\n\n    isValidDirective(stmt: N.Statement): boolean {\n      return (\n        stmt.type === \"ExpressionStatement\" &&\n        stmt.expression.type === \"Literal\" &&\n        typeof stmt.expression.value === \"string\" &&\n        !stmt.expression.extra?.parenthesized\n      );\n    }\n\n    parseBlockBody(\n      node: N.BlockStatementLike,\n      allowDirectives: boolean | undefined | null,\n      topLevel: boolean,\n      end: TokenType,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): void {\n      super.parseBlockBody(\n        node,\n        allowDirectives,\n        topLevel,\n        end,\n        afterBlockParse,\n      );\n\n      const directiveStatements = node.directives.map(d =>\n        this.directiveToStmt(d),\n      );\n      // @ts-expect-error estree plugin typings\n      node.body = directiveStatements.concat(node.body);\n      delete node.directives;\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      );\n      if (method.typeParameters) {\n        // @ts-expect-error mutate AST types\n        method.value.typeParameters = method.typeParameters;\n        delete method.typeParameters;\n      }\n      classBody.body.push(method);\n    }\n\n    parsePrivateName(): any {\n      const node = super.parsePrivateName();\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return node;\n        }\n      }\n      return this.convertPrivateNameToPrivateIdentifier(node);\n    }\n\n    convertPrivateNameToPrivateIdentifier(\n      node: N.PrivateName,\n    ): N.EstreePrivateIdentifier {\n      const name = super.getPrivateNameSV(node);\n      node = node as any;\n      delete node.id;\n      // @ts-expect-error mutate AST types\n      node.name = name;\n      // @ts-expect-error mutate AST types\n      node.type = \"PrivateIdentifier\";\n      return node as unknown as N.EstreePrivateIdentifier;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isPrivateName(node: N.Node): node is N.EstreePrivateIdentifier {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.isPrivateName(node);\n        }\n      }\n      return node.type === \"PrivateIdentifier\";\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    getPrivateNameSV(node: N.EstreePrivateIdentifier): string {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.getPrivateNameSV(node as unknown as N.PrivateName);\n        }\n      }\n      return node.name;\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseLiteral<T extends N.Literal>(value: any, type: T[\"type\"]): T {\n      const node = super.parseLiteral<T>(value, type);\n      // @ts-expect-error mutating AST types\n      node.raw = node.extra.raw;\n      delete node.extra;\n\n      return node;\n    }\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpression?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      super.parseFunctionBody(node, allowExpression, isMethod);\n      node.expression = node.body.type !== \"BlockStatement\";\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseMethod<\n      T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope: boolean = false,\n    ): N.EstreeMethodDefinition {\n      let funcNode = this.startNode<N.MethodLike>();\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n      funcNode = super.parseMethod(\n        // @ts-expect-error todo(flow->ts)\n        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error mutate AST types\n      funcNode.type = \"FunctionExpression\";\n      delete funcNode.kind;\n      // @ts-expect-error mutate AST types\n      node.value = funcNode;\n      if (type === \"ClassPrivateMethod\") {\n        node.computed = false;\n      }\n      return this.finishNode(\n        // @ts-expect-error cast methods to estree types\n        node as Undone<N.EstreeMethodDefinition>,\n        \"MethodDefinition\",\n      );\n    }\n\n    nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n      if (key.type === \"Literal\") return key.value === \"constructor\";\n      return super.nameIsConstructor(key);\n    }\n\n    parseClassProperty(...args: [N.ClassProperty]): any {\n      const propertyNode = super.parseClassProperty(...args) as any;\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as N.EstreePropertyDefinition;\n        }\n      }\n      propertyNode.type = \"PropertyDefinition\";\n      return propertyNode as N.EstreePropertyDefinition;\n    }\n\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n      const propertyNode = super.parseClassPrivateProperty(...args) as any;\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as N.EstreePropertyDefinition;\n        }\n      }\n      propertyNode.type = \"PropertyDefinition\";\n      propertyNode.computed = false;\n      return propertyNode as N.EstreePropertyDefinition;\n    }\n\n    parseObjectMethod(\n      prop: N.ObjectMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n    ): N.ObjectMethod | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n      ) as any;\n\n      if (node) {\n        node.type = \"Property\";\n        if ((node as any as N.ClassMethod).kind === \"method\") {\n          node.kind = \"init\";\n        }\n        node.shorthand = false;\n      }\n\n      return node as any;\n    }\n\n    parseObjectProperty(\n      prop: N.ObjectProperty,\n      startLoc: Position | undefined | null,\n      isPattern: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ObjectProperty | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectProperty(\n        prop,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      ) as any;\n\n      if (node) {\n        node.kind = \"init\";\n        node.type = \"Property\";\n      }\n\n      return node as any;\n    }\n\n    isValidLVal(\n      type: string,\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      return type === \"Property\"\n        ? \"value\"\n        : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node != null && this.isObjectProperty(node)) {\n        return this.isAssignable(node.value, isBinding);\n      }\n      return super.isAssignable(node, isBinding);\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (node != null && this.isObjectProperty(node)) {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableObjectExpressionProp(\n      prop: N.Node,\n      isLast: boolean,\n      isLHS: boolean,\n    ) {\n      if (\n        prop.type === \"Property\" &&\n        (prop.kind === \"get\" || prop.kind === \"set\")\n      ) {\n        this.raise(Errors.PatternHasAccessor, prop.key);\n      } else if (prop.type === \"Property\" && prop.method) {\n        this.raise(Errors.PatternHasMethod, prop.key);\n      } else {\n        super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n      }\n    }\n\n    finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n      unfinished: Undone<T>,\n      optional: boolean,\n    ): T {\n      const node = super.finishCallExpression(unfinished, optional);\n\n      if (node.callee.type === \"Import\") {\n        (node as N.Node as N.EstreeImportExpression).type = \"ImportExpression\";\n        (node as N.Node as N.EstreeImportExpression).source = node\n          .arguments[0] as N.Expression;\n        if (\n          this.hasPlugin(\"importAttributes\") ||\n          this.hasPlugin(\"importAssertions\")\n        ) {\n          (node as N.Node as N.EstreeImportExpression).options =\n            (node.arguments[1] as N.Expression) ?? null;\n          // compatibility with previous ESTree AST\n          (node as N.Node as N.EstreeImportExpression).attributes =\n            (node.arguments[1] as N.Expression) ?? null;\n        }\n        // arguments isn't optional in the type definition\n        delete node.arguments;\n        // callee isn't optional in the type definition\n        delete node.callee;\n      }\n\n      return node;\n    }\n\n    toReferencedArguments(\n      node:\n        | N.CallExpression\n        | N.OptionalCallExpression\n        | N.EstreeImportExpression,\n      /* isParenthesizedExpr?: boolean, */\n    ) {\n      // ImportExpressions do not have an arguments array.\n      if (node.type === \"ImportExpression\") {\n        return;\n      }\n\n      super.toReferencedArguments(node);\n    }\n\n    parseExport(\n      unfinished: Undone<N.AnyExport>,\n      decorators: N.Decorator[] | null,\n    ) {\n      const exportStartLoc = this.state.lastTokStartLoc;\n      const node = super.parseExport(unfinished, decorators);\n\n      switch (node.type) {\n        case \"ExportAllDeclaration\":\n          // @ts-expect-error mutating AST types\n          node.exported = null;\n          break;\n\n        case \"ExportNamedDeclaration\":\n          if (\n            node.specifiers.length === 1 &&\n            node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n          ) {\n            // @ts-expect-error mutating AST types\n            node.type = \"ExportAllDeclaration\";\n            // @ts-expect-error mutating AST types\n            node.exported = node.specifiers[0].exported;\n            delete node.specifiers;\n          }\n\n        // fallthrough\n        case \"ExportDefaultDeclaration\":\n          {\n            const { declaration } = node;\n            if (\n              declaration?.type === \"ClassDeclaration\" &&\n              declaration.decorators?.length > 0 &&\n              // decorator comes before export\n              declaration.start === node.start\n            ) {\n              this.resetStartLocation(\n                node,\n                // For compatibility with ESLint's keyword-spacing rule, which assumes that an\n                // export declaration must start with export.\n                // https://github.com/babel/babel/issues/15085\n                // Here we reset export declaration's start to be the start of the export token\n                exportStartLoc,\n              );\n            }\n          }\n\n          break;\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      const node = super.parseSubscript(base, startLoc, noCalls, state);\n\n      if (state.optionalChainMember) {\n        // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n        if (\n          node.type === \"OptionalMemberExpression\" ||\n          node.type === \"OptionalCallExpression\"\n        ) {\n          // strip Optional prefix\n          (node as unknown as N.CallExpression | N.MemberExpression).type =\n            node.type.substring(8) as \"CallExpression\" | \"MemberExpression\";\n        }\n        if (state.stop) {\n          const chain = this.startNodeAtNode<N.EstreeChainExpression>(node);\n          chain.expression = node;\n          return this.finishNode(chain, \"ChainExpression\");\n        }\n      } else if (\n        node.type === \"MemberExpression\" ||\n        node.type === \"CallExpression\"\n      ) {\n        // @ts-expect-error not in the type definitions\n        node.optional = false;\n      }\n\n      return node;\n    }\n\n    isOptionalMemberExpression(node: N.Node) {\n      if (node.type === \"ChainExpression\") {\n        return node.expression.type === \"MemberExpression\";\n      }\n      return super.isOptionalMemberExpression(node);\n    }\n\n    hasPropertyAsPrivateName(node: N.Node): boolean {\n      if (node.type === \"ChainExpression\") {\n        node = node.expression;\n      }\n      return super.hasPropertyAsPrivateName(node);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectProperty(node: N.Node): node is N.EstreeProperty {\n      return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectMethod(node: N.Node): node is N.EstreeProperty {\n      return (\n        node.type === \"Property\" &&\n        (node.method || node.kind === \"get\" || node.kind === \"set\")\n      );\n    }\n\n    finishNodeAt<T extends NodeType>(\n      node: Undone<T>,\n      type: T[\"type\"],\n      endLoc: Position,\n    ): T {\n      return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n    }\n\n    resetStartLocation(node: N.Node, startLoc: Position) {\n      super.resetStartLocation(node, startLoc);\n      toESTreeLocation(node);\n    }\n\n    resetEndLocation(\n      node: NodeBase,\n      endLoc: Position = this.state.lastTokEndLoc,\n    ): void {\n      super.resetEndLocation(node, endLoc);\n      toESTreeLocation(node);\n    }\n  };\n", "// The token context is used in JSX plugin to track\n// jsx tag / jsx text / normal JavaScript expression\n\nexport class TokContext {\n  constructor(token: string, preserveSpace?: boolean) {\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n\n  token: string;\n  preserveSpace: boolean;\n}\n\nconst types: {\n  [key: string]: TokContext;\n} = {\n  brace: new TokContext(\"{\"), // normal JavaScript expression\n  j_oTag: new TokContext(\"<tag\"), // JSX opening tag\n  j_cTag: new TokContext(\"</tag\"), // JSX closing tag\n  j_expr: new TokContext(\"<tag>...</tag>\", true), // JSX expressions\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n  types.template = new TokContext(\"`\", true);\n}\n\nexport { types };\n", "import { types as tc, type TokContext } from \"./context.ts\";\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between 1) binary\n// expression (<) and JSX Tag start (<name>); 2) object literal and JSX\n// texts. It is set on the `updateContext` function in the JSX plugin.\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the “argument” subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n  keyword?: string;\n  beforeExpr?: boolean;\n  startsExpr?: boolean;\n  rightAssociative?: boolean;\n  isLoop?: boolean;\n  isAssign?: boolean;\n  prefix?: boolean;\n  postfix?: boolean;\n  binop?: number | null;\n};\n\n// Internally the tokenizer stores token as a number\nexport type TokenType = number;\n\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\n// when `tokens: true` is enabled. Unlike internal token type, it provides\n// metadata of the tokens.\nexport class ExportedTokenType {\n  label: string;\n  keyword: string | undefined | null;\n  beforeExpr: boolean;\n  startsExpr: boolean;\n  rightAssociative: boolean;\n  isLoop: boolean;\n  isAssign: boolean;\n  prefix: boolean;\n  postfix: boolean;\n  binop: number | undefined | null;\n  // todo(Babel 8): remove updateContext from exposed token layout\n  declare updateContext:\n    | ((context: Array<TokContext>) => void)\n    | undefined\n    | null;\n\n  constructor(label: string, conf: TokenOptions = {}) {\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    if (!process.env.BABEL_8_BREAKING) {\n      this.updateContext = null;\n    }\n  }\n}\n\n// A map from keyword/keyword-like string value to the token type\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n  options.keyword = name;\n  const token = createToken(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n  return createToken(name, { beforeExpr, binop });\n}\n\nlet tokenTypeCounter = -1;\nexport const tokenTypes: ExportedTokenType[] = [];\nconst tokenLabels: string[] = [];\nconst tokenBinops: number[] = [];\nconst tokenBeforeExprs: boolean[] = [];\nconst tokenStartsExprs: boolean[] = [];\nconst tokenPrefixes: boolean[] = [];\n\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\n  ++tokenTypeCounter;\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  tokenTypes.push(new ExportedTokenType(name, options));\n\n  return tokenTypeCounter;\n}\n\nfunction createKeywordLike(\n  name: string,\n  options: TokenOptions = {},\n): TokenType {\n  ++tokenTypeCounter;\n  keywords.set(name, tokenTypeCounter);\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  // In the exported token type, we set the label as \"name\" for backward compatibility with Babel 7\n  tokenTypes.push(new ExportedTokenType(\"name\", options));\n\n  return tokenTypeCounter;\n}\n\n// For performance the token type helpers depend on the following declarations order.\n// When adding new token types, please also check if the token helpers need update.\n\nexport type InternalTokenTypes = typeof tt;\n\nexport const tt = {\n  // Punctuation token types.\n  bracketL: createToken(\"[\", { beforeExpr, startsExpr }),\n  bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n  bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: createToken(\"]\"),\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n  braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n  braceHashL: createToken(\"#{\", { beforeExpr, startsExpr }),\n  braceR: createToken(\"}\"),\n  braceBarR: createToken(\"|}\"),\n  parenL: createToken(\"(\", { beforeExpr, startsExpr }),\n  parenR: createToken(\")\"),\n  comma: createToken(\",\", { beforeExpr }),\n  semi: createToken(\";\", { beforeExpr }),\n  colon: createToken(\":\", { beforeExpr }),\n  doubleColon: createToken(\"::\", { beforeExpr }),\n  dot: createToken(\".\"),\n  question: createToken(\"?\", { beforeExpr }),\n  questionDot: createToken(\"?.\"),\n  arrow: createToken(\"=>\", { beforeExpr }),\n  template: createToken(\"template\"),\n  ellipsis: createToken(\"...\", { beforeExpr }),\n  backQuote: createToken(\"`\", { startsExpr }),\n  dollarBraceL: createToken(\"${\", { beforeExpr, startsExpr }),\n  // start: isTemplate\n  templateTail: createToken(\"...`\", { startsExpr }),\n  templateNonTail: createToken(\"...${\", { beforeExpr, startsExpr }),\n  // end: isTemplate\n  at: createToken(\"@\"),\n  hash: createToken(\"#\", { startsExpr }),\n\n  // Special hashbang token.\n  interpreterDirective: createToken(\"#!...\"),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  // start: isAssign\n  eq: createToken(\"=\", { beforeExpr, isAssign }),\n  assign: createToken(\"_=\", { beforeExpr, isAssign }),\n  slashAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // These are only needed to support % and ^ as a Hack-pipe topic token.\n  // When the proposal settles on a token, the others can be merged with\n  // tt.assign.\n  xorAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  moduloAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // end: isAssign\n\n  incDec: createToken(\"++/--\", { prefix, postfix, startsExpr }),\n  bang: createToken(\"!\", { beforeExpr, prefix, startsExpr }),\n  tilde: createToken(\"~\", { beforeExpr, prefix, startsExpr }),\n\n  // More possible topic tokens.\n  // When the proposal settles on a token, at least one of these may be removed.\n  doubleCaret: createToken(\"^^\", { startsExpr }),\n  doubleAt: createToken(\"@@\", { startsExpr }),\n\n  // start: isBinop\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  lt: createBinop(\"</>/<=/>=\", 7),\n  gt: createBinop(\"</>/<=/>=\", 7),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  bitShiftL: createBinop(\"<</>>/>>>\", 8),\n  bitShiftR: createBinop(\"<</>>/>>>\", 8),\n  plusMin: createToken(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n  // startsExpr: required by v8intrinsic plugin\n  modulo: createToken(\"%\", { binop: 10, startsExpr }),\n  // unset `beforeExpr` as it can be `function *`\n  star: createToken(\"*\", { binop: 10 }),\n  slash: createBinop(\"/\", 10),\n  exponent: createToken(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true,\n  }),\n\n  // Keywords\n  // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n  // when new keywords are added\n  // start: isLiteralPropertyName\n  // start: isKeyword\n  _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n  _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n  // end: isBinop\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", { beforeExpr }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", { beforeExpr }),\n  _else: createKeyword(\"else\", { beforeExpr }),\n  _finally: createKeyword(\"finally\"),\n  _function: createKeyword(\"function\", { startsExpr }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", { beforeExpr }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n  _this: createKeyword(\"this\", { startsExpr }),\n  _super: createKeyword(\"super\", { startsExpr }),\n  _class: createKeyword(\"class\", { startsExpr }),\n  _extends: createKeyword(\"extends\", { beforeExpr }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", { startsExpr }),\n  _null: createKeyword(\"null\", { startsExpr }),\n  _true: createKeyword(\"true\", { startsExpr }),\n  _false: createKeyword(\"false\", { startsExpr }),\n  _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n  _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n  _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n  // start: isLoop\n  _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n  _for: createKeyword(\"for\", { isLoop }),\n  _while: createKeyword(\"while\", { isLoop }),\n  // end: isLoop\n  // end: isKeyword\n\n  // Primary literals\n  // start: isIdentifier\n  _as: createKeywordLike(\"as\", { startsExpr }),\n  _assert: createKeywordLike(\"assert\", { startsExpr }),\n  _async: createKeywordLike(\"async\", { startsExpr }),\n  _await: createKeywordLike(\"await\", { startsExpr }),\n  _defer: createKeywordLike(\"defer\", { startsExpr }),\n  _from: createKeywordLike(\"from\", { startsExpr }),\n  _get: createKeywordLike(\"get\", { startsExpr }),\n  _let: createKeywordLike(\"let\", { startsExpr }),\n  _meta: createKeywordLike(\"meta\", { startsExpr }),\n  _of: createKeywordLike(\"of\", { startsExpr }),\n  _sent: createKeywordLike(\"sent\", { startsExpr }),\n  _set: createKeywordLike(\"set\", { startsExpr }),\n  _source: createKeywordLike(\"source\", { startsExpr }),\n  _static: createKeywordLike(\"static\", { startsExpr }),\n  _using: createKeywordLike(\"using\", { startsExpr }),\n  _yield: createKeywordLike(\"yield\", { startsExpr }),\n\n  // Flow and TypeScript Keywordlike\n  _asserts: createKeywordLike(\"asserts\", { startsExpr }),\n  _checks: createKeywordLike(\"checks\", { startsExpr }),\n  _exports: createKeywordLike(\"exports\", { startsExpr }),\n  _global: createKeywordLike(\"global\", { startsExpr }),\n  _implements: createKeywordLike(\"implements\", { startsExpr }),\n  _intrinsic: createKeywordLike(\"intrinsic\", { startsExpr }),\n  _infer: createKeywordLike(\"infer\", { startsExpr }),\n  _is: createKeywordLike(\"is\", { startsExpr }),\n  _mixins: createKeywordLike(\"mixins\", { startsExpr }),\n  _proto: createKeywordLike(\"proto\", { startsExpr }),\n  _require: createKeywordLike(\"require\", { startsExpr }),\n  _satisfies: createKeywordLike(\"satisfies\", { startsExpr }),\n  // start: isTSTypeOperator\n  _keyof: createKeywordLike(\"keyof\", { startsExpr }),\n  _readonly: createKeywordLike(\"readonly\", { startsExpr }),\n  _unique: createKeywordLike(\"unique\", { startsExpr }),\n  // end: isTSTypeOperator\n  // start: isTSDeclarationStart\n  _abstract: createKeywordLike(\"abstract\", { startsExpr }),\n  _declare: createKeywordLike(\"declare\", { startsExpr }),\n  _enum: createKeywordLike(\"enum\", { startsExpr }),\n  _module: createKeywordLike(\"module\", { startsExpr }),\n  _namespace: createKeywordLike(\"namespace\", { startsExpr }),\n  // start: isFlowInterfaceOrTypeOrOpaque\n  _interface: createKeywordLike(\"interface\", { startsExpr }),\n  _type: createKeywordLike(\"type\", { startsExpr }),\n  // end: isTSDeclarationStart\n  _opaque: createKeywordLike(\"opaque\", { startsExpr }),\n  // end: isFlowInterfaceOrTypeOrOpaque\n  name: createToken(\"name\", { startsExpr }),\n  // end: isIdentifier\n\n  string: createToken(\"string\", { startsExpr }),\n  num: createToken(\"num\", { startsExpr }),\n  bigint: createToken(\"bigint\", { startsExpr }),\n  decimal: createToken(\"decimal\", { startsExpr }),\n  // end: isLiteralPropertyName\n  regexp: createToken(\"regexp\", { startsExpr }),\n  privateName: createToken(\"#name\", { startsExpr }),\n  eof: createToken(\"eof\"),\n\n  // jsx plugin\n  jsxName: createToken(\"jsxName\"),\n  jsxText: createToken(\"jsxText\", { beforeExpr: true }),\n  jsxTagStart: createToken(\"jsxTagStart\", { startsExpr: true }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n\n  // placeholder plugin\n  placeholder: createToken(\"%%\", { startsExpr: true }),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n  return token >= tt._as && token <= tt.name;\n}\n\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\n  // we can remove the token >= tt._in check when we\n  // know a token is either keyword or identifier\n  return token <= tt._while;\n}\n\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.name;\n}\n\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.decimal;\n}\n\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\n  return tokenBeforeExprs[token];\n}\n\nexport function tokenCanStartExpression(token: TokenType): boolean {\n  return tokenStartsExprs[token];\n}\n\nexport function tokenIsAssignment(token: TokenType): boolean {\n  return token >= tt.eq && token <= tt.moduloAssign;\n}\n\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\n  return token >= tt._interface && token <= tt._opaque;\n}\n\nexport function tokenIsLoop(token: TokenType): boolean {\n  return token >= tt._do && token <= tt._while;\n}\n\nexport function tokenIsKeyword(token: TokenType): boolean {\n  return token >= tt._in && token <= tt._while;\n}\n\nexport function tokenIsOperator(token: TokenType): boolean {\n  return token >= tt.pipeline && token <= tt._instanceof;\n}\n\nexport function tokenIsPostfix(token: TokenType): boolean {\n  return token === tt.incDec;\n}\n\nexport function tokenIsPrefix(token: TokenType): boolean {\n  return tokenPrefixes[token];\n}\n\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\n  return token >= tt._keyof && token <= tt._unique;\n}\n\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\n  return token >= tt._abstract && token <= tt._type;\n}\n\nexport function tokenLabelName(token: TokenType): string {\n  return tokenLabels[token];\n}\n\nexport function tokenOperatorPrecedence(token: TokenType): number {\n  return tokenBinops[token];\n}\n\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\n  return tokenBinops[token] !== -1;\n}\n\nexport function tokenIsRightAssociative(token: TokenType): boolean {\n  return token === tt.exponent;\n}\n\nexport function tokenIsTemplate(token: TokenType): boolean {\n  return token >= tt.templateTail && token <= tt.templateNonTail;\n}\n\nexport function getExportedToken(token: TokenType): ExportedTokenType {\n  return tokenTypes[token];\n}\n\nexport function isTokenType(obj: any): boolean {\n  return typeof obj === \"number\";\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n  tokenTypes[tt.braceR].updateContext = context => {\n    context.pop();\n  };\n\n  tokenTypes[tt.braceL].updateContext =\n    tokenTypes[tt.braceHashL].updateContext =\n    tokenTypes[tt.dollarBraceL].updateContext =\n      context => {\n        context.push(tc.brace);\n      };\n\n  tokenTypes[tt.backQuote].updateContext = context => {\n    if (context[context.length - 1] === tc.template) {\n      context.pop();\n    } else {\n      context.push(tc.template);\n    }\n  };\n\n  tokenTypes[tt.jsxTagStart].updateContext = context => {\n    context.push(tc.j_expr, tc.j_oTag);\n  };\n}\n", "// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\nconst nonASCIIidentifierStart = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,16,621,2467,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n  let pos = 0x10000;\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n  return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return (\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n    );\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\n  if (code < charCodes.colon) return true;\n  if (code < charCodes.uppercaseA) return false;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n  return (\n    isInAstralSet(code, astralIdentifierStartCodes) ||\n    isInAstralSet(code, astralIdentifierCodes)\n  );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n  let isFirst = true;\n  for (let i = 0; i < name.length; i++) {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = name.charCodeAt(i);\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n      const trail = name.charCodeAt(++i);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    if (isFirst) {\n      isFirst = false;\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n  return !isFirst;\n}\n", "const reservedWords = {\n  keyword: [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"return\",\n    \"switch\",\n    \"throw\",\n    \"try\",\n    \"var\",\n    \"const\",\n    \"while\",\n    \"with\",\n    \"new\",\n    \"this\",\n    \"super\",\n    \"class\",\n    \"extends\",\n    \"export\",\n    \"import\",\n    \"null\",\n    \"true\",\n    \"false\",\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"void\",\n    \"delete\",\n  ],\n  strict: [\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n  ],\n  strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n  return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n  return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n  word: string,\n  inModule: boolean,\n): boolean {\n  return (\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n  );\n}\n\nexport function isKeyword(word: string): boolean {\n  return keywords.has(word);\n}\n", "import * as charCodes from \"charcodes\";\nimport { isIdentifierStart } from \"@babel/helper-validator-identifier\";\n\nexport {\n  isIdentifierStart,\n  isIdentifierChar,\n  isReservedWord,\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n  isStrictReservedWord,\n  isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(\n  current: number,\n  next: number,\n  next2: number,\n): boolean {\n  return (\n    current === charCodes.atSign &&\n    next === charCodes.atSign &&\n    isIdentifierStart(next2)\n  );\n}\n\n// This is the comprehensive set of JavaScript reserved words\n// If a word is in this set, it could be a reserved word,\n// depending on sourceType/strictMode/binding info. In other words\n// if a word is not in this set, it is not a reserved word under\n// any circumstance.\nconst reservedWordLikeSet = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"do\",\n  \"else\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"return\",\n  \"switch\",\n  \"throw\",\n  \"try\",\n  \"var\",\n  \"const\",\n  \"while\",\n  \"with\",\n  \"new\",\n  \"this\",\n  \"super\",\n  \"class\",\n  \"extends\",\n  \"export\",\n  \"import\",\n  \"null\",\n  \"true\",\n  \"false\",\n  \"in\",\n  \"instanceof\",\n  \"typeof\",\n  \"void\",\n  \"delete\",\n  // strict\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  // strictBind\n  \"eval\",\n  \"arguments\",\n  // reservedWorkLike\n  \"enum\",\n  \"await\",\n]);\n\nexport function canBeReservedWord(word: string): boolean {\n  return reservedWordLikeSet.has(word);\n}\n", "import { ScopeFlag, BindingFlag } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport type * as N from \"../types.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport const enum NameType {\n  // var-declared names in the current lexical scope\n  Var = 1 << 0,\n  // lexically-declared names in the current lexical scope\n  Lexical = 1 << 1,\n  // lexically-declared FunctionDeclaration names in the current lexical scope\n  Function = 1 << 2,\n}\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n  flags: ScopeFlag = 0;\n  names: Map<string, NameType> = new Map();\n  firstLexicalName = \"\";\n\n  constructor(flags: ScopeFlag) {\n    this.flags = flags;\n  }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope extends Scope = Scope> {\n  parser: Tokenizer;\n  scopeStack: Array<IScope> = [];\n  inModule: boolean;\n  undefinedExports: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer, inModule: boolean) {\n    this.parser = parser;\n    this.inModule = inModule;\n  }\n\n  get inTopLevel() {\n    return (this.currentScope().flags & ScopeFlag.PROGRAM) > 0;\n  }\n  get inFunction() {\n    return (this.currentVarScopeFlags() & ScopeFlag.FUNCTION) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.DIRECT_SUPER) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & ScopeFlag.CLASS) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (flags & ScopeFlag.CLASS) > 0 && (flags & ScopeFlag.FUNCTION) === 0;\n  }\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.STATIC_BLOCK) {\n        return true;\n      }\n      if (flags & (ScopeFlag.VAR | ScopeFlag.CLASS)) {\n        // function body, module body, class property initializers\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & ScopeFlag.FUNCTION) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags: ScopeFlag): Scope {\n    return new Scope(flags);\n  }\n\n  enter(flags: ScopeFlag) {\n    /*:: +createScope: (flags:ScopeFlag) => IScope; */\n    // @ts-expect-error This method will be overwritten by subclasses\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit(): ScopeFlag {\n    const scope = this.scopeStack.pop();\n    return scope.flags;\n  }\n\n  // The spec says:\n  // > At the top level of a function, or script, function declarations are\n  // > treated like var declarations rather than like lexical declarations.\n  treatFunctionsAsVarInScope(scope: IScope): boolean {\n    return !!(\n      scope.flags & (ScopeFlag.FUNCTION | ScopeFlag.STATIC_BLOCK) ||\n      (!this.parser.inModule && scope.flags & ScopeFlag.PROGRAM)\n    );\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    let scope = this.currentScope();\n    if (\n      bindingType & BindingFlag.SCOPE_LEXICAL ||\n      bindingType & BindingFlag.SCOPE_FUNCTION\n    ) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n      let type = scope.names.get(name) || 0;\n\n      if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n        type = type | NameType.Function;\n      } else {\n        if (!scope.firstLexicalName) {\n          scope.firstLexicalName = name;\n        }\n        type = type | NameType.Lexical;\n      }\n\n      scope.names.set(name, type);\n\n      if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BindingFlag.SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        scope.names.set(name, (scope.names.get(name) || 0) | NameType.Var);\n        this.maybeExportDefined(scope, name);\n\n        if (scope.flags & ScopeFlag.VAR) break;\n      }\n    }\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope: IScope, name: string) {\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n    loc: Position,\n  ) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.parser.raise(Errors.VarRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n  }\n\n  isRedeclaredInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (!(bindingType & BindingFlag.KIND_VALUE)) return false;\n\n    if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n      return scope.names.has(name);\n    }\n\n    const type = scope.names.get(name);\n\n    if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n      return (\n        (type & NameType.Lexical) > 0 ||\n        (!this.treatFunctionsAsVarInScope(scope) && (type & NameType.Var) > 0)\n      );\n    }\n\n    return (\n      ((type & NameType.Lexical) > 0 &&\n        // Annex B.3.4\n        // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n        !(\n          scope.flags & ScopeFlag.SIMPLE_CATCH &&\n          scope.firstLexicalName === name\n        )) ||\n      (!this.treatFunctionsAsVarInScope(scope) &&\n        (type & NameType.Function) > 0)\n    );\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n    const topLevelScope = this.scopeStack[0];\n    if (!topLevelScope.names.has(name)) {\n      this.undefinedExports.set(name, id.loc.start);\n    }\n  }\n\n  currentScope(): IScope {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.VAR) {\n        return flags;\n      }\n    }\n  }\n\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  currentThisScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (\n        flags & (ScopeFlag.VAR | ScopeFlag.CLASS) &&\n        !(flags & ScopeFlag.ARROW)\n      ) {\n        return flags;\n      }\n    }\n  }\n}\n", "import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, type ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\n\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\nclass FlowScope extends Scope {\n  // declare function foo(): type;\n  declareFunctions: Set<string> = new Set();\n}\n\nexport default class FlowScopeHandler extends ScopeHandler<FlowScope> {\n  createScope(flags: ScopeFlag): FlowScope {\n    return new FlowScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    const scope = this.currentScope();\n    if (bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n  }\n\n  isRedeclaredInScope(\n    scope: FlowScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n\n    if (\n      bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN &&\n      !scope.declareFunctions.has(name)\n    ) {\n      const type = scope.names.get(name);\n      return (type & NameType.Function) > 0 || (type & NameType.Lexical) > 0;\n    }\n\n    return false;\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n}\n", "import type { Options } from \"../options.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type { PluginsMap } from \"./index.ts\";\nimport type ScopeHandler from \"../util/scope.ts\";\nimport type ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport type ClassScopeHandler from \"../util/class-scope.ts\";\nimport type ProductionParameterHandler from \"../util/production-parameter.ts\";\nimport type {\n  ParserPluginWithOptions,\n  PluginConfig,\n  PluginOptions,\n} from \"../typings.ts\";\nimport type * as N from \"../types.ts\";\n\nexport default class BaseParser {\n  // Properties set by constructor in index.js\n  declare options: Options;\n  declare inModule: boolean;\n  declare scope: ScopeHandler<any>;\n  declare classScope: ClassScopeHandler;\n  declare prodParam: ProductionParameterHandler;\n  declare expressionScope: ExpressionScopeHandler;\n  declare plugins: PluginsMap;\n  declare filename: string | undefined | null;\n  // Names of exports store. `default` is stored as a name for both\n  // `export default foo;` and `export { foo as default };`.\n  declare exportedIdentifiers: Set<string>;\n  sawUnambiguousESM: boolean = false;\n  ambiguousScriptDifferentAst: boolean = false;\n\n  // Initialized by Tokenizer\n  declare state: State;\n  // input and length are not in state as they are constant and we do\n  // not want to ever copy them, which happens if state gets cloned\n  declare input: string;\n  declare length: number;\n  // Comment store for Program.comments\n  declare comments: Array<N.Comment>;\n\n  // This method accepts either a string (plugin name) or an array pair\n  // (plugin name and options object). If an options object is given,\n  // then each value is non-recursively checked for identity with that\n  // plugin’s actual option value.\n  hasPlugin(pluginConfig: PluginConfig): boolean {\n    if (typeof pluginConfig === \"string\") {\n      return this.plugins.has(pluginConfig);\n    } else {\n      const [pluginName, pluginOptions] = pluginConfig;\n      if (!this.hasPlugin(pluginName)) {\n        return false;\n      }\n      const actualOptions = this.plugins.get(pluginName);\n      for (const key of Object.keys(\n        pluginOptions,\n      ) as (keyof typeof pluginOptions)[]) {\n        if (actualOptions?.[key] !== pluginOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n\n  getPluginOption<\n    PluginName extends ParserPluginWithOptions[0],\n    OptionName extends keyof PluginOptions<PluginName>,\n  >(plugin: PluginName, name: OptionName) {\n    return (this.plugins.get(plugin) as null | PluginOptions<PluginName>)?.[\n      name\n    ];\n  }\n}\n", "/*:: declare var invariant; */\n\nimport BaseParser from \"./base.ts\";\nimport type { Comment, Node, Identifier } from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { Undone } from \"./node.ts\";\n\n/**\n * A whitespace token containing comments\n */\nexport type CommentWhitespace = {\n  /**\n   * the start of the whitespace token.\n   */\n  start: number;\n  /**\n   * the end of the whitespace token.\n   */\n  end: number;\n  /**\n   * the containing comments\n   */\n  comments: Array<Comment>;\n  /**\n   * the immediately preceding AST node of the whitespace token\n   */\n  leadingNode: Node | null;\n  /**\n   * the immediately following AST node of the whitespace token\n   */\n  trailingNode: Node | null;\n  /**\n   * the innermost AST node containing the whitespace with minimal size (|end - start|)\n   */\n  containingNode: Node | null;\n};\n\n/**\n * Merge comments with node's trailingComments or assign comments to be\n * trailingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setTrailingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's leadingComments or assign comments to be\n * leadingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setLeadingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.leadingComments === undefined) {\n    node.leadingComments = comments;\n  } else {\n    node.leadingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's innerComments or assign comments to be\n * innerComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nexport function setInnerComments(\n  node: Undone<Node>,\n  comments?: Array<Comment>,\n) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else {\n    node.innerComments.unshift(...comments);\n  }\n}\n\n/**\n * Given node and elements array, if elements has non-null element,\n * merge comments to its trailingComments, otherwise merge comments\n * to node's innerComments\n */\nfunction adjustInnerComments(\n  node: Undone<Node>,\n  elements: Array<Node>,\n  commentWS: CommentWhitespace,\n) {\n  let lastElement = null;\n  let i = elements.length;\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\n\nexport default class CommentsParser extends BaseParser {\n  addComment(comment: Comment): void {\n    if (this.filename) comment.loc.filename = this.filename;\n    const { commentsLen } = this.state;\n    if (this.comments.length !== commentsLen) {\n      this.comments.length = commentsLen;\n    }\n    this.comments.push(comment);\n    this.state.commentsLen++;\n  }\n\n  /**\n   * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\n   * {@see {@link CommentWhitespace}}\n   */\n  processComment(node: Node): void {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n\n    const { start: nodeStart } = node;\n    // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      if (commentEnd > nodeStart) {\n        // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\n        // so node can be a containingNode candidate. At this time we can finalize the comment\n        // whitespace, because\n        // 1) its leadingNode or trailingNode, if exists, will not change\n        // 2) its containingNode have been assigned and will not change because it is the\n        //    innermost minimal-sized AST node\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n        // stop the loop when commentEnd <= nodeStart\n        break;\n      }\n    }\n  }\n\n  /**\n   * Assign the comments of comment whitespaces to related AST nodes.\n   * Also adjust innerComments following trailing comma.\n   */\n  finalizeComment(commentWS: CommentWhitespace) {\n    const { comments } = commentWS;\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n      if (commentWS.trailingNode !== null) {\n        setLeadingComments(commentWS.trailingNode, comments);\n      }\n    } else {\n      /*:: invariant(commentWS.containingNode !== null) */\n      const { containingNode: node, start: commentStart } = commentWS;\n      if (this.input.charCodeAt(commentStart - 1) === charCodes.comma) {\n        // If a commentWhitespace follows a comma and the containingNode allows\n        // list structures with trailing comma, merge it to the trailingComment\n        // of the last non-null list element\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n          default: {\n            setInnerComments(node, comments);\n          }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n\n  /**\n   * Drains remaining commentStack and applies finalizeComment\n   * to each comment whitespace. Used only in parseExpression\n   * where the top level AST node is _not_ Program\n   * {@see {@link CommentsParser#finalizeComment}}\n   */\n  finalizeRemainingComments() {\n    const { commentStack } = this.state;\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n    this.state.commentStack = [];\n  }\n\n  /* eslint-disable no-irregular-whitespace */\n  /**\n   * Reset previous node trailing comments. Used in object / class\n   * property parsing. We parse `async`, `static`, `set` and `get`\n   * as an identifier but may reinterpret it into an async/static/accessor\n   * method later. In this case the identifier is not part of the AST and we\n   * should sync the knowledge to commentStacks\n   *\n   * For example, when parsing\n   * ```\n   * async /* 1 *​/ function f() {}\n   * ```\n   * the comment whitespace `/* 1 *​/` has leading node Identifier(async). When\n   * we see the function token, we create a Function node and mark `/* 1 *​/` as\n   * inner comments. So `/* 1 *​/` should be detached from the Identifier node.\n   *\n   * @param node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\n  resetPreviousNodeTrailingComments(node: Node) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n\n  /* eslint-disable no-irregular-whitespace */\n  /**\n   * Reset previous node leading comments, assuming that `node` is a\n   * single-token node. Used in import phase modifiers parsing. We parse\n   * `module` in `import module foo from ...` as an identifier but may\n   * reinterpret it into a phase modifier later. In this case the identifier is\n   * not part of the AST and we should sync the knowledge to commentStacks\n   *\n   * For example, when parsing\n   * ```\n   * import /* 1 *​/ module a from \"a\";\n   * ```\n   * the comment whitespace `/* 1 *​/` has trailing node Identifier(module). When\n   * we see that `module` is not a default import binding, we mark `/* 1 *​/` as\n   * inner comments of the ImportDeclaration. So `/* 1 *​/` should be detached from\n   * the Identifier node.\n   *\n   * @param node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\n  resetPreviousIdentifierLeadingComments(node: Identifier) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n\n    if (commentStack[length - 1].trailingNode === node) {\n      commentStack[length - 1].trailingNode = null;\n    } else if (length >= 2 && commentStack[length - 2].trailingNode === node) {\n      commentStack[length - 2].trailingNode = null;\n    }\n  }\n\n  /**\n   * Attach a node to the comment whitespaces right before/after\n   * the given range.\n   *\n   * This is used to properly attach comments around parenthesized\n   * expressions as leading/trailing comments of the inner expression.\n   */\n  takeSurroundingComments(node: Node, start: number, end: number) {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      const commentStart = commentWS.start;\n\n      if (commentStart === end) {\n        commentWS.leadingNode = node;\n      } else if (commentEnd === start) {\n        commentWS.trailingNode = node;\n      } else if (commentEnd < start) {\n        break;\n      }\n    }\n  }\n}\n", "import * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n|[\\r\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n  switch (code) {\n    case charCodes.lineFeed:\n    case charCodes.carriageReturn:\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nexport function hasNewLine(input: string, start: number, end: number): boolean {\n  for (let i = start; i < end; i++) {\n    if (isNewLine(input.charCodeAt(i))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const skipWhiteSpaceInLine =\n  /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/g;\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n  switch (code) {\n    case 0x0009: // CHARACTER TABULATION\n    case 0x000b: // LINE TABULATION\n    case 0x000c: // FORM FEED\n    case charCodes.space:\n    case charCodes.nonBreakingSpace:\n    case charCodes.oghamSpaceMark:\n    case 0x2000: // EN QUAD\n    case 0x2001: // EM QUAD\n    case 0x2002: // EN SPACE\n    case 0x2003: // EM SPACE\n    case 0x2004: // THREE-PER-EM SPACE\n    case 0x2005: // FOUR-PER-EM SPACE\n    case 0x2006: // SIX-PER-EM SPACE\n    case 0x2007: // FIGURE SPACE\n    case 0x2008: // PUNCTUATION SPACE\n    case 0x2009: // THIN SPACE\n    case 0x200a: // HAIR SPACE\n    case 0x202f: // NARROW NO-BREAK SPACE\n    case 0x205f: // MEDIUM MATHEMATICAL SPACE\n    case 0x3000: // IDEOGRAPHIC SPACE\n    case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n      return true;\n\n    default:\n      return false;\n  }\n}\n", "import type { Options } from \"../options.ts\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location.ts\";\n\nimport { types as ct, type TokContext } from \"./context.ts\";\nimport { tt, type TokenType } from \"./types.ts\";\nimport type { Errors } from \"../parse-error.ts\";\nimport type { ParseError } from \"../parse-error.ts\";\n\nexport type DeferredStrictError =\n  | typeof Errors.StrictNumericEscape\n  | typeof Errors.StrictOctalLiteral;\n\ntype TopicContextState = {\n  // When a topic binding has been currently established,\n  // then this is 1. Otherwise, it is 0. This is forwards compatible\n  // with a future plugin for multiple lexical topics.\n  maxNumOfResolvableTopics: number;\n  // When a topic binding has been currently established, and if that binding\n  // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n  // `null`. This is forwards compatible with a future plugin for multiple\n  // lexical topics.\n  maxTopicIndex: null | 0;\n};\n\nexport const enum LoopLabelKind {\n  Loop = 1,\n  Switch = 2,\n}\n\ndeclare const bit: import(\"../../../../scripts/babel-plugin-bit-decorator/types.d.ts\").BitDecorator<State>;\n\nexport default class State {\n  @bit.storage flags: number;\n\n  @bit accessor strict = false;\n\n  curLine: number;\n  lineStart: number;\n\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  startLoc: Position;\n  endLoc: Position;\n\n  init({ strictMode, sourceType, startLine, startColumn }: Options): void {\n    this.strict =\n      strictMode === false\n        ? false\n        : strictMode === true\n          ? true\n          : sourceType === \"module\";\n\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);\n  }\n\n  errors: ParseError<any>[] = [];\n\n  // Used to signify the start of a potential arrow function\n  potentialArrowAt: number = -1;\n\n  // Used to signify the start of an expression which looks like a\n  // typed arrow function, but it isn't\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowAt: number[] = [];\n\n  // Used to signify the start of an expression whose params, if it looks like\n  // an arrow function, shouldn't be converted to assignable nodes.\n  // This is used to defer the validation of typed arrow functions inside\n  // conditional expressions.\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowParamsConversionAt: number[] = [];\n\n  // Flags to track\n  @bit accessor maybeInArrowParameters = false;\n  @bit accessor inType = false;\n  @bit accessor noAnonFunctionType = false;\n  @bit accessor hasFlowComment = false;\n  @bit accessor isAmbientContext = false;\n  @bit accessor inAbstractClass = false;\n  @bit accessor inDisallowConditionalTypesContext = false;\n\n  // For the Hack-style pipelines plugin\n  topicContext: TopicContextState = {\n    maxNumOfResolvableTopics: 0,\n    maxTopicIndex: null,\n  };\n\n  // For the F#-style pipelines plugin\n  @bit accessor soloAwait = false;\n  @bit accessor inFSharpPipelineDirectBody = false;\n\n  // Labels in scope.\n  labels: Array<{\n    kind: LoopLabelKind;\n    name?: string | null;\n    statementStart?: number;\n  }> = [];\n\n  commentsLen = 0;\n  // Comment attachment store\n  commentStack: Array<CommentWhitespace> = [];\n\n  // The current position of the tokenizer in the input.\n  pos: number = 0;\n\n  // Properties of the current token:\n  // Its type\n  type: TokenType = tt.eof;\n\n  // For tokens that include more information than their type, the value\n  value: any = null;\n\n  // Its start and end offset\n  start: number = 0;\n  end: number = 0;\n\n  // Position information for the previous token\n  // this is initialized when generating the second token.\n  lastTokEndLoc: Position = null;\n  // this is initialized when generating the second token.\n  lastTokStartLoc: Position = null;\n\n  // The context stack is used to track whether the apostrophe \"`\" starts\n  // or ends a string template\n  context: Array<TokContext> = [ct.brace];\n\n  // Used to track whether a JSX element is allowed to form\n  @bit accessor canStartJSXElement = true;\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  @bit accessor containsEsc = false;\n\n  // Used to track invalid escape sequences in template literals,\n  // that must be reported if the template is not tagged.\n  firstInvalidTemplateEscapePos: null | Position = null;\n\n  @bit accessor hasTopLevelAwait = false;\n\n  // This property is used to track the following errors\n  // - StrictNumericEscape\n  // - StrictOctalLiteral\n  //\n  // in a literal that occurs prior to/immediately after a \"use strict\" directive.\n\n  // todo(JLHwung): set strictErrors to null and avoid recording string errors\n  // after a non-directive is parsed\n  strictErrors: Map<number, [DeferredStrictError, Position]> = new Map();\n\n  // Tokens length in token store\n  tokensLength: number = 0;\n\n  /**\n   * When we add a new property, we must manually update the `clone` method\n   * @see State#clone\n   */\n\n  curPosition(): Position {\n    return new Position(this.curLine, this.pos - this.lineStart, this.pos);\n  }\n\n  clone(): State {\n    const state = new State();\n    state.flags = this.flags;\n    state.curLine = this.curLine;\n    state.lineStart = this.lineStart;\n    state.startLoc = this.startLoc;\n    state.endLoc = this.endLoc;\n    state.errors = this.errors.slice();\n    state.potentialArrowAt = this.potentialArrowAt;\n    state.noArrowAt = this.noArrowAt.slice();\n    state.noArrowParamsConversionAt = this.noArrowParamsConversionAt.slice();\n    state.topicContext = this.topicContext;\n    state.labels = this.labels.slice();\n    state.commentsLen = this.commentsLen;\n    state.commentStack = this.commentStack.slice();\n    state.pos = this.pos;\n    state.type = this.type;\n    state.value = this.value;\n    state.start = this.start;\n    state.end = this.end;\n    state.lastTokEndLoc = this.lastTokEndLoc;\n    state.lastTokStartLoc = this.lastTokStartLoc;\n    state.context = this.context.slice();\n    state.firstInvalidTemplateEscapePos = this.firstInvalidTemplateEscapePos;\n    state.strictErrors = this.strictErrors;\n    state.tokensLength = this.tokensLength;\n\n    return state;\n  }\n}\n\nexport type LookaheadState = {\n  pos: number;\n  value: any;\n  type: TokenType;\n  start: number;\n  end: number;\n  context: TokContext[];\n  startLoc: Position;\n  lastTokEndLoc: Position;\n  curLine: number;\n  lineStart: number;\n  curPosition: () => Position;\n  /* Used only in readToken_mult_modulo */\n  inType: boolean;\n  // These boolean properties are not initialized in createLookaheadState()\n  // instead they will only be set by the tokenizer\n  containsEsc?: boolean;\n};\n", "// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseB,\n    charCodes.uppercaseE,\n    charCodes.uppercaseO,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseB,\n    charCodes.lowercaseE,\n    charCodes.lowercaseO,\n  ]),\n  hex: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseX,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseX,\n  ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n  // 0 - 1\n  bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n  // 0 - 7\n  oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n  // 0 - 9\n  dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n  // 0 - 9, A - F, a - f,\n  hex: (ch: number) =>\n    (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n    (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n    (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n  unterminated(\n    initialPos: number,\n    initialLineStart: number,\n    initialCurLine: number,\n  ): void;\n};\n\nexport function readStringContents(\n  type: \"single\" | \"double\" | \"template\",\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  errors: StringContentsErrorHandlers,\n) {\n  const initialPos = pos;\n  const initialLineStart = lineStart;\n  const initialCurLine = curLine;\n\n  let out = \"\";\n  let firstInvalidLoc = null;\n  let chunkStart = pos;\n  const { length } = input;\n  for (;;) {\n    if (pos >= length) {\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    const ch = input.charCodeAt(pos);\n    if (isStringEnd(type, ch, input, pos)) {\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    if (ch === charCodes.backslash) {\n      out += input.slice(chunkStart, pos);\n      const res = readEscapedChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        type === \"template\",\n        errors,\n      );\n      if (res.ch === null && !firstInvalidLoc) {\n        firstInvalidLoc = { pos, lineStart, curLine };\n      } else {\n        out += res.ch;\n      }\n      ({ pos, lineStart, curLine } = res);\n      chunkStart = pos;\n    } else if (\n      ch === charCodes.lineSeparator ||\n      ch === charCodes.paragraphSeparator\n    ) {\n      ++pos;\n      ++curLine;\n      lineStart = pos;\n    } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n      if (type === \"template\") {\n        out += input.slice(chunkStart, pos) + \"\\n\";\n        ++pos;\n        if (\n          ch === charCodes.carriageReturn &&\n          input.charCodeAt(pos) === charCodes.lineFeed\n        ) {\n          ++pos;\n        }\n        ++curLine;\n        chunkStart = lineStart = pos;\n      } else {\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      }\n    } else {\n      ++pos;\n    }\n  }\n  return process.env.BABEL_8_BREAKING\n    ? { pos, str: out, firstInvalidLoc, lineStart, curLine }\n    : {\n        pos,\n        str: out,\n        firstInvalidLoc,\n        lineStart,\n        curLine,\n        containsInvalid: !!firstInvalidLoc,\n      };\n}\n\nfunction isStringEnd(\n  type: \"single\" | \"double\" | \"template\",\n  ch: number,\n  input: string,\n  pos: number,\n) {\n  if (type === \"template\") {\n    return (\n      ch === charCodes.graveAccent ||\n      (ch === charCodes.dollarSign &&\n        input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n    );\n  }\n  return (\n    ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n  );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n  CodePointErrorHandlers & {\n    strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n  };\n\nfunction readEscapedChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  inTemplate: boolean,\n  errors: EscapedCharErrorHandlers,\n) {\n  const throwOnInvalid = !inTemplate;\n  pos++; // skip '\\'\n\n  const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n  const ch = input.charCodeAt(pos++);\n  switch (ch) {\n    case charCodes.lowercaseN:\n      return res(\"\\n\");\n    case charCodes.lowercaseR:\n      return res(\"\\r\");\n    case charCodes.lowercaseX: {\n      let code;\n      ({ code, pos } = readHexChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        2,\n        false,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCharCode(code));\n    }\n    case charCodes.lowercaseU: {\n      let code;\n      ({ code, pos } = readCodePoint(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCodePoint(code));\n    }\n    case charCodes.lowercaseT:\n      return res(\"\\t\");\n    case charCodes.lowercaseB:\n      return res(\"\\b\");\n    case charCodes.lowercaseV:\n      return res(\"\\u000b\");\n    case charCodes.lowercaseF:\n      return res(\"\\f\");\n    case charCodes.carriageReturn:\n      if (input.charCodeAt(pos) === charCodes.lineFeed) {\n        ++pos;\n      }\n    // fall through\n    case charCodes.lineFeed:\n      lineStart = pos;\n      ++curLine;\n    // fall through\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return res(\"\");\n    case charCodes.digit8:\n    case charCodes.digit9:\n      if (inTemplate) {\n        return res(null);\n      } else {\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\n      }\n    // fall through\n    default:\n      if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n        const startPos = pos - 1;\n        const match = /^[0-7]+/.exec(input.slice(startPos, pos + 2));\n\n        let octalStr = match[0];\n\n        let octal = parseInt(octalStr, 8);\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n        pos += octalStr.length - 1;\n        const next = input.charCodeAt(pos);\n        if (\n          octalStr !== \"0\" ||\n          next === charCodes.digit8 ||\n          next === charCodes.digit9\n        ) {\n          if (inTemplate) {\n            return res(null);\n          } else {\n            errors.strictNumericEscape(startPos, lineStart, curLine);\n          }\n        }\n\n        return res(String.fromCharCode(octal));\n      }\n\n      return res(String.fromCharCode(ch));\n  }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n  invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  len: number,\n  forceLen: boolean,\n  throwOnInvalid: boolean,\n  errors: HexCharErrorHandlers,\n) {\n  const initialPos = pos;\n  let n;\n  ({ n, pos } = readInt(\n    input,\n    pos,\n    lineStart,\n    curLine,\n    16,\n    len,\n    forceLen,\n    false,\n    errors,\n    /* bailOnError */ !throwOnInvalid,\n  ));\n  if (n === null) {\n    if (throwOnInvalid) {\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n    } else {\n      pos = initialPos - 1;\n    }\n  }\n  return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n  numericSeparatorInEscapeSequence(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  unexpectedNumericSeparator(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  // It can return \"true\" to indicate that the error was handled\n  // and the int parsing should continue.\n  invalidDigit(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n    radix: number,\n  ): boolean;\n};\n\nexport function readInt(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  radix: number,\n  len: number | undefined,\n  forceLen: boolean,\n  allowNumSeparator: boolean | \"bail\",\n  errors: IntErrorHandlers,\n  bailOnError: boolean,\n) {\n  const start = pos;\n  const forbiddenSiblings =\n    radix === 16\n      ? forbiddenNumericSeparatorSiblings.hex\n      : forbiddenNumericSeparatorSiblings.decBinOct;\n  const isAllowedSibling =\n    radix === 16\n      ? isAllowedNumericSeparatorSibling.hex\n      : radix === 10\n        ? isAllowedNumericSeparatorSibling.dec\n        : radix === 8\n          ? isAllowedNumericSeparatorSibling.oct\n          : isAllowedNumericSeparatorSibling.bin;\n\n  let invalid = false;\n  let total = 0;\n\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    const code = input.charCodeAt(pos);\n    let val;\n\n    if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n      const prev = input.charCodeAt(pos - 1);\n      const next = input.charCodeAt(pos + 1);\n\n      if (!allowNumSeparator) {\n        if (bailOnError) return { n: null, pos };\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n      } else if (\n        Number.isNaN(next) ||\n        !isAllowedSibling(next) ||\n        forbiddenSiblings.has(prev) ||\n        forbiddenSiblings.has(next)\n      ) {\n        if (bailOnError) return { n: null, pos };\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n      }\n\n      // Ignore this _ character\n      ++pos;\n      continue;\n    }\n\n    if (code >= charCodes.lowercaseA) {\n      val = code - charCodes.lowercaseA + charCodes.lineFeed;\n    } else if (code >= charCodes.uppercaseA) {\n      val = code - charCodes.uppercaseA + charCodes.lineFeed;\n    } else if (charCodes.isDigit(code)) {\n      val = code - charCodes.digit0; // 0-9\n    } else {\n      val = Infinity;\n    }\n    if (val >= radix) {\n      // If we found a digit which is too big, errors.invalidDigit can return true to avoid\n      // breaking the loop (this is used for error recovery).\n      if (val <= 9 && bailOnError) {\n        return { n: null, pos };\n      } else if (\n        val <= 9 &&\n        errors.invalidDigit(pos, lineStart, curLine, radix)\n      ) {\n        val = 0;\n      } else if (forceLen) {\n        val = 0;\n        invalid = true;\n      } else {\n        break;\n      }\n    }\n    ++pos;\n    total = total * radix + val;\n  }\n  if (pos === start || (len != null && pos - start !== len) || invalid) {\n    return { n: null, pos };\n  }\n\n  return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n  invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  throwOnInvalid: boolean,\n  errors: CodePointErrorHandlers,\n) {\n  const ch = input.charCodeAt(pos);\n  let code;\n\n  if (ch === charCodes.leftCurlyBrace) {\n    ++pos;\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      input.indexOf(\"}\", pos) - pos,\n      true,\n      throwOnInvalid,\n      errors,\n    ));\n    ++pos;\n    if (code !== null && code > 0x10ffff) {\n      if (throwOnInvalid) {\n        errors.invalidCodePoint(pos, lineStart, curLine);\n      } else {\n        return { code: null, pos };\n      }\n    }\n  } else {\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      4,\n      false,\n      throwOnInvalid,\n      errors,\n    ));\n  }\n  return { code, pos };\n}\n", "/*:: declare var invariant; */\n\nimport type { Options } from \"../options.ts\";\nimport {\n  Position,\n  SourceLocation,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport CommentsParser, { type CommentWhitespace } from \"../parser/comments.ts\";\nimport type * as N from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier.ts\";\nimport {\n  tokenIsKeyword,\n  tokenLabelName,\n  tt,\n  keywords as keywordTypes,\n  type TokenType,\n} from \"./types.ts\";\nimport type { TokContext } from \"./context.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport {\n  lineBreakG,\n  isNewLine,\n  isWhitespace,\n  skipWhiteSpace,\n  skipWhiteSpaceInLine,\n} from \"../util/whitespace.ts\";\nimport State from \"./state.ts\";\nimport type { LookaheadState, DeferredStrictError } from \"./state.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { Node } from \"../types.ts\";\n\nimport {\n  readInt,\n  readCodePoint,\n  readStringContents,\n  type IntErrorHandlers,\n  type CodePointErrorHandlers,\n  type StringContentsErrorHandlers,\n} from \"@babel/helper-string-parser\";\n\nimport type { Plugin } from \"../typings.ts\";\n\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\n  return new Position(curLine, pos - lineStart, pos);\n}\n\nconst VALID_REGEX_FLAGS = new Set([\n  charCodes.lowercaseG,\n  charCodes.lowercaseM,\n  charCodes.lowercaseS,\n  charCodes.lowercaseI,\n  charCodes.lowercaseY,\n  charCodes.lowercaseU,\n  charCodes.lowercaseD,\n  charCodes.lowercaseV,\n]);\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n  constructor(state: State) {\n    this.type = state.type;\n    this.value = state.value;\n    this.start = state.start;\n    this.end = state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n  declare type: TokenType;\n  declare value: any;\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default abstract class Tokenizer extends CommentsParser {\n  isLookahead: boolean;\n\n  // Token store.\n  tokens: Array<Token | N.Comment> = [];\n\n  constructor(options: Options, input: string) {\n    super();\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.comments = [];\n    this.isLookahead = false;\n  }\n\n  pushToken(token: Token | N.Comment) {\n    // Pop out invalid tokens trapped by try-catch parsing.\n    // Those parsing branches are mainly created by typescript and flow plugins.\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  // Move to the next token\n\n  next(): void {\n    this.checkKeywordEscapes();\n    if (this.options.tokens) {\n      this.pushToken(new Token(this.state));\n    }\n\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  eat(type: TokenType): boolean {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Whether current token matches given type\n   */\n  match(type: TokenType): boolean {\n    return this.state.type === type;\n  }\n\n  /**\n   * Create a LookaheadState from current parser state\n   */\n  createLookaheadState(state: State): LookaheadState {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      context: [this.curContext()],\n      inType: state.inType,\n      startLoc: state.startLoc,\n      lastTokEndLoc: state.lastTokEndLoc,\n      curLine: state.curLine,\n      lineStart: state.lineStart,\n      curPosition: state.curPosition,\n    };\n  }\n\n  /**\n   * lookahead peeks the next token, skipping changes to token context and\n   * comment stack. For performance it returns a limited LookaheadState\n   * instead of full parser state.\n   *\n   * The { column, line } Loc info is not included in lookahead since such usage\n   * is rare. Although it may return other location properties e.g. `curLine` and\n   * `lineStart`, these properties are not listed in the LookaheadState interface\n   * and thus the returned value is _NOT_ reliable.\n   *\n   * The tokenizer should make best efforts to avoid using any parser state\n   * other than those defined in LookaheadState\n   */\n  lookahead(): LookaheadState {\n    const old = this.state;\n    // @ts-expect-error For performance we use a simplified tokenizer state structure\n    this.state = this.createLookaheadState(old);\n\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart(): number {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos: number): number {\n    skipWhiteSpace.lastIndex = pos;\n    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n  }\n\n  lookaheadCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n\n  /**\n   * Similar to nextToken, but it will stop at line break when it is seen before the next token\n   *\n   * @returns {number} position of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  nextTokenInLineStart(): number {\n    return this.nextTokenInLineStartSince(this.state.pos);\n  }\n\n  nextTokenInLineStartSince(pos: number): number {\n    skipWhiteSpaceInLine.lastIndex = pos;\n    return skipWhiteSpaceInLine.test(this.input)\n      ? skipWhiteSpaceInLine.lastIndex\n      : pos;\n  }\n\n  /**\n   * Similar to lookaheadCharCode, but it will return the char code of line break if it is\n   * seen before the next token\n   *\n   * @returns {number} char code of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  lookaheadInLineCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenInLineStart());\n  }\n\n  codePointAtPos(pos: number): number {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = this.input.charCodeAt(pos);\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    return cp;\n  }\n\n  // Toggle strict mode. Re-reads the next number or string to please\n  // pedantic tests (`\"use strict\"; 010;` should fail).\n\n  setStrict(strict: boolean): void {\n    this.state.strict = strict;\n    if (strict) {\n      // Throw an error for any string decimal escape found before/immediately\n      // after a \"use strict\" directive. Strict mode will be set at parse\n      // time for any literals that occur after the next node of the strict\n      // directive.\n      this.state.strictErrors.forEach(([toParseError, at]) =>\n        this.raise(toParseError, at),\n      );\n      this.state.strictErrors.clear();\n    }\n  }\n\n  curContext(): TokContext {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  // Read a single token, updating the parser object's token-related properties.\n  nextToken(): void {\n    this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n    if (this.state.pos >= this.length) {\n      this.finishToken(tt.eof);\n      return;\n    }\n\n    this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n  }\n\n  // Skips a block comment, whose end is marked by commentEnd.\n  // *-/ is used by the Flow plugin, when parsing block comments nested\n  // inside Flow comments.\n  skipBlockComment(commentEnd: \"*/\" | \"*-/\"): N.CommentBlock | undefined {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(commentEnd, start + 2);\n    if (end === -1) {\n      // We have to call this again here because startLoc may not be set...\n      // This seems to be for performance reasons:\n      // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\n      throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n    }\n\n    this.state.pos = end + commentEnd.length;\n    lineBreakG.lastIndex = start + 2;\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n      ++this.state.curLine;\n      this.state.lineStart = lineBreakG.lastIndex;\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n    /*:: invariant(startLoc) */\n\n    const comment: N.CommentBlock = {\n      type: \"CommentBlock\",\n      value: this.input.slice(start + 2, end),\n      start,\n      end: end + commentEnd.length,\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipLineComment(startSkip: number): N.CommentLine | undefined {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt((this.state.pos += startSkip));\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n\n    const comment: N.CommentLine = {\n      type: \"CommentLine\",\n      value,\n      start,\n      end,\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  // Called at the start of the parse and after every token. Skips\n  // whitespace and comments, and.\n\n  skipSpace(): void {\n    const spaceStart = this.state.pos;\n    const comments = [];\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case charCodes.space:\n        case charCodes.nonBreakingSpace:\n        case charCodes.tab:\n          ++this.state.pos;\n          break;\n        case charCodes.carriageReturn:\n          if (\n            this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n          ) {\n            ++this.state.pos;\n          }\n        // fall through\n        case charCodes.lineFeed:\n        case charCodes.lineSeparator:\n        case charCodes.paragraphSeparator:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case charCodes.slash:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case charCodes.asterisk: {\n              const comment = this.skipBlockComment(\"*/\");\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n              break;\n            }\n\n            case charCodes.slash: {\n              const comment = this.skipLineComment(2);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n              break;\n            }\n\n            default:\n              break loop;\n          }\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (\n            ch === charCodes.dash &&\n            !this.inModule &&\n            this.options.annexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.dash &&\n              this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\n              (spaceStart === 0 || this.state.lineStart > spaceStart)\n            ) {\n              // A `-->` line comment\n              const comment = this.skipLineComment(3);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (\n            ch === charCodes.lessThan &&\n            !this.inModule &&\n            this.options.annexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n              this.input.charCodeAt(pos + 2) === charCodes.dash &&\n              this.input.charCodeAt(pos + 3) === charCodes.dash\n            ) {\n              // `<!--`, an XML-style comment that should be interpreted as a line comment\n              const comment = this.skipLineComment(4);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n      }\n    }\n\n    if (comments.length > 0) {\n      const end = this.state.pos;\n      const commentWhitespace: CommentWhitespace = {\n        start: spaceStart,\n        end,\n        comments,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null,\n      };\n      this.state.commentStack.push(commentWhitespace);\n    }\n  }\n\n  // Called at the end of every token. Sets `end`, `val`, and\n  // maintains `context` and `canStartJSXElement`, and skips the space after\n  // the token, so that the next one's `start` will point at the\n  // right position.\n\n  finishToken(type: TokenType, val?: any): void {\n    this.state.end = this.state.pos;\n    this.state.endLoc = this.state.curPosition();\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) {\n      this.updateContext(prevType);\n    }\n  }\n\n  replaceToken(type: TokenType): void {\n    this.state.type = type;\n    // @ts-expect-error the prevType of updateContext is required\n    // only when the new type is tt.slash/tt.jsxTagEnd\n    this.updateContext();\n  }\n\n  // ### Token reading\n\n  // This is the function that is called to fetch the next token. It\n  // is somewhat obscure, because it works in character codes rather\n  // than characters, and because operator parsing has been inlined\n  // into it.\n  //\n  // All in the name of speed.\n\n  // number sign is \"#\"\n  readToken_numberSign(): void {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      throw this.raise(\n        Errors.UnexpectedDigitAfterHash,\n        this.state.curPosition(),\n      );\n    }\n\n    if (\n      next === charCodes.leftCurlyBrace ||\n      (next === charCodes.leftSquareBracket && this.hasPlugin(\"recordAndTuple\"))\n    ) {\n      // When we see `#{`, it is likely to be a hash record.\n      // However we don't yell at `#[` since users may intend to use \"computed private fields\",\n      // which is not allowed in the spec. Throwing expecting recordAndTuple is\n      // misleading\n      this.expectPlugin(\"recordAndTuple\");\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.getPluginOption(\"recordAndTuple\", \"syntaxType\") === \"bar\"\n      ) {\n        throw this.raise(\n          next === charCodes.leftCurlyBrace\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n          this.state.curPosition(),\n        );\n      }\n\n      this.state.pos += 2;\n      if (next === charCodes.leftCurlyBrace) {\n        // #{\n        this.finishToken(tt.braceHashL);\n      } else {\n        // #[\n        this.finishToken(tt.bracketHashL);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1(next));\n    } else if (next === charCodes.backslash) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1());\n    } else {\n      this.finishOp(tt.hash, 1);\n    }\n  }\n\n  readToken_dot(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (\n      next === charCodes.dot &&\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n    ) {\n      this.state.pos += 3;\n      this.finishToken(tt.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.dot);\n    }\n  }\n\n  readToken_slash(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.slashAssign, 2);\n    } else {\n      this.finishOp(tt.slash, 1);\n    }\n  }\n\n  readToken_interpreter(): boolean {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== charCodes.exclamationMark) return false;\n\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n\n    this.finishToken(tt.interpreterDirective, value);\n\n    return true;\n  }\n\n  readToken_mult_modulo(code: number): void {\n    // '%' or '*'\n    let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n\n    // Exponentiation operator '**'\n    if (code === charCodes.asterisk && next === charCodes.asterisk) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = tt.exponent;\n    }\n\n    // '%=' or '*='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      width++;\n      // `tt.moduloAssign` is only needed to support % as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      type = code === charCodes.percentSign ? tt.moduloAssign : tt.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code: number): void {\n    // '||' '&&' '||=' '&&='\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n      } else {\n        this.finishOp(\n          code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n          2,\n        );\n      }\n      return;\n    }\n\n    if (code === charCodes.verticalBar) {\n      // '|>'\n      if (next === charCodes.greaterThan) {\n        this.finishOp(tt.pipeline, 2);\n        return;\n      }\n      // '|}'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.RecordExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.braceBarR);\n        return;\n      }\n\n      // '|]'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightSquareBracket\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.TupleExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.bracketBarR);\n        return;\n      }\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n      return;\n    }\n\n    this.finishOp(\n      code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n      1,\n    );\n  }\n\n  readToken_caret(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '^='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      // `tt.xorAssign` is only needed to support ^ as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      this.finishOp(tt.xorAssign, 2);\n    }\n    // '^^'\n    else if (\n      next === charCodes.caret &&\n      // If the ^^ token is not enabled, we don't throw but parse two single ^s\n      // because it could be a ^ hack token followed by a ^ binary operator.\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"^^\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleCaret, 2);\n\n      // `^^^` is forbidden and must be separated by a space.\n      const lookaheadCh = this.input.codePointAt(this.state.pos);\n      if (lookaheadCh === charCodes.caret) {\n        this.unexpected();\n      }\n    }\n    // '^'\n    else {\n      this.finishOp(tt.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_atSign(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '@@'\n    if (\n      next === charCodes.atSign &&\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"@@\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleAt, 2);\n    }\n    // '@'\n    else {\n      this.finishOp(tt.at, 1);\n    }\n  }\n\n  readToken_plus_min(code: number): void {\n    // '+-'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      this.finishOp(tt.incDec, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.plusMin, 1);\n    }\n  }\n\n  readToken_lt(): void {\n    // '<'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.lessThan) {\n      if (this.input.charCodeAt(pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n        return;\n      }\n      this.finishOp(tt.bitShiftL, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.lt, 1);\n  }\n\n  readToken_gt(): void {\n    // '>'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.greaterThan) {\n      const size =\n        this.input.charCodeAt(pos + 2) === charCodes.greaterThan ? 3 : 2;\n      if (this.input.charCodeAt(pos + size) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, size + 1);\n        return;\n      }\n      this.finishOp(tt.bitShiftR, size);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <= | >=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.gt, 1);\n  }\n\n  readToken_eq_excl(code: number): void {\n    // '=!'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(\n        tt.equality,\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n          ? 3\n          : 2,\n      );\n      return;\n    }\n    if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n      // '=>'\n      this.state.pos += 2;\n      this.finishToken(tt.arrow);\n      return;\n    }\n    this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n  }\n\n  readToken_question(): void {\n    // '?'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n    if (next === charCodes.questionMark) {\n      if (next2 === charCodes.equalsTo) {\n        // '??='\n        this.finishOp(tt.assign, 3);\n      } else {\n        // '??'\n        this.finishOp(tt.nullishCoalescing, 2);\n      }\n    } else if (\n      next === charCodes.dot &&\n      !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n    ) {\n      // '.' not followed by a number\n      this.state.pos += 2;\n      this.finishToken(tt.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.question);\n    }\n  }\n\n  getTokenFromCode(code: number): void {\n    switch (code) {\n      // The interpretation of a dot depends on whether it is followed\n      // by a digit or another two dots.\n\n      case charCodes.dot:\n        this.readToken_dot();\n        return;\n      // Punctuation tokens.\n      case charCodes.leftParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenL);\n        return;\n      case charCodes.rightParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenR);\n        return;\n      case charCodes.semicolon:\n        ++this.state.pos;\n        this.finishToken(tt.semi);\n        return;\n      case charCodes.comma:\n        ++this.state.pos;\n        this.finishToken(tt.comma);\n        return;\n      case charCodes.leftSquareBracket:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.TupleExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // [|\n          this.state.pos += 2;\n          this.finishToken(tt.bracketBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.bracketL);\n        }\n        return;\n      case charCodes.rightSquareBracket:\n        ++this.state.pos;\n        this.finishToken(tt.bracketR);\n        return;\n      case charCodes.leftCurlyBrace:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.RecordExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // {|\n          this.state.pos += 2;\n          this.finishToken(tt.braceBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.braceL);\n        }\n        return;\n      case charCodes.rightCurlyBrace:\n        ++this.state.pos;\n        this.finishToken(tt.braceR);\n        return;\n\n      case charCodes.colon:\n        if (\n          this.hasPlugin(\"functionBind\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n        ) {\n          this.finishOp(tt.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.colon);\n        }\n        return;\n\n      case charCodes.questionMark:\n        this.readToken_question();\n        return;\n\n      case charCodes.graveAccent:\n        this.readTemplateToken();\n        return;\n\n      case charCodes.digit0: {\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        // '0x', '0X' - hex number\n        if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n          this.readRadixNumber(16);\n          return;\n        }\n        // '0o', '0O' - octal number\n        if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n          this.readRadixNumber(8);\n          return;\n        }\n        // '0b', '0B' - binary number\n        if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n          this.readRadixNumber(2);\n          return;\n        }\n      }\n      // Anything else beginning with a digit is an integer, octal\n      // number, or float. (fall through)\n      case charCodes.digit1:\n      case charCodes.digit2:\n      case charCodes.digit3:\n      case charCodes.digit4:\n      case charCodes.digit5:\n      case charCodes.digit6:\n      case charCodes.digit7:\n      case charCodes.digit8:\n      case charCodes.digit9:\n        this.readNumber(false);\n        return;\n\n      // Quotes produce strings.\n      case charCodes.quotationMark:\n      case charCodes.apostrophe:\n        this.readString(code);\n        return;\n\n      // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n      // often referred to. `finishOp` simply skips the amount of\n      // characters it is given as second argument, and returns a token\n      // of the type given by its first argument.\n\n      case charCodes.slash:\n        this.readToken_slash();\n        return;\n\n      case charCodes.percentSign:\n      case charCodes.asterisk:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case charCodes.verticalBar:\n      case charCodes.ampersand:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case charCodes.caret:\n        this.readToken_caret();\n        return;\n\n      case charCodes.plusSign:\n      case charCodes.dash:\n        this.readToken_plus_min(code);\n        return;\n\n      case charCodes.lessThan:\n        this.readToken_lt();\n        return;\n\n      case charCodes.greaterThan:\n        this.readToken_gt();\n        return;\n\n      case charCodes.equalsTo:\n      case charCodes.exclamationMark:\n        this.readToken_eq_excl(code);\n        return;\n\n      case charCodes.tilde:\n        this.finishOp(tt.tilde, 1);\n        return;\n\n      case charCodes.atSign:\n        this.readToken_atSign();\n        return;\n\n      case charCodes.numberSign:\n        this.readToken_numberSign();\n        return;\n\n      case charCodes.backslash:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n    }\n\n    throw this.raise(\n      Errors.InvalidOrUnexpectedToken,\n      this.state.curPosition(),\n      {\n        unexpected: String.fromCodePoint(code),\n      },\n    );\n  }\n\n  finishOp(type: TokenType, size: number): void {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp(): void {\n    const startLoc = this.state.startLoc;\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let { pos } = this.state;\n    for (; ; ++pos) {\n      if (pos >= this.length) {\n        // FIXME: explain\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      const ch = this.input.charCodeAt(pos);\n      if (isNewLine(ch)) {\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === charCodes.leftSquareBracket) {\n          inClass = true;\n        } else if (ch === charCodes.rightSquareBracket && inClass) {\n          inClass = false;\n        } else if (ch === charCodes.slash && !inClass) {\n          break;\n        }\n        escaped = ch === charCodes.backslash;\n      }\n    }\n    const content = this.input.slice(start, pos);\n    ++pos;\n\n    let mods = \"\";\n\n    const nextPos = () =>\n      // (pos + 1) + 1 - start\n      createPositionWithColumnOffset(startLoc, pos + 2 - start);\n\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      // It doesn't matter if cp > 0xffff, the loop will either throw or break because we check on cp\n      const char = String.fromCharCode(cp);\n\n      // @ts-expect-error VALID_REGEX_FLAGS.has should accept expanded type: number\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (cp === charCodes.lowercaseV) {\n          if (mods.includes(\"u\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        } else if (cp === charCodes.lowercaseU) {\n          if (mods.includes(\"v\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        }\n        if (mods.includes(char)) {\n          this.raise(Errors.DuplicateRegExpFlags, nextPos());\n        }\n      } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\n        this.raise(Errors.MalformedRegExpFlags, nextPos());\n      } else {\n        break;\n      }\n\n      ++pos;\n      mods += char;\n    }\n    this.state.pos = pos;\n\n    this.finishToken(tt.regexp, {\n      pattern: content,\n      flags: mods,\n    });\n  }\n\n  // Read an integer in the given radix. Return null if zero digits\n  // were read, the integer value otherwise. When `len` is given, this\n  // will return `null` unless the integer has exactly `len` digits.\n  // When `forceLen` is `true`, it means that we already know that in case\n  // of a malformed number we have to skip `len` characters anyway, instead\n  // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n  // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n  // characters (and thus the closing quote).\n\n  readInt(\n    radix: number,\n    len?: number,\n    forceLen: boolean = false,\n    allowNumSeparator: boolean | \"bail\" = true,\n  ): number | null {\n    const { n, pos } = readInt(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      radix,\n      len,\n      forceLen,\n      allowNumSeparator,\n      this.errorHandlers_readInt,\n      /* bailOnError */ false,\n    );\n    this.state.pos = pos;\n    return n;\n  }\n\n  readRadixNumber(radix: number): void {\n    const startLoc = this.state.curPosition();\n    let isBigInt = false;\n\n    this.state.pos += 2; // 0x\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(\n        Errors.InvalidDigit,\n        // Numeric literals can't have newlines, so this is safe to do.\n        createPositionWithColumnOffset(startLoc, 2),\n        {\n          radix,\n        },\n      );\n    }\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === charCodes.lowercaseN) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === charCodes.lowercaseM) {\n      throw this.raise(Errors.InvalidDecimal, startLoc);\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    if (isBigInt) {\n      const str = this.input\n        .slice(startLoc.index, this.state.pos)\n        .replace(/[_n]/g, \"\");\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    this.finishToken(tt.num, val);\n  }\n\n  // Read an integer, octal integer, or floating-point number.\n\n  readNumber(startsWithDot: boolean): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isFloat = false;\n    let isBigInt = false;\n    let isDecimal = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(Errors.InvalidNumber, this.state.curPosition());\n    }\n    const hasLeadingZero =\n      this.state.pos - start >= 2 &&\n      this.input.charCodeAt(start) === charCodes.digit0;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(Errors.StrictOctalLiteral, startLoc);\n      if (!this.state.strict) {\n        // disallow numeric separators in non octal decimals and legacy octal likes\n        const underscorePos = integer.indexOf(\"_\");\n        if (underscorePos > 0) {\n          // Numeric literals can't have newlines, so this is safe to do.\n          this.raise(\n            Errors.ZeroDigitNumericSeparator,\n            createPositionWithColumnOffset(startLoc, underscorePos),\n          );\n        }\n      }\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n    if (next === charCodes.dot && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (\n      (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n      !isOctal\n    ) {\n      next = this.input.charCodeAt(++this.state.pos);\n      if (next === charCodes.plusSign || next === charCodes.dash) {\n        ++this.state.pos;\n      }\n      if (this.readInt(10) === null) {\n        this.raise(Errors.InvalidOrMissingExponent, startLoc);\n      }\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === charCodes.lowercaseN) {\n      // disallow floats, legacy octal syntax and non octal decimals\n      // new style octal (\"0o\") is handled in this.readRadixNumber\n      if (isFloat || hasLeadingZero) {\n        this.raise(Errors.InvalidBigIntLiteral, startLoc);\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (next === charCodes.lowercaseM) {\n      this.expectPlugin(\"decimal\", this.state.curPosition());\n      if (hasExponent || hasLeadingZero) {\n        this.raise(Errors.InvalidDecimal, startLoc);\n      }\n      ++this.state.pos;\n      isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    // remove \"_\" for numeric literal separator, and trailing `m` or `n`\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    if (isDecimal) {\n      this.finishToken(tt.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(tt.num, val);\n  }\n\n  // Read a string value, interpreting backslash-escapes.\n\n  readCodePoint(throwOnInvalid: boolean): number | null {\n    const { code, pos } = readCodePoint(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      throwOnInvalid,\n      this.errorHandlers_readCodePoint,\n    );\n    this.state.pos = pos;\n    return code;\n  }\n\n  readString(quote: number): void {\n    const { str, pos, curLine, lineStart } = readStringContents(\n      quote === charCodes.quotationMark ? \"double\" : \"single\",\n      this.input,\n      this.state.pos + 1, // skip the quote\n      this.state.lineStart,\n      this.state.curLine,\n      this.errorHandlers_readStringContents_string,\n    );\n    this.state.pos = pos + 1; // skip the quote\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n    this.finishToken(tt.string, str);\n  }\n\n  // Reads template continuation `}...`\n  readTemplateContinuation(): void {\n    if (!this.match(tt.braceR)) {\n      this.unexpected(null, tt.braceR);\n    }\n    // rewind pos to `}`\n    this.state.pos--;\n    this.readTemplateToken();\n  }\n\n  // Reads template string tokens.\n  readTemplateToken(): void {\n    const opening = this.input[this.state.pos];\n    const { str, firstInvalidLoc, pos, curLine, lineStart } =\n      readStringContents(\n        \"template\",\n        this.input,\n        this.state.pos + 1, // skip '`' or `}`\n        this.state.lineStart,\n        this.state.curLine,\n        this.errorHandlers_readStringContents_template,\n      );\n    this.state.pos = pos + 1; // skip '`' or `$`\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n\n    if (firstInvalidLoc) {\n      this.state.firstInvalidTemplateEscapePos = new Position(\n        firstInvalidLoc.curLine,\n        firstInvalidLoc.pos - firstInvalidLoc.lineStart,\n        firstInvalidLoc.pos,\n      );\n    }\n\n    if (this.input.codePointAt(pos) === charCodes.graveAccent) {\n      this.finishToken(\n        tt.templateTail,\n        firstInvalidLoc ? null : opening + str + \"`\",\n      );\n    } else {\n      this.state.pos++; // skip '{'\n      this.finishToken(\n        tt.templateNonTail,\n        firstInvalidLoc ? null : opening + str + \"${\",\n      );\n    }\n  }\n\n  recordStrictModeErrors(toParseError: DeferredStrictError, at: Position) {\n    const index = at.index;\n\n    if (this.state.strict && !this.state.strictErrors.has(index)) {\n      this.raise(toParseError, at);\n    } else {\n      this.state.strictErrors.set(index, [toParseError, at]);\n    }\n  }\n\n  // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n  // to whether the word contained a '\\u' escape.\n  //\n  // Incrementally adds only escaped chars, adding other chunks as-is\n  // as a micro-optimization.\n  //\n  // When `firstCode` is given, it assumes it is always an identifier start and\n  // will skip reading start position again\n\n  readWord1(firstCode?: number): string {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === charCodes.backslash) {\n        this.state.containsEsc = true;\n\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.curPosition();\n        const identifierCheck =\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n          this.raise(Errors.MissingUnicodeEscape, this.state.curPosition());\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(Errors.EscapedCharNotAnIdentifier, escStart);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  // Read an identifier or keyword token. Will check for reserved\n  // words when necessary.\n\n  readWord(firstCode?: number): void {\n    const word = this.readWord1(firstCode);\n    const type = keywordTypes.get(word);\n    if (type !== undefined) {\n      // We don't use word as state.value here because word is a dynamic string\n      // while token label is a shared constant string\n      this.finishToken(type, tokenLabelName(type));\n    } else {\n      this.finishToken(tt.name, word);\n    }\n  }\n\n  checkKeywordEscapes(): void {\n    const { type } = this.state;\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\n      this.raise(Errors.InvalidEscapedReservedWord, this.state.startLoc, {\n        reservedWord: tokenLabelName(type),\n      });\n    }\n  }\n\n  /**\n   * Raise a `ParseError` given the appropriate properties. If passed a\n   * `Position` for the `at` property, raises the `ParseError` at that location.\n   * Otherwise, if passed a `Node`, raises the `ParseError` at the start\n   * location of that `Node`.\n   *\n   * If `errorRecovery` is `true`, the error is pushed to the errors array and\n   * returned. If `errorRecovery` is `false`, the error is instead thrown.\n   *\n   * The return type is marked as `never` for simplicity, as error recovery\n   * will create types in an invalid AST shape.\n   */\n  raise<ErrorDetails = object>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const error = toParseError(loc, details);\n\n    if (!this.options.errorRecovery) throw error;\n    if (!this.isLookahead) this.state.errors.push(error);\n\n    return error;\n  }\n\n  /**\n   * If `errorRecovery` is `false`, this method behaves identically to `raise`.\n   * If `errorRecovery` is `true`, this method will first see if there is\n   * already an error stored at the same `Position`, and replaces it with the\n   * one generated here.\n   */\n  raiseOverwrite<ErrorDetails>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> | never {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const pos = loc.index;\n    const errors = this.state.errors;\n\n    for (let i = errors.length - 1; i >= 0; i--) {\n      const error = errors[i];\n      if (error.loc.index === pos) {\n        return (errors[i] = toParseError(loc, details));\n      }\n      if (error.loc.index < pos) break;\n    }\n\n    return this.raise(toParseError, at, details);\n  }\n\n  // updateContext is used by the jsx plugin\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  updateContext(prevType: TokenType): void {}\n\n  // Raise an unexpected token error. Can take the expected token type.\n  unexpected(loc?: Position | null, type?: TokenType): void {\n    throw this.raise(\n      Errors.UnexpectedToken,\n      loc != null ? loc : this.state.startLoc,\n      {\n        expected: type ? tokenLabelName(type) : null,\n      },\n    );\n  }\n\n  expectPlugin(pluginName: Plugin, loc?: Position): true {\n    if (this.hasPlugin(pluginName)) {\n      return true;\n    }\n\n    throw this.raise(\n      Errors.MissingPlugin,\n      loc != null ? loc : this.state.startLoc,\n      {\n        missingPlugin: [pluginName],\n      },\n    );\n  }\n\n  expectOnePlugin(pluginNames: Plugin[]): void {\n    if (!pluginNames.some(name => this.hasPlugin(name))) {\n      throw this.raise(Errors.MissingOneOfPlugins, this.state.startLoc, {\n        missingPlugin: pluginNames,\n      });\n    }\n  }\n\n  errorBuilder(error: ParseErrorConstructor<object>) {\n    return (pos: number, lineStart: number, curLine: number) => {\n      this.raise(error, buildPosition(pos, lineStart, curLine));\n    };\n  }\n\n  errorHandlers_readInt: IntErrorHandlers = {\n    invalidDigit: (pos, lineStart, curLine, radix) => {\n      if (!this.options.errorRecovery) return false;\n\n      this.raise(Errors.InvalidDigit, buildPosition(pos, lineStart, curLine), {\n        radix,\n      });\n      // Continue parsing the number as if there was no invalid digit.\n      return true;\n    },\n    numericSeparatorInEscapeSequence: this.errorBuilder(\n      Errors.NumericSeparatorInEscapeSequence,\n    ),\n    unexpectedNumericSeparator: this.errorBuilder(\n      Errors.UnexpectedNumericSeparator,\n    ),\n  };\n\n  errorHandlers_readCodePoint: CodePointErrorHandlers = {\n    ...this.errorHandlers_readInt,\n    invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\n    invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint),\n  };\n\n  errorHandlers_readStringContents_string: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: (pos, lineStart, curLine) => {\n      this.recordStrictModeErrors(\n        Errors.StrictNumericEscape,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedString, // Report the error at the string quote\n        buildPosition(pos - 1, lineStart, curLine),\n      );\n    },\n  };\n\n  errorHandlers_readStringContents_template: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedTemplate,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n  };\n}\n", "import { ClassElementType } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport class ClassScope {\n  // A list of private named declared in the current class\n  privateNames: Set<string> = new Set();\n\n  // A list of private getters of setters without their counterpart\n  loneAccessors: Map<string, ClassElementType> = new Map();\n\n  // A list of private names used before being defined, mapping to\n  // their position.\n  undefinedPrivateNames: Map<string, Position> = new Map();\n}\n\nexport default class ClassScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ClassScope> = [];\n  undefinedPrivateNames: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n\n  current(): ClassScope {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n\n    // Migrate the usage of not yet defined private names to the outer\n    // class scope, or raise an error if we reached the top-level scope.\n\n    const current = this.current();\n\n    // Array.from is needed because this is compiled to an array-like for loop\n    for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, loc);\n        }\n      } else {\n        this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n          identifierName: name,\n        });\n      }\n    }\n  }\n\n  declarePrivateName(\n    name: string,\n    elementType: ClassElementType,\n    loc: Position,\n  ) {\n    const { privateNames, loneAccessors, undefinedPrivateNames } =\n      this.current();\n    let redefined = privateNames.has(name);\n\n    if (elementType & ClassElementType.KIND_ACCESSOR) {\n      const accessor = redefined && loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & ClassElementType.FLAG_STATIC;\n        const newStatic = elementType & ClassElementType.FLAG_STATIC;\n\n        const oldKind = accessor & ClassElementType.KIND_ACCESSOR;\n        const newKind = elementType & ClassElementType.KIND_ACCESSOR;\n\n        // The private name can be duplicated only if it is used by\n        // two accessors with different kind (get and set), and if\n        // they have the same placement (static or not).\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n\n        if (!redefined) loneAccessors.delete(name);\n      } else if (!redefined) {\n        loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.parser.raise(Errors.PrivateNameRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n\n    privateNames.add(name);\n    undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name: string, loc: Position) {\n    let classScope;\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, loc);\n    } else {\n      // top-level\n      this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n        identifierName: name,\n      });\n    }\n  }\n}\n", "import { Errors, type ParseErrorConstructor } from \"../parse-error.ts\";\nimport type { Position } from \"./location.ts\";\nimport type { Node } from \"../types.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n  e.g. we don't know if `({ x })` is an parenthesized expression or an\n  arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n  e.g. we don't know if `async({ x })` is a call expression or an async arrow\n  function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n  A general scope that represents program / function body / static block. No errors\n  will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n  A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n  alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n  is called.\n\n- MaybeAsyncArrowParameterDeclaration\n  A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n  be recorded alongside parent scopes and thrown when\n  `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n  A scope that represents unambiguous function parameters `function(x)`. Errors\n  recorded in this scope will be thrown immediately. No errors will be recorded in\n  this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M|V8 Expression Scope design docs}\n */\n\nconst enum ExpressionScopeType {\n  kExpression = 0,\n  kMaybeArrowParameterDeclaration = 1,\n  kMaybeAsyncArrowParameterDeclaration = 2,\n  kParameterDeclaration = 3,\n}\n\nclass ExpressionScope {\n  declare type: ExpressionScopeType;\n\n  constructor(type: ExpressionScopeType = ExpressionScopeType.kExpression) {\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n    return (\n      this.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration ||\n      this.type === ExpressionScopeType.kMaybeArrowParameterDeclaration\n    );\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === ExpressionScopeType.kParameterDeclaration;\n  }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n  | typeof Errors.AwaitExpressionFormalParameter\n  | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n  | ArrowHeadParsingParameterInitializerError\n  | typeof Errors.InvalidParenthesizedAssignment\n  | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  declarationErrors: Map<number, [ParseErrorConstructor<object>, Position]> =\n    new Map();\n  constructor(\n    type:\n      | ExpressionScopeType.kMaybeArrowParameterDeclaration\n      | ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  ) {\n    super(type);\n  }\n  recordDeclarationError(\n    ParsingErrorClass: ParseErrorConstructor<object>,\n    at: Position,\n  ) {\n    const index = at.index;\n\n    this.declarationErrors.set(index, [ParsingErrorClass, at]);\n  }\n  clearDeclarationError(index: number) {\n    this.declarationErrors.delete(index);\n  }\n  iterateErrors(\n    iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n  ) {\n    this.declarationErrors.forEach(iterator);\n  }\n}\n\nexport default class ExpressionScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n  enter(scope: ExpressionScope) {\n    this.stack.push(scope);\n  }\n\n  exit() {\n    this.stack.pop();\n  }\n\n  /**\n   * Record likely parameter initializer errors\n   *\n   * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n   * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n   * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n   */\n  recordParameterInitializerError(\n    toParseError: ArrowHeadParsingParameterInitializerError,\n    node: Node,\n  ): void {\n    const origin = node.loc.start;\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        scope.recordDeclarationError(toParseError, origin);\n      } else {\n        /*:: invariant(scope.type == ExpressionScopeType.kExpression) */\n        // Type-Expression is the boundary where initializer error can populate to\n        return;\n      }\n      scope = stack[--i];\n    }\n    this.parser.raise(toParseError, origin);\n  }\n\n  /**\n   * Record errors that must be thrown if the current pattern ends up being an arrow\n   * function parameter. This is used to record parenthesized identifiers, and to record\n   * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n   *\n   * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\n   * can be transformed to an assignable later, but not vice versa:\n   * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n   * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n   * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n   * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n   * and MaybeAsyncArrowParameterDeclaration\n   *\n   * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n   * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n   * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n   * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n   * expression and can not be cast to pattern\n   */\n  recordArrowParameterBindingError(\n    error: ParseErrorConstructor<object>,\n    node: Node,\n  ): void {\n    const { stack } = this;\n    const scope: ExpressionScope = stack[stack.length - 1];\n    const origin = node.loc.start;\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.parser.raise(error, origin);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(error, origin);\n    } else {\n      return;\n    }\n  }\n\n  /**\n   * Record likely async arrow parameter errors\n   *\n   * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n   * scope until an Expression scope is seen.\n   */\n  recordAsyncArrowParametersError(at: Position): void {\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (\n        scope.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration\n      ) {\n        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, at);\n      }\n      scope = stack[--i];\n    }\n  }\n\n  validateAsPattern(): void {\n    const { stack } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    currentScope.iterateErrors(([toParseError, loc]) => {\n      this.parser.raise(toParseError, loc);\n      // iterate from parent scope\n      let i = stack.length - 2;\n      let scope = stack[i];\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(loc.index);\n        scope = stack[--i];\n      }\n    });\n  }\n}\n\nexport function newParameterDeclarationScope() {\n  return new ExpressionScope(ExpressionScopeType.kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeArrowParameterDeclaration,\n  );\n}\n\nexport function newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  );\n}\n\nexport function newExpressionScope() {\n  return new ExpressionScope();\n}\n", "// ProductionParameterHandler is a stack fashioned production parameter tracker\n// https://tc39.es/ecma262/#sec-grammar-notation\n// The tracked parameters are defined above.\n//\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\n// we must enter a new tracking stack. For example when parsing\n//\n// AsyncFunctionDeclaration [Yield, Await]:\n//   async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\n//     ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\n//\n// we must follow such process:\n//\n// 1. parse async keyword\n// 2. parse function keyword\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\n// 4. enter new stack with (PARAM_AWAIT)\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\n// 6. parse function body\n// 7. exit current stack\n\nexport const enum ParamKind {\n  // Initial Parameter flags\n  PARAM = 0b0000,\n  // track [Yield] production parameter\n  PARAM_YIELD = 0b0001,\n  // track [Await] production parameter\n  PARAM_AWAIT = 0b0010,\n  // track [Return] production parameter\n  PARAM_RETURN = 0b0100,\n  // track [In] production parameter\n  PARAM_IN = 0b1000,\n}\n\n// todo(flow->ts) - check if more granular type can be used,\n//  type below is not good because things like PARAM_AWAIT|PARAM_YIELD are not included\n// export type ParamKind =\n//   | typeof PARAM\n//   | typeof PARAM_AWAIT\n//   | typeof PARAM_IN\n//   | typeof PARAM_RETURN\n//   | typeof PARAM_YIELD;\n\nexport default class ProductionParameterHandler {\n  stacks: Array<ParamKind> = [];\n  enter(flags: ParamKind) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags(): ParamKind {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_AWAIT) > 0;\n  }\n\n  get hasYield(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_YIELD) > 0;\n  }\n\n  get hasReturn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_RETURN) > 0;\n  }\n\n  get hasIn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_IN) > 0;\n  }\n}\n\nexport function functionFlags(\n  isAsync: boolean,\n  isGenerator: boolean,\n): ParamKind {\n  return (\n    (isAsync ? ParamKind.PARAM_AWAIT : 0) |\n    (isGenerator ? ParamKind.PARAM_YIELD : 0)\n  );\n}\n", "import type { Position } from \"../util/location.ts\";\nimport {\n  tokenIsLiteralPropertyName,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport Tokenizer from \"../tokenizer/index.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type {\n  EstreePropertyDefinition,\n  Node,\n  ObjectMethod,\n  ObjectProperty,\n  PrivateName,\n} from \"../types.d.ts\";\nimport { hasNewLine } from \"../util/whitespace.ts\";\nimport { isIdentifierChar } from \"../util/identifier.ts\";\nimport ClassScopeHandler from \"../util/class-scope.ts\";\nimport ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport { ScopeFlag } from \"../util/scopeflags.ts\";\nimport ProductionParameterHandler, {\n  ParamKind,\n} from \"../util/production-parameter.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type ScopeHandler from \"../util/scope.ts\";\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n  node: Node;\n  error: Error;\n  thrown: Thrown;\n  aborted: Aborted;\n  failState: FailState;\n};\n\n// ## Parser utilities\n\nexport default abstract class UtilParser extends Tokenizer {\n  // Forward-declaration: defined in parser/index.js\n  abstract getScopeHandler(): new (...args: any) => ScopeHandler;\n\n  addExtra(\n    node: Partial<Node>,\n    key: string,\n    value: any,\n    enumerable: boolean = true,\n  ): void {\n    if (!node) return;\n\n    let { extra } = node;\n    if (extra == null) {\n      extra = {};\n      node.extra = extra;\n    }\n\n    if (enumerable) {\n      extra[key] = value;\n    } else {\n      Object.defineProperty(extra, key, { enumerable, value });\n    }\n  }\n\n  // Tests whether parsed token is a contextual keyword.\n\n  isContextual(token: TokenType): boolean {\n    return this.state.type === token && !this.state.containsEsc;\n  }\n\n  isUnparsedContextual(nameStart: number, name: string): boolean {\n    const nameEnd = nameStart + name.length;\n    if (this.input.slice(nameStart, nameEnd) === name) {\n      const nextCh = this.input.charCodeAt(nameEnd);\n      return !(\n        isIdentifierChar(nextCh) ||\n        // check if `nextCh is between 0xd800 - 0xdbff,\n        // if `nextCh` is NaN, `NaN & 0xfc00` is 0, the function\n        // returns true\n        (nextCh & 0xfc00) === 0xd800\n      );\n    }\n    return false;\n  }\n\n  isLookaheadContextual(name: string): boolean {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  // Consumes contextual keyword if possible.\n\n  eatContextual(token: TokenType): boolean {\n    if (this.isContextual(token)) {\n      this.next();\n      return true;\n    }\n    return false;\n  }\n\n  // Asserts that following token is given contextual keyword.\n\n  expectContextual(\n    token: TokenType,\n    toParseError?: ParseErrorConstructor<any>,\n  ): void {\n    if (!this.eatContextual(token)) {\n      if (toParseError != null) {\n        throw this.raise(toParseError, this.state.startLoc);\n      }\n      this.unexpected(null, token);\n    }\n  }\n\n  // Test whether a semicolon can be inserted at the current position.\n\n  canInsertSemicolon(): boolean {\n    return (\n      this.match(tt.eof) ||\n      this.match(tt.braceR) ||\n      this.hasPrecedingLineBreak()\n    );\n  }\n\n  hasPrecedingLineBreak(): boolean {\n    return hasNewLine(\n      this.input,\n      this.state.lastTokEndLoc.index,\n      this.state.start,\n    );\n  }\n\n  hasFollowingLineBreak(): boolean {\n    return hasNewLine(this.input, this.state.end, this.nextTokenStart());\n  }\n\n  isLineTerminator(): boolean {\n    return this.eat(tt.semi) || this.canInsertSemicolon();\n  }\n\n  // Consume a semicolon, or, failing that, see if we are allowed to\n  // pretend that there is a semicolon at this position.\n\n  semicolon(allowAsi: boolean = true): void {\n    if (allowAsi ? this.isLineTerminator() : this.eat(tt.semi)) return;\n    this.raise(Errors.MissingSemicolon, this.state.lastTokEndLoc);\n  }\n\n  // Expect a token of a given type. If found, consume it, otherwise,\n  // raise an unexpected token error at given pos.\n\n  expect(type: TokenType, loc?: Position | null): void {\n    if (!this.eat(type)) {\n      this.unexpected(loc, type);\n    }\n  }\n\n  // tryParse will clone parser state.\n  // It is expensive and should be used with cautions\n  tryParse<T extends Node | ReadonlyArray<Node>>(\n    fn: (abort: (node?: T) => never) => T,\n    oldState: State = this.state.clone(),\n  ):\n    | TryParse<T, null, false, false, null>\n    | TryParse<T | null, ParseError<any>, boolean, false, State>\n    | TryParse<T | null, null, false, true, State> {\n    const abortSignal: {\n      node: T | null;\n    } = { node: null };\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        // eslint-disable-next-line @typescript-eslint/only-throw-error\n        throw abortSignal;\n      });\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        // tokensLength should be preserved during error recovery mode\n        // since the parser does not halt and will instead parse the\n        // remaining tokens\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState,\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null,\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n      if (error instanceof SyntaxError) {\n        // @ts-expect-error casting general syntax error to parse error\n        return { node: null, error, thrown: true, aborted: false, failState };\n      }\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState,\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(\n    refExpressionErrors: ExpressionErrors | undefined | null,\n    andThrow: boolean,\n  ) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssignLoc,\n      doubleProtoLoc,\n      privateKeyLoc,\n      optionalParametersLoc,\n    } = refExpressionErrors;\n\n    const hasErrors =\n      !!shorthandAssignLoc ||\n      !!doubleProtoLoc ||\n      !!optionalParametersLoc ||\n      !!privateKeyLoc;\n\n    if (!andThrow) {\n      return hasErrors;\n    }\n\n    if (shorthandAssignLoc != null) {\n      this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n    }\n\n    if (doubleProtoLoc != null) {\n      this.raise(Errors.DuplicateProto, doubleProtoLoc);\n    }\n\n    if (privateKeyLoc != null) {\n      this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n    }\n\n    if (optionalParametersLoc != null) {\n      this.unexpected(optionalParametersLoc);\n    }\n  }\n\n  /**\n   * Test if current token is a literal property name\n   * https://tc39.es/ecma262/#prod-LiteralPropertyName\n   * LiteralPropertyName:\n   *   IdentifierName\n   *   StringLiteral\n   *   NumericLiteral\n   *   BigIntLiteral\n   */\n  isLiteralPropertyName(): boolean {\n    return tokenIsLiteralPropertyName(this.state.type);\n  }\n\n  /**\n   * Test if given node is a PrivateName\n   * will be overridden in ESTree plugin\n   */\n  isPrivateName(node: Node): node is PrivateName {\n    return node.type === \"PrivateName\";\n  }\n\n  /**\n   * Return the string value of a given private name\n   * WITHOUT `#`\n   * @see {@link https://tc39.es/ecma262/#sec-static-semantics-stringvalue}\n   */\n  getPrivateNameSV(node: PrivateName): string {\n    return node.id.name;\n  }\n\n  /**\n   * Return whether the given node is a member/optional chain that\n   * contains a private name as its property\n   * It is overridden in ESTree plugin\n   */\n  hasPropertyAsPrivateName(node: Node): boolean {\n    return (\n      (node.type === \"MemberExpression\" ||\n        node.type === \"OptionalMemberExpression\") &&\n      this.isPrivateName(node.property)\n    );\n  }\n\n  isObjectProperty(\n    node: Node,\n  ): node is ObjectProperty | EstreePropertyDefinition {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node: Node): node is ObjectMethod {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(\n    this: Parser,\n    inModule: boolean = this.options.sourceType === \"module\",\n  ): () => void {\n    // Initialize state\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n\n    // initialize scopes\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this, inModule);\n\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this);\n\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this);\n\n    return () => {\n      // Revert state\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n\n      // Revert scopes\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n\n  enterInitialScopes() {\n    let paramFlags = ParamKind.PARAM;\n    if (this.inModule) {\n      paramFlags |= ParamKind.PARAM_AWAIT;\n    }\n    this.scope.enter(ScopeFlag.PROGRAM);\n    this.prodParam.enter(paramFlags);\n  }\n\n  checkDestructuringPrivate(refExpressionErrors: ExpressionErrors) {\n    const { privateKeyLoc } = refExpressionErrors;\n    if (privateKeyLoc !== null) {\n      this.expectPlugin(\"destructuringPrivate\", privateKeyLoc);\n    }\n  }\n}\n\n/**\n * The ExpressionErrors is a context struct used to track ambiguous patterns\n * When we are sure the parsed pattern is a RHS, which means it is not a pattern,\n * we will throw on this position on invalid assign syntax, otherwise it will be reset to -1\n *\n * Types of ExpressionErrors:\n *\n * - **shorthandAssignLoc**: track initializer `=` position\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\n * - **privateKey**: track private key `#p` position\n * - **optionalParametersLoc**: track the optional parameter (`?`).\n * It's only used by typescript and flow plugins\n */\nexport class ExpressionErrors {\n  shorthandAssignLoc: Position | undefined | null = null;\n  doubleProtoLoc: Position | undefined | null = null;\n  privateKeyLoc: Position | undefined | null = null;\n  optionalParametersLoc: Position | undefined | null = null;\n}\n", "import UtilParser from \"./util.ts\";\nimport { SourceLocation, type Position } from \"../util/location.ts\";\nimport type { Comment, Node as NodeType, NodeBase } from \"../types.ts\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n  constructor(parser: UtilParser, pos: number, loc: Position) {\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser?.options.ranges) this.range = [pos, 0];\n    if (parser?.filename) this.loc.filename = parser.filename;\n  }\n\n  type: string = \"\";\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n  declare range: [number, number];\n  declare leadingComments: Array<Comment>;\n  declare trailingComments: Array<Comment>;\n  declare innerComments: Array<Comment>;\n  declare extra: {\n    [key: string]: any;\n  };\n}\nconst NodePrototype = Node.prototype;\n\nif (!process.env.BABEL_8_BREAKING) {\n  // @ts-expect-error __clone is not defined in Node prototype\n  NodePrototype.__clone = function (): Node {\n    const newNode = new Node(undefined, this.start, this.loc.start);\n    const keys = Object.keys(this) as (keyof Node)[];\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // Do not clone comments that are already attached to the node\n      if (\n        key !== \"leadingComments\" &&\n        key !== \"trailingComments\" &&\n        key !== \"innerComments\"\n      ) {\n        // @ts-expect-error cloning this to newNode\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  };\n}\n\nfunction clonePlaceholder(node: any): any {\n  return cloneIdentifier(node);\n}\n\nexport function cloneIdentifier(node: any): any {\n  // We don't need to clone `typeAnnotations` and `optional`: because\n  // cloneIdentifier is only used in object shorthand and named import/export.\n  // Neither of them allow type annotations after the identifier or optional identifier\n  const { type, start, end, loc, range, extra, name } = node;\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.name = name;\n  if (type === \"Placeholder\") {\n    cloned.expectedNode = node.expectedNode;\n  }\n  return cloned;\n}\n\nexport function cloneStringLiteral(node: any): any {\n  const { type, start, end, loc, range, extra } = node;\n  if (type === \"Placeholder\") {\n    return clonePlaceholder(node);\n  }\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  if (node.raw !== undefined) {\n    // estree set node.raw instead of node.extra\n    cloned.raw = node.raw;\n  } else {\n    cloned.extra = extra;\n  }\n  cloned.value = node.value;\n  return cloned;\n}\n\nexport type Undone<T extends NodeType> = Omit<T, \"type\">;\n\nexport abstract class NodeUtils extends UtilParser {\n  startNode<T extends NodeType = never>(): Undone<T> {\n    const loc = this.state.startLoc;\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  startNodeAt<T extends NodeType = never>(loc: Position): Undone<T> {\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  /** Start a new node with a previous node's location. */\n  startNodeAtNode<T extends NodeType = never>(\n    type: Undone<NodeType>,\n  ): Undone<T> {\n    return this.startNodeAt(type.loc.start);\n  }\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n    return this.finishNodeAt(node, type, this.state.lastTokEndLoc);\n  }\n\n  // Finish node at given position\n\n  finishNodeAt<T extends NodeType>(\n    node: Omit<T, \"type\">,\n    type: T[\"type\"],\n    endLoc: Position,\n  ): T {\n    if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n      throw new Error(\n        \"Do not call finishNode*() twice on the same node.\" +\n          \" Instead use resetEndLocation() or change type directly.\",\n      );\n    }\n    (node as T).type = type;\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\n    if (this.options.attachComment) this.processComment(node as T);\n    return node as T;\n  }\n\n  resetStartLocation(node: NodeBase, startLoc: Position): void {\n    node.start = startLoc.index;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = startLoc.index;\n  }\n\n  resetEndLocation(\n    node: NodeBase,\n    endLoc: Position = this.state.lastTokEndLoc,\n  ): void {\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\n  }\n\n  /**\n   * Reset the start location of node to the start location of locationNode\n   */\n  resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n    this.resetStartLocation(node, locationNode.loc.start);\n  }\n}\n", "/*:: declare var invariant; */\n\nimport type Parser from \"../../parser/index.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeyword,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLiteralPropertyName,\n  tokenLabelName,\n  tt,\n  type TokenType,\n  tokenIsFlowInterfaceOrTypeOrOpaque,\n} from \"../../tokenizer/types.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../../util/identifier.ts\";\nimport FlowScopeHandler from \"./scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node.ts\";\n\nconst reservedTypes = new Set([\n  \"_\",\n  \"any\",\n  \"bool\",\n  \"boolean\",\n  \"empty\",\n  \"extends\",\n  \"false\",\n  \"interface\",\n  \"mixed\",\n  \"null\",\n  \"number\",\n  \"static\",\n  \"string\",\n  \"true\",\n  \"typeof\",\n  \"void\",\n]);\n\n/* eslint sort-keys: \"error\" */\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\nconst FlowErrors = ParseErrorEnum`flow`({\n  AmbiguousConditionalArrow:\n    \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind:\n    \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n  // TODO: When we get proper string enums in typescript make this ReservedType.\n  // Not really worth it to do the whole $Values dance with reservedTypes set.\n  AssignReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Cannot overwrite reserved type ${reservedType}.`,\n  DeclareClassElement:\n    \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer:\n    \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports:\n    \"Duplicate `declare module.exports` statement.\",\n  EnumBooleanMemberNotInitialized: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n  EnumDuplicateMemberName: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used before in enum \\`${enumName}\\`.`,\n  EnumInconsistentMemberValues: ({ enumName }: { enumName: string }) =>\n    `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n  EnumInvalidExplicitType: ({\n    invalidEnumType,\n    enumName,\n  }: {\n    invalidEnumType: string;\n    enumName: string;\n  }) =>\n    `Enum type \\`${invalidEnumType}\\` is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidExplicitTypeUnknownSupplied: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `Supplied enum type is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n\n  // TODO: When moving to typescript, we should either have each of the\n  // following errors only accept the specific strings they want:\n  //\n  // ...PrimaryType: explicitType: \"string\" | \"number\" | \"boolean\"\n  // ...SymbolType: explicitType: \"symbol\"\n  // ...UnknownType: explicitType: null\n  //\n  // Or, alternatively, merge these three errors together into one\n  // `EnumInvalidMemberInitializer` error that can accept `EnumExplicitType`\n  // without alteration, and then just have its message change based on the\n  // explicitType.\n  EnumInvalidMemberInitializerPrimaryType: ({\n    enumName,\n    memberName,\n    explicitType,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of \\`${memberName}\\` needs to be a ${explicitType} literal.`,\n  EnumInvalidMemberInitializerSymbolType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberInitializerUnknownType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `The enum member initializer for \\`${memberName}\\` needs to be a literal (either a boolean, number, or string) in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberName: ({\n    enumName,\n    memberName,\n    suggestion,\n  }: {\n    enumName: string;\n    memberName: string;\n    suggestion: string;\n  }) =>\n    `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n  EnumNumberMemberNotInitialized: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n  }) =>\n    `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n  EnumStringMemberInconsistentlyInitialized: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `String enum members need to consistently either all use initializers, or use no initializers, in enum \\`${enumName}\\`.`,\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` or `typeof` keyword.\",\n  ImportTypeShorthandOnlyInPureImport:\n    \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n  InexactInsideExact:\n    \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n  InexactInsideNonObject:\n    \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n  InvalidNonTypeImportInDeclareModule:\n    \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n  MissingTypeParamDefault:\n    \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule:\n    \"`declare module` cannot be used inside another `declare module`.\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n  PatternIsOptional: {\n    message:\n      \"A binding pattern parameter cannot be optional in an implementation signature.\",\n    // For consistency in TypeScript and Flow error codes\n    ...(!process.env.BABEL_8_BREAKING\n      ? { reasonCode: \"OptionalBindingPattern\" }\n      : {}),\n  },\n  SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n  SpreadVariance: \"Spread properties cannot have variance.\",\n  ThisParamAnnotationRequired:\n    \"A type annotation is required for the `this` parameter.\",\n  ThisParamBannedInConstructor:\n    \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n  ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n  ThisParamMustBeFirst:\n    \"The `this` parameter must be the first function parameter.\",\n  ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n  TypeBeforeInitializer:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeCastInPattern:\n    \"The type cast expression is expected to be wrapped with parenthesis.\",\n  UnexpectedExplicitInexactInObject:\n    \"Explicit inexact syntax must appear at the end of an inexact object.\",\n  UnexpectedReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Unexpected reserved type ${reservedType}.`,\n  UnexpectedReservedUnderscore:\n    \"`_` is only allowed as a type argument to call or new.\",\n  UnexpectedSpaceBetweenModuloChecks:\n    \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType:\n    \"Spread operator cannot appear in class or interface definitions.\",\n  UnexpectedSubtractionOperand:\n    'Unexpected token, expected \"number\" or \"bigint\".',\n  UnexpectedTokenAfterTypeParameter:\n    \"Expected an arrow function after this type parameter declaration.\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction:\n    \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n  UnsupportedDeclareExportKind: ({\n    unsupportedExportKind,\n    suggestion,\n  }: {\n    unsupportedExportKind: string;\n    suggestion: string;\n  }) =>\n    `\\`declare export ${unsupportedExportKind}\\` is not supported. Use \\`${suggestion}\\` instead.`,\n  UnsupportedStatementInDeclareModule:\n    \"Only declares and type imports are allowed inside declare module.\",\n  UnterminatedFlowComment: \"Unterminated flow-comment.\",\n});\n/* eslint-disable sort-keys */\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n  return (\n    bodyElement.type === \"DeclareExportAllDeclaration\" ||\n    (bodyElement.type === \"DeclareExportDeclaration\" &&\n      (!bodyElement.declaration ||\n        (bodyElement.declaration.type !== \"TypeAlias\" &&\n          bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n  );\n}\n\nfunction hasTypeImportKind(\n  node: Undone<N.ImportSpecifier | N.ImportDeclaration>,\n): boolean {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition<T>(\n  list: T[],\n  test: (c: T, b: number, a: T[]) => boolean | undefined | null,\n): [T[], T[]] {\n  const list1: T[] = [];\n  const list2: T[] = [];\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\n\ntype EnumContext = {\n  enumName: string;\n  explicitType: EnumExplicitType;\n  memberName: string;\n};\n\ntype EnumMemberInit =\n  | {\n      type: \"number\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"string\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"boolean\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"invalid\";\n      loc: Position;\n    }\n  | {\n      type: \"none\";\n      loc: Position;\n    };\n\nexport default (superClass: typeof Parser) =>\n  class FlowParserMixin extends superClass implements Parser {\n    // The value of the @flow/@noflow pragma. Initially undefined, transitions\n    // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n    // past the initial comment.\n    flowPragma: void | null | \"flow\" | \"noflow\" = undefined;\n\n    getScopeHandler(): new (...args: any) => FlowScopeHandler {\n      return FlowScopeHandler;\n    }\n\n    shouldParseTypes(): boolean {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n    }\n\n    shouldParseEnums(): boolean {\n      return !!this.getPluginOption(\"flow\", \"enums\");\n    }\n\n    finishToken(type: TokenType, val: any): void {\n      if (\n        type !== tt.string &&\n        type !== tt.semi &&\n        type !== tt.interpreterDirective\n      ) {\n        if (this.flowPragma === undefined) {\n          this.flowPragma = null;\n        }\n      }\n      super.finishToken(type, val);\n    }\n\n    addComment(comment: N.Comment): void {\n      if (this.flowPragma === undefined) {\n        // Try to parse a flow pragma.\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n        if (!matches) {\n          // do nothing\n        } else if (matches[1] === \"flow\") {\n          this.flowPragma = \"flow\";\n        } else if (matches[1] === \"noflow\") {\n          this.flowPragma = \"noflow\";\n        } else {\n          throw new Error(\"Unexpected flow pragma\");\n        }\n      }\n      super.addComment(comment);\n    }\n\n    flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tok || tt.colon);\n\n      const type = this.flowParseType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParsePredicate(): N.FlowPredicate {\n      const node = this.startNode<N.FlowPredicate>();\n      const moduloLoc = this.state.startLoc;\n      this.next(); // eat `%`\n      this.expectContextual(tt._checks);\n      // Force '%' and 'checks' to be adjacent\n      if (this.state.lastTokStartLoc.index > moduloLoc.index + 1) {\n        this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, moduloLoc);\n      }\n      if (this.eat(tt.parenL)) {\n        node.value = super.parseExpression();\n        this.expect(tt.parenR);\n        return this.finishNode(node, \"DeclaredPredicate\");\n      } else {\n        return this.finishNode(node, \"InferredPredicate\");\n      }\n    }\n\n    flowParseTypeAndPredicateInitialiser(): [\n      N.FlowType | undefined | null,\n      N.FlowPredicate | undefined | null,\n    ] {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tt.colon);\n      let type = null;\n      let predicate = null;\n      if (this.match(tt.modulo)) {\n        this.state.inType = oldInType;\n        predicate = this.flowParsePredicate();\n      } else {\n        type = this.flowParseType();\n        this.state.inType = oldInType;\n        if (this.match(tt.modulo)) {\n          predicate = this.flowParsePredicate();\n        }\n      }\n      return [type, predicate];\n    }\n\n    flowParseDeclareClass(\n      node: Undone<N.FlowDeclareClass>,\n    ): N.FlowDeclareClass {\n      this.next();\n      this.flowParseInterfaceish(node, /*isClass*/ true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(\n      node: Undone<N.FlowDeclareFunction>,\n    ): N.FlowDeclareFunction {\n      this.next();\n\n      const id = (node.id = this.parseIdentifier());\n\n      const typeNode = this.startNode<N.FlowFunctionTypeAnnotation>();\n      const typeContainer = this.startNode<N.TypeAnnotation>();\n\n      if (this.match(tt.lt)) {\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        typeNode.typeParameters = null;\n      }\n\n      this.expect(tt.parenL);\n      const tmp = this.flowParseFunctionTypeParams();\n      typeNode.params = tmp.params;\n      typeNode.rest = tmp.rest;\n      typeNode.this = tmp._this;\n      this.expect(tt.parenR);\n\n      [typeNode.returnType, node.predicate] =\n        this.flowParseTypeAndPredicateInitialiser();\n\n      typeContainer.typeAnnotation = this.finishNode(\n        typeNode,\n        \"FunctionTypeAnnotation\",\n      );\n\n      id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n      this.resetEndLocation(id);\n      this.semicolon();\n\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_FLOW_DECLARE_FN,\n        node.id.loc.start,\n      );\n\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(\n      node: Undone<N.FlowDeclare>,\n      insideModule?: boolean,\n    ): N.FlowDeclare {\n      if (this.match(tt._class)) {\n        return this.flowParseDeclareClass(node);\n      } else if (this.match(tt._function)) {\n        return this.flowParseDeclareFunction(node);\n      } else if (this.match(tt._var)) {\n        return this.flowParseDeclareVariable(node);\n      } else if (this.eatContextual(tt._module)) {\n        if (this.match(tt.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(\n              FlowErrors.NestedDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(tt._type)) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(tt._opaque)) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(tt._interface)) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(tt._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      } else {\n        this.unexpected();\n      }\n    }\n\n    flowParseDeclareVariable(\n      node: Undone<N.FlowDeclareVariable>,\n    ): N.FlowDeclareVariable {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(\n        /*allowPrimitiveOverride*/ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_VAR,\n        node.id.loc.start,\n      );\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(\n      node: Undone<N.FlowDeclareModule>,\n    ): N.FlowDeclareModule {\n      this.scope.enter(ScopeFlag.OTHER);\n\n      if (this.match(tt.string)) {\n        node.id = super.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = (node.body = this.startNode<N.BlockStatement>());\n      // @ts-expect-error refine typings\n      const body = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        let bodyNode = this.startNode<N.ImportDeclaration>();\n\n        if (this.match(tt._import)) {\n          this.next();\n          if (!this.isContextual(tt._type) && !this.match(tt._typeof)) {\n            this.raise(\n              FlowErrors.InvalidNonTypeImportInDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          super.parseImport(bodyNode);\n        } else {\n          this.expectContextual(\n            tt._declare,\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n          // @ts-expect-error refine typings\n          bodyNode = this.flowParseDeclare(bodyNode, true);\n        }\n\n        body.push(bodyNode);\n      }\n\n      this.scope.exit();\n\n      this.expect(tt.braceR);\n\n      this.finishNode(bodyNode, \"BlockStatement\");\n\n      let kind: \"CommonJS\" | \"ES\" | null = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(FlowErrors.DuplicateDeclareModuleExports, bodyElement);\n          }\n          if (kind === \"ES\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"CommonJS\";\n          hasModuleExport = true;\n        }\n      });\n\n      node.kind = kind || \"CommonJS\";\n      return this.finishNode(node, \"DeclareModule\");\n    }\n\n    flowParseDeclareExportDeclaration(\n      node: Undone<N.FlowDeclareExportDeclaration>,\n      insideModule?: boolean | null,\n    ): N.FlowDeclareExportDeclaration {\n      this.expect(tt._export);\n\n      if (this.eat(tt._default)) {\n        if (this.match(tt._function) || this.match(tt._class)) {\n          // declare export default class ...\n          // declare export default function ...\n          node.declaration = this.flowParseDeclare(this.startNode());\n        } else {\n          // declare export default [type];\n          node.declaration = this.flowParseType();\n          this.semicolon();\n        }\n        node.default = true;\n\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else {\n        if (\n          this.match(tt._const) ||\n          this.isLet() ||\n          ((this.isContextual(tt._type) || this.isContextual(tt._interface)) &&\n            !insideModule)\n        ) {\n          const label = this.state.value as\n            | \"const\"\n            | \"let\"\n            | \"type\"\n            | \"interface\";\n          throw this.raise(\n            FlowErrors.UnsupportedDeclareExportKind,\n            this.state.startLoc,\n            {\n              unsupportedExportKind: label,\n              suggestion: exportSuggestions[label],\n            },\n          );\n        }\n\n        if (\n          this.match(tt._var) || // declare export var ...\n          this.match(tt._function) || // declare export function ...\n          this.match(tt._class) || // declare export class ...\n          this.isContextual(tt._opaque) // declare export opaque ..\n        ) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n          node.default = false;\n\n          return this.finishNode(node, \"DeclareExportDeclaration\");\n        } else if (\n          this.match(tt.star) || // declare export * from ''\n          this.match(tt.braceL) || // declare export {} ...\n          this.isContextual(tt._interface) || // declare export interface ...\n          this.isContextual(tt._type) || // declare export type ...\n          this.isContextual(tt._opaque) // declare export opaque type ...\n        ) {\n          node = this.parseExport(\n            node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n            /* decorators */ null,\n          );\n          if (node.type === \"ExportNamedDeclaration\") {\n            node.type = \"ExportDeclaration\";\n            node.default = false;\n            delete node.exportKind;\n          }\n\n          node.type = \"Declare\" + node.type;\n\n          return node as N.FlowDeclareExportDeclaration;\n        }\n      }\n\n      this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(\n      node: Undone<N.FlowDeclareModuleExports>,\n    ): N.FlowDeclareModuleExports {\n      this.next();\n      this.expectContextual(tt._exports);\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(\n      node: Undone<N.FlowDeclareTypeAlias>,\n    ): N.FlowDeclareTypeAlias {\n      this.next();\n      const finished = this.flowParseTypeAlias(\n        node,\n      ) as unknown as N.FlowDeclareTypeAlias;\n      // Don't do finishNode as we don't want to process comments twice\n      finished.type = \"DeclareTypeAlias\";\n      return finished;\n    }\n\n    flowParseDeclareOpaqueType(\n      node: Undone<N.FlowDeclareOpaqueType>,\n    ): N.FlowDeclareOpaqueType {\n      this.next();\n      const finished = this.flowParseOpaqueType(\n        node,\n        true,\n      ) as unknown as N.FlowDeclareOpaqueType;\n      // Don't do finishNode as we don't want to process comments twice\n      finished.type = \"DeclareOpaqueType\";\n      return finished;\n    }\n\n    flowParseDeclareInterface(\n      node: Undone<N.FlowDeclareInterface>,\n    ): N.FlowDeclareInterface {\n      this.next();\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    // Interfaces\n\n    flowParseInterfaceish(node: Undone<N.FlowDeclare>, isClass: boolean): void {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ !isClass,\n        /* declaration */ true,\n      );\n\n      this.scope.declareName(\n        node.id.name,\n        isClass ? BindingFlag.TYPE_FUNCTION : BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\n\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (!isClass && this.eat(tt.comma));\n      }\n\n      if (isClass) {\n        node.implements = [];\n        node.mixins = [];\n\n        if (this.eatContextual(tt._mixins)) {\n          do {\n            node.mixins.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n\n        if (this.eatContextual(tt._implements)) {\n          do {\n            node.implements.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: isClass,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: isClass,\n        allowInexact: false,\n      });\n    }\n\n    flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n      const node = this.startNode<N.FlowInterfaceExtends>();\n\n      node.id = this.flowParseQualifiedTypeIdentifier();\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node: Undone<N.FlowInterface>): N.FlowInterface {\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word: string) {\n      if (word === \"_\") {\n        this.raise(\n          FlowErrors.UnexpectedReservedUnderscore,\n          this.state.startLoc,\n        );\n      }\n    }\n\n    checkReservedType(word: string, startLoc: Position, declaration?: boolean) {\n      if (!reservedTypes.has(word)) return;\n\n      this.raise(\n        declaration\n          ? FlowErrors.AssignReservedType\n          : FlowErrors.UnexpectedReservedType,\n        startLoc,\n        {\n          reservedType: word,\n        },\n      );\n    }\n\n    flowParseRestrictedIdentifier(\n      liberal?: boolean,\n      declaration?: boolean,\n    ): N.Identifier {\n      this.checkReservedType(\n        this.state.value,\n        this.state.startLoc,\n        declaration,\n      );\n      return this.parseIdentifier(liberal);\n    }\n\n    // Type aliases\n\n    flowParseTypeAlias(node: Undone<N.FlowTypeAlias>): N.FlowTypeAlias {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ false,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.right = this.flowParseTypeInitialiser(tt.eq);\n      this.semicolon();\n\n      return this.finishNode(node, \"TypeAlias\");\n    }\n\n    flowParseOpaqueType(\n      node: Undone<N.FlowOpaqueType>,\n      declare: boolean,\n    ): N.FlowOpaqueType {\n      this.expectContextual(tt._type);\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ true,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      // Parse the supertype\n      node.supertype = null;\n      if (this.match(tt.colon)) {\n        node.supertype = this.flowParseTypeInitialiser(tt.colon);\n      }\n\n      node.impltype = null;\n      if (!declare) {\n        node.impltype = this.flowParseTypeInitialiser(tt.eq);\n      }\n      this.semicolon();\n\n      return this.finishNode(node, \"OpaqueType\");\n    }\n\n    // Type annotations\n\n    flowParseTypeParameter(requireDefault: boolean = false): N.TypeParameter {\n      const nodeStartLoc = this.state.startLoc;\n\n      const node = this.startNode<N.TypeParameter>();\n\n      const variance = this.flowParseVariance();\n\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      // @ts-expect-error migrate to Babel types\n      node.variance = variance;\n      // @ts-expect-error migrate to Babel types\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(tt.eq)) {\n        this.eat(tt.eq);\n        // @ts-expect-error migrate to Babel types\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(FlowErrors.MissingTypeParamDefault, nodeStartLoc);\n        }\n      }\n\n      return this.finishNode(node, \"TypeParameter\");\n    }\n\n    flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n      const oldInType = this.state.inType;\n      const node = this.startNode<N.TypeParameterDeclaration>();\n      node.params = [];\n\n      this.state.inType = true;\n\n      // istanbul ignore else: this condition is already checked at all call sites\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      let defaultRequired = false;\n\n      do {\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n        node.params.push(typeParameter);\n\n        if (typeParameter.default) {\n          defaultRequired = true;\n        }\n\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      } while (!this.match(tt.gt));\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterDeclaration\");\n    }\n\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = false;\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseType());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseInterfaceType(): N.FlowInterfaceType {\n      const node = this.startNode<N.FlowInterfaceType>();\n      this.expectContextual(tt._interface);\n\n      node.extends = [];\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: false,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: false,\n        allowInexact: false,\n      });\n\n      return this.finishNode(node, \"InterfaceTypeAnnotation\");\n    }\n\n    flowParseObjectPropertyKey(): N.Expression {\n      return this.match(tt.num) || this.match(tt.string)\n        ? super.parseExprAtom()\n        : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(\n      node: Undone<N.FlowObjectTypeIndexer>,\n      isStatic: boolean,\n      variance?: N.FlowVariance | null,\n    ): N.FlowObjectTypeIndexer {\n      node.static = isStatic;\n\n      // Note: bracketL has already been consumed\n      if (this.lookahead().type === tt.colon) {\n        node.id = this.flowParseObjectPropertyKey();\n        node.key = this.flowParseTypeInitialiser();\n      } else {\n        node.id = null;\n        node.key = this.flowParseType();\n      }\n      this.expect(tt.bracketR);\n      node.value = this.flowParseTypeInitialiser();\n      node.variance = variance;\n\n      return this.finishNode(node, \"ObjectTypeIndexer\");\n    }\n\n    flowParseObjectTypeInternalSlot(\n      node: Undone<N.FlowObjectTypeInternalSlot>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeInternalSlot {\n      node.static = isStatic;\n      // Note: both bracketL have already been consumed\n      node.id = this.flowParseObjectPropertyKey();\n      this.expect(tt.bracketR);\n      this.expect(tt.bracketR);\n      if (this.match(tt.lt) || this.match(tt.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(\n          this.startNodeAt(node.loc.start),\n        );\n      } else {\n        node.method = false;\n        if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n        node.value = this.flowParseTypeInitialiser();\n      }\n      return this.finishNode(node, \"ObjectTypeInternalSlot\");\n    }\n\n    flowParseObjectTypeMethodish(\n      node: Undone<N.FlowFunctionTypeAnnotation>,\n    ): N.FlowFunctionTypeAnnotation {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n      node.this = null;\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      this.expect(tt.parenL);\n      if (this.match(tt._this)) {\n        node.this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        node.this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        node.params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n\n      if (this.eat(tt.ellipsis)) {\n        node.rest = this.flowParseFunctionTypeParam(false);\n      }\n      this.expect(tt.parenR);\n      node.returnType = this.flowParseTypeInitialiser();\n\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    flowParseObjectTypeCallProperty(\n      node: Undone<N.FlowObjectTypeCallProperty>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeCallProperty {\n      const valueNode = this.startNode();\n      node.static = isStatic;\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\n      return this.finishNode(node, \"ObjectTypeCallProperty\");\n    }\n\n    flowParseObjectType({\n      allowStatic,\n      allowExact,\n      allowSpread,\n      allowProto,\n      allowInexact,\n    }: {\n      allowStatic: boolean;\n      allowExact: boolean;\n      allowSpread: boolean;\n      allowProto: boolean;\n      allowInexact: boolean;\n    }): N.FlowObjectTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n\n      const nodeStart = this.startNode<N.FlowObjectTypeAnnotation>();\n\n      nodeStart.callProperties = [];\n      nodeStart.properties = [];\n      nodeStart.indexers = [];\n      nodeStart.internalSlots = [];\n\n      let endDelim;\n      let exact;\n      let inexact = false;\n      if (allowExact && this.match(tt.braceBarL)) {\n        this.expect(tt.braceBarL);\n        endDelim = tt.braceBarR;\n        exact = true;\n      } else {\n        this.expect(tt.braceL);\n        endDelim = tt.braceR;\n        exact = false;\n      }\n\n      nodeStart.exact = exact;\n\n      while (!this.match(endDelim)) {\n        let isStatic = false;\n        let protoStartLoc: Position | undefined | null = null;\n        let inexactStartLoc: Position | undefined | null = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(tt._proto)) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            protoStartLoc = this.state.startLoc;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(tt._static)) {\n          const lookahead = this.lookahead();\n\n          // static is a valid identifier name\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            isStatic = true;\n          }\n        }\n\n        const variance = this.flowParseVariance();\n\n        if (this.eat(tt.bracketL)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (this.eat(tt.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.loc.start);\n            }\n            nodeStart.internalSlots.push(\n              this.flowParseObjectTypeInternalSlot(node, isStatic),\n            );\n          } else {\n            nodeStart.indexers.push(\n              this.flowParseObjectTypeIndexer(node, isStatic, variance),\n            );\n          }\n        } else if (this.match(tt.parenL) || this.match(tt.lt)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n          nodeStart.callProperties.push(\n            this.flowParseObjectTypeCallProperty(node, isStatic),\n          );\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(tt._get) || this.isContextual(tt._set)) {\n            const lookahead = this.lookahead();\n            if (tokenIsLiteralPropertyName(lookahead.type)) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(\n            node,\n            isStatic,\n            protoStartLoc,\n            variance,\n            kind,\n            allowSpread,\n            allowInexact ?? !exact,\n          );\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStartLoc = this.state.lastTokStartLoc;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (\n          inexactStartLoc &&\n          !this.match(tt.braceR) &&\n          !this.match(tt.braceBarR)\n        ) {\n          this.raise(\n            FlowErrors.UnexpectedExplicitInexactInObject,\n            inexactStartLoc,\n          );\n        }\n      }\n\n      this.expect(endDelim);\n\n      /* The inexact flag should only be added on ObjectTypeAnnotations that\n       * are not the body of an interface, declare interface, or declare class.\n       * Since spreads are only allowed in object types, checking that is\n       * sufficient here.\n       */\n      if (allowSpread) {\n        nodeStart.inexact = inexact;\n      }\n\n      const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n      this.state.inType = oldInType;\n\n      return out;\n    }\n\n    flowParseObjectTypeProperty(\n      node: Undone<N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty>,\n      isStatic: boolean,\n      protoStartLoc: Position | undefined | null,\n      variance: N.FlowVariance | undefined | null,\n      kind: string,\n      allowSpread: boolean,\n      allowInexact: boolean,\n    ): N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty | null {\n      if (this.eat(tt.ellipsis)) {\n        const isInexactToken =\n          this.match(tt.comma) ||\n          this.match(tt.semi) ||\n          this.match(tt.braceR) ||\n          this.match(tt.braceBarR);\n\n        if (isInexactToken) {\n          if (!allowSpread) {\n            this.raise(\n              FlowErrors.InexactInsideNonObject,\n              this.state.lastTokStartLoc,\n            );\n          } else if (!allowInexact) {\n            this.raise(\n              FlowErrors.InexactInsideExact,\n              this.state.lastTokStartLoc,\n            );\n          }\n          if (variance) {\n            this.raise(FlowErrors.InexactVariance, variance);\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(\n            FlowErrors.UnexpectedSpreadType,\n            this.state.lastTokStartLoc,\n          );\n        }\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (variance) {\n          this.raise(FlowErrors.SpreadVariance, variance);\n        }\n\n        node.argument = this.flowParseType();\n        return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n      } else {\n        node.key = this.flowParseObjectPropertyKey();\n        node.static = isStatic;\n        node.proto = protoStartLoc != null;\n        node.kind = kind;\n\n        let optional = false;\n        if (this.match(tt.lt) || this.match(tt.parenL)) {\n          // This is a method property\n          node.method = true;\n\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(\n            this.startNodeAt(node.loc.start),\n          );\n          if (kind === \"get\" || kind === \"set\") {\n            this.flowCheckGetterSetterParams(node);\n          }\n          /** Declared classes/interfaces do not allow spread */\n          if (\n            !allowSpread &&\n            node.key.name === \"constructor\" &&\n            node.value.this\n          ) {\n            this.raise(\n              FlowErrors.ThisParamBannedInConstructor,\n              node.value.this,\n            );\n          }\n        } else {\n          if (kind !== \"init\") this.unexpected();\n\n          node.method = false;\n\n          if (this.eat(tt.question)) {\n            optional = true;\n          }\n          node.value = this.flowParseTypeInitialiser();\n          node.variance = variance;\n        }\n\n        node.optional = optional;\n\n        return this.finishNode(node, \"ObjectTypeProperty\");\n      }\n    }\n\n    // This is similar to checkGetterSetterParams, but as\n    // @babel/parser uses non estree properties we cannot reuse it here\n    flowCheckGetterSetterParams(\n      property: Undone<\n        N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty\n      >,\n    ): void {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const length =\n        property.value.params.length + (property.value.rest ? 1 : 0);\n\n      if (property.value.this) {\n        this.raise(\n          property.kind === \"get\"\n            ? FlowErrors.GetterMayNotHaveThisParam\n            : FlowErrors.SetterMayNotHaveThisParam,\n          property.value.this,\n        );\n      }\n\n      if (length !== paramCount) {\n        this.raise(\n          property.kind === \"get\"\n            ? Errors.BadGetterArity\n            : Errors.BadSetterArity,\n          property,\n        );\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(Errors.BadSetterRestParameter, property);\n      }\n    }\n\n    flowObjectTypeSemicolon(): void {\n      if (\n        !this.eat(tt.semi) &&\n        !this.eat(tt.comma) &&\n        !this.match(tt.braceR) &&\n        !this.match(tt.braceBarR)\n      ) {\n        this.unexpected();\n      }\n    }\n\n    flowParseQualifiedTypeIdentifier(\n      startLoc?: Position,\n      id?: N.Identifier,\n    ): N.FlowQualifiedTypeIdentifier | N.Identifier {\n      startLoc ??= this.state.startLoc;\n      let node: N.Identifier | N.FlowQualifiedTypeIdentifier =\n        id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(tt.dot)) {\n        const node2 = this.startNodeAt<N.FlowQualifiedTypeIdentifier>(startLoc);\n        node2.qualification = node;\n        node2.id = this.flowParseRestrictedIdentifier(true);\n        node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n      }\n\n      return node;\n    }\n\n    flowParseGenericType(\n      startLoc: Position,\n      id: N.Identifier,\n    ): N.FlowGenericTypeAnnotation {\n      const node = this.startNodeAt<N.FlowGenericTypeAnnotation>(startLoc);\n\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      return this.finishNode(node, \"GenericTypeAnnotation\");\n    }\n\n    flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n      const node = this.startNode<N.FlowTypeofTypeAnnotation>();\n      this.expect(tt._typeof);\n      node.argument = this.flowParsePrimaryType();\n      return this.finishNode(node, \"TypeofTypeAnnotation\");\n    }\n\n    flowParseTupleType(): N.FlowTupleTypeAnnotation {\n      const node = this.startNode<N.FlowTupleTypeAnnotation>();\n      node.types = [];\n      this.expect(tt.bracketL);\n      // We allow trailing commas\n      while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n        node.types.push(this.flowParseType());\n        if (this.match(tt.bracketR)) break;\n        this.expect(tt.comma);\n      }\n      this.expect(tt.bracketR);\n      return this.finishNode(node, \"TupleTypeAnnotation\");\n    }\n\n    flowParseFunctionTypeParam(first: boolean): N.FlowFunctionTypeParam {\n      let name = null;\n      let optional = false;\n      let typeAnnotation = null;\n      const node = this.startNode<N.FlowFunctionTypeParam>();\n      const lh = this.lookahead();\n      const isThis = this.state.type === tt._this;\n\n      if (lh.type === tt.colon || lh.type === tt.question) {\n        if (isThis && !first) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node);\n        }\n        name = this.parseIdentifier(isThis);\n        if (this.eat(tt.question)) {\n          optional = true;\n          if (isThis) {\n            this.raise(FlowErrors.ThisParamMayNotBeOptional, node);\n          }\n        }\n        typeAnnotation = this.flowParseTypeInitialiser();\n      } else {\n        typeAnnotation = this.flowParseType();\n      }\n      node.name = name;\n      node.optional = optional;\n      node.typeAnnotation = typeAnnotation;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    reinterpretTypeAsFunctionTypeParam(\n      type: N.FlowType,\n    ): N.FlowFunctionTypeParam {\n      const node = this.startNodeAt<N.FlowFunctionTypeParam>(type.loc.start);\n      node.name = null;\n      node.optional = false;\n      node.typeAnnotation = type;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    flowParseFunctionTypeParams(params: N.FlowFunctionTypeParam[] = []): {\n      params: N.FlowFunctionTypeParam[];\n      rest: N.FlowFunctionTypeParam | undefined | null;\n      _this: N.FlowFunctionTypeParam | undefined | null;\n    } {\n      let rest: N.FlowFunctionTypeParam | undefined | null = null;\n      let _this: N.FlowFunctionTypeParam | undefined | null = null;\n      if (this.match(tt._this)) {\n        _this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        _this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      if (this.eat(tt.ellipsis)) {\n        rest = this.flowParseFunctionTypeParam(false);\n      }\n      return { params, rest, _this };\n    }\n\n    flowIdentToTypeAnnotation(\n      startLoc: Position,\n      node: Undone<N.FlowType>,\n      id: N.Identifier,\n    ): N.FlowType {\n      switch (id.name) {\n        case \"any\":\n          return this.finishNode(node, \"AnyTypeAnnotation\");\n\n        case \"bool\":\n        case \"boolean\":\n          return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n        case \"mixed\":\n          return this.finishNode(node, \"MixedTypeAnnotation\");\n\n        case \"empty\":\n          return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n        case \"number\":\n          return this.finishNode(node, \"NumberTypeAnnotation\");\n\n        case \"string\":\n          return this.finishNode(node, \"StringTypeAnnotation\");\n\n        case \"symbol\":\n          return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n        default:\n          this.checkNotUnderscore(id.name);\n          return this.flowParseGenericType(startLoc, id);\n      }\n    }\n\n    // The parsing of types roughly parallels the parsing of expressions, and\n    // primary types are kind of like primary expressions...they're the\n    // primitives with which other types are constructed.\n    flowParsePrimaryType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      let tmp;\n      let type;\n      let isGroupedType = false;\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n      switch (this.state.type) {\n        case tt.braceL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: false,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: true,\n          });\n\n        case tt.braceBarL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: true,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: false,\n          });\n\n        case tt.bracketL:\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseTupleType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          return type;\n\n        case tt.lt: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          node.typeParameters = this.flowParseTypeParameterDeclaration();\n          this.expect(tt.parenL);\n          tmp = this.flowParseFunctionTypeParams();\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.parenL: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          this.next();\n\n          // Check to see if this is actually a grouped type\n          if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n            if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n              const token = this.lookahead().type;\n              isGroupedType = token !== tt.question && token !== tt.colon;\n            } else {\n              isGroupedType = true;\n            }\n          }\n\n          if (isGroupedType) {\n            this.state.noAnonFunctionType = false;\n            type = this.flowParseType();\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n            // A `,` or a `) =>` means this is an anonymous function type\n            if (\n              this.state.noAnonFunctionType ||\n              !(\n                this.match(tt.comma) ||\n                (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n              )\n            ) {\n              this.expect(tt.parenR);\n              return type;\n            } else {\n              // Eat a comma if there is one\n              this.eat(tt.comma);\n            }\n          }\n\n          if (type) {\n            tmp = this.flowParseFunctionTypeParams([\n              this.reinterpretTypeAsFunctionTypeParam(type),\n            ]);\n          } else {\n            tmp = this.flowParseFunctionTypeParams();\n          }\n\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          node.typeParameters = null;\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.string:\n          return this.parseLiteral<N.StringLiteralTypeAnnotation>(\n            this.state.value,\n            \"StringLiteralTypeAnnotation\",\n          );\n\n        case tt._true:\n        case tt._false:\n          node.value = this.match(tt._true);\n          this.next();\n          return this.finishNode(\n            node as Undone<N.BooleanLiteralTypeAnnotation>,\n            \"BooleanLiteralTypeAnnotation\",\n          );\n\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            this.next();\n            if (this.match(tt.num)) {\n              return this.parseLiteralAtNode<N.NumberLiteralTypeAnnotation>(\n                -this.state.value,\n                \"NumberLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            if (this.match(tt.bigint)) {\n              return this.parseLiteralAtNode<N.BigIntLiteralTypeAnnotation>(\n                -this.state.value,\n                \"BigIntLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            throw this.raise(\n              FlowErrors.UnexpectedSubtractionOperand,\n              this.state.startLoc,\n            );\n          }\n          this.unexpected();\n          return;\n        case tt.num:\n          return this.parseLiteral(\n            this.state.value,\n            \"NumberLiteralTypeAnnotation\",\n          );\n\n        case tt.bigint:\n          return this.parseLiteral(\n            this.state.value,\n            \"BigIntLiteralTypeAnnotation\",\n          );\n\n        case tt._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case tt._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case tt._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case tt.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        case tt._typeof:\n          return this.flowParseTypeofType();\n\n        default:\n          if (tokenIsKeyword(this.state.type)) {\n            const label = tokenLabelName(this.state.type);\n            this.next();\n            return super.createIdentifier(node as Undone<N.Identifier>, label);\n          } else if (tokenIsIdentifier(this.state.type)) {\n            if (this.isContextual(tt._interface)) {\n              return this.flowParseInterfaceType();\n            }\n\n            return this.flowIdentToTypeAnnotation(\n              startLoc,\n              node,\n              this.parseIdentifier(),\n            );\n          }\n      }\n\n      this.unexpected();\n    }\n\n    flowParsePostfixType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      let type = this.flowParsePrimaryType();\n      let seenOptionalIndexedAccess = false;\n      while (\n        (this.match(tt.bracketL) || this.match(tt.questionDot)) &&\n        !this.canInsertSemicolon()\n      ) {\n        const node = this.startNodeAt<N.FlowOtherTypeAnnotation>(startLoc);\n        const optional = this.eat(tt.questionDot);\n        seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n        this.expect(tt.bracketL);\n        if (!optional && this.match(tt.bracketR)) {\n          node.elementType = type;\n          this.next(); // eat `]`\n          type = this.finishNode(node, \"ArrayTypeAnnotation\");\n        } else {\n          node.objectType = type;\n          node.indexType = this.flowParseType();\n          this.expect(tt.bracketR);\n          if (seenOptionalIndexedAccess) {\n            node.optional = optional;\n            type = this.finishNode<N.FlowOptionalIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"OptionalIndexedAccessType\",\n            );\n          } else {\n            type = this.finishNode<N.FlowIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"IndexedAccessType\",\n            );\n          }\n        }\n      }\n      return type;\n    }\n\n    flowParsePrefixType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      if (this.eat(tt.question)) {\n        node.typeAnnotation = this.flowParsePrefixType();\n        return this.finishNode(node, \"NullableTypeAnnotation\");\n      } else {\n        return this.flowParsePostfixType();\n      }\n    }\n\n    flowParseAnonFunctionWithoutParens(): N.FlowType {\n      const param = this.flowParsePrefixType();\n      if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n        // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n        const node = this.startNodeAt<N.FlowFunctionTypeAnnotation>(\n          param.loc.start,\n        );\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n        node.rest = null;\n        node.this = null;\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      }\n      return param;\n    }\n\n    flowParseIntersectionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseAND);\n      const type = this.flowParseAnonFunctionWithoutParens();\n      node.types = [type];\n      while (this.eat(tt.bitwiseAND)) {\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"IntersectionTypeAnnotation\");\n    }\n\n    flowParseUnionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseOR);\n      const type = this.flowParseIntersectionType();\n      node.types = [type];\n      while (this.eat(tt.bitwiseOR)) {\n        node.types.push(this.flowParseIntersectionType());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"UnionTypeAnnotation\");\n    }\n\n    flowParseType(): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const type = this.flowParseUnionType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParseTypeOrImplicitInstantiation(): N.FlowType {\n      if (this.state.type === tt.name && this.state.value === \"_\") {\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation(): N.TypeAnnotation {\n      const node = this.startNode<N.TypeAnnotation>();\n      node.typeAnnotation = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"TypeAnnotation\");\n    }\n\n    flowParseTypeAnnotatableIdentifier(\n      allowPrimitiveOverride?: boolean,\n    ): N.Identifier {\n      const ident = allowPrimitiveOverride\n        ? this.parseIdentifier()\n        : this.flowParseRestrictedIdentifier();\n      if (this.match(tt.colon)) {\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(ident);\n      }\n      return ident;\n    }\n\n    typeCastToParameter(node: N.TypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    flowParseVariance(): N.FlowVariance | undefined | null {\n      let variance = null;\n      if (this.match(tt.plusMin)) {\n        variance = this.startNode<N.FlowVariance>();\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n        this.next();\n        return this.finishNode(variance, \"Variance\");\n      }\n      return variance;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpressionBody?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      if (allowExpressionBody) {\n        this.forwardNoArrowParamsConversionAt(node, () =>\n          super.parseFunctionBody(node, true, isMethod),\n        );\n        return;\n      }\n\n      super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        const typeNode = this.startNode<N.TypeAnnotation>();\n\n        [\n          typeNode.typeAnnotation,\n          // @ts-expect-error predicate may not exist\n          node.predicate,\n        ] = this.flowParseTypeAndPredicateInitialiser();\n\n        node.returnType = typeNode.typeAnnotation\n          ? this.finishNode(typeNode, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    // interfaces and enums\n    parseStatementLike(flags: ParseStatementFlag): N.Statement {\n      // strict mode handling of `interface` since it's a reserved word\n      if (this.state.strict && this.isContextual(tt._interface)) {\n        const lookahead = this.lookahead();\n        if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n          const node = this.startNode<N.FlowInterface>();\n          this.next();\n          return this.flowParseInterface(node);\n        }\n      } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      const stmt = super.parseStatementLike(flags);\n      // We will parse a flow pragma in any comment before the first statement.\n      if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n        this.flowPragma = null;\n      }\n      return stmt;\n    }\n\n    // declares, interfaces and type aliases\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.ExpressionStatement {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (\n            this.match(tt._class) ||\n            tokenIsIdentifier(this.state.type) ||\n            this.match(tt._function) ||\n            this.match(tt._var) ||\n            this.match(tt._export)\n          ) {\n            // @ts-expect-error: refine typings\n            return this.flowParseDeclare(node);\n          }\n        } else if (tokenIsIdentifier(this.state.type)) {\n          if (expr.name === \"interface\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    shouldParseExportDeclaration(): boolean {\n      const { type } = this.state;\n      if (\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n        (this.shouldParseEnums() && type === tt._enum)\n      ) {\n        return !this.state.containsEsc;\n      }\n      return super.shouldParseExportDeclaration();\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      const { type } = this.state;\n      if (\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n        (this.shouldParseEnums() && type === tt._enum)\n      ) {\n        return this.state.containsEsc;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression() {\n      if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors);\n          return expr;\n        }\n      }\n\n      this.expect(tt.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      let { consequent, failed } = this.tryParseConditionalConsequent();\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n      if (failed || invalid.length > 0) {\n        const noArrowAt = [...originalNoArrowAt];\n\n        if (invalid.length > 0) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt;\n\n          for (let i = 0; i < invalid.length; i++) {\n            noArrowAt.push(invalid[i].start);\n          }\n\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\n        }\n\n        if (failed && valid.length > 1) {\n          // if there are two or more possible correct ways of parsing, throw an\n          // error.\n          // e.g.   Source: a ? (b): c => (d): e => f\n          //      Result 1: a ? b : (c => ((d): e => f))\n          //      Result 2: a ? ((b): c => d) : (e => f)\n          this.raise(FlowErrors.AmbiguousConditionalArrow, state.startLoc);\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          noArrowAt.push(valid[0].start);\n          this.state.noArrowAt = noArrowAt;\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n        }\n      }\n\n      this.getArrowLikeExpressions(consequent, true);\n\n      this.state.noArrowAt = originalNoArrowAt;\n      this.expect(tt.colon);\n\n      node.test = expr;\n      node.consequent = consequent;\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n        this.parseMaybeAssign(undefined, undefined),\n      );\n\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    tryParseConditionalConsequent(): {\n      consequent: N.Expression;\n      failed: boolean;\n    } {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n\n      const consequent = this.parseMaybeAssignAllowIn();\n      const failed = !this.match(tt.colon);\n\n      this.state.noArrowParamsConversionAt.pop();\n\n      return { consequent, failed };\n    }\n\n    // Given an expression, walks through out its arrow functions whose body is\n    // an expression and through out conditional expressions. It returns every\n    // function which has been parsed with a return type but could have been\n    // parenthesized expressions.\n    // These functions are separated into two arrays: one containing the ones\n    // whose parameters can be converted to assignable lists, one containing the\n    // others.\n    getArrowLikeExpressions(\n      node: N.Expression,\n      disallowInvalid?: boolean,\n    ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n      const stack = [node];\n      const arrows: N.ArrowFunctionExpression[] = [];\n\n      while (stack.length !== 0) {\n        const node = stack.pop();\n        if (\n          node.type === \"ArrowFunctionExpression\" &&\n          node.body.type !== \"BlockStatement\"\n        ) {\n          if (node.typeParameters || !node.returnType) {\n            // This is an arrow expression without ambiguity, so check its parameters\n            this.finishArrowValidation(node);\n          } else {\n            arrows.push(node);\n          }\n          stack.push(node.body);\n        } else if (node.type === \"ConditionalExpression\") {\n          stack.push(node.consequent);\n          stack.push(node.alternate);\n        }\n      }\n\n      if (disallowInvalid) {\n        arrows.forEach(node => this.finishArrowValidation(node));\n        return [arrows, []];\n      }\n\n      return partition(arrows, node =>\n        node.params.every(param => this.isAssignable(param, true)),\n      );\n    }\n\n    finishArrowValidation(node: N.ArrowFunctionExpression) {\n      this.toAssignableList(\n        // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\n        // has not been converted yet.\n        node.params as any as N.Expression[],\n        node.extra?.trailingCommaLoc,\n        /* isLHS */ false,\n      );\n      // Enter scope, as checkParams defines bindings\n      this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n      // Use super's method to force the parameters to be checked\n      super.checkParams(node, false, true);\n      this.scope.exit();\n    }\n\n    forwardNoArrowParamsConversionAt<T>(\n      node: Undone<N.Node>,\n      parse: () => T,\n    ): T {\n      let result: T;\n      if (this.state.noArrowParamsConversionAt.includes(node.start)) {\n        this.state.noArrowParamsConversionAt.push(this.state.start);\n        result = parse();\n        this.state.noArrowParamsConversionAt.pop();\n      } else {\n        result = parse();\n      }\n\n      return result;\n    }\n\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TypeCastExpression>(startLoc);\n        typeCastNode.expression = newNode as N.Expression;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return newNode;\n    }\n\n    assertModuleNodeAllowed(node: N.Node) {\n      if (\n        (node.type === \"ImportDeclaration\" &&\n          (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n        (node.type === \"ExportNamedDeclaration\" &&\n          node.exportKind === \"type\") ||\n        (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n      ) {\n        // Allow Flowtype imports and exports in all conditions because\n        // Flow itself does not care about 'sourceType'.\n        return;\n      }\n\n      super.assertModuleNodeAllowed(node);\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (this.isContextual(tt._type)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n\n        if (this.match(tt.braceL)) {\n          // export type { foo, bar };\n          node.specifiers = this.parseExportSpecifiers(\n            /* isInTypeExport */ true,\n          );\n          super.parseExportFrom(node);\n          return null;\n        } else {\n          // export type Foo = Bar;\n          // @ts-expect-error: refine typings\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(tt._opaque)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n        // export opaque type Foo = Bar;\n        // @ts-expect-error: refine typings\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(tt._interface)) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseInterface(declarationNode);\n      } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(\n      node: Undone<N.Node>,\n    ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n      if (super.eatExportStar(node)) return true;\n\n      if (this.isContextual(tt._type) && this.lookahead().type === tt.star) {\n        (\n          node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>\n        ).exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(\n      node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      const { startLoc } = this.state;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(startLoc);\n      }\n      return hasNamespace;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n    ) {\n      super.parseClassId(node, isStatement, optionalId);\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const { startLoc } = this.state;\n      if (this.isContextual(tt._declare)) {\n        if (super.parseClassMemberFromModifier(classBody, member)) {\n          // 'declare' is a class element name\n          return;\n        }\n\n        member.declare = true;\n      }\n\n      super.parseClassMember(classBody, member, state);\n\n      if (member.declare) {\n        if (\n          member.type !== \"ClassProperty\" &&\n          member.type !== \"ClassPrivateProperty\" &&\n          member.type !== \"PropertyDefinition\" // Used by estree plugin\n        ) {\n          this.raise(FlowErrors.DeclareClassElement, startLoc);\n        } else if (member.value) {\n          this.raise(FlowErrors.DeclareClassFieldInitializer, member.value);\n        }\n      }\n    }\n\n    isIterator(word: string): boolean {\n      return word === \"iterator\" || word === \"asyncIterator\";\n    }\n\n    readIterator(): void {\n      const word = super.readWord1();\n      const fullWord = \"@@\" + word;\n\n      // Allow @@iterator and @@asyncIterator as a identifier only inside type\n      if (!this.isIterator(word) || !this.state.inType) {\n        this.raise(Errors.InvalidIdentifier, this.state.curPosition(), {\n          identifierName: fullWord,\n        });\n      }\n\n      this.finishToken(tt.name, fullWord);\n    }\n\n    // ensure that inside flow types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n        this.finishOp(tt.braceBarL, 2);\n      } else if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        this.finishOp(code === charCodes.greaterThan ? tt.gt : tt.lt, 1);\n      } else if (this.state.inType && code === charCodes.questionMark) {\n        if (next === charCodes.dot) {\n          this.finishOp(tt.questionDot, 2);\n        } else {\n          // allow double nullable types in Flow: ??string\n          this.finishOp(tt.question, 1);\n        }\n      } else if (\n        isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))\n      ) {\n        this.state.pos += 2; // eat \"@@\"\n        this.readIterator();\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node.type === \"TypeCastExpression\") {\n        return this.isAssignable(node.expression, isBinding);\n      } else {\n        return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (\n        !isLHS &&\n        node.type === \"AssignmentExpression\" &&\n        node.left.type === \"TypeCastExpression\"\n      ) {\n        node.left = this.typeCastToParameter(node.left) as N.Assignable;\n      }\n      super.toAssignable(node, isLHS);\n    }\n\n    // turn type casts that we found in function parameter head into type annotated params\n    toAssignableList(\n      exprList: N.Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    // this is a list of nodes, from something like a call expression, we need to filter the\n    // type casts that we've found that are illegal in this context\n    toReferencedList(\n      exprList:\n        | ReadonlyArray<N.Expression | N.SpreadElement>\n        | ReadonlyArray<N.Expression | N.RestElement>,\n      isParenthesizedExpr?: boolean,\n    ):\n      | ReadonlyArray<N.Expression | N.SpreadElement>\n      | ReadonlyArray<N.Expression | N.RestElement> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (\n          expr &&\n          expr.type === \"TypeCastExpression\" &&\n          !expr.extra?.parenthesized &&\n          (exprList.length > 1 || !isParenthesizedExpr)\n        ) {\n          this.raise(FlowErrors.TypeCastInPattern, expr.typeAnnotation);\n        }\n      }\n\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      // This could be an array pattern:\n      //   ([a: string, b: string]) => {}\n      // In this case, we don't have to call toReferencedList. We will\n      // call it, if needed, when we are sure that it is a parenthesized\n      // expression by calling toReferencedListDeep.\n      if (canBePattern && !this.state.maybeInArrowParameters) {\n        this.toReferencedList(node.elements);\n      }\n\n      return node;\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"TypeCastExpression\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    // parse class property type annotations\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassPrivateProperty(node);\n    }\n\n    // determine whether or not we're currently in the position where a class method would appear\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    // determine whether or not we're currently in the position where a class property would appear\n    isClassProperty(): boolean {\n      return this.match(tt.colon) || super.isClassProperty();\n    }\n\n    isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n      return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n    }\n\n    // parse type parameters for class methods\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n\n      if (method.params && isConstructor) {\n        const params = method.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n        // estree support\n      } else if (\n        // @ts-expect-error TS does not know about the face that estree can replace ClassMethod with MethodDefinition\n        method.type === \"MethodDefinition\" &&\n        isConstructor &&\n        // @ts-expect-error estree\n        method.value.params\n      ) {\n        // @ts-expect-error estree\n        const params = method.value.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n      }\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    // parse a the super class type parameters and implements\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (node.superClass && this.match(tt.lt)) {\n        node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n      }\n      if (this.isContextual(tt._implements)) {\n        this.next();\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\n        do {\n          const node = this.startNode<N.FlowClassImplements>();\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\n          } else {\n            node.typeParameters = null;\n          }\n          implemented.push(this.finishNode(node, \"ClassImplements\"));\n        } while (this.eat(tt.comma));\n      }\n    }\n\n    checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n      super.checkGetterSetterParams(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      if (params.length > 0) {\n        const param = params[0];\n        if (this.isThisParam(param) && method.kind === \"get\") {\n          this.raise(FlowErrors.GetterMayNotHaveThisParam, param);\n        } else if (this.isThisParam(param)) {\n          this.raise(FlowErrors.SetterMayNotHaveThisParam, param);\n        }\n      }\n    }\n\n    parsePropertyNamePrefixOperator(\n      node: N.ObjectOrClassMember | N.ClassMember,\n    ): void {\n      node.variance = this.flowParseVariance();\n    }\n\n    // parse type parameters for object method shorthand\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      if ((prop as any).variance) {\n        this.unexpected((prop as any).variance.loc.start);\n      }\n      delete (prop as any).variance;\n\n      let typeParameters;\n\n      // method shorthand\n      if (this.match(tt.lt) && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(tt.parenL)) this.unexpected();\n      }\n\n      const result = super.parseObjPropValue(\n        prop,\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n\n      // add typeParameters if we found them\n      if (typeParameters) {\n        // @ts-expect-error: refine typings\n        (result.value || result).typeParameters = typeParameters;\n      }\n      return result;\n    }\n\n    parseAssignableListItemTypes(param: N.Pattern): N.Pattern {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(FlowErrors.PatternIsOptional, param);\n        }\n        if (this.isThisParam(param)) {\n          this.raise(FlowErrors.ThisParamMayNotBeOptional, param);\n        }\n\n        (param as any as N.Identifier).optional = true;\n      }\n      if (this.match(tt.colon)) {\n        param.typeAnnotation = this.flowParseTypeAnnotation();\n      } else if (this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamAnnotationRequired, param);\n      }\n\n      if (this.match(tt.eq) && this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamNoDefault, param);\n      }\n\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault(\n      startLoc?: Position | null,\n      left?: N.Pattern | null,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(FlowErrors.TypeBeforeInitializer, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          FlowErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    parseImportSpecifierLocal<\n      T extends\n        | N.ImportSpecifier\n        | N.ImportDefaultSpecifier\n        | N.ImportNamespaceSpecifier,\n    >(node: N.ImportDeclaration, specifier: Undone<T>, type: T[\"type\"]): void {\n      specifier.local = hasTypeImportKind(node)\n        ? this.flowParseRestrictedIdentifier(\n            /* liberal */ true,\n            /* declaration */ true,\n          )\n        : this.parseIdentifier();\n\n      node.specifiers.push(this.finishImportSpecifier(specifier, type));\n    }\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        if (!isExport) return true;\n        const ch = this.lookaheadCharCode();\n        return ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        if (!phase && this.match(tt._default)) {\n          // TODO: Align with our TS AST and always add .exportKind\n          return;\n        }\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? phase : \"value\";\n      } else {\n        if (phase === \"type\" && this.match(tt.star)) this.unexpected();\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    // parse import-type/typeof shorthand\n    parseImportSpecifier(\n      specifier: any,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      const firstIdent = specifier.imported;\n\n      let specifierTypeKind = null;\n      if (firstIdent.type === \"Identifier\") {\n        if (firstIdent.name === \"type\") {\n          specifierTypeKind = \"type\";\n        } else if (firstIdent.name === \"typeof\") {\n          specifierTypeKind = \"typeof\";\n        }\n      }\n\n      let isBinding = false;\n      if (this.isContextual(tt._as) && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n        if (\n          specifierTypeKind !== null &&\n          !tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type as ,` or `import {type as }`\n          specifier.imported = as_ident;\n          specifier.importKind = specifierTypeKind;\n          specifier.local = cloneIdentifier(as_ident);\n        } else {\n          // `import {type as foo`\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n          specifier.local = this.parseIdentifier();\n        }\n      } else {\n        if (\n          specifierTypeKind !== null &&\n          tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type foo`\n          specifier.imported = this.parseIdentifier(true);\n          specifier.importKind = specifierTypeKind;\n        } else {\n          if (importedIsString) {\n            /*:: invariant(firstIdent instanceof N.StringLiteral) */\n            throw this.raise(Errors.ImportBindingIsString, specifier, {\n              importName: firstIdent.value,\n            });\n          }\n          /*:: invariant(firstIdent instanceof N.Node) */\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n        }\n\n        if (this.eatContextual(tt._as)) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = cloneIdentifier(specifier.imported);\n        }\n      }\n\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (isInTypeOnlyImport && specifierIsTypeImport) {\n        this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, specifier);\n      }\n\n      if (isInTypeOnlyImport || specifierIsTypeImport) {\n        this.checkReservedType(\n          specifier.local.name,\n          specifier.local.loc.start,\n          /* declaration */ true,\n        );\n      }\n\n      if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n        this.checkReservedWord(\n          specifier.local.name,\n          specifier.loc.start,\n          true,\n          true,\n        );\n      }\n\n      return this.finishImportSpecifier(specifier, \"ImportSpecifier\");\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    // parse function type parameters - function foo<T>() {}\n    parseFunctionParams(\n      node: Undone<N.Function>,\n      isConstructor: boolean,\n    ): void {\n      // @ts-expect-error kind may not index node\n      const kind = node.kind;\n      if (kind !== \"get\" && kind !== \"set\" && this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // parse flow type annotations on variable declarator heads - let foo: string = bar\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (this.match(tt.colon)) {\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        node.returnType = this.flowParseTypeAnnotation();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      }\n\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    // todo description\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    // We need to support type parameter declarations for arrow functions. This\n    // is tricky. There are three situations we need to handle\n    //\n    // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n    //    fails, we'll try an arrow function. If that fails, we'll throw the JSX\n    //    error.\n    // 2. This is an arrow function. We'll parse the type parameter declaration,\n    //    parse the rest, make sure the rest is an arrow function, and go from\n    //    there\n    // 3. This is neither. Just call the super method\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      let state = null;\n\n      let jsx;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (jsx?.error || this.match(tt.lt)) {\n        state = state || this.state.clone();\n\n        let typeParameters: N.TypeParameterDeclaration;\n\n        const arrow = this.tryParse((abort: () => never) => {\n          typeParameters = this.flowParseTypeParameterDeclaration();\n\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(\n            typeParameters,\n            () => {\n              const result = super.parseMaybeAssign(\n                refExpressionErrors,\n                afterLeftParse,\n              );\n\n              this.resetStartLocationFromNode(result, typeParameters);\n\n              return result;\n            },\n          );\n\n          // <T>(() => {});\n          // <T>(() => {}: any);\n          if (arrowExpression.extra?.parenthesized) abort();\n\n          // The above can return a TypeCastExpression when the arrow\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\n          // (<T>() => {}: any);\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n\n          if (expr.type !== \"ArrowFunctionExpression\") abort();\n\n          expr.typeParameters = typeParameters;\n          this.resetStartLocationFromNode(expr, typeParameters);\n\n          return arrowExpression;\n        }, state);\n\n        let arrowExpression:\n          | N.ArrowFunctionExpression\n          | N.TypeCastExpression\n          | undefined\n          | null = null;\n\n        if (\n          arrow.node &&\n          this.maybeUnwrapTypeCastExpression(arrow.node).type ===\n            \"ArrowFunctionExpression\"\n        ) {\n          if (!arrow.error && !arrow.aborted) {\n            // <T> async () => {}\n            // @ts-expect-error: refine tryParse typings\n            if (arrow.node.async) {\n              /*:: invariant(typeParameters) */\n              this.raise(\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n                typeParameters,\n              );\n            }\n            return arrow.node;\n          }\n\n          // @ts-expect-error: refine typings\n          arrowExpression = arrow.node;\n        }\n\n        // If we are here, both JSX and Flow parsing attempts failed.\n        // Give the precedence to the JSX error, except if JSX had an\n        // unrecoverable error while Flow didn't.\n        // If the error is recoverable, we can only re-report it if there is\n        // a node we can return.\n\n        if (jsx?.node) {\n          /*:: invariant(jsx.failState) */\n          this.state = jsx.failState;\n          return jsx.node;\n        }\n\n        if (arrowExpression) {\n          /*:: invariant(arrow.failState) */\n          this.state = arrow.failState;\n          return arrowExpression;\n        }\n\n        if (jsx?.thrown) throw jsx.error;\n        if (arrow.thrown) throw arrow.error;\n\n        /*:: invariant(typeParameters) */\n        throw this.raise(\n          FlowErrors.UnexpectedTokenAfterTypeParameter,\n          typeParameters,\n        );\n      }\n\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n    }\n\n    // handle return types for arrow functions\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // @ts-expect-error todo(flow->ts)\n        const result = this.tryParse<N.TypeAnnotation>(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n\n          const typeNode = this.startNode<N.TypeAnnotation>();\n\n          [\n            typeNode.typeAnnotation,\n            // @ts-expect-error (destructuring not supported yet)\n            node.predicate,\n          ] = this.flowParseTypeAndPredicateInitialiser();\n\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.canInsertSemicolon()) this.unexpected();\n          if (!this.match(tt.arrow)) this.unexpected();\n\n          return typeNode;\n        });\n\n        if (result.thrown) return null;\n        /*:: invariant(result.node) */\n\n        if (result.error) this.state = result.failState;\n\n        // assign after it is clear it is an arrow\n        // @ts-expect-error todo(flow->ts)\n        node.returnType = result.node.typeAnnotation\n          ? this.finishNode(result.node, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseArrow(node);\n    }\n\n    shouldParseArrow(params: Array<N.Node>): boolean {\n      return this.match(tt.colon) || super.shouldParseArrow(params);\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params:\n        | Array<N.Expression | N.SpreadElement>\n        | Array<N.Expression | N.RestElement>,\n    ): void {\n      if (this.state.noArrowParamsConversionAt.includes(node.start)) {\n        node.params = params as N.ArrowFunctionExpression[\"params\"];\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(\n      node: N.Function,\n      allowDuplicates: boolean,\n      isArrowFunction?: boolean | null,\n      strictModeChanged: boolean = true,\n    ): void {\n      if (\n        isArrowFunction &&\n        this.state.noArrowParamsConversionAt.includes(node.start)\n      ) {\n        return;\n      }\n\n      // ensure the `this` param is first, if it exists\n      for (let i = 0; i < node.params.length; i++) {\n        if (this.isThisParam(node.params[i]) && i > 0) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node.params[i]);\n        }\n      }\n\n      super.checkParams(\n        node,\n        allowDuplicates,\n        isArrowFunction,\n        strictModeChanged,\n      );\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n      return super.parseParenAndDistinguishExpression(\n        canBeArrow && !this.state.noArrowAt.includes(this.state.start),\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls?: boolean | null,\n    ): N.Expression {\n      if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.state.noArrowAt.includes(startLoc.index)\n      ) {\n        this.next();\n\n        const node = this.startNodeAt<N.CallExpression>(startLoc);\n        node.callee = base;\n        node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.match(tt.lt)\n      ) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(\n          abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(),\n          state,\n        );\n\n        /*:: invariant(arrow.node != null) */\n        // @ts-expect-error: refine tryParse typings\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n\n        const result = this.tryParse(\n          () => super.parseSubscripts(base, startLoc, noCalls),\n          state,\n        );\n\n        if (result.node && !result.error) return result.node;\n\n        if (arrow.node) {\n          this.state = arrow.failState;\n          // @ts-expect-error: refine tryParse typings\n          return arrow.node;\n        }\n\n        if (result.node) {\n          this.state = result.failState;\n          return result.node;\n        }\n\n        throw arrow.error || result.error;\n      }\n\n      return super.parseSubscripts(base, startLoc, noCalls);\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      subscriptState: N.ParseSubscriptState,\n    ): N.Expression {\n      if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\n        subscriptState.optionalChainMember = true;\n        if (noCalls) {\n          subscriptState.stop = true;\n          return base;\n        }\n        this.next();\n        const node = this.startNodeAt<N.OptionalCallExpression>(startLoc);\n        node.callee = base;\n        node.typeArguments = this.flowParseTypeParameterInstantiation();\n        this.expect(tt.parenL);\n        node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (!noCalls && this.shouldParseTypes() && this.match(tt.lt)) {\n        const node = this.startNodeAt<\n          N.OptionalCallExpression | N.CallExpression\n        >(startLoc);\n        node.callee = base;\n\n        const result = this.tryParse(() => {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationCallOrNew();\n          this.expect(tt.parenL);\n          node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\n          if (subscriptState.optionalChainMember) {\n            (node as Undone<N.OptionalCallExpression>).optional = false;\n          }\n          return this.finishCallExpression(\n            node,\n            subscriptState.optionalChainMember,\n          );\n        });\n\n        if (result.node) {\n          if (result.error) this.state = result.failState;\n          return result.node;\n        }\n      }\n\n      return super.parseSubscript(\n        base,\n\n        startLoc,\n        noCalls,\n        subscriptState,\n      );\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      let targs = null;\n      if (this.shouldParseTypes() && this.match(tt.lt)) {\n        targs = this.tryParse(() =>\n          this.flowParseTypeParameterInstantiationCallOrNew(),\n        ).node;\n      }\n      node.typeArguments = targs;\n    }\n\n    parseAsyncArrowWithTypeParameters(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined | null {\n      const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n      this.parseFunctionParams(node, false);\n      if (!this.parseArrow(node)) return;\n      return super.parseArrowExpression(\n        node,\n        /* params */ undefined,\n        /* isAsync */ true,\n      );\n    }\n\n    readToken_mult_modulo(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.asterisk &&\n        next === charCodes.slash &&\n        this.state.hasFlowComment\n      ) {\n        this.state.hasFlowComment = false;\n        this.state.pos += 2;\n        this.nextToken();\n        return;\n      }\n\n      super.readToken_mult_modulo(code);\n    }\n\n    readToken_pipe_amp(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.verticalBar &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        // '|}'\n        this.finishOp(tt.braceBarR, 2);\n        return;\n      }\n\n      super.readToken_pipe_amp(code);\n    }\n\n    parseTopLevel(file: N.File, program: N.Program): N.File {\n      const fileNode = super.parseTopLevel(file, program);\n      if (this.state.hasFlowComment) {\n        this.raise(\n          FlowErrors.UnterminatedFlowComment,\n          this.state.curPosition(),\n        );\n      }\n      return fileNode;\n    }\n\n    skipBlockComment(): N.CommentBlock | undefined {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          throw this.raise(FlowErrors.NestedFlowComment, this.state.startLoc);\n        }\n        this.hasFlowCommentCompletion();\n        const commentSkip = this.skipFlowComment();\n        if (commentSkip) {\n          this.state.pos += commentSkip;\n          this.state.hasFlowComment = true;\n        }\n        return;\n      }\n\n      return super.skipBlockComment(this.state.hasFlowComment ? \"*-/\" : \"*/\");\n    }\n\n    skipFlowComment(): number | false {\n      const { pos } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n      while (\n        [charCodes.space, charCodes.tab].includes(\n          // @ts-expect-error testing whether a number is included\n          this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n        )\n      ) {\n        shiftToFirstNonWhiteSpace++;\n      }\n\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n      if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n        return shiftToFirstNonWhiteSpace + 2; // check for /*::\n      }\n      if (\n        this.input.slice(\n          shiftToFirstNonWhiteSpace + pos,\n          shiftToFirstNonWhiteSpace + pos + 12,\n        ) === \"flow-include\"\n      ) {\n        return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n      }\n      if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n        return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n      }\n      return false;\n    }\n\n    hasFlowCommentCompletion(): void {\n      const end = this.input.indexOf(\"*/\", this.state.pos);\n      if (end === -1) {\n        throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n      }\n    }\n\n    // Flow enum parsing\n\n    flowEnumErrorBooleanMemberNotInitialized(\n      loc: Position,\n      {\n        enumName,\n        memberName,\n      }: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumBooleanMemberNotInitialized, loc, {\n        memberName,\n        enumName,\n      });\n    }\n\n    flowEnumErrorInvalidMemberInitializer(\n      loc: Position,\n      enumContext: EnumContext,\n    ) {\n      return this.raise(\n        !enumContext.explicitType\n          ? FlowErrors.EnumInvalidMemberInitializerUnknownType\n          : enumContext.explicitType === \"symbol\"\n            ? FlowErrors.EnumInvalidMemberInitializerSymbolType\n            : FlowErrors.EnumInvalidMemberInitializerPrimaryType,\n        loc,\n        enumContext,\n      );\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(\n      loc: Position,\n      details: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumNumberMemberNotInitialized, loc, details);\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitialized(\n      node: N.Node,\n      details: {\n        enumName: string;\n      },\n    ): void {\n      this.raise(\n        FlowErrors.EnumStringMemberInconsistentlyInitialized,\n        node,\n        details,\n      );\n    }\n\n    flowEnumMemberInit(): EnumMemberInit {\n      const startLoc = this.state.startLoc;\n      const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n      switch (this.state.type) {\n        case tt.num: {\n          const literal = this.parseNumericLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"number\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt.string: {\n          const literal = this.parseStringLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"string\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt._true:\n        case tt._false: {\n          const literal = this.parseBooleanLiteral(this.match(tt._true));\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              loc: literal.loc.start,\n              value: literal,\n            };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        default:\n          return { type: \"invalid\", loc: startLoc };\n      }\n    }\n\n    flowEnumMemberRaw(): {\n      id: N.Identifier;\n      init: EnumMemberInit;\n    } {\n      const loc = this.state.startLoc;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(tt.eq)\n        ? this.flowEnumMemberInit()\n        : { type: \"none\" as const, loc };\n      return { id, init };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(\n      loc: Position,\n      context: EnumContext,\n      expectedType: EnumExplicitType,\n    ): void {\n      const { explicitType } = context;\n      if (explicitType === null) {\n        return;\n      }\n      if (explicitType !== expectedType) {\n        this.flowEnumErrorInvalidMemberInitializer(loc, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType,\n    }: {\n      enumName: string;\n      explicitType: EnumExplicitType;\n    }): {\n      members: {\n        booleanMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumBooleanMember\" }\n        >[];\n        numberMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumNumberMember\" }\n        >[];\n        stringMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumStringMember\" }\n        >[];\n        defaultedMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumDefaultedMember\" }\n        >[];\n      };\n      hasUnknownMembers: boolean;\n    } {\n      const seenNames = new Set();\n      const members = {\n        // @ts-expect-error: migrate to Babel types\n        booleanMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        numberMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        stringMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        defaultedMembers: [],\n      };\n      let hasUnknownMembers = false;\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.ellipsis)) {\n          hasUnknownMembers = true;\n          break;\n        }\n        const memberNode = this.startNode<N.FlowEnumMember>();\n        const { id, init } = this.flowEnumMemberRaw();\n        const memberName = id.name;\n        if (memberName === \"\") {\n          continue;\n        }\n        if (/^[a-z]/.test(memberName)) {\n          this.raise(FlowErrors.EnumInvalidMemberName, id, {\n            memberName,\n            suggestion: memberName[0].toUpperCase() + memberName.slice(1),\n            enumName,\n          });\n        }\n        if (seenNames.has(memberName)) {\n          this.raise(FlowErrors.EnumDuplicateMemberName, id, {\n            memberName,\n            enumName,\n          });\n        }\n        seenNames.add(memberName);\n        const context = { enumName, explicitType, memberName };\n        memberNode.id = id;\n        switch (init.type) {\n          case \"boolean\": {\n            this.flowEnumCheckExplicitTypeMismatch(\n              init.loc,\n              context,\n              \"boolean\",\n            );\n            memberNode.init = init.value;\n            members.booleanMembers.push(\n              this.finishNode(memberNode, \"EnumBooleanMember\"),\n            );\n            break;\n          }\n          case \"number\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(\n              this.finishNode(memberNode, \"EnumNumberMember\"),\n            );\n            break;\n          }\n          case \"string\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(\n              this.finishNode(memberNode, \"EnumStringMember\"),\n            );\n            break;\n          }\n          case \"invalid\": {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);\n          }\n          case \"none\": {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(\n                  init.loc,\n                  context,\n                );\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);\n                break;\n              default:\n                members.defaultedMembers.push(\n                  this.finishNode(memberNode, \"EnumDefaultedMember\"),\n                );\n            }\n          }\n        }\n\n        if (!this.match(tt.braceR)) {\n          this.expect(tt.comma);\n        }\n      }\n      return { members, hasUnknownMembers };\n    }\n\n    flowEnumStringMembers(\n      initializedMembers: Array<N.Node>,\n      defaultedMembers: Array<N.Node>,\n      {\n        enumName,\n      }: {\n        enumName: string;\n      },\n    ): Array<N.Node> {\n      if (initializedMembers.length === 0) {\n        return defaultedMembers;\n      } else if (defaultedMembers.length === 0) {\n        return initializedMembers;\n      } else if (defaultedMembers.length > initializedMembers.length) {\n        for (const member of initializedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return defaultedMembers;\n      } else {\n        for (const member of defaultedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName,\n    }: {\n      enumName: string;\n    }): EnumExplicitType {\n      if (!this.eatContextual(tt._of)) return null;\n\n      if (!tokenIsIdentifier(this.state.type)) {\n        throw this.raise(\n          FlowErrors.EnumInvalidExplicitTypeUnknownSupplied,\n          this.state.startLoc,\n          {\n            enumName,\n          },\n        );\n      }\n\n      const { value } = this.state;\n      this.next();\n\n      if (\n        value !== \"boolean\" &&\n        value !== \"number\" &&\n        value !== \"string\" &&\n        value !== \"symbol\"\n      ) {\n        this.raise(FlowErrors.EnumInvalidExplicitType, this.state.startLoc, {\n          enumName,\n          invalidEnumType: value,\n        });\n      }\n\n      return value;\n    }\n\n    flowEnumBody(node: Undone<N.FlowEnumBody>, id: N.Identifier): N.Node {\n      const enumName = id.name;\n      const nameLoc = id.loc.start;\n      const explicitType = this.flowEnumParseExplicitType({ enumName });\n      this.expect(tt.braceL);\n      const { members, hasUnknownMembers } = this.flowEnumMembers({\n        enumName,\n        explicitType,\n      });\n      node.hasUnknownMembers = hasUnknownMembers;\n\n      switch (explicitType) {\n        case \"boolean\":\n          node.explicitType = true;\n          node.members = members.booleanMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumBooleanBody\");\n        case \"number\":\n          node.explicitType = true;\n          node.members = members.numberMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumNumberBody\");\n        case \"string\":\n          node.explicitType = true;\n          node.members = this.flowEnumStringMembers(\n            members.stringMembers,\n            members.defaultedMembers,\n            { enumName },\n          );\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumStringBody\");\n        case \"symbol\":\n          node.members = members.defaultedMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumSymbolBody\");\n        default: {\n          // `explicitType` is `null`\n          const empty = () => {\n            node.members = [];\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n          node.explicitType = false;\n\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(\n              members.stringMembers,\n              members.defaultedMembers,\n              { enumName },\n            );\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.booleanMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.numberMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.raise(FlowErrors.EnumInconsistentMemberValues, nameLoc, {\n              enumName,\n            });\n            return empty();\n          }\n        }\n      }\n    }\n\n    flowParseEnumDeclaration(\n      node: Undone<N.FlowEnumDeclaration>,\n    ): N.FlowEnumDeclaration {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), id);\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    // check if the next token is a tt.lt\n    isLookaheadToken_lt(): boolean {\n      const next = this.nextTokenStart();\n      if (this.input.charCodeAt(next) === charCodes.lessThan) {\n        const afterNext = this.input.charCodeAt(next + 1);\n        return (\n          afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\n        );\n      }\n      return false;\n    }\n\n    maybeUnwrapTypeCastExpression(node: N.Node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n  };\n", "const entities: {\n  __proto__: null;\n  [name: string]: string;\n} = {\n  __proto__: null,\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n} as const;\nexport default entities;\n", "import * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport {\n  tokenComesBeforeExpression,\n  tokenIsKeyword,\n  tokenLabelName,\n  type TokenType,\n  tt,\n} from \"../../tokenizer/types.ts\";\nimport type { TokContext } from \"../../tokenizer/context.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { isNewLine } from \"../../util/whitespace.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\n\n/* eslint sort-keys: \"error\" */\nconst JsxErrors = ParseErrorEnum`jsx`({\n  AttributeIsEmpty:\n    \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: ({ openingTagName }: { openingTagName: string }) =>\n    `Expected corresponding JSX closing tag for <${openingTagName}>.`,\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n  UnexpectedSequenceExpression:\n    \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n  // FIXME: Unify with Errors.UnexpectedToken\n  UnexpectedToken: ({\n    unexpected,\n    HTMLEntity,\n  }: {\n    unexpected: string;\n    HTMLEntity: string;\n  }) =>\n    `Unexpected token \\`${unexpected}\\`. Did you mean \\`${HTMLEntity}\\` or \\`{'${unexpected}'}\\`?`,\n  UnsupportedJsxValue:\n    \"JSX value should be either an expression or a quoted JSX text.\",\n  UnterminatedJsxContent: \"Unterminated JSX contents.\",\n  UnwrappedAdjacentJSXElements:\n    \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\",\n});\n\n/* eslint-disable sort-keys */\n\nfunction isFragment(object?: N.JSXTag | null): object is N.JSXFragmentTag {\n  return object\n    ? object.type === \"JSXOpeningFragment\" ||\n        object.type === \"JSXClosingFragment\"\n    : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n  object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return (\n      getQualifiedJSXName(object.object) +\n      \".\" +\n      getQualifiedJSXName(object.property)\n    );\n  }\n\n  // istanbul ignore next\n  // @ts-expect-error - object is 'never'\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport interface IJSXParserMixin {\n  jsxParseOpeningElementAfterName(\n    node: N.JSXOpeningElement,\n  ): N.JSXOpeningElement;\n}\n\nexport default (superClass: typeof Parser) =>\n  class JSXParserMixin extends superClass implements Parser, IJSXParserMixin {\n    // Reads inline JSX contents token.\n\n    jsxReadToken(): void {\n      let out = \"\";\n      let chunkStart = this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(\n            JsxErrors.UnterminatedJsxContent,\n            this.state.startLoc,\n          );\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n\n        switch (ch) {\n          case charCodes.lessThan:\n          case charCodes.leftCurlyBrace:\n            if (this.state.pos === this.state.start) {\n              if (ch === charCodes.lessThan && this.state.canStartJSXElement) {\n                ++this.state.pos;\n                this.finishToken(tt.jsxTagStart);\n              } else {\n                super.getTokenFromCode(ch);\n              }\n              return;\n            }\n            out += this.input.slice(chunkStart, this.state.pos);\n            this.finishToken(tt.jsxText, out);\n            return;\n\n          case charCodes.ampersand:\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadEntity();\n            chunkStart = this.state.pos;\n            break;\n\n          case charCodes.greaterThan:\n          case charCodes.rightCurlyBrace:\n            if (process.env.BABEL_8_BREAKING) {\n              this.raise(JsxErrors.UnexpectedToken, this.state.curPosition(), {\n                unexpected: this.input[this.state.pos],\n                HTMLEntity:\n                  ch === charCodes.rightCurlyBrace ? \"&rbrace;\" : \"&gt;\",\n              });\n            }\n          /* falls through */\n\n          default:\n            if (isNewLine(ch)) {\n              out += this.input.slice(chunkStart, this.state.pos);\n              out += this.jsxReadNewLine(true);\n              chunkStart = this.state.pos;\n            } else {\n              ++this.state.pos;\n            }\n        }\n      }\n    }\n\n    jsxReadNewLine(normalizeCRLF: boolean): string {\n      const ch = this.input.charCodeAt(this.state.pos);\n      let out;\n      ++this.state.pos;\n      if (\n        ch === charCodes.carriageReturn &&\n        this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n      ) {\n        ++this.state.pos;\n        out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n      } else {\n        out = String.fromCharCode(ch);\n      }\n      ++this.state.curLine;\n      this.state.lineStart = this.state.pos;\n\n      return out;\n    }\n\n    jsxReadString(quote: number): void {\n      let out = \"\";\n      let chunkStart = ++this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(Errors.UnterminatedString, this.state.startLoc);\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n        if (ch === quote) break;\n        if (ch === charCodes.ampersand) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n        } else if (isNewLine(ch)) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadNewLine(false);\n          chunkStart = this.state.pos;\n        } else {\n          ++this.state.pos;\n        }\n      }\n      out += this.input.slice(chunkStart, this.state.pos++);\n      this.finishToken(tt.string, out);\n    }\n\n    jsxReadEntity(): string {\n      const startPos = ++this.state.pos;\n      if (this.codePointAtPos(this.state.pos) === charCodes.numberSign) {\n        ++this.state.pos;\n\n        let radix = 10;\n        if (this.codePointAtPos(this.state.pos) === charCodes.lowercaseX) {\n          radix = 16;\n          ++this.state.pos;\n        }\n\n        const codePoint = this.readInt(\n          radix,\n          /* len */ undefined,\n          /* forceLen */ false,\n          /* allowNumSeparator */ \"bail\",\n        );\n        if (\n          codePoint !== null &&\n          this.codePointAtPos(this.state.pos) === charCodes.semicolon\n        ) {\n          ++this.state.pos;\n          return String.fromCodePoint(codePoint);\n        }\n      } else {\n        let count = 0;\n        let semi = false;\n        while (\n          count++ < 10 &&\n          this.state.pos < this.length &&\n          !(semi = this.codePointAtPos(this.state.pos) === charCodes.semicolon)\n        ) {\n          ++this.state.pos;\n        }\n\n        if (semi) {\n          const desc = this.input.slice(startPos, this.state.pos);\n          const entity = XHTMLEntities[desc];\n          ++this.state.pos;\n\n          if (entity) {\n            return entity;\n          }\n        }\n      }\n\n      // Not a valid entity\n      this.state.pos = startPos;\n      return \"&\";\n    }\n\n    // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can\"t contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n    jsxReadWord(): void {\n      let ch;\n      const start = this.state.pos;\n      do {\n        ch = this.input.charCodeAt(++this.state.pos);\n      } while (isIdentifierChar(ch) || ch === charCodes.dash);\n      this.finishToken(tt.jsxName, this.input.slice(start, this.state.pos));\n    }\n\n    // Parse next token as JSX identifier\n\n    jsxParseIdentifier(): N.JSXIdentifier {\n      const node = this.startNode<N.JSXIdentifier>();\n      if (this.match(tt.jsxName)) {\n        node.name = this.state.value;\n      } else if (tokenIsKeyword(this.state.type)) {\n        node.name = tokenLabelName(this.state.type);\n      } else {\n        this.unexpected();\n      }\n      this.next();\n      return this.finishNode(node, \"JSXIdentifier\");\n    }\n\n    // Parse namespaced identifier.\n\n    jsxParseNamespacedName(): N.JSXNamespacedName | N.JSXIdentifier {\n      const startLoc = this.state.startLoc;\n      const name = this.jsxParseIdentifier();\n      if (!this.eat(tt.colon)) return name;\n\n      const node = this.startNodeAt<N.JSXNamespacedName>(startLoc);\n      node.namespace = name;\n      node.name = this.jsxParseIdentifier();\n      return this.finishNode(node, \"JSXNamespacedName\");\n    }\n\n    // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n    jsxParseElementName():\n      | N.JSXIdentifier\n      | N.JSXNamespacedName\n      | N.JSXMemberExpression {\n      const startLoc = this.state.startLoc;\n      let node: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression =\n        this.jsxParseNamespacedName();\n      if (node.type === \"JSXNamespacedName\") {\n        return node;\n      }\n      while (this.eat(tt.dot)) {\n        const newNode = this.startNodeAt<N.JSXMemberExpression>(startLoc);\n        newNode.object = node;\n        newNode.property = this.jsxParseIdentifier();\n        node = this.finishNode(newNode, \"JSXMemberExpression\");\n      }\n      return node;\n    }\n\n    // Parses any type of JSX attribute value.\n\n    jsxParseAttributeValue():\n      | N.JSXExpressionContainer\n      | N.JSXElement\n      | N.StringLiteral {\n      let node;\n      switch (this.state.type) {\n        case tt.braceL:\n          node = this.startNode();\n          this.setContext(tc.brace);\n          this.next();\n          node = this.jsxParseExpressionContainer(node, tc.j_oTag);\n          if (node.expression.type === \"JSXEmptyExpression\") {\n            this.raise(JsxErrors.AttributeIsEmpty, node);\n          }\n          return node;\n\n        case tt.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom() as N.JSXElement | N.StringLiteral;\n\n        default:\n          throw this.raise(JsxErrors.UnsupportedJsxValue, this.state.startLoc);\n      }\n    }\n\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n    jsxParseEmptyExpression(): N.JSXEmptyExpression {\n      const node = this.startNodeAt(this.state.lastTokEndLoc);\n      return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.startLoc);\n    }\n\n    // Parse JSX spread child\n\n    jsxParseSpreadChild(node: Undone<N.JSXSpreadChild>): N.JSXSpreadChild {\n      this.next(); // ellipsis\n      node.expression = this.parseExpression();\n      this.setContext(tc.j_expr);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXSpreadChild\");\n    }\n\n    // Parses JSX expression enclosed into curly brackets.\n\n    jsxParseExpressionContainer(\n      node: Undone<N.JSXExpressionContainer>,\n      previousContext: TokContext,\n    ): N.JSXExpressionContainer {\n      if (this.match(tt.braceR)) {\n        node.expression = this.jsxParseEmptyExpression();\n      } else {\n        const expression = this.parseExpression();\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            expression.type === \"SequenceExpression\" &&\n            !expression.extra?.parenthesized\n          ) {\n            this.raise(\n              JsxErrors.UnexpectedSequenceExpression,\n              expression.expressions[1],\n            );\n          }\n        }\n\n        node.expression = expression;\n      }\n      this.setContext(previousContext);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXExpressionContainer\");\n    }\n\n    // Parses following JSX attribute name-value pair.\n\n    jsxParseAttribute(): N.JSXAttribute | N.JSXSpreadAttribute {\n      const node = this.startNode<N.JSXAttribute | N.JSXSpreadAttribute>();\n      if (this.match(tt.braceL)) {\n        this.setContext(tc.brace);\n        this.next();\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssignAllowIn();\n        this.setContext(tc.j_oTag);\n        this.state.canStartJSXElement = true;\n        this.expect(tt.braceR);\n        return this.finishNode(node, \"JSXSpreadAttribute\");\n      }\n      node.name = this.jsxParseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n      return this.finishNode(node, \"JSXAttribute\");\n    }\n\n    // Parses JSX opening tag starting after \"<\".\n\n    jsxParseOpeningElementAt(\n      startLoc: Position,\n    ): N.JSXOpeningElement | N.JSXOpeningFragment {\n      const node = this.startNodeAt<N.JSXOpeningElement | N.JSXOpeningFragment>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXOpeningFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      return this.jsxParseOpeningElementAfterName(\n        node as Undone<N.JSXOpeningElement>,\n      );\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: Undone<N.JSXOpeningElement>,\n    ): N.JSXOpeningElement {\n      const attributes: (N.JSXAttribute | N.JSXSpreadAttribute)[] = [];\n      while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n        attributes.push(this.jsxParseAttribute());\n      }\n      node.attributes = attributes;\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningElement\");\n    }\n\n    // Parses JSX closing tag starting after \"</\".\n\n    jsxParseClosingElementAt(\n      startLoc: Position,\n    ): N.JSXClosingElement | N.JSXClosingFragment {\n      const node = this.startNodeAt<N.JSXClosingFragment | N.JSXClosingElement>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXClosingFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingElement\");\n    }\n\n    // Parses entire JSX element, including it\"s opening tag\n    // (starting after \"<\"), attributes, contents and closing tag.\n\n    jsxParseElementAt(startLoc: Position): N.JSXElement | N.JSXFragment {\n      const node = this.startNodeAt<N.JSXElement | N.JSXFragment>(startLoc);\n      const children = [];\n      const openingElement = this.jsxParseOpeningElementAt(startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.state.type) {\n            case tt.jsxTagStart:\n              startLoc = this.state.startLoc;\n              this.next();\n              if (this.eat(tt.slash)) {\n                closingElement = this.jsxParseClosingElementAt(startLoc);\n                break contents;\n              }\n              children.push(this.jsxParseElementAt(startLoc));\n              break;\n\n            case tt.jsxText:\n              children.push(this.parseLiteral(this.state.value, \"JSXText\"));\n              break;\n\n            case tt.braceL: {\n              const node = this.startNode<\n                N.JSXSpreadChild | N.JSXExpressionContainer\n              >();\n              this.setContext(tc.brace);\n              this.next();\n              if (this.match(tt.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(\n                  this.jsxParseExpressionContainer(node, tc.j_expr),\n                );\n              }\n\n              break;\n            }\n            // istanbul ignore next - should never happen\n            default:\n              this.unexpected();\n          }\n        }\n\n        if (\n          isFragment(openingElement) &&\n          !isFragment(closingElement) &&\n          closingElement !== null\n        ) {\n          this.raise(JsxErrors.MissingClosingTagFragment, closingElement);\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n          this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n            openingTagName: getQualifiedJSXName(openingElement.name),\n          });\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n          if (\n            getQualifiedJSXName(closingElement.name) !==\n            getQualifiedJSXName(openingElement.name)\n          ) {\n            this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n              openingTagName: getQualifiedJSXName(openingElement.name),\n            });\n          }\n        }\n      }\n\n      if (isFragment(openingElement)) {\n        node.openingFragment = openingElement;\n        node.closingFragment = closingElement;\n      } else {\n        node.openingElement = openingElement;\n        node.closingElement = closingElement;\n      }\n      node.children = children;\n      if (this.match(tt.lt)) {\n        throw this.raise(\n          JsxErrors.UnwrappedAdjacentJSXElements,\n          this.state.startLoc,\n        );\n      }\n\n      return isFragment(openingElement)\n        ? this.finishNode(node, \"JSXFragment\")\n        : this.finishNode(node, \"JSXElement\");\n    }\n\n    // Parses entire JSX element from current position.\n\n    jsxParseElement(): N.JSXElement | N.JSXFragment {\n      const startLoc = this.state.startLoc;\n      this.next();\n      return this.jsxParseElementAt(startLoc);\n    }\n\n    setContext(newContext: TokContext) {\n      const { context } = this.state;\n      context[context.length - 1] = newContext;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      if (this.match(tt.jsxTagStart)) {\n        return this.jsxParseElement();\n      } else if (\n        this.match(tt.lt) &&\n        this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n      ) {\n        // In case we encounter an lt token here it will always be the start of\n        // jsx as the lt sign is not allowed in places that expect an expression\n        this.replaceToken(tt.jsxTagStart);\n        return this.jsxParseElement();\n      } else {\n        return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    skipSpace() {\n      const curContext = this.curContext();\n      if (!curContext.preserveSpace) super.skipSpace();\n    }\n\n    getTokenFromCode(code: number): void {\n      const context = this.curContext();\n\n      if (context === tc.j_expr) {\n        this.jsxReadToken();\n        return;\n      }\n\n      if (context === tc.j_oTag || context === tc.j_cTag) {\n        if (isIdentifierStart(code)) {\n          this.jsxReadWord();\n          return;\n        }\n\n        if (code === charCodes.greaterThan) {\n          ++this.state.pos;\n          this.finishToken(tt.jsxTagEnd);\n          return;\n        }\n\n        if (\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n          context === tc.j_oTag\n        ) {\n          this.jsxReadString(code);\n          return;\n        }\n      }\n\n      if (\n        code === charCodes.lessThan &&\n        this.state.canStartJSXElement &&\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n      ) {\n        ++this.state.pos;\n        this.finishToken(tt.jsxTagStart);\n        return;\n      }\n\n      super.getTokenFromCode(code);\n    }\n\n    updateContext(prevType: TokenType): void {\n      const { context, type } = this.state;\n      if (type === tt.slash && prevType === tt.jsxTagStart) {\n        // do not consider JSX expr -> JSX open tag -> ... anymore\n        // reconsider as closing tag context\n        context.splice(-2, 2, tc.j_cTag);\n        this.state.canStartJSXElement = false;\n      } else if (type === tt.jsxTagStart) {\n        // start opening tag context\n        context.push(tc.j_oTag);\n      } else if (type === tt.jsxTagEnd) {\n        const out = context[context.length - 1];\n        if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n          context.pop();\n          this.state.canStartJSXElement =\n            context[context.length - 1] === tc.j_expr;\n        } else {\n          this.setContext(tc.j_expr);\n          this.state.canStartJSXElement = true;\n        }\n      } else {\n        this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n      }\n    }\n  };\n", "import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\nimport { Errors } from \"../../parse-error.ts\";\n\nconst enum TsNameType {\n  Types = 1 << 0,\n  // enums (which are also in .types)\n  Enums = 1 << 1,\n  // const enums (which are also in .enums and .types)\n  ConstEnums = 1 << 2,\n  // classes (which are also in .lexical) and interface (which are also in .types)\n  Classes = 1 << 3,\n  // namespaces and ambient functions (or classes) are too difficult to track,\n  // especially without type analysis.\n  // We need to track them anyway, to avoid \"X is not defined\" errors\n  // when exporting them.\n  ExportOnlyBindings = 1 << 4,\n}\n\nclass TypeScriptScope extends Scope {\n  tsNames: Map<string, TsNameType> = new Map();\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n  importsStack: Set<string>[] = [];\n\n  createScope(flags: ScopeFlag): TypeScriptScope {\n    this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\n\n    return new TypeScriptScope(flags);\n  }\n\n  enter(flags: ScopeFlag): void {\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.push(new Set());\n    }\n\n    super.enter(flags);\n  }\n\n  exit() {\n    const flags = super.exit();\n\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.pop();\n    }\n\n    return flags;\n  }\n\n  hasImport(name: string, allowShadow?: boolean) {\n    const len = this.importsStack.length;\n    if (this.importsStack[len - 1].has(name)) {\n      return true;\n    }\n    if (!allowShadow && len > 1) {\n      for (let i = 0; i < len - 1; i++) {\n        if (this.importsStack[i].has(name)) return true;\n      }\n    }\n    return false;\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    if (bindingType & BindingFlag.FLAG_TS_IMPORT) {\n      if (this.hasImport(name, true)) {\n        this.parser.raise(Errors.VarRedeclaration, loc, {\n          identifierName: name,\n        });\n      }\n      this.importsStack[this.importsStack.length - 1].add(name);\n      return;\n    }\n\n    const scope = this.currentScope();\n    let type = scope.tsNames.get(name) || 0;\n\n    if (bindingType & BindingFlag.FLAG_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.tsNames.set(name, type | TsNameType.ExportOnlyBindings);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n\n    if (bindingType & BindingFlag.KIND_TYPE) {\n      if (!(bindingType & BindingFlag.KIND_VALUE)) {\n        // \"Value\" bindings have already been registered by the superclass.\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        this.maybeExportDefined(scope, name);\n      }\n      type = type | TsNameType.Types;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n      type = type | TsNameType.Enums;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_CONST_ENUM) {\n      type = type | TsNameType.ConstEnums;\n    }\n    if (bindingType & BindingFlag.FLAG_CLASS) {\n      type = type | TsNameType.Classes;\n    }\n    if (type) scope.tsNames.set(name, type);\n  }\n\n  isRedeclaredInScope(\n    scope: TypeScriptScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    const type = scope.tsNames.get(name);\n    if ((type & TsNameType.Enums) > 0) {\n      if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n        // Enums can be merged with other enums if they are both\n        //  const or both non-const.\n        const isConst = !!(bindingType & BindingFlag.FLAG_TS_CONST_ENUM);\n        const wasConst = (type & TsNameType.ConstEnums) > 0;\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (\n      bindingType & BindingFlag.FLAG_CLASS &&\n      (type & TsNameType.Classes) > 0\n    ) {\n      if (scope.names.get(name) & NameType.Lexical) {\n        // Classes can be merged with interfaces\n        return !!(bindingType & BindingFlag.KIND_VALUE);\n      } else {\n        // Interface can be merged with other classes or interfaces\n        return false;\n      }\n    }\n    if (bindingType & BindingFlag.KIND_TYPE && (type & TsNameType.Types) > 0) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(scope, name, bindingType);\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n\n    if (this.hasImport(name)) return;\n\n    const len = this.scopeStack.length;\n    for (let i = len - 1; i >= 0; i--) {\n      const scope = this.scopeStack[i];\n      const type = scope.tsNames.get(name);\n      if (\n        (type & TsNameType.Types) > 0 ||\n        (type & TsNameType.ExportOnlyBindings) > 0\n      ) {\n        return;\n      }\n    }\n\n    super.checkLocalExport(id);\n  }\n}\n", "import * as charCodes from \"charcodes\";\nimport { tt, type TokenType } from \"../tokenizer/types.ts\";\nimport type {\n  AssignmentPattern,\n  TSParameterProperty,\n  Decorator,\n  Expression,\n  Identifier,\n  Node,\n  Pattern,\n  RestElement,\n  SpreadElement,\n  ObjectOrClassMember,\n  ClassMember,\n  ObjectMember,\n  TsNamedTypeElementBase,\n  PrivateName,\n  ObjectExpression,\n  ObjectPattern,\n  ArrayPattern,\n  AssignmentProperty,\n  Assignable,\n} from \"../types.ts\";\nimport type { Pos, Position } from \"../util/location.ts\";\nimport {\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n} from \"../util/identifier.ts\";\nimport { NodeUtils, type Undone } from \"./node.ts\";\nimport { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"./util.ts\";\nimport { Errors, type LValAncestor } from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nconst unwrapParenthesizedExpression = (node: Node): Node => {\n  return node.type === \"ParenthesizedExpression\"\n    ? unwrapParenthesizedExpression(node.expression)\n    : node;\n};\n\nexport const enum ParseBindingListFlags {\n  ALLOW_EMPTY = 1 << 0,\n  IS_FUNCTION_PARAMS = 1 << 1,\n  IS_CONSTRUCTOR_PARAMS = 1 << 2,\n}\n\nexport default abstract class LValParser extends NodeUtils {\n  // Forward-declaration: defined in expression.js\n  abstract parseIdentifier(liberal?: boolean): Identifier;\n  abstract parseMaybeAssign(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: Pos | null,\n  ): Expression;\n\n  abstract parseMaybeAssignAllowIn(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: Pos | null,\n  ): Expression;\n\n  abstract parseObjectLike<T extends ObjectPattern | ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): T;\n  abstract parseObjPropValue(\n    prop: any,\n    startLoc: Position | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void;\n  abstract parsePropertyName(\n    prop: ObjectOrClassMember | ClassMember | TsNamedTypeElementBase,\n  ): void;\n  abstract parsePrivateName(): PrivateName;\n  // Forward-declaration: defined in statement.js\n  abstract parseDecorator(): Decorator;\n\n  /**\n   * Convert existing expression atom to assignable pattern\n   * if possible. Also checks invalid destructuring targets:\n   *\n   * - Parenthesized Destructuring patterns\n   * - RestElement is not the last element\n   * - Missing `=` in assignment pattern\n   *\n   * NOTE: There is a corresponding \"isAssignable\" method.\n   * When this one is updated, please check if also that one needs to be updated.\n   *\n   * @param node The expression atom\n   * @param isLHS Whether we are parsing a LeftHandSideExpression.\n   *              If isLHS is `true`, the following cases are allowed: `[(a)] = [0]`, `[(a.b)] = [0]`\n   *              If isLHS is `false`, we are in an arrow function parameters list.\n   */\n  toAssignable(node: Node, isLHS: boolean = false): asserts node is Assignable {\n    let parenthesized = undefined;\n    if (node.type === \"ParenthesizedExpression\" || node.extra?.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n      if (isLHS) {\n        // an LHS can be reinterpreted to a binding pattern but not vice versa.\n        // therefore a parenthesized identifier is ambiguous until we are sure it is an assignment expression\n        // i.e. `([(a) = []] = []) => {}`\n        // see also `recordArrowParameterBindingError` signature in packages/babel-parser/src/util/expression-scope.js\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordArrowParameterBindingError(\n            Errors.InvalidParenthesizedAssignment,\n            node,\n          );\n        } else if (\n          parenthesized.type !== \"MemberExpression\" &&\n          !this.isOptionalMemberExpression(parenthesized)\n        ) {\n          // A parenthesized member expression can be in LHS but not in pattern.\n          // If the LHS is later interpreted as a pattern, `checkLVal` will throw for member expression binding\n          // i.e. `([(a.b) = []] = []) => {}`\n          this.raise(Errors.InvalidParenthesizedAssignment, node);\n        }\n      } else {\n        this.raise(Errors.InvalidParenthesizedAssignment, node);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        break;\n\n      case \"ObjectExpression\":\n        (node as Node).type = \"ObjectPattern\";\n        for (\n          let i = 0, length = node.properties.length, last = length - 1;\n          i < length;\n          i++\n        ) {\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n          if (\n            isLast &&\n            (prop as Node).type === \"RestElement\" &&\n            node.extra?.trailingCommaLoc\n          ) {\n            this.raise(Errors.RestTrailingComma, node.extra.trailingCommaLoc);\n          }\n        }\n        break;\n\n      case \"ObjectProperty\": {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n        break;\n      }\n\n      case \"SpreadElement\": {\n        throw new Error(\n          \"Internal @babel/parser error (this is a bug, please report it).\" +\n            \" SpreadElement should be converted by .toAssignable's caller.\",\n        );\n      }\n\n      case \"ArrayExpression\":\n        (node as Node).type = \"ArrayPattern\";\n        this.toAssignableList(\n          node.elements,\n          node.extra?.trailingCommaLoc,\n          isLHS,\n        );\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(Errors.MissingEqInAssignment, node.left.loc.end);\n        }\n\n        (node as Node).type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        /*::invariant (parenthesized !== undefined) */\n        this.toAssignable(parenthesized, isLHS);\n        break;\n\n      default:\n      // We don't know how to deal with this node. It will\n      // be reported by a later call to checkLVal\n    }\n  }\n\n  toAssignableObjectExpressionProp(\n    prop: Node,\n    isLast: boolean,\n    isLHS: boolean,\n  ) {\n    if (prop.type === \"ObjectMethod\") {\n      this.raise(\n        prop.kind === \"get\" || prop.kind === \"set\"\n          ? Errors.PatternHasAccessor\n          : Errors.PatternHasMethod,\n        prop.key,\n      );\n    } else if (prop.type === \"SpreadElement\") {\n      (prop as Node).type = \"RestElement\";\n      const arg = prop.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ false);\n      this.toAssignable(arg, isLHS);\n\n      if (!isLast) {\n        this.raise(Errors.RestTrailingComma, prop);\n      }\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n\n  // Convert list of expression atoms to binding list.\n\n  toAssignableList(\n    exprList: (Expression | SpreadElement | RestElement)[],\n    trailingCommaLoc: Position | undefined | null,\n    isLHS: boolean,\n  ): void {\n    const end = exprList.length - 1;\n\n    for (let i = 0; i <= end; i++) {\n      const elt = exprList[i];\n      if (!elt) continue;\n\n      if (elt.type === \"SpreadElement\") {\n        (elt as unknown as RestElement).type = \"RestElement\";\n        const arg = elt.argument;\n        this.checkToRestConversion(arg, /* allowPattern */ true);\n        this.toAssignable(arg, isLHS);\n      } else {\n        this.toAssignable(elt, isLHS);\n      }\n\n      if (elt.type === \"RestElement\") {\n        if (i < end) {\n          this.raise(Errors.RestTrailingComma, elt);\n        } else if (trailingCommaLoc) {\n          this.raise(Errors.RestTrailingComma, trailingCommaLoc);\n        }\n      }\n    }\n  }\n\n  isAssignable(node: Node, isBinding?: boolean): boolean {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        return true;\n\n      case \"ObjectExpression\": {\n        const last = node.properties.length - 1;\n        return node.properties.every((prop, i) => {\n          return (\n            prop.type !== \"ObjectMethod\" &&\n            (i === last || prop.type !== \"SpreadElement\") &&\n            this.isAssignable(prop)\n          );\n        });\n      }\n\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n\n      case \"ArrayExpression\":\n        return node.elements.every(\n          element => element === null || this.isAssignable(element),\n        );\n\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n\n      default:\n        return false;\n    }\n  }\n\n  // Convert list of expression atoms to a list of\n\n  toReferencedList(\n    exprList:\n      | ReadonlyArray<Expression | SpreadElement>\n      | ReadonlyArray<Expression | RestElement>,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isParenthesizedExpr?: boolean,\n  ):\n    | ReadonlyArray<Expression | SpreadElement>\n    | ReadonlyArray<Expression | RestElement> {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList:\n      | ReadonlyArray<Expression | SpreadElement>\n      | ReadonlyArray<Expression | RestElement>,\n    isParenthesizedExpr?: boolean,\n  ): void {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if (expr?.type === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  // Parses spread element.\n\n  parseSpread(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): SpreadElement {\n    const node = this.startNode<SpreadElement>();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(\n      refExpressionErrors,\n      undefined,\n    );\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  // https://tc39.es/ecma262/#prod-BindingRestElement\n  parseRestBinding(this: Parser): RestElement {\n    const node = this.startNode<RestElement>();\n    this.next(); // eat `...`\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  // Parses lvalue (assignable) atom.\n  parseBindingAtom(this: Parser): Pattern {\n    // https://tc39.es/ecma262/#prod-BindingPattern\n    switch (this.state.type) {\n      case tt.bracketL: {\n        const node = this.startNode<ArrayPattern>();\n        this.next();\n        // @ts-expect-error: Fixme: TSParameterProperty can not be assigned to node.elements\n        node.elements = this.parseBindingList(\n          tt.bracketR,\n          charCodes.rightSquareBracket,\n          ParseBindingListFlags.ALLOW_EMPTY,\n        );\n        return this.finishNode(node, \"ArrayPattern\");\n      }\n\n      case tt.braceL:\n        return this.parseObjectLike(tt.braceR, true);\n    }\n\n    // https://tc39.es/ecma262/#prod-BindingIdentifier\n    return this.parseIdentifier();\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElementList\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags,\n  ): Array<Pattern | TSParameterProperty> {\n    const allowEmpty = flags & ParseBindingListFlags.ALLOW_EMPTY;\n\n    const elts: Array<Pattern | TSParameterProperty> = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n      }\n      if (allowEmpty && this.match(tt.comma)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(tt.ellipsis)) {\n        elts.push(\n          this.parseAssignableListItemTypes(this.parseRestBinding(), flags),\n        );\n        if (!this.checkCommaAfterRest(closeCharCode)) {\n          this.expect(close);\n          break;\n        }\n      } else {\n        const decorators = [];\n        if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n          this.raise(Errors.UnsupportedParameterDecorator, this.state.startLoc);\n        }\n        // invariant: hasPlugin(\"decorators-legacy\")\n        while (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n        }\n        elts.push(this.parseAssignableListItem(flags, decorators));\n      }\n    }\n    return elts;\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  parseBindingRestProperty(\n    this: Parser,\n    prop: Undone<RestElement>,\n  ): RestElement {\n    this.next(); // eat '...'\n    // Don't use parseRestBinding() as we only allow Identifier here.\n    prop.argument = this.parseIdentifier();\n    this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n    return this.finishNode(prop, \"RestElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingProperty\n  parseBindingProperty(this: Parser): AssignmentProperty | RestElement {\n    const { type, startLoc } = this.state;\n    if (type === tt.ellipsis) {\n      return this.parseBindingRestProperty(this.startNode());\n    }\n\n    const prop = this.startNode<AssignmentProperty>();\n    if (type === tt.privateName) {\n      this.expectPlugin(\"destructuringPrivate\", startLoc);\n      this.classScope.usePrivateName(this.state.value, startLoc);\n      prop.key = this.parsePrivateName();\n    } else {\n      this.parsePropertyName(prop);\n    }\n    prop.method = false;\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      false /* isGenerator */,\n      false /* isAsync */,\n      true /* isPattern */,\n      false /* isAccessor */,\n    );\n  }\n\n  parseAssignableListItem(\n    this: Parser,\n    flags: ParseBindingListFlags,\n    decorators: Decorator[],\n  ): Pattern | TSParameterProperty {\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left, flags);\n    const elt = this.parseMaybeDefault(left.loc.start, left);\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n    return elt;\n  }\n\n  // Used by flow/typescript plugin to add type annotations to binding elements\n  parseAssignableListItemTypes(\n    param: Pattern,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    flags: ParseBindingListFlags,\n  ): Pattern {\n    return param;\n  }\n\n  // Parses assignment pattern around given atom if possible.\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseMaybeDefault(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: Pattern | null,\n  ): Pattern {\n    startLoc ??= this.state.startLoc;\n    left = left ?? this.parseBindingAtom();\n    if (!this.eat(tt.eq)) return left;\n\n    const node = this.startNodeAt<AssignmentPattern>(startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n  /**\n   * Return information use in determining whether a Node of a given type is an LVal,\n   * possibly given certain additional context information.\n   *\n   * Subclasser notes: This method has kind of a lot of mixed, but related,\n   * responsibilities. If we can definitively determine with the information\n   * provided that this either *is* or *isn't* a valid `LVal`, then the return\n   * value is easy: just return `true` or `false`. However, if it is a valid\n   * LVal *ancestor*, and thus its descendants must be subsequently visited to\n   * continue the \"investigation\", then this method should return the relevant\n   * child key as a `string`. In some special cases, you additionally want to\n   * convey that this node should be treated as if it were parenthesized. In\n   * that case, a tuple of [key: string, parenthesized: boolean] is returned.\n   * The `string`-only return option is actually just a shorthand for:\n   * `[key: string, parenthesized: false]`.\n   *\n   * @param type A Node `type` string\n   * @param isUnparenthesizedInAssign\n   *        Whether the node in question is unparenthesized and its parent\n   *        is either an assignment pattern or an assignment expression.\n   * @param binding\n   *        The binding operation that is being considered for this potential\n   *        LVal.\n   * @returns `true` or `false` if we can immediately determine whether the node\n   *          type in question can be treated as an `LVal`.\n   *          A `string` key to traverse if we must check this child.\n   *          A `[string, boolean]` tuple if we need to check this child and\n   *          treat is as parenthesized.\n   */\n  isValidLVal(\n    type: string,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isUnparenthesizedInAssign: boolean,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    binding: BindingFlag,\n  ): string | boolean | [string, boolean] {\n    switch (type) {\n      case \"AssignmentPattern\":\n        return \"left\";\n      case \"RestElement\":\n        return \"argument\";\n      case \"ObjectProperty\":\n        return \"value\";\n      case \"ParenthesizedExpression\":\n        return \"expression\";\n      case \"ArrayPattern\":\n        return \"elements\";\n      case \"ObjectPattern\":\n        return \"properties\";\n    }\n    return false;\n  }\n\n  // Overridden by the estree plugin\n  isOptionalMemberExpression(expression: Node): boolean {\n    return expression.type === \"OptionalMemberExpression\";\n  }\n\n  /**\n   * Verify that a target expression is an lval (something that can be assigned to).\n   *\n   * @param expression The expression in question to check.\n   * @param ancestor\n   *        The relevant ancestor to provide context information for the error\n   *        if the check fails.\n   * @param binding\n   *        The desired binding type. If the given expression is an identifier\n   *        and `binding` is not `BindingFlag.TYPE_NONE`, `checkLVal` will register binding\n   *        to the parser scope See also `src/util/scopeflags.js`\n   * @param checkClashes\n   *        An optional string set to check if an identifier name is included.\n   *        `checkLVal` will add checked identifier name to `checkClashes` It is\n   *        used in tracking duplicates in function parameter lists. If it is\n   *        false, `checkLVal` will skip duplicate checks\n   * @param strictModeChanged\n   *        Whether an identifier has been parsed in a sloppy context but should\n   *        be reinterpreted as strict-mode. e.g. `(arguments) => { \"use strict \"}`\n   * @param hasParenthesizedAncestor\n   *        This is only used internally during recursive calls, and you should\n   *        not have to set it yourself.\n   */\n\n  checkLVal(\n    expression:\n      | Expression\n      | ObjectMember\n      | RestElement\n      | Pattern\n      | TSParameterProperty,\n    ancestor: LValAncestor,\n    binding: BindingFlag = BindingFlag.TYPE_NONE,\n    checkClashes: Set<string> | false = false,\n    strictModeChanged: boolean = false,\n    hasParenthesizedAncestor: boolean = false,\n  ): void {\n    const type = expression.type;\n\n    // If we find here an ObjectMethod, it's because this was originally\n    // an ObjectExpression which has then been converted.\n    // toAssignable already reported this error with a nicer message.\n    if (this.isObjectMethod(expression)) return;\n\n    const isOptionalMemberExpression =\n      this.isOptionalMemberExpression(expression);\n\n    if (isOptionalMemberExpression || type === \"MemberExpression\") {\n      if (isOptionalMemberExpression) {\n        this.expectPlugin(\"optionalChainingAssign\", expression.loc.start);\n        if (ancestor.type !== \"AssignmentExpression\") {\n          this.raise(Errors.InvalidLhsOptionalChaining, expression, {\n            ancestor,\n          });\n        }\n      }\n\n      if (binding !== BindingFlag.TYPE_NONE) {\n        this.raise(Errors.InvalidPropertyBindingPattern, expression);\n      }\n      return;\n    }\n\n    if (type === \"Identifier\") {\n      this.checkIdentifier(expression, binding, strictModeChanged);\n\n      const { name } = expression;\n\n      if (checkClashes) {\n        if (checkClashes.has(name)) {\n          this.raise(Errors.ParamDupe, expression);\n        } else {\n          checkClashes.add(name);\n        }\n      }\n\n      return;\n    }\n\n    const validity = this.isValidLVal(\n      type,\n      !(hasParenthesizedAncestor || expression.extra?.parenthesized) &&\n        ancestor.type === \"AssignmentExpression\",\n      binding,\n    );\n\n    if (validity === true) return;\n    if (validity === false) {\n      const ParseErrorClass =\n        binding === BindingFlag.TYPE_NONE\n          ? Errors.InvalidLhs\n          : Errors.InvalidLhsBinding;\n\n      this.raise(ParseErrorClass, expression, { ancestor });\n      return;\n    }\n\n    let key: string, isParenthesizedExpression: boolean;\n    if (typeof validity === \"string\") {\n      key = validity;\n      isParenthesizedExpression = type === \"ParenthesizedExpression\";\n    } else {\n      [key, isParenthesizedExpression] = validity;\n    }\n\n    const nextAncestor =\n      type === \"ArrayPattern\" || type === \"ObjectPattern\"\n        ? ({ type } as const)\n        : ancestor;\n\n    // @ts-expect-error key may not index expression.\n    const val = expression[key];\n    if (Array.isArray(val)) {\n      for (const child of val) {\n        if (child) {\n          this.checkLVal(\n            child,\n            nextAncestor,\n            binding,\n            checkClashes,\n            strictModeChanged,\n            isParenthesizedExpression,\n          );\n        }\n      }\n    } else if (val) {\n      this.checkLVal(\n        val,\n        nextAncestor,\n        binding,\n        checkClashes,\n        strictModeChanged,\n        isParenthesizedExpression,\n      );\n    }\n  }\n\n  checkIdentifier(\n    at: Identifier,\n    bindingType: BindingFlag,\n    strictModeChanged: boolean = false,\n  ) {\n    if (\n      this.state.strict &&\n      (strictModeChanged\n        ? isStrictBindReservedWord(at.name, this.inModule)\n        : isStrictBindOnlyReservedWord(at.name))\n    ) {\n      if (bindingType === BindingFlag.TYPE_NONE) {\n        this.raise(Errors.StrictEvalArguments, at, { referenceName: at.name });\n      } else {\n        this.raise(Errors.StrictEvalArgumentsBinding, at, {\n          bindingName: at.name,\n        });\n      }\n    }\n\n    if (bindingType & BindingFlag.FLAG_NO_LET_IN_LEXICAL && at.name === \"let\") {\n      this.raise(Errors.LetInLexicalBinding, at);\n    }\n\n    if (!(bindingType & BindingFlag.TYPE_NONE)) {\n      this.declareNameFromIdentifier(at, bindingType);\n    }\n  }\n\n  declareNameFromIdentifier(identifier: Identifier, binding: BindingFlag) {\n    this.scope.declareName(identifier.name, binding, identifier.loc.start);\n  }\n\n  checkToRestConversion(node: Node, allowPattern: boolean): void {\n    switch (node.type) {\n      case \"ParenthesizedExpression\":\n        this.checkToRestConversion(node.expression, allowPattern);\n        break;\n      case \"Identifier\":\n      case \"MemberExpression\":\n        break;\n      case \"ArrayExpression\":\n      case \"ObjectExpression\":\n        if (allowPattern) break;\n      /* falls through */\n      default:\n        this.raise(Errors.InvalidRestAssignmentPattern, node);\n    }\n  }\n\n  checkCommaAfterRest(\n    close: (typeof charCodes)[keyof typeof charCodes],\n  ): boolean {\n    if (!this.match(tt.comma)) {\n      return false;\n    }\n\n    this.raise(\n      this.lookaheadCharCode() === close\n        ? Errors.RestTrailingComma\n        : Errors.ElementAfterRest,\n      this.state.startLoc,\n    );\n\n    return true;\n  }\n}\n", "import type State from \"../../tokenizer/state.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsTSDeclarationStart,\n  tokenIsTSTypeOperator,\n  tokenOperatorPrecedence,\n  tokenIsKeywordOrIdentifier,\n  tt,\n  type TokenType,\n  tokenIsTemplate,\n  tokenCanStartExpression,\n} from \"../../tokenizer/types.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../../util/location.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport { ScopeFlag, BindingFlag } from \"../../util/scopeflags.ts\";\nimport TypeScriptScopeHandler from \"./scope.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { ParamKind } from \"../../util/production-parameter.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node.ts\";\nimport type { Pattern } from \"../../types.ts\";\nimport type { Expression } from \"../../types.ts\";\nimport type { IJSXParserMixin } from \"../jsx/index.ts\";\nimport { ParseBindingListFlags } from \"../../parser/lval.ts\";\n\ntype TsModifier =\n  | \"readonly\"\n  | \"abstract\"\n  | \"declare\"\n  | \"static\"\n  | \"override\"\n  | \"const\"\n  | N.Accessibility\n  | N.VarianceAnnotations;\n\nfunction nonNull<T>(x?: T | null): T {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n  return x;\n}\n\nfunction assert(x: boolean): void {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\ntype ParsingContext =\n  | \"EnumMembers\"\n  | \"HeritageClauseElement\"\n  | \"TupleElementTypes\"\n  | \"TypeMembers\"\n  | \"TypeParametersOrArguments\";\n\ntype ModifierBase = {\n  accessibility?: N.Accessibility;\n} & {\n  [key in TsModifier]?: boolean | undefined | null;\n};\n\n/* eslint sort-keys: \"error\" */\nconst TSErrors = ParseErrorEnum`typescript`({\n  AbstractMethodHasImplementation: ({ methodName }: { methodName: string }) =>\n    `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\n  AbstractPropertyHasInitializer: ({\n    propertyName,\n  }: {\n    propertyName: string;\n  }) =>\n    `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\n  AccessorCannotBeOptional:\n    \"An 'accessor' property cannot be declared optional.\",\n  AccessorCannotDeclareThisParameter:\n    \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccessorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n  ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n    \"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\",\n  ConstructorHasTypeParameters:\n    \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `'declare' is not allowed in ${kind}ters.`,\n  DeclareClassFieldHasInitializer:\n    \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation:\n    \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier:\n    // `Accessibility modifier already seen: ${modifier}` would be more helpful.\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ({ modifier }: { modifier: N.Accessibility }) =>\n      `Accessibility modifier already seen.`,\n  DuplicateModifier: ({ modifier }: { modifier: TsModifier }) =>\n    `Duplicate modifier: '${modifier}'.`,\n  // `token` matches the terminology used by typescript:\n  // https://github.com/microsoft/TypeScript/blob/main/src/compiler/types.ts#L2915\n  EmptyHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list cannot be empty.`,\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  ExpectedAmbientAfterExportDeclare:\n    \"'export declare' must be followed by an ambient declaration.\",\n  ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` modifier\",\n  IncompatibleModifiers: ({\n    modifiers,\n  }: {\n    modifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\n  IndexSignatureHasAbstract:\n    \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Index signatures cannot have an accessibility modifier ('${modifier}').`,\n  IndexSignatureHasDeclare:\n    \"Index signatures cannot have the 'declare' modifier.\",\n  IndexSignatureHasOverride:\n    \"'override' modifier cannot appear on an index signature.\",\n  IndexSignatureHasStatic:\n    \"Index signatures cannot have the 'static' modifier.\",\n  InitializerNotAllowedInAmbientContext:\n    \"Initializers are not allowed in ambient contexts.\",\n  InvalidModifierOnTypeMember: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type member.`,\n  InvalidModifierOnTypeParameter: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type parameter.`,\n  InvalidModifierOnTypeParameterPositions: ({\n    modifier,\n  }: {\n    modifier: TsModifier;\n  }) =>\n    `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\n  InvalidModifiersOrder: ({\n    orderedModifiers,\n  }: {\n    orderedModifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\n  InvalidPropertyAccessAfterInstantiationExpression:\n    \"Invalid property access after an instantiation expression. \" +\n    \"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\",\n  InvalidTupleMemberLabel:\n    \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName:\n    \"'interface' declarations must be followed by an identifier.\",\n  NonAbstractClassHasAbstractMethod:\n    \"Abstract methods can only appear within an abstract class.\",\n  NonClassMethodPropertyHasAbstractModifer:\n    \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n  OptionalTypeBeforeRequired:\n    \"A required element cannot follow an optional element.\",\n  OverrideNotInSubClass:\n    \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n  PatternIsOptional:\n    \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract:\n    \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Private elements cannot have an accessibility modifier ('${modifier}').`,\n  ReadonlyForMethodSignature:\n    \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  ReservedArrowTypeParam:\n    \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n  ReservedTypeAssertion:\n    \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n  SetAccessorCannotHaveOptionalParameter:\n    \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccessorCannotHaveRestParameter:\n    \"A 'set' accessor cannot have rest parameter.\",\n  SetAccessorCannotHaveReturnType:\n    \"A 'set' accessor cannot have a return type annotation.\",\n  SingleTypeParameterWithoutTrailingComma: ({\n    typeParameterName,\n  }: {\n    typeParameterName: string;\n  }) =>\n    `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\n  StaticBlockCannotHaveModifier:\n    \"Static class blocks cannot have any modifier.\",\n  TupleOptionalAfterType:\n    \"A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).\",\n  TypeAnnotationAfterAssign:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeImportCannotSpecifyDefaultAndNamed:\n    \"A type-only import can specify a default import or named bindings, but not both.\",\n  TypeModifierIsUsedInTypeExports:\n    \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n  TypeModifierIsUsedInTypeImports:\n    \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\n  UnexpectedParameterModifier:\n    \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly:\n    \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument:\n    \"Argument in a type import must be a string literal.\",\n  UnsupportedParameterPropertyKind:\n    \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: ({ type }: { type: string }) =>\n    `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`,\n});\n\n/* eslint-disable sort-keys */\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\n// It also doesn't handle \"intrinsic\", since usually it's not a keyword.\nfunction keywordTypeFromName(value: string): N.TsKeywordTypeType | undefined {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n    case \"never\":\n      return \"TSNeverKeyword\";\n    case \"number\":\n      return \"TSNumberKeyword\";\n    case \"object\":\n      return \"TSObjectKeyword\";\n    case \"string\":\n      return \"TSStringKeyword\";\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n    default:\n      return undefined;\n  }\n}\n\nfunction tsIsAccessModifier(modifier: string): modifier is N.Accessibility {\n  return (\n    modifier === \"private\" || modifier === \"public\" || modifier === \"protected\"\n  );\n}\n\nfunction tsIsVarianceAnnotations(\n  modifier: string,\n): modifier is N.VarianceAnnotations {\n  return modifier === \"in\" || modifier === \"out\";\n}\n\ntype ClassWithMixin<\n  T extends new (...args: any) => any,\n  M extends object,\n> = T extends new (...args: infer P) => infer I\n  ? new (...args: P) => I & M\n  : never;\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class TypeScriptParserMixin extends superClass implements Parser {\n    getScopeHandler(): new (...args: any) => TypeScriptScopeHandler {\n      return TypeScriptScopeHandler;\n    }\n\n    tsIsIdentifier(): boolean {\n      // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n      // See https://github.com/Microsoft/TypeScript/issues/15008\n      return tokenIsIdentifier(this.state.type);\n    }\n\n    tsTokenCanFollowModifier() {\n      return (\n        this.match(tt.bracketL) ||\n        this.match(tt.braceL) ||\n        this.match(tt.star) ||\n        this.match(tt.ellipsis) ||\n        this.match(tt.privateName) ||\n        this.isLiteralPropertyName()\n      );\n    }\n\n    tsNextTokenOnSameLineAndCanFollowModifier() {\n      this.next();\n      if (this.hasPrecedingLineBreak()) {\n        return false;\n      }\n      return this.tsTokenCanFollowModifier();\n    }\n\n    tsNextTokenCanFollowModifier() {\n      // Note: TypeScript's implementation is much more complicated because\n      // more things are considered modifiers there.\n      // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n      if (this.match(tt._static)) {\n        this.next();\n        return this.tsTokenCanFollowModifier();\n      }\n      return this.tsNextTokenOnSameLineAndCanFollowModifier();\n    }\n\n    /** Parses a modifier matching one the given modifier names. */\n    tsParseModifier<T extends TsModifier>(\n      allowedModifiers: T[],\n      stopOnStartOfClassStaticBlock?: boolean,\n    ): T | undefined | null {\n      if (\n        !tokenIsIdentifier(this.state.type) &&\n        this.state.type !== tt._in &&\n        this.state.type !== tt._const\n      ) {\n        return undefined;\n      }\n\n      const modifier = this.state.value;\n      if (allowedModifiers.includes(modifier)) {\n        if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n          return undefined;\n        }\n        if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n          return modifier;\n        }\n      }\n      return undefined;\n    }\n\n    /** Parses a list of modifiers, in any order.\n     *  If you need a specific order, you must call this function multiple times:\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"public\"] });\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"abstract\", \"readonly\"] });\n     */\n    tsParseModifiers<N extends ModifierBase>(\n      {\n        allowedModifiers,\n        disallowedModifiers,\n        stopOnStartOfClassStaticBlock,\n        errorTemplate = TSErrors.InvalidModifierOnTypeMember,\n      }: {\n        allowedModifiers: readonly TsModifier[];\n        disallowedModifiers?: TsModifier[];\n        stopOnStartOfClassStaticBlock?: boolean;\n        errorTemplate?: typeof TSErrors.InvalidModifierOnTypeMember;\n      },\n      modified: N,\n    ): void {\n      const enforceOrder = (\n        loc: Position,\n        modifier: TsModifier,\n        before: TsModifier,\n        after: TsModifier,\n      ) => {\n        if (modifier === before && modified[after]) {\n          this.raise(TSErrors.InvalidModifiersOrder, loc, {\n            orderedModifiers: [before, after],\n          });\n        }\n      };\n      const incompatible = (\n        loc: Position,\n        modifier: TsModifier,\n        mod1: TsModifier,\n        mod2: TsModifier,\n      ) => {\n        if (\n          (modified[mod1] && modifier === mod2) ||\n          (modified[mod2] && modifier === mod1)\n        ) {\n          this.raise(TSErrors.IncompatibleModifiers, loc, {\n            modifiers: [mod1, mod2],\n          });\n        }\n      };\n\n      for (;;) {\n        const { startLoc } = this.state;\n        const modifier: TsModifier | undefined | null = this.tsParseModifier(\n          allowedModifiers.concat(disallowedModifiers ?? []),\n          stopOnStartOfClassStaticBlock,\n        );\n\n        if (!modifier) break;\n\n        if (tsIsAccessModifier(modifier)) {\n          if (modified.accessibility) {\n            this.raise(TSErrors.DuplicateAccessibilityModifier, startLoc, {\n              modifier,\n            });\n          } else {\n            enforceOrder(startLoc, modifier, modifier, \"override\");\n            enforceOrder(startLoc, modifier, modifier, \"static\");\n            enforceOrder(startLoc, modifier, modifier, \"readonly\");\n\n            modified.accessibility = modifier;\n          }\n        } else if (tsIsVarianceAnnotations(modifier)) {\n          if (modified[modifier]) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          }\n          modified[modifier] = true;\n\n          enforceOrder(startLoc, modifier, \"in\", \"out\");\n        } else {\n          if (Object.hasOwn(modified, modifier)) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          } else {\n            enforceOrder(startLoc, modifier, \"static\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"static\", \"override\");\n            enforceOrder(startLoc, modifier, \"override\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"abstract\", \"override\");\n\n            incompatible(startLoc, modifier, \"declare\", \"override\");\n            incompatible(startLoc, modifier, \"static\", \"abstract\");\n          }\n          modified[modifier] = true;\n        }\n\n        if (disallowedModifiers?.includes(modifier)) {\n          this.raise(errorTemplate, startLoc, {\n            modifier,\n          });\n        }\n      }\n    }\n\n    tsIsListTerminator(kind: ParsingContext): boolean {\n      switch (kind) {\n        case \"EnumMembers\":\n        case \"TypeMembers\":\n          return this.match(tt.braceR);\n        case \"HeritageClauseElement\":\n          return this.match(tt.braceL);\n        case \"TupleElementTypes\":\n          return this.match(tt.bracketR);\n        case \"TypeParametersOrArguments\":\n          return this.match(tt.gt);\n      }\n    }\n\n    tsParseList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n    ): T[] {\n      const result: T[] = [];\n      while (!this.tsIsListTerminator(kind)) {\n        // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n        result.push(parseElement());\n      }\n      return result;\n    }\n\n    tsParseDelimitedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      return nonNull(\n        this.tsParseDelimitedListWorker(\n          kind,\n          parseElement,\n          /* expectSuccess */ true,\n          refTrailingCommaPos,\n        ),\n      );\n    }\n\n    /**\n     * If !expectSuccess, returns undefined instead of failing to parse.\n     * If expectSuccess, parseElement should always return a defined value.\n     */\n    tsParseDelimitedListWorker<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T | undefined,\n      expectSuccess: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] | undefined {\n      const result: T[] = [];\n      let trailingCommaPos = -1;\n\n      for (;;) {\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n        trailingCommaPos = -1;\n\n        const element = parseElement();\n        if (element == null) {\n          return undefined;\n        }\n        result.push(element);\n\n        if (this.eat(tt.comma)) {\n          trailingCommaPos = this.state.lastTokStartLoc.index;\n          continue;\n        }\n\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        if (expectSuccess) {\n          // This will fail with an error about a missing comma\n          this.expect(tt.comma);\n        }\n        return undefined;\n      }\n\n      if (refTrailingCommaPos) {\n        refTrailingCommaPos.value = trailingCommaPos;\n      }\n\n      return result;\n    }\n\n    tsParseBracketedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      bracket: boolean,\n      skipFirstToken: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      if (!skipFirstToken) {\n        if (bracket) {\n          this.expect(tt.bracketL);\n        } else {\n          this.expect(tt.lt);\n        }\n      }\n\n      const result = this.tsParseDelimitedList(\n        kind,\n        parseElement,\n        refTrailingCommaPos,\n      );\n\n      if (bracket) {\n        this.expect(tt.bracketR);\n      } else {\n        this.expect(tt.gt);\n      }\n\n      return result;\n    }\n\n    tsParseImportType(): N.TsImportType {\n      const node = this.startNode<N.TsImportType>();\n      this.expect(tt._import);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.raise(TSErrors.UnsupportedImportTypeArgument, this.state.startLoc);\n      }\n\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.argument = super.parseExprAtom() as N.StringLiteral;\n      if (\n        this.hasPlugin(\"importAttributes\") ||\n        this.hasPlugin(\"importAssertions\")\n      ) {\n        node.options = null;\n      }\n      if (this.eat(tt.comma)) {\n        this.expectImportAttributesPlugin();\n        if (!this.match(tt.parenR)) {\n          node.options = super.parseMaybeAssignAllowIn();\n          this.eat(tt.comma);\n        }\n      }\n      this.expect(tt.parenR);\n\n      if (this.eat(tt.dot)) {\n        // In this instance, the entity name will actually itself be a\n        // qualifier, so allow it to be a reserved word as well.\n        node.qualifier = this.tsParseEntityName();\n      }\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseEntityName(allowReservedWords: boolean = true): N.TsEntityName {\n      let entity: N.TsEntityName = this.parseIdentifier(allowReservedWords);\n      while (this.eat(tt.dot)) {\n        const node: Undone<N.TsQualifiedName> =\n          this.startNodeAtNode<N.TsQualifiedName>(entity);\n        node.left = entity;\n        node.right = this.parseIdentifier(allowReservedWords);\n        entity = this.finishNode(node, \"TSQualifiedName\");\n      }\n      return entity;\n    }\n\n    tsParseTypeReference(): N.TsTypeReference {\n      const node = this.startNode<N.TsTypeReference>();\n      node.typeName = this.tsParseEntityName();\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSTypeReference\");\n    }\n\n    tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n      this.next();\n      const node = this.startNodeAtNode<N.TsTypePredicate>(lhs);\n      node.parameterName = lhs;\n      node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n      node.asserts = false;\n      return this.finishNode(node, \"TSTypePredicate\");\n    }\n\n    tsParseThisTypeNode(): N.TsThisType {\n      const node = this.startNode<N.TsThisType>();\n      this.next();\n      return this.finishNode(node, \"TSThisType\");\n    }\n\n    tsParseTypeQuery(): N.TsTypeQuery {\n      const node = this.startNode<N.TsTypeQuery>();\n      this.expect(tt._typeof);\n      if (this.match(tt._import)) {\n        node.exprName = this.tsParseImportType();\n      } else {\n        node.exprName = this.tsParseEntityName();\n      }\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSTypeQuery\");\n    }\n\n    tsParseInOutModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\"],\n      disallowedModifiers: [\n        \"const\",\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseConstModifier = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"const\"],\n      // for better error recovery\n      disallowedModifiers: [\"in\", \"out\"],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n    });\n\n    tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\", \"const\"],\n      disallowedModifiers: [\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseTypeParameter(\n      parseModifiers: (node: Undone<N.TsTypeParameter>) => void,\n    ): N.TsTypeParameter {\n      const node = this.startNode<N.TsTypeParameter>();\n\n      parseModifiers(node);\n\n      node.name = this.tsParseTypeParameterName();\n      node.constraint = this.tsEatThenParseType(tt._extends);\n      node.default = this.tsEatThenParseType(tt.eq);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsTryParseTypeParameters(\n      parseModifiers: (node: N.TsTypeParameter) => void,\n    ): N.TsTypeParameterDeclaration | undefined | null {\n      if (this.match(tt.lt)) {\n        return this.tsParseTypeParameters(parseModifiers);\n      }\n    }\n\n    tsParseTypeParameters(parseModifiers: (node: N.TsTypeParameter) => void) {\n      const node = this.startNode<N.TsTypeParameterDeclaration>();\n\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      const refTrailingCommaPos = { value: -1 };\n\n      node.params = this.tsParseBracketedList(\n        \"TypeParametersOrArguments\",\n        this.tsParseTypeParameter.bind(this, parseModifiers),\n        /* bracket */ false,\n        /* skipFirstToken */ true,\n        refTrailingCommaPos,\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeParameters, node);\n      }\n      if (refTrailingCommaPos.value !== -1) {\n        this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n      }\n      return this.finishNode(node, \"TSTypeParameterDeclaration\");\n    }\n\n    // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n    // but here it's always false, because this is only used for types.\n    tsFillSignature(\n      returnToken: TokenType,\n      signature: Undone<N.TsSignatureDeclaration>,\n    ): void {\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n      const returnTokenRequired = returnToken === tt.arrow;\n\n      // https://github.com/babel/babel/issues/9231\n      const paramsKey = process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\";\n      const returnTypeKey = process.env.BABEL_8_BREAKING\n        ? \"returnType\"\n        : \"typeAnnotation\";\n\n      signature.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      this.expect(tt.parenL);\n      signature[paramsKey] = this.tsParseBindingListForSignature();\n      if (returnTokenRequired) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      } else if (this.match(returnToken)) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      }\n    }\n\n    tsParseBindingListForSignature(): Array<\n      N.Identifier | N.RestElement | N.ObjectPattern | N.ArrayPattern\n    > {\n      const list = super.parseBindingList(\n        tt.parenR,\n        charCodes.rightParenthesis,\n        ParseBindingListFlags.IS_FUNCTION_PARAMS,\n      );\n      for (const pattern of list) {\n        const { type } = pattern;\n        if (type === \"AssignmentPattern\" || type === \"TSParameterProperty\") {\n          this.raise(TSErrors.UnsupportedSignatureParameterKind, pattern, {\n            type,\n          });\n        }\n      }\n      return list as Exclude<\n        (typeof list)[0],\n        N.AssignmentPattern | N.TSParameterProperty\n      >[];\n    }\n\n    tsParseTypeMemberSemicolon(): void {\n      if (!this.eat(tt.comma) && !this.isLineTerminator()) {\n        this.expect(tt.semi);\n      }\n    }\n\n    tsParseSignatureMember(\n      kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n      node: Undone<\n        N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration\n      >,\n    ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n      this.tsFillSignature(tt.colon, node);\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, kind);\n    }\n\n    tsIsUnambiguouslyIndexSignature() {\n      this.next(); // Skip '{'\n      if (tokenIsIdentifier(this.state.type)) {\n        this.next();\n        return this.match(tt.colon);\n      }\n      return false;\n    }\n\n    tsTryParseIndexSignature(\n      node: Undone<N.TsIndexSignature>,\n    ): N.TsIndexSignature | undefined {\n      if (\n        !(\n          this.match(tt.bracketL) &&\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n        )\n      ) {\n        return;\n      }\n\n      this.expect(tt.bracketL);\n      const id = this.parseIdentifier();\n      id.typeAnnotation = this.tsParseTypeAnnotation();\n      this.resetEndLocation(id); // set end position to end of type\n\n      this.expect(tt.bracketR);\n      node.parameters = [id];\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, \"TSIndexSignature\");\n    }\n\n    tsParsePropertyOrMethodSignature(\n      node: N.TsPropertySignature | N.TsMethodSignature,\n      readonly: boolean,\n    ): N.TsPropertySignature | N.TsMethodSignature {\n      if (this.eat(tt.question)) node.optional = true;\n      const nodeAny: any = node;\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        if (readonly) {\n          this.raise(TSErrors.ReadonlyForMethodSignature, node);\n        }\n        const method: N.TsMethodSignature = nodeAny;\n        if (method.kind && this.match(tt.lt)) {\n          this.raise(\n            TSErrors.AccessorCannotHaveTypeParameters,\n            this.state.curPosition(),\n          );\n        }\n        this.tsFillSignature(tt.colon, method);\n        this.tsParseTypeMemberSemicolon();\n        const paramsKey = process.env.BABEL_8_BREAKING\n          ? \"params\"\n          : \"parameters\";\n        const returnTypeKey = process.env.BABEL_8_BREAKING\n          ? \"returnType\"\n          : \"typeAnnotation\";\n        if (method.kind === \"get\") {\n          if (method[paramsKey].length > 0) {\n            this.raise(Errors.BadGetterArity, this.state.curPosition());\n            if (this.isThisParam(method[paramsKey][0])) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n        } else if (method.kind === \"set\") {\n          if (method[paramsKey].length !== 1) {\n            this.raise(Errors.BadSetterArity, this.state.curPosition());\n          } else {\n            const firstParameter = method[paramsKey][0];\n            if (this.isThisParam(firstParameter)) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (\n              firstParameter.type === \"Identifier\" &&\n              firstParameter.optional\n            ) {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveOptionalParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (firstParameter.type === \"RestElement\") {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveRestParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n          if (method[returnTypeKey]) {\n            this.raise(\n              TSErrors.SetAccessorCannotHaveReturnType,\n              method[returnTypeKey],\n            );\n          }\n        } else {\n          method.kind = \"method\";\n        }\n        return this.finishNode(method, \"TSMethodSignature\");\n      } else {\n        const property: N.TsPropertySignature = nodeAny;\n        if (readonly) property.readonly = true;\n        const type = this.tsTryParseTypeAnnotation();\n        if (type) property.typeAnnotation = type;\n        this.tsParseTypeMemberSemicolon();\n        return this.finishNode(property, \"TSPropertySignature\");\n      }\n    }\n\n    tsParseTypeMember(): N.TsTypeElement {\n      const node: any = this.startNode();\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n      }\n\n      if (this.match(tt._new)) {\n        const id = this.startNode<N.Identifier>();\n        this.next();\n        if (this.match(tt.parenL) || this.match(tt.lt)) {\n          return this.tsParseSignatureMember(\n            \"TSConstructSignatureDeclaration\",\n            node,\n          );\n        } else {\n          node.key = this.createIdentifier(id, \"new\");\n          return this.tsParsePropertyOrMethodSignature(node, false);\n        }\n      }\n\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\"readonly\"],\n          disallowedModifiers: [\n            \"declare\",\n            \"abstract\",\n            \"private\",\n            \"protected\",\n            \"public\",\n            \"static\",\n            \"override\",\n          ],\n        },\n        node,\n      );\n\n      const idx = this.tsTryParseIndexSignature(node);\n      if (idx) {\n        return idx;\n      }\n\n      super.parsePropertyName(node);\n      if (\n        !node.computed &&\n        node.key.type === \"Identifier\" &&\n        (node.key.name === \"get\" || node.key.name === \"set\") &&\n        this.tsTokenCanFollowModifier()\n      ) {\n        node.kind = node.key.name;\n        super.parsePropertyName(node);\n      }\n      return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n    }\n\n    tsParseTypeLiteral(): N.TsTypeLiteral {\n      const node = this.startNode<N.TsTypeLiteral>();\n      node.members = this.tsParseObjectTypeMembers();\n      return this.finishNode(node, \"TSTypeLiteral\");\n    }\n\n    tsParseObjectTypeMembers(): Array<N.TsTypeElement> {\n      this.expect(tt.braceL);\n      const members = this.tsParseList(\n        \"TypeMembers\",\n        this.tsParseTypeMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return members;\n    }\n\n    tsIsStartOfMappedType(): boolean {\n      this.next();\n      if (this.eat(tt.plusMin)) {\n        return this.isContextual(tt._readonly);\n      }\n      if (this.isContextual(tt._readonly)) {\n        this.next();\n      }\n      if (!this.match(tt.bracketL)) {\n        return false;\n      }\n      this.next();\n      if (!this.tsIsIdentifier()) {\n        return false;\n      }\n      this.next();\n      return this.match(tt._in);\n    }\n\n    tsParseMappedType(): N.TsMappedType {\n      const node = this.startNode<N.TsMappedType>();\n\n      this.expect(tt.braceL);\n\n      if (this.match(tt.plusMin)) {\n        node.readonly = this.state.value;\n        this.next();\n        this.expectContextual(tt._readonly);\n      } else if (this.eatContextual(tt._readonly)) {\n        node.readonly = true;\n      }\n\n      this.expect(tt.bracketL);\n      if (process.env.BABEL_8_BREAKING) {\n        node.key = this.tsParseTypeParameterName() as N.Identifier;\n        node.constraint = this.tsExpectThenParseType(tt._in);\n      } else {\n        const typeParameter = this.startNode<N.TsTypeParameter>();\n        typeParameter.name = this.tsParseTypeParameterName();\n        typeParameter.constraint = this.tsExpectThenParseType(tt._in);\n        // @ts-expect-error for Babel 7\n        node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      }\n      node.nameType = this.eatContextual(tt._as) ? this.tsParseType() : null;\n\n      this.expect(tt.bracketR);\n\n      if (this.match(tt.plusMin)) {\n        node.optional = this.state.value;\n        this.next();\n        this.expect(tt.question);\n      } else if (this.eat(tt.question)) {\n        node.optional = true;\n      }\n\n      node.typeAnnotation = this.tsTryParseType();\n      this.semicolon();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"TSMappedType\");\n    }\n\n    tsParseTupleType(): N.TsTupleType {\n      const node = this.startNode<N.TsTupleType>();\n      node.elementTypes = this.tsParseBracketedList(\n        \"TupleElementTypes\",\n        this.tsParseTupleElementType.bind(this),\n        /* bracket */ true,\n        /* skipFirstToken */ false,\n      );\n\n      // Validate the elementTypes to ensure that no mandatory elements\n      // follow optional elements\n      let seenOptionalElement = false;\n      node.elementTypes.forEach(elementNode => {\n        const { type } = elementNode;\n\n        if (\n          seenOptionalElement &&\n          type !== \"TSRestType\" &&\n          type !== \"TSOptionalType\" &&\n          !(type === \"TSNamedTupleMember\" && elementNode.optional)\n        ) {\n          this.raise(TSErrors.OptionalTypeBeforeRequired, elementNode);\n        }\n\n        seenOptionalElement ||=\n          (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n          type === \"TSOptionalType\";\n      });\n\n      return this.finishNode(node, \"TSTupleType\");\n    }\n\n    tsParseTupleElementType(): N.TsNamedTupleMember | N.TsType {\n      // parses `...TsType[]`\n\n      const { startLoc } = this.state;\n\n      const rest = this.eat(tt.ellipsis);\n\n      let labeled: boolean;\n      let label: N.Identifier;\n      let optional: boolean;\n      let type: N.TsNamedTupleMember | N.TsType;\n\n      const isWord = tokenIsKeywordOrIdentifier(this.state.type);\n      const chAfterWord = isWord ? this.lookaheadCharCode() : null;\n      if (chAfterWord === charCodes.colon) {\n        labeled = true;\n        optional = false;\n        label = this.parseIdentifier(true);\n        this.expect(tt.colon);\n        type = this.tsParseType();\n      } else if (chAfterWord === charCodes.questionMark) {\n        optional = true;\n        const startLoc = this.state.startLoc;\n        const wordName = this.state.value;\n        const typeOrLabel = this.tsParseNonArrayType();\n\n        if (this.lookaheadCharCode() === charCodes.colon) {\n          labeled = true;\n          label = this.createIdentifier(\n            this.startNodeAt<N.Identifier>(startLoc),\n            wordName,\n          );\n          this.expect(tt.question);\n          this.expect(tt.colon);\n          type = this.tsParseType();\n        } else {\n          labeled = false;\n          type = typeOrLabel;\n          this.expect(tt.question);\n        }\n      } else {\n        type = this.tsParseType();\n        optional = this.eat(tt.question);\n        // In this case (labeled === true) could be only in invalid label.\n        // E.g. [x.y:type]\n        // An error is raised while processing node.\n        labeled = this.eat(tt.colon);\n      }\n\n      if (labeled) {\n        let labeledNode: Undone<N.TsNamedTupleMember>;\n        if (label) {\n          labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(label);\n          labeledNode.optional = optional;\n          labeledNode.label = label;\n          labeledNode.elementType = type;\n\n          if (this.eat(tt.question)) {\n            labeledNode.optional = true;\n            this.raise(\n              TSErrors.TupleOptionalAfterType,\n              this.state.lastTokStartLoc,\n            );\n          }\n        } else {\n          labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(type);\n          labeledNode.optional = optional;\n          this.raise(TSErrors.InvalidTupleMemberLabel, type);\n          // @ts-expect-error This produces an invalid AST, but at least we don't drop\n          // nodes representing the invalid source.\n          labeledNode.label = type;\n          labeledNode.elementType = this.tsParseType();\n        }\n        type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n      } else if (optional) {\n        const optionalTypeNode = this.startNodeAtNode<N.TsOptionalType>(type);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode = this.startNodeAt<N.TsRestType>(startLoc);\n        restNode.typeAnnotation = type;\n        type = this.finishNode(restNode, \"TSRestType\");\n      }\n\n      return type;\n    }\n\n    tsParseParenthesizedType(): N.TsParenthesizedType {\n      const node = this.startNode<N.TsParenthesizedType>();\n      this.expect(tt.parenL);\n      node.typeAnnotation = this.tsParseType();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSParenthesizedType\");\n    }\n\n    tsParseFunctionOrConstructorType(\n      type: \"TSFunctionType\" | \"TSConstructorType\",\n      abstract?: boolean,\n    ): N.TsFunctionOrConstructorType {\n      const node = this.startNode<\n        N.TsFunctionOrConstructorType | N.TsConstructorType\n      >();\n      if (type === \"TSConstructorType\") {\n        (node as Undone<N.TsConstructorType>).abstract = !!abstract;\n        if (abstract) this.next();\n        this.next(); // eat `new`\n      }\n      this.tsInAllowConditionalTypesContext(() =>\n        this.tsFillSignature(tt.arrow, node),\n      );\n      return this.finishNode(node, type);\n    }\n\n    tsParseLiteralTypeNode(): N.TsLiteralType {\n      const node = this.startNode<N.TsLiteralType>();\n      switch (this.state.type) {\n        case tt.num:\n        case tt.bigint:\n        case tt.string:\n        case tt._true:\n        case tt._false:\n          // For compatibility to estree we cannot call parseLiteral directly here\n          // @ts-expect-error refine typings\n          node.literal = super.parseExprAtom();\n          break;\n        default:\n          this.unexpected();\n      }\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    tsParseTemplateLiteralType(): N.TsType {\n      const node = this.startNode<N.TsLiteralType>();\n      node.literal = super.parseTemplate(false);\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    parseTemplateSubstitution(): N.TsType | N.Expression {\n      if (this.state.inType) return this.tsParseType();\n      return super.parseTemplateSubstitution();\n    }\n\n    tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n      const thisKeyword = this.tsParseThisTypeNode();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        return this.tsParseThisTypePredicate(thisKeyword);\n      } else {\n        return thisKeyword;\n      }\n    }\n\n    tsParseNonArrayType(): N.TsType {\n      switch (this.state.type) {\n        case tt.string:\n        case tt.num:\n        case tt.bigint:\n        case tt._true:\n        case tt._false:\n          return this.tsParseLiteralTypeNode();\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            const node = this.startNode<N.TsLiteralType>();\n            const nextToken = this.lookahead();\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n              this.unexpected();\n            }\n            // @ts-expect-error: parseMaybeUnary must returns unary expression\n            node.literal = this.parseMaybeUnary();\n            return this.finishNode(node, \"TSLiteralType\");\n          }\n          break;\n        case tt._this:\n          return this.tsParseThisTypeOrThisTypePredicate();\n        case tt._typeof:\n          return this.tsParseTypeQuery();\n        case tt._import:\n          return this.tsParseImportType();\n        case tt.braceL:\n          return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n            ? this.tsParseMappedType()\n            : this.tsParseTypeLiteral();\n        case tt.bracketL:\n          return this.tsParseTupleType();\n        case tt.parenL:\n          if (process.env.BABEL_8_BREAKING) {\n            if (!this.options.createParenthesizedExpressions) {\n              const startLoc = this.state.startLoc;\n              this.next();\n              const type = this.tsParseType();\n              this.expect(tt.parenR);\n              this.addExtra(type, \"parenthesized\", true);\n              this.addExtra(type, \"parenStart\", startLoc.index);\n              return type;\n            }\n          }\n\n          return this.tsParseParenthesizedType();\n        case tt.templateNonTail:\n        case tt.templateTail:\n          return this.tsParseTemplateLiteralType();\n        default: {\n          const { type } = this.state;\n          if (\n            tokenIsIdentifier(type) ||\n            type === tt._void ||\n            type === tt._null\n          ) {\n            const nodeType =\n              type === tt._void\n                ? \"TSVoidKeyword\"\n                : type === tt._null\n                  ? \"TSNullKeyword\"\n                  : keywordTypeFromName(this.state.value);\n            if (\n              nodeType !== undefined &&\n              this.lookaheadCharCode() !== charCodes.dot\n            ) {\n              const node = this.startNode<N.TsKeywordType>();\n              this.next();\n              return this.finishNode(node, nodeType);\n            }\n            return this.tsParseTypeReference();\n          }\n        }\n      }\n\n      this.unexpected();\n    }\n\n    tsParseArrayTypeOrHigher(): N.TsType {\n      let type = this.tsParseNonArrayType();\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n        if (this.match(tt.bracketR)) {\n          const node = this.startNodeAtNode<N.TsArrayType>(type);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node = this.startNodeAtNode<N.TsIndexedAccessType>(type);\n          node.objectType = type;\n          node.indexType = this.tsParseType();\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSIndexedAccessType\");\n        }\n      }\n      return type;\n    }\n\n    tsParseTypeOperator(): N.TsTypeOperator {\n      const node = this.startNode<N.TsTypeOperator>();\n      const operator = this.state.value;\n      this.next(); // eat operator\n      node.operator = operator;\n      node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n      if (operator === \"readonly\") {\n        this.tsCheckTypeAnnotationForReadOnly(node);\n      }\n\n      return this.finishNode(node, \"TSTypeOperator\");\n    }\n\n    tsCheckTypeAnnotationForReadOnly(node: Undone<N.TsTypeOperator>) {\n      switch (node.typeAnnotation.type) {\n        case \"TSTupleType\":\n        case \"TSArrayType\":\n          return;\n        default:\n          this.raise(TSErrors.UnexpectedReadonly, node);\n      }\n    }\n\n    tsParseInferType(): N.TsInferType {\n      const node = this.startNode<N.TsInferType>();\n      this.expectContextual(tt._infer);\n      const typeParameter = this.startNode<N.TsTypeParameter>();\n      typeParameter.name = this.tsParseTypeParameterName();\n      typeParameter.constraint = this.tsTryParse(() =>\n        this.tsParseConstraintForInferType(),\n      );\n      node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      return this.finishNode(node, \"TSInferType\");\n    }\n\n    tsParseConstraintForInferType() {\n      if (this.eat(tt._extends)) {\n        const constraint = this.tsInDisallowConditionalTypesContext(() =>\n          this.tsParseType(),\n        );\n        if (\n          this.state.inDisallowConditionalTypesContext ||\n          !this.match(tt.question)\n        ) {\n          return constraint;\n        }\n      }\n    }\n\n    tsParseTypeOperatorOrHigher(): N.TsType {\n      const isTypeOperator =\n        tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n      return isTypeOperator\n        ? this.tsParseTypeOperator()\n        : this.isContextual(tt._infer)\n          ? this.tsParseInferType()\n          : this.tsInAllowConditionalTypesContext(() =>\n              this.tsParseArrayTypeOrHigher(),\n            );\n    }\n\n    tsParseUnionOrIntersectionType(\n      kind: \"TSUnionType\" | \"TSIntersectionType\",\n      parseConstituentType: () => N.TsType,\n      operator: TokenType,\n    ): N.TsType {\n      const node = this.startNode<N.TsUnionType | N.TsIntersectionType>();\n      const hasLeadingOperator = this.eat(operator);\n      const types = [];\n      do {\n        types.push(parseConstituentType());\n      } while (this.eat(operator));\n      if (types.length === 1 && !hasLeadingOperator) {\n        return types[0];\n      }\n      node.types = types;\n      return this.finishNode(node, kind);\n    }\n\n    tsParseIntersectionTypeOrHigher(): N.TsType {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSIntersectionType\",\n        this.tsParseTypeOperatorOrHigher.bind(this),\n        tt.bitwiseAND,\n      );\n    }\n\n    tsParseUnionTypeOrHigher() {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSUnionType\",\n        this.tsParseIntersectionTypeOrHigher.bind(this),\n        tt.bitwiseOR,\n      );\n    }\n\n    tsIsStartOfFunctionType() {\n      if (this.match(tt.lt)) {\n        return true;\n      }\n      return (\n        this.match(tt.parenL) &&\n        this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n      );\n    }\n\n    tsSkipParameterStart(): boolean {\n      if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n        this.next();\n        return true;\n      }\n\n      if (this.match(tt.braceL)) {\n        // Return true if we can parse an object pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          this.parseObjectLike(tt.braceR, true);\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      if (this.match(tt.bracketL)) {\n        this.next();\n        // Return true if we can parse an array pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          super.parseBindingList(\n            tt.bracketR,\n            charCodes.rightSquareBracket,\n            ParseBindingListFlags.ALLOW_EMPTY,\n          );\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      return false;\n    }\n\n    tsIsUnambiguouslyStartOfFunctionType(): boolean {\n      this.next();\n      if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n        // ( )\n        // ( ...\n        return true;\n      }\n      if (this.tsSkipParameterStart()) {\n        if (\n          this.match(tt.colon) ||\n          this.match(tt.comma) ||\n          this.match(tt.question) ||\n          this.match(tt.eq)\n        ) {\n          // ( xxx :\n          // ( xxx ,\n          // ( xxx ?\n          // ( xxx =\n          return true;\n        }\n        if (this.match(tt.parenR)) {\n          this.next();\n          if (this.match(tt.arrow)) {\n            // ( xxx ) =>\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    tsParseTypeOrTypePredicateAnnotation(\n      returnToken: TokenType,\n    ): N.TsTypeAnnotation {\n      return this.tsInType(() => {\n        const t = this.startNode<N.TsTypeAnnotation>();\n        this.expect(returnToken);\n\n        const node = this.startNode<N.TsTypePredicate>();\n\n        const asserts = !!this.tsTryParse(\n          this.tsParseTypePredicateAsserts.bind(this),\n        );\n\n        if (asserts && this.match(tt._this)) {\n          // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n          // : asserts this is type\n          let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n          // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n          // : asserts this\n          if (thisTypePredicate.type === \"TSThisType\") {\n            node.parameterName = thisTypePredicate;\n            node.asserts = true;\n            (node as N.TsTypePredicate).typeAnnotation = null;\n            thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n          } else {\n            this.resetStartLocationFromNode(thisTypePredicate, node);\n            thisTypePredicate.asserts = true;\n          }\n          t.typeAnnotation = thisTypePredicate;\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        const typePredicateVariable =\n          this.tsIsIdentifier() &&\n          this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n        if (!typePredicateVariable) {\n          if (!asserts) {\n            // : type\n            return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n          }\n\n          // : asserts foo\n          node.parameterName = this.parseIdentifier();\n          node.asserts = asserts;\n          (node as N.TsTypePredicate).typeAnnotation = null;\n          t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        // : asserts foo is type\n        const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n        node.parameterName = typePredicateVariable;\n        node.typeAnnotation = type;\n        node.asserts = asserts;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      });\n    }\n\n    tsTryParseTypeOrTypePredicateAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n    }\n\n    tsTryParseTypeAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeAnnotation();\n      }\n    }\n\n    tsTryParseType(): N.TsType | undefined {\n      return this.tsEatThenParseType(tt.colon);\n    }\n\n    tsParseTypePredicatePrefix(): N.Identifier | undefined {\n      const id = this.parseIdentifier();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        this.next();\n        return id;\n      }\n    }\n\n    tsParseTypePredicateAsserts(): boolean {\n      if (this.state.type !== tt._asserts) {\n        return false;\n      }\n      const containsEsc = this.state.containsEsc;\n      this.next();\n      if (!tokenIsIdentifier(this.state.type) && !this.match(tt._this)) {\n        return false;\n      }\n\n      if (containsEsc) {\n        this.raise(\n          Errors.InvalidEscapedReservedWord,\n          this.state.lastTokStartLoc,\n          {\n            reservedWord: \"asserts\",\n          },\n        );\n      }\n\n      return true;\n    }\n\n    tsParseTypeAnnotation(\n      eatColon = true,\n      t: Undone<N.TsTypeAnnotation> = this.startNode<N.TsTypeAnnotation>(),\n    ): N.TsTypeAnnotation {\n      this.tsInType(() => {\n        if (eatColon) this.expect(tt.colon);\n        t.typeAnnotation = this.tsParseType();\n      });\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    }\n\n    /** Be sure to be in a type context before calling this, using `tsInType`. */\n    tsParseType(): N.TsType {\n      // Need to set `state.inType` so that we don't parse JSX in a type context.\n      assert(this.state.inType);\n      const type = this.tsParseNonConditionalType();\n\n      if (\n        this.state.inDisallowConditionalTypesContext ||\n        this.hasPrecedingLineBreak() ||\n        !this.eat(tt._extends)\n      ) {\n        return type;\n      }\n      const node = this.startNodeAtNode<N.TsConditionalType>(type);\n      node.checkType = type;\n\n      node.extendsType = this.tsInDisallowConditionalTypesContext(() =>\n        this.tsParseNonConditionalType(),\n      );\n\n      this.expect(tt.question);\n      node.trueType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      this.expect(tt.colon);\n      node.falseType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      return this.finishNode(node, \"TSConditionalType\");\n    }\n\n    isAbstractConstructorSignature(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._new\n      );\n    }\n\n    tsParseNonConditionalType(): N.TsType {\n      if (this.tsIsStartOfFunctionType()) {\n        return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n      }\n      if (this.match(tt._new)) {\n        // As in `new () => Date`\n        return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n      } else if (this.isAbstractConstructorSignature()) {\n        // As in `abstract new () => Date`\n        return this.tsParseFunctionOrConstructorType(\n          \"TSConstructorType\",\n          /* abstract */ true,\n        );\n      }\n      return this.tsParseUnionTypeOrHigher();\n    }\n\n    tsParseTypeAssertion(): N.TsTypeAssertion {\n      if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n        this.raise(TSErrors.ReservedTypeAssertion, this.state.startLoc);\n      }\n\n      const node = this.startNode<N.TsTypeAssertion>();\n      node.typeAnnotation = this.tsInType(() => {\n        this.next(); // \"<\"\n        return this.match(tt._const)\n          ? this.tsParseTypeReference()\n          : this.tsParseType();\n      });\n      this.expect(tt.gt);\n      node.expression = this.parseMaybeUnary();\n      return this.finishNode(node, \"TSTypeAssertion\");\n    }\n\n    tsParseHeritageClause(\n      token: \"extends\" | \"implements\",\n    ): Array<N.TsExpressionWithTypeArguments> {\n      const originalStartLoc = this.state.startLoc;\n\n      const delimitedList = this.tsParseDelimitedList(\n        \"HeritageClauseElement\",\n        () => {\n          const node = this.startNode<N.TsExpressionWithTypeArguments>();\n          node.expression = this.tsParseEntityName();\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.tsParseTypeArguments();\n          }\n\n          return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n        },\n      );\n\n      if (!delimitedList.length) {\n        this.raise(TSErrors.EmptyHeritageClauseType, originalStartLoc, {\n          token,\n        });\n      }\n\n      return delimitedList;\n    }\n\n    tsParseInterfaceDeclaration(\n      node: Undone<N.TsInterfaceDeclaration>,\n      properties: {\n        declare?: true;\n      } = {},\n    ): N.TsInterfaceDeclaration | null {\n      if (this.hasFollowingLineBreak()) return null;\n      this.expectContextual(tt._interface);\n      if (properties.declare) node.declare = true;\n      if (tokenIsIdentifier(this.state.type)) {\n        node.id = this.parseIdentifier();\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_INTERFACE);\n      } else {\n        node.id = null;\n        this.raise(TSErrors.MissingInterfaceName, this.state.startLoc);\n      }\n\n      node.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (this.eat(tt._extends)) {\n        node.extends = this.tsParseHeritageClause(\"extends\");\n      }\n      const body = this.startNode<N.TSInterfaceBody>();\n      body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n      node.body = this.finishNode(body, \"TSInterfaceBody\");\n      return this.finishNode(node, \"TSInterfaceDeclaration\");\n    }\n\n    tsParseTypeAliasDeclaration(\n      node: N.TsTypeAliasDeclaration,\n    ): N.TsTypeAliasDeclaration {\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_TYPE);\n\n      node.typeAnnotation = this.tsInType(() => {\n        node.typeParameters = this.tsTryParseTypeParameters(\n          this.tsParseInOutModifiers,\n        );\n\n        this.expect(tt.eq);\n\n        if (\n          this.isContextual(tt._intrinsic) &&\n          this.lookahead().type !== tt.dot\n        ) {\n          const node = this.startNode<N.TsKeywordType>();\n          this.next();\n          return this.finishNode(node, \"TSIntrinsicKeyword\");\n        }\n\n        return this.tsParseType();\n      });\n\n      this.semicolon();\n      return this.finishNode(node, \"TSTypeAliasDeclaration\");\n    }\n\n    tsInNoContext<T>(cb: () => T): T {\n      const oldContext = this.state.context;\n      this.state.context = [oldContext[0]];\n      try {\n        return cb();\n      } finally {\n        this.state.context = oldContext;\n      }\n    }\n\n    /**\n     * Runs `cb` in a type context.\n     * This should be called one token *before* the first type token,\n     * so that the call to `next()` is run in type context.\n     */\n    tsInType<T>(cb: () => T): T {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inType = oldInType;\n      }\n    }\n\n    tsInDisallowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsInAllowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = false;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsEatThenParseType(token: TokenType): N.TsType | undefined {\n      if (this.match(token)) {\n        return this.tsNextThenParseType();\n      }\n    }\n\n    tsExpectThenParseType(token: TokenType): N.TsType {\n      return this.tsInType(() => {\n        this.expect(token);\n        return this.tsParseType();\n      });\n    }\n\n    tsNextThenParseType(): N.TsType {\n      return this.tsInType(() => {\n        this.next();\n        return this.tsParseType();\n      });\n    }\n\n    tsParseEnumMember(): N.TsEnumMember {\n      const node = this.startNode<N.TsEnumMember>();\n      // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n      node.id = this.match(tt.string)\n        ? super.parseStringLiteral(this.state.value)\n        : this.parseIdentifier(/* liberal */ true);\n      if (this.eat(tt.eq)) {\n        node.initializer = super.parseMaybeAssignAllowIn();\n      }\n      return this.finishNode(node, \"TSEnumMember\");\n    }\n\n    tsParseEnumDeclaration(\n      node: Undone<N.TsEnumDeclaration>,\n      properties: {\n        const?: true;\n        declare?: true;\n      } = {},\n    ): N.TsEnumDeclaration {\n      if (properties.const) node.const = true;\n      if (properties.declare) node.declare = true;\n      this.expectContextual(tt._enum);\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(\n        node.id,\n        node.const ? BindingFlag.TYPE_TS_CONST_ENUM : BindingFlag.TYPE_TS_ENUM,\n      );\n\n      this.expect(tt.braceL);\n      node.members = this.tsParseDelimitedList(\n        \"EnumMembers\",\n        this.tsParseEnumMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"TSEnumDeclaration\");\n    }\n\n    tsParseModuleBlock(): N.TsModuleBlock {\n      const node = this.startNode<N.TsModuleBlock>();\n      this.scope.enter(ScopeFlag.OTHER);\n\n      this.expect(tt.braceL);\n      // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n      super.parseBlockOrModuleBlockBody(\n        (node.body = []),\n        /* directives */ undefined,\n        /* topLevel */ true,\n        /* end */ tt.braceR,\n      );\n      this.scope.exit();\n      return this.finishNode(node, \"TSModuleBlock\");\n    }\n\n    tsParseModuleOrNamespaceDeclaration(\n      node: Undone<N.TsModuleDeclaration>,\n      nested: boolean = false,\n    ): N.TsModuleDeclaration {\n      node.id = this.parseIdentifier();\n\n      if (!nested) {\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_NAMESPACE);\n      }\n\n      if (this.eat(tt.dot)) {\n        const inner = this.startNode<N.TsModuleDeclaration>();\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\n        // @ts-expect-error Fixme: refine typings\n        node.body = inner;\n      } else {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      }\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseAmbientExternalModuleDeclaration(\n      node: N.TsModuleDeclaration,\n    ): N.TsModuleDeclaration {\n      if (this.isContextual(tt._global)) {\n        node.global = true;\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.id = super.parseStringLiteral(this.state.value);\n      } else {\n        this.unexpected();\n      }\n      if (this.match(tt.braceL)) {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      } else {\n        this.semicolon();\n      }\n\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseImportEqualsDeclaration(\n      node: Undone<N.TsImportEqualsDeclaration>,\n      maybeDefaultIdentifier?: N.Identifier | null,\n      isExport?: boolean,\n    ): N.TsImportEqualsDeclaration {\n      node.isExport = isExport || false;\n      node.id = maybeDefaultIdentifier || this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_VALUE_IMPORT);\n      this.expect(tt.eq);\n      const moduleReference = this.tsParseModuleReference();\n      if (\n        node.importKind === \"type\" &&\n        moduleReference.type !== \"TSExternalModuleReference\"\n      ) {\n        this.raise(TSErrors.ImportAliasHasImportType, moduleReference);\n      }\n      node.moduleReference = moduleReference;\n      this.semicolon();\n      return this.finishNode(node, \"TSImportEqualsDeclaration\");\n    }\n\n    tsIsExternalModuleReference(): boolean {\n      return (\n        this.isContextual(tt._require) &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      );\n    }\n\n    tsParseModuleReference(): N.TsModuleReference {\n      return this.tsIsExternalModuleReference()\n        ? this.tsParseExternalModuleReference()\n        : this.tsParseEntityName(/* allowReservedWords */ false);\n    }\n\n    tsParseExternalModuleReference(): N.TsExternalModuleReference {\n      const node = this.startNode<N.TsExternalModuleReference>();\n      this.expectContextual(tt._require);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.unexpected();\n      }\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.expression = super.parseExprAtom() as N.StringLiteral;\n      this.expect(tt.parenR);\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node, \"TSExternalModuleReference\");\n    }\n\n    // Utilities\n\n    tsLookAhead<T>(f: () => T): T {\n      const state = this.state.clone();\n      const res = f();\n      this.state = state;\n      return res;\n    }\n\n    tsTryParseAndCatch<T extends N.NodeBase | undefined | null>(\n      f: () => T,\n    ): T | undefined | null {\n      const result = this.tryParse(\n        abort =>\n          // @ts-expect-error todo(flow->ts)\n          f() || abort(),\n      );\n\n      if (result.aborted || !result.node) return;\n      if (result.error) this.state = result.failState;\n      // @ts-expect-error refine typings\n      return result.node;\n    }\n\n    tsTryParse<T>(f: () => T | undefined | false): T | undefined {\n      const state = this.state.clone();\n      const result = f();\n      if (result !== undefined && result !== false) {\n        return result;\n      }\n      this.state = state;\n    }\n\n    tsTryParseDeclare(nany: any): N.Declaration | undefined {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      let startType = this.state.type;\n      let kind: \"let\" | null;\n\n      if (this.isContextual(tt._let)) {\n        startType = tt._var;\n        kind = \"let\";\n      }\n\n      // @ts-expect-error refine typings\n      return this.tsInAmbientContext(() => {\n        switch (startType) {\n          case tt._function:\n            nany.declare = true;\n            return super.parseFunctionStatement(\n              nany,\n              /* async */ false,\n              /* isHangingDeclaration */ false,\n            );\n          case tt._class:\n            // While this is also set by tsParseExpressionStatement, we need to set it\n            // before parsing the class declaration to know how to register it in the scope.\n            nany.declare = true;\n            return this.parseClass(\n              nany,\n              /* isStatement */ true,\n              /* optionalId */ false,\n            );\n          case tt._enum:\n            return this.tsParseEnumDeclaration(nany, { declare: true });\n          case tt._global:\n            return this.tsParseAmbientExternalModuleDeclaration(nany);\n          case tt._const:\n          case tt._var:\n            if (!this.match(tt._const) || !this.isLookaheadContextual(\"enum\")) {\n              nany.declare = true;\n              return this.parseVarStatement(\n                nany,\n                kind || this.state.value,\n                true,\n              );\n            }\n\n            // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n            this.expect(tt._const);\n            return this.tsParseEnumDeclaration(nany, {\n              const: true,\n              declare: true,\n            });\n          case tt._interface: {\n            const result = this.tsParseInterfaceDeclaration(nany, {\n              declare: true,\n            });\n            if (result) return result;\n          }\n          // fallthrough\n          default:\n            if (tokenIsIdentifier(startType)) {\n              return this.tsParseDeclaration(\n                nany,\n                this.state.value,\n                /* next */ true,\n                /* decorators */ null,\n              );\n            }\n        }\n      });\n    }\n\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n    tsTryParseExportDeclaration(): N.Declaration | undefined {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.value,\n        /* next */ true,\n        /* decorators */ null,\n      );\n    }\n\n    tsParseExpressionStatement(\n      node: Undone<N.TsModuleDeclaration>,\n      expr: N.Identifier,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined {\n      switch (expr.name) {\n        case \"declare\": {\n          const declaration = this.tsTryParseDeclare(node);\n          if (declaration) {\n            declaration.declare = true;\n          }\n          return declaration;\n        }\n        case \"global\":\n          // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n          // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n          if (this.match(tt.braceL)) {\n            this.scope.enter(ScopeFlag.TS_MODULE);\n            this.prodParam.enter(ParamKind.PARAM);\n            const mod = node;\n            mod.global = true;\n            mod.id = expr;\n            mod.body = this.tsParseModuleBlock();\n            this.scope.exit();\n            this.prodParam.exit();\n            return this.finishNode(mod, \"TSModuleDeclaration\");\n          }\n          break;\n\n        default:\n          return this.tsParseDeclaration(\n            node,\n            expr.name,\n            /* next */ false,\n            decorators,\n          );\n      }\n    }\n\n    // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n    tsParseDeclaration(\n      node: any,\n      value: string,\n      next: boolean,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined | null {\n      // no declaration apart from enum can be followed by a line break.\n      switch (value) {\n        case \"abstract\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            (this.match(tt._class) || tokenIsIdentifier(this.state.type))\n          ) {\n            return this.tsParseAbstractDeclaration(node, decorators);\n          }\n          break;\n\n        case \"module\":\n          if (this.tsCheckLineTerminator(next)) {\n            if (this.match(tt.string)) {\n              return this.tsParseAmbientExternalModuleDeclaration(node);\n            } else if (tokenIsIdentifier(this.state.type)) {\n              return this.tsParseModuleOrNamespaceDeclaration(node);\n            }\n          }\n          break;\n\n        case \"namespace\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case \"type\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseTypeAliasDeclaration(node);\n          }\n          break;\n      }\n    }\n\n    tsCheckLineTerminator(next: boolean) {\n      if (next) {\n        if (this.hasFollowingLineBreak()) return false;\n        this.next();\n        return true;\n      }\n      return !this.isLineTerminator();\n    }\n\n    tsTryParseGenericAsyncArrowFunction(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined {\n      if (!this.match(tt.lt)) return;\n\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n      this.state.maybeInArrowParameters = true;\n\n      const res: Undone<N.ArrowFunctionExpression> | undefined =\n        this.tsTryParseAndCatch(() => {\n          const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n          node.typeParameters = this.tsParseTypeParameters(\n            this.tsParseConstModifier,\n          );\n          // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n          super.parseFunctionParams(node);\n          node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n          this.expect(tt.arrow);\n          return node;\n        });\n\n      this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n      if (!res) return;\n\n      return super.parseArrowExpression(\n        res,\n        /* params are already set */ null,\n        /* async */ true,\n      );\n    }\n\n    // Used when parsing type arguments from ES productions, where the first token\n    // has been created without state.inType. Thus we need to rescan the lt token.\n    tsParseTypeArgumentsInExpression():\n      | N.TsTypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.tsParseTypeArguments();\n    }\n\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n      const node = this.startNode<N.TsTypeParameterInstantiation>();\n      node.params = this.tsInType(() =>\n        // Temporarily remove a JSX parsing context, which makes us scan different tokens.\n        this.tsInNoContext(() => {\n          this.expect(tt.lt);\n          return this.tsParseDelimitedList(\n            \"TypeParametersOrArguments\",\n            this.tsParseType.bind(this),\n          );\n        }),\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeArguments, node);\n      } else if (!this.state.inType && this.curContext() === tc.brace) {\n        // rescan `>` when we are no longer in type context and JSX parsing context\n        // since it was tokenized when `inType` is `true`.\n        this.reScan_lt_gt();\n      }\n      this.expect(tt.gt);\n      return this.finishNode(node, \"TSTypeParameterInstantiation\");\n    }\n\n    tsIsDeclarationStart(): boolean {\n      return tokenIsTSDeclarationStart(this.state.type);\n    }\n\n    // ======================================================\n    // OVERRIDES\n    // ======================================================\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.tsIsDeclarationStart()) return false;\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseAssignableListItem(\n      flags: ParseBindingListFlags,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location to include modifiers in range\n      const startLoc = this.state.startLoc;\n\n      const modified: ModifierBase = {};\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\n            \"public\",\n            \"private\",\n            \"protected\",\n            \"override\",\n            \"readonly\",\n          ],\n        },\n        modified,\n      );\n      const accessibility = modified.accessibility;\n      const override = modified.override;\n      const readonly = modified.readonly;\n      if (\n        !(flags & ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS) &&\n        (accessibility || readonly || override)\n      ) {\n        this.raise(TSErrors.UnexpectedParameterModifier, startLoc);\n      }\n\n      const left = this.parseMaybeDefault();\n      this.parseAssignableListItemTypes(left, flags);\n      const elt = this.parseMaybeDefault(left.loc.start, left);\n      if (accessibility || readonly || override) {\n        const pp = this.startNodeAt<N.TSParameterProperty>(startLoc);\n        if (decorators.length) {\n          pp.decorators = decorators;\n        }\n        if (accessibility) pp.accessibility = accessibility;\n        if (readonly) pp.readonly = readonly;\n        if (override) pp.override = override;\n        if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n          this.raise(TSErrors.UnsupportedParameterPropertyKind, pp);\n        }\n        pp.parameter = elt as any as N.Identifier | N.AssignmentPattern;\n        return this.finishNode(pp, \"TSParameterProperty\");\n      }\n\n      if (decorators.length) {\n        left.decorators = decorators;\n      }\n\n      return elt;\n    }\n\n    isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n      return (\n        (node.type === \"TSParameterProperty\" &&\n          super.isSimpleParameter(node.parameter)) ||\n        super.isSimpleParameter(node)\n      );\n    }\n\n    tsDisallowOptionalPattern(node: Undone<N.Function>) {\n      for (const param of node.params) {\n        if (\n          param.type !== \"Identifier\" &&\n          (param as any).optional &&\n          !this.state.isAmbientContext\n        ) {\n          this.raise(TSErrors.PatternIsOptional, param);\n        }\n      }\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params: N.Expression[],\n      trailingCommaLoc?: Position | null,\n    ): void {\n      super.setArrowFunctionParameters(node, params, trailingCommaLoc);\n      this.tsDisallowOptionalPattern(node);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n\n      const bodilessType =\n        type === \"FunctionDeclaration\"\n          ? \"TSDeclareFunction\"\n          : type === \"ClassMethod\" || type === \"ClassPrivateMethod\"\n            ? \"TSDeclareMethod\"\n            : undefined;\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n        return this.finishNode(node, bodilessType);\n      }\n      if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n        this.raise(TSErrors.DeclareFunctionHasImplementation, node);\n        if ((node as Undone<N.FunctionDeclaration>).declare) {\n          return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        }\n      }\n      this.tsDisallowOptionalPattern(node);\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    registerFunctionStatementId(node: N.Function): void {\n      if (!node.body && node.id) {\n        // Function ids are validated after parsing their body.\n        // For bodiless function, we need to do it here.\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_AMBIENT);\n      } else {\n        super.registerFunctionStatementId(node);\n      }\n    }\n\n    tsCheckForInvalidTypeCasts(items: Array<N.Expression | N.SpreadElement>) {\n      items.forEach(node => {\n        if (node?.type === \"TSTypeCastExpression\") {\n          this.raise(TSErrors.UnexpectedTypeAnnotation, node.typeAnnotation);\n        }\n      });\n    }\n\n    toReferencedList(\n      exprList: Array<N.Expression | undefined | null>,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isInParens?: boolean,\n    ): Array<N.Expression | undefined | null> {\n      // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\n      //\n      // Note that `f<T>(a:b)` goes through a different path and is handled\n      // in `parseSubscript` directly.\n      this.tsCheckForInvalidTypeCasts(exprList);\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      if (node.type === \"ArrayExpression\") {\n        this.tsCheckForInvalidTypeCasts(node.elements);\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n        // When ! is consumed as a postfix operator (non-null assertion),\n        // disallow JSX tag forming after. e.g. When parsing `p! < n.p!`\n        // `<n.p` can not be a start of JSX tag\n        this.state.canStartJSXElement = false;\n        this.next();\n\n        const nonNullExpression =\n          this.startNodeAt<N.TsNonNullExpression>(startLoc);\n        nonNullExpression.expression = base;\n        return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n      }\n\n      let isOptionalCall = false;\n      if (\n        this.match(tt.questionDot) &&\n        this.lookaheadCharCode() === charCodes.lessThan\n      ) {\n        if (noCalls) {\n          state.stop = true;\n          return base;\n        }\n        state.optionalChainMember = isOptionalCall = true;\n        this.next();\n      }\n\n      // handles 'f<<T>'\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        let missingParenErrorLoc;\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // There are number of things we are going to \"maybe\" parse, like type arguments on\n        // tagged template expressions. If any of them fail, walk it back and continue.\n        const result = this.tsTryParseAndCatch(() => {\n          if (!noCalls && this.atPossibleAsyncArrow(base)) {\n            // Almost certainly this is a generic async function `async <T>() => ...\n            // But it might be a call with a type argument `async<T>();`\n            const asyncArrowFn =\n              this.tsTryParseGenericAsyncArrowFunction(startLoc);\n            if (asyncArrowFn) {\n              return asyncArrowFn;\n            }\n          }\n\n          const typeArguments = this.tsParseTypeArgumentsInExpression();\n          if (!typeArguments) return;\n\n          if (isOptionalCall && !this.match(tt.parenL)) {\n            missingParenErrorLoc = this.state.curPosition();\n            return;\n          }\n\n          if (tokenIsTemplate(this.state.type)) {\n            const result = super.parseTaggedTemplateExpression(\n              base,\n              startLoc,\n              state,\n            );\n            result.typeParameters = typeArguments;\n            return result;\n          }\n\n          if (!noCalls && this.eat(tt.parenL)) {\n            const node = this.startNodeAt<\n              N.CallExpression | N.OptionalCallExpression\n            >(startLoc);\n            node.callee = base;\n            // possibleAsync always false here, because we would have handled it above.\n            // @ts-expect-error (won't be any undefined arguments)\n            node.arguments = this.parseCallExpressionArguments(\n              tt.parenR,\n              /* possibleAsync */ false,\n            );\n\n            // Handles invalid case: `f<T>(a:b)`\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n\n            node.typeParameters = typeArguments;\n            if (state.optionalChainMember) {\n              (node as Undone<N.OptionalCallExpression>).optional =\n                isOptionalCall;\n            }\n\n            return this.finishCallExpression(node, state.optionalChainMember);\n          }\n\n          const tokenType = this.state.type;\n          if (\n            // a<b>>c is not (a<b>)>c, but a<(b>>c)\n            tokenType === tt.gt ||\n            // a<b>>>c is not (a<b>)>>c, but a<(b>>>c)\n            tokenType === tt.bitShiftR ||\n            // a<b>c is (a<b)>c\n            (tokenType !== tt.parenL &&\n              tokenCanStartExpression(tokenType) &&\n              !this.hasPrecedingLineBreak())\n          ) {\n            // Bail out.\n            return;\n          }\n\n          const node = this.startNodeAt<N.TsInstantiationExpression>(startLoc);\n          node.expression = base;\n          node.typeParameters = typeArguments;\n          return this.finishNode(node, \"TSInstantiationExpression\");\n        });\n\n        if (missingParenErrorLoc) {\n          this.unexpected(missingParenErrorLoc, tt.parenL);\n        }\n\n        if (result) {\n          if (\n            result.type === \"TSInstantiationExpression\" &&\n            (this.match(tt.dot) ||\n              (this.match(tt.questionDot) &&\n                this.lookaheadCharCode() !== charCodes.leftParenthesis))\n          ) {\n            this.raise(\n              TSErrors.InvalidPropertyAccessAfterInstantiationExpression,\n              this.state.startLoc,\n            );\n          }\n          return result;\n        }\n      }\n\n      return super.parseSubscript(base, startLoc, noCalls, state);\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      const { callee } = node;\n      if (\n        callee.type === \"TSInstantiationExpression\" &&\n        !callee.extra?.parenthesized\n      ) {\n        node.typeParameters = callee.typeParameters;\n        node.callee = callee.expression;\n      }\n    }\n\n    parseExprOp(\n      left: N.Expression,\n      leftStartLoc: Position,\n      minPrec: number,\n    ): N.Expression {\n      let isSatisfies: boolean;\n      if (\n        tokenOperatorPrecedence(tt._in) > minPrec &&\n        !this.hasPrecedingLineBreak() &&\n        (this.isContextual(tt._as) ||\n          (isSatisfies = this.isContextual(tt._satisfies)))\n      ) {\n        const node = this.startNodeAt<\n          N.TsAsExpression | N.TsSatisfiesExpression\n        >(leftStartLoc);\n        node.expression = left;\n        node.typeAnnotation = this.tsInType(() => {\n          this.next(); // \"as\" or \"satisfies\"\n          if (this.match(tt._const)) {\n            if (isSatisfies) {\n              this.raise(Errors.UnexpectedKeyword, this.state.startLoc, {\n                keyword: \"const\",\n              });\n            }\n            return this.tsParseTypeReference();\n          }\n\n          return this.tsParseType();\n        });\n        this.finishNode(\n          node,\n          isSatisfies ? \"TSSatisfiesExpression\" : \"TSAsExpression\",\n        );\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\n        this.reScan_lt_gt();\n        return this.parseExprOp(\n          // @ts-expect-error todo(flow->ts)\n          node,\n          leftStartLoc,\n          minPrec,\n        );\n      }\n\n      return super.parseExprOp(left, leftStartLoc, minPrec);\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ): void {\n      // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n      // And we have a type checker anyway, so don't bother having the parser do it.\n      if (!this.state.isAmbientContext) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          TSErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    /*\n    Don't bother doing this check in TypeScript code because:\n    1. We may have a nested export statement with the same name:\n      export const x = 0;\n      export namespace N {\n        export const x = 1;\n      }\n    2. We have a type checker to warn us about this sort of thing.\n    */\n    checkDuplicateExports() {}\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        const ch = this.lookaheadCharCode();\n        return isExport\n          ? ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk\n          : ch !== charCodes.equalsTo;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? \"type\" : \"value\";\n      } else {\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    ): N.AnyImport {\n      if (this.match(tt.string)) {\n        node.importKind = \"value\";\n        return super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      let importNode;\n      if (\n        tokenIsIdentifier(this.state.type) &&\n        this.lookaheadCharCode() === charCodes.equalsTo\n      ) {\n        node.importKind = \"value\";\n        return this.tsParseImportEqualsDeclaration(\n          node as Undone<N.TsImportEqualsDeclaration>,\n        );\n      } else if (this.isContextual(tt._type)) {\n        const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n          node as Undone<N.ImportDeclaration>,\n          /* isExport */ false,\n        );\n        if (this.lookaheadCharCode() === charCodes.equalsTo) {\n          return this.tsParseImportEqualsDeclaration(\n            node as Undone<N.TsImportEqualsDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        } else {\n          importNode = super.parseImportSpecifiersAndAfter(\n            node as Undone<N.ImportDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        }\n      } else {\n        importNode = super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      // `import type` can only be used on imports with named imports or with a\n      // default import - but not both\n      if (\n        importNode.importKind === \"type\" &&\n        // @ts-expect-error refine typings\n        importNode.specifiers.length > 1 &&\n        // @ts-expect-error refine typings\n        importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, importNode);\n      }\n\n      return importNode;\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      if (this.match(tt._import)) {\n        // `export import A = B;`\n        this.next(); // eat `tt._import`\n        const nodeImportEquals = node as Undone<N.TsImportEqualsDeclaration>;\n        let maybeDefaultIdentifier: N.Identifier | null = null;\n        if (\n          this.isContextual(tt._type) &&\n          // We pass false here, because we are parsing an `import ... =`\n          this.isPotentialImportPhase(/* isExport */ false)\n        ) {\n          maybeDefaultIdentifier = this.parseMaybeImportPhase(\n            nodeImportEquals,\n            /* isExport */ false,\n          );\n        } else {\n          nodeImportEquals.importKind = \"value\";\n        }\n        return this.tsParseImportEqualsDeclaration(\n          nodeImportEquals,\n          maybeDefaultIdentifier,\n          /* isExport */ true,\n        );\n      } else if (this.eat(tt.eq)) {\n        // `export = x;`\n        const assign = node as Undone<N.TsExportAssignment>;\n        assign.expression = super.parseExpression();\n        this.semicolon();\n        this.sawUnambiguousESM = true;\n        return this.finishNode(assign, \"TSExportAssignment\");\n      } else if (this.eatContextual(tt._as)) {\n        // `export as namespace A;`\n        const decl = node as Undone<N.TsNamespaceExportDeclaration>;\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n        this.expectContextual(tt._namespace);\n        decl.id = this.parseIdentifier();\n        this.semicolon();\n        return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n      } else {\n        return super.parseExport(\n          node as Undone<N.ExportAllDeclaration | N.ExportDefaultDeclaration>,\n          decorators,\n        );\n      }\n    }\n\n    isAbstractClass(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._class\n      );\n    }\n\n    parseExportDefaultExpression(): N.ExportDefaultDeclaration[\"declaration\"] {\n      if (this.isAbstractClass()) {\n        const cls = this.startNode<N.Class>();\n        this.next(); // Skip \"abstract\"\n        cls.abstract = true;\n        return this.parseClass(cls, true, true);\n      }\n\n      // export default interface allowed in:\n      // https://github.com/Microsoft/TypeScript/pull/16040\n      if (this.match(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(\n          this.startNode<N.TsInterfaceDeclaration>(),\n        );\n        if (result) return result;\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseVarStatement(\n      node: N.VariableDeclaration,\n      kind: \"var\" | \"let\" | \"const\" | \"using\",\n      allowMissingInitializer: boolean = false,\n    ) {\n      const { isAmbientContext } = this.state;\n      const declaration = super.parseVarStatement(\n        node,\n        kind,\n        allowMissingInitializer || isAmbientContext,\n      );\n\n      if (!isAmbientContext) return declaration;\n\n      for (const { id, init } of declaration.declarations) {\n        // Empty initializer is the easy case that we want.\n        if (!init) continue;\n\n        // var and let aren't ever allowed initializers.\n        if (kind !== \"const\" || !!id.typeAnnotation) {\n          this.raise(TSErrors.InitializerNotAllowedInAmbientContext, init);\n        } else if (\n          !isValidAmbientConstInitializer(init, this.hasPlugin(\"estree\"))\n        ) {\n          this.raise(\n            TSErrors.ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference,\n            init,\n          );\n        }\n      }\n\n      return declaration;\n    }\n\n    parseStatementContent(\n      flags: ParseStatementFlag,\n      decorators?: N.Decorator[] | null,\n    ): N.Statement {\n      if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n        const node = this.startNode<N.TsEnumDeclaration>();\n        this.expect(tt._const); // eat 'const'\n        return this.tsParseEnumDeclaration(node, { const: true });\n      }\n\n      if (this.isContextual(tt._enum)) {\n        return this.tsParseEnumDeclaration(\n          this.startNode<N.TsEnumDeclaration>(),\n        );\n      }\n\n      if (this.isContextual(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(this.startNode());\n        if (result) return result;\n      }\n\n      return super.parseStatementContent(flags, decorators);\n    }\n\n    parseAccessModifier(): N.Accessibility | undefined | null {\n      return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n    }\n\n    tsHasSomeModifiers(member: any, modifiers: readonly TsModifier[]): boolean {\n      return modifiers.some(modifier => {\n        if (tsIsAccessModifier(modifier)) {\n          return member.accessibility === modifier;\n        }\n        return !!member[modifier];\n      });\n    }\n\n    tsIsStartOfStaticBlocks() {\n      return (\n        this.isContextual(tt._static) &&\n        this.lookaheadCharCode() === charCodes.leftCurlyBrace\n      );\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const modifiers = [\n        \"declare\",\n        \"private\",\n        \"public\",\n        \"protected\",\n        \"override\",\n        \"abstract\",\n        \"readonly\",\n        \"static\",\n      ] as const;\n      this.tsParseModifiers(\n        {\n          allowedModifiers: modifiers,\n          disallowedModifiers: [\"in\", \"out\"],\n          stopOnStartOfClassStaticBlock: true,\n          errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n        },\n        member,\n      );\n\n      const callParseClassMemberWithIsStatic = () => {\n        if (this.tsIsStartOfStaticBlocks()) {\n          this.next(); // eat \"static\"\n          this.next(); // eat \"{\"\n          if (this.tsHasSomeModifiers(member, modifiers)) {\n            this.raise(\n              TSErrors.StaticBlockCannotHaveModifier,\n              this.state.curPosition(),\n            );\n          }\n          super.parseClassStaticBlock(classBody, member as N.StaticBlock);\n        } else {\n          this.parseClassMemberWithIsStatic(\n            classBody,\n            member,\n            state,\n            !!member.static,\n          );\n        }\n      };\n      if (member.declare) {\n        this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n      } else {\n        callParseClassMemberWithIsStatic();\n      }\n    }\n\n    parseClassMemberWithIsStatic(\n      classBody: N.ClassBody,\n      member: Undone<N.ClassMember | N.TsIndexSignature>,\n      state: N.ParseClassMemberState,\n      isStatic: boolean,\n    ): void {\n      const idx = this.tsTryParseIndexSignature(\n        member as Undone<N.TsIndexSignature>,\n      );\n      if (idx) {\n        classBody.body.push(idx);\n\n        if ((member as any).abstract) {\n          this.raise(TSErrors.IndexSignatureHasAbstract, member);\n        }\n        if ((member as any).accessibility) {\n          this.raise(TSErrors.IndexSignatureHasAccessibility, member, {\n            modifier: (member as any).accessibility,\n          });\n        }\n        if ((member as any).declare) {\n          this.raise(TSErrors.IndexSignatureHasDeclare, member);\n        }\n        if ((member as any).override) {\n          this.raise(TSErrors.IndexSignatureHasOverride, member);\n        }\n\n        return;\n      }\n\n      if (!this.state.inAbstractClass && (member as any).abstract) {\n        this.raise(TSErrors.NonAbstractClassHasAbstractMethod, member);\n      }\n\n      if ((member as any).override) {\n        if (!state.hadSuperClass) {\n          this.raise(TSErrors.OverrideNotInSubClass, member);\n        }\n      }\n\n      /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n      super.parseClassMemberWithIsStatic(\n        classBody,\n        member as Undone<N.ClassMember>,\n        state,\n        isStatic,\n      );\n    }\n\n    parsePostMemberNameModifiers(\n      methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      const optional = this.eat(tt.question);\n      if (optional) methodOrProp.optional = true;\n\n      if ((methodOrProp as any).readonly && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasReadonly, methodOrProp);\n      }\n\n      if ((methodOrProp as any).declare && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasDeclare, methodOrProp);\n      }\n    }\n\n    // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\n    // is that e.g. `type()` is valid JS, so we must try parsing that first.\n    // If it's really a type, we will parse `type` as the statement, and can correct it here\n    // by parsing the rest.\n    // @ts-expect-error plugin overrides interfaces\n    parseExpressionStatement(\n      node: Undone<N.ExpressionStatement>,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.Statement {\n      const decl =\n        expr.type === \"Identifier\"\n          ? // @ts-expect-error refine typings\n            this.tsParseExpressionStatement(node, expr, decorators)\n          : undefined;\n      return decl || super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n    shouldParseExportDeclaration(): boolean {\n      if (this.tsIsDeclarationStart()) return true;\n      return super.shouldParseExportDeclaration();\n    }\n\n    // An apparent conditional expression could actually be an optional parameter in an arrow function.\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      // only do the expensive clone if there is a question mark\n      // and if we come from inside parens\n      if (!this.state.maybeInArrowParameters || !this.match(tt.question)) {\n        return super.parseConditional(\n          expr,\n\n          startLoc,\n          refExpressionErrors,\n        );\n      }\n\n      const result = this.tryParse(() =>\n        super.parseConditional(expr, startLoc),\n      );\n\n      if (!result.node) {\n        if (result.error) {\n          /*:: invariant(refExpressionErrors != null) */\n          super.setOptionalParametersError(refExpressionErrors, result.error);\n        }\n\n        return expr;\n      }\n      if (result.error) this.state = result.failState;\n      return result.node;\n    }\n\n    // Note: These \"type casts\" are *not* valid TS expressions.\n    // But we parse them here and change them when completing the arrow function.\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TsTypeCastExpression>(startLoc);\n        typeCastNode.expression = node as N.Expression;\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (!this.state.isAmbientContext && this.isContextual(tt._declare)) {\n        return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\n      }\n\n      // Store original location\n      const startLoc = this.state.startLoc;\n\n      const isDeclare = this.eatContextual(tt._declare);\n\n      if (\n        isDeclare &&\n        (this.isContextual(tt._declare) || !this.shouldParseExportDeclaration())\n      ) {\n        throw this.raise(\n          TSErrors.ExpectedAmbientAfterExportDeclare,\n          this.state.startLoc,\n        );\n      }\n\n      const isIdentifier = tokenIsIdentifier(this.state.type);\n      const declaration: N.Declaration | undefined | null =\n        (isIdentifier && this.tsTryParseExportDeclaration()) ||\n        super.parseExportDeclaration(node);\n\n      if (!declaration) return null;\n\n      if (\n        declaration.type === \"TSInterfaceDeclaration\" ||\n        declaration.type === \"TSTypeAliasDeclaration\" ||\n        isDeclare\n      ) {\n        node.exportKind = \"type\";\n      }\n\n      if (isDeclare) {\n        // Reset location to include `declare` in range\n        this.resetStartLocation(declaration, startLoc);\n\n        declaration.declare = true;\n      }\n\n      return declaration;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType?: BindingFlag,\n    ): void {\n      if ((!isStatement || optionalId) && this.isContextual(tt._implements)) {\n        return;\n      }\n\n      super.parseClassId(\n        node,\n        isStatement,\n        optionalId,\n        (node as any).declare\n          ? BindingFlag.TYPE_TS_AMBIENT\n          : BindingFlag.TYPE_CLASS,\n      );\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n    }\n\n    parseClassPropertyAnnotation(\n      node: N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty,\n    ): void {\n      if (!node.optional) {\n        if (this.eat(tt.bang)) {\n          node.definite = true;\n        } else if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n    }\n\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      this.parseClassPropertyAnnotation(node);\n\n      if (\n        this.state.isAmbientContext &&\n        !(node.readonly && !node.typeAnnotation) &&\n        this.match(tt.eq)\n      ) {\n        this.raise(\n          TSErrors.DeclareClassFieldHasInitializer,\n          this.state.startLoc,\n        );\n      }\n      if (node.abstract && this.match(tt.eq)) {\n        const { key } = node;\n        this.raise(\n          TSErrors.AbstractPropertyHasInitializer,\n          this.state.startLoc,\n          {\n            propertyName:\n              key.type === \"Identifier\" && !node.computed\n                ? key.name\n                : `[${this.input.slice(key.start, key.end)}]`,\n          },\n        );\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      // @ts-expect-error abstract may not index node\n      if (node.abstract) {\n        this.raise(TSErrors.PrivateElementHasAbstract, node);\n      }\n\n      // @ts-expect-error accessibility may not index node\n      if (node.accessibility) {\n        this.raise(TSErrors.PrivateElementHasAccessibility, node, {\n          // @ts-expect-error refine typings\n          modifier: node.accessibility,\n        });\n      }\n\n      this.parseClassPropertyAnnotation(node);\n      return super.parseClassPrivateProperty(node);\n    }\n\n    parseClassAccessorProperty(\n      node: N.ClassAccessorProperty,\n    ): N.ClassAccessorProperty {\n      this.parseClassPropertyAnnotation(node);\n      if (node.optional) {\n        this.raise(TSErrors.AccessorCannotBeOptional, node);\n      }\n      return super.parseClassAccessorProperty(node);\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters && isConstructor) {\n        this.raise(TSErrors.ConstructorHasTypeParameters, typeParameters);\n      }\n\n      // @ts-expect-error declare does not exist in ClassMethod\n      const { declare = false, kind } = method;\n\n      if (declare && (kind === \"get\" || kind === \"set\")) {\n        this.raise(TSErrors.DeclareAccessor, method, { kind });\n      }\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    declareClassPrivateMethodInScope(\n      node: N.ClassPrivateMethod | N.TSDeclareMethod,\n      kind: number,\n    ) {\n      if (node.type === \"TSDeclareMethod\") return;\n      // This happens when using the \"estree\" plugin.\n      if (\n        (node as N.Node).type === \"MethodDefinition\" &&\n        !Object.hasOwn(\n          (node as unknown as N.EstreeMethodDefinition).value,\n          \"body\",\n        )\n      ) {\n        return;\n      }\n\n      super.declareClassPrivateMethodInScope(node, kind);\n    }\n\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      // handle `extends f<<T>\n      if (node.superClass && (this.match(tt.lt) || this.match(tt.bitShiftL))) {\n        node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n      }\n      if (this.eatContextual(tt._implements)) {\n        node.implements = this.tsParseHeritageClause(\"implements\");\n      }\n    }\n\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) prop.typeParameters = typeParameters;\n\n      return super.parseObjPropValue(\n        prop,\n\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n    }\n\n    parseFunctionParams(node: N.Function, isConstructor: boolean): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // `let x: number;`\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (\n        decl.id.type === \"Identifier\" &&\n        !this.hasPrecedingLineBreak() &&\n        this.eat(tt.bang)\n      ) {\n        decl.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) {\n        decl.id.typeAnnotation = type;\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeAnnotation();\n      }\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n      let state: State | undefined | null;\n      let jsx;\n      let typeCast;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        // Prefer to parse JSX if possible. But may be an arrow fn.\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` or `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (!jsx?.error && !this.match(tt.lt)) {\n        return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n      }\n\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n      // If the state was cloned in the JSX parsing branch above but there\n      // have been any error in the tryParse call, this.state is set to state\n      // so we still need to clone it.\n      if (!state || state === this.state) state = this.state.clone();\n\n      let typeParameters: N.TsTypeParameterDeclaration | undefined | null;\n      // We need to explicitly annotate 'abort' for microsoft/TypeScript#58170\n      const arrow = this.tryParse((abort: () => never) => {\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n        typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\n        const expr = super.parseMaybeAssign(\n          refExpressionErrors,\n          afterLeftParse,\n        );\n\n        if (\n          expr.type !== \"ArrowFunctionExpression\" ||\n          expr.extra?.parenthesized\n        ) {\n          abort();\n        }\n\n        // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n        if (typeParameters?.params.length !== 0) {\n          this.resetStartLocationFromNode(expr, typeParameters);\n        }\n        expr.typeParameters = typeParameters;\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            this.hasPlugin(\"jsx\") &&\n            expr.typeParameters.params.length === 1 &&\n            !expr.typeParameters.extra?.trailingComma\n          ) {\n            // report error if single type parameter used without trailing comma.\n            const parameter = expr.typeParameters\n              .params[0] as N.TsTypeParameter;\n            if (!parameter.constraint) {\n              // A single type parameter must either have constraints\n              // or a trailing comma, otherwise it's ambiguous with JSX.\n              this.raise(\n                TSErrors.SingleTypeParameterWithoutTrailingComma,\n                createPositionWithColumnOffset(parameter.loc.end, 1),\n                {\n                  typeParameterName: process.env.BABEL_8_BREAKING\n                    ? (parameter.name as N.Identifier).name\n                    : (parameter.name as string),\n                },\n              );\n            }\n          }\n        }\n\n        return expr;\n      }, state);\n\n      /*:: invariant(arrow.node != null) */\n      if (!arrow.error && !arrow.aborted) {\n        // This error is reported outside of the this.tryParse call so that\n        // in case of <T>(x) => 2, we don't consider <T>(x) as a type assertion\n        // because of this error.\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (!jsx) {\n        // Try parsing a type cast instead of an arrow function.\n        // This will never happen outside of JSX.\n        // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n        assert(!this.hasPlugin(\"jsx\"));\n\n        // This will start with a type assertion (via parseMaybeUnary).\n        // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n        typeCast = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n        /*:: invariant(!typeCast.aborted) */\n        /*:: invariant(typeCast.node != null) */\n        if (!typeCast.error) return typeCast.node;\n      }\n\n      if (jsx?.node) {\n        /*:: invariant(jsx.failState) */\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrow.node) {\n        /*:: invariant(arrow.failState) */\n        this.state = arrow.failState;\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (typeCast?.node) {\n        /*:: invariant(typeCast.failState) */\n        this.state = typeCast.failState;\n        return typeCast.node;\n      }\n\n      throw jsx?.error || arrow.error || typeCast?.error;\n    }\n\n    reportReservedArrowTypeParam(node: any) {\n      if (\n        node.params.length === 1 &&\n        !node.params[0].constraint &&\n        !node.extra?.trailingComma &&\n        this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")\n      ) {\n        this.raise(TSErrors.ReservedArrowTypeParam, node);\n      }\n    }\n\n    // Handle type assertions\n    parseMaybeUnary(\n      refExpressionErrors?: ExpressionErrors | null,\n      sawUnary?: boolean,\n    ): N.Expression {\n      if (!this.hasPlugin(\"jsx\") && this.match(tt.lt)) {\n        return this.tsParseTypeAssertion();\n      }\n      return super.parseMaybeUnary(refExpressionErrors, sawUnary);\n    }\n\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // This is different from how the TS parser does it.\n        // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n        const result = this.tryParse(abort => {\n          const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n            tt.colon,\n          );\n          if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n          return returnType;\n        });\n\n        if (result.aborted) return;\n\n        if (!result.thrown) {\n          if (result.error) this.state = result.failState;\n          // @ts-expect-error refine typings\n          node.returnType = result.node;\n        }\n      }\n\n      return super.parseArrow(node);\n    }\n\n    // Allow type annotations inside of a parameter list.\n    parseAssignableListItemTypes(\n      param: N.Pattern,\n      flags: ParseBindingListFlags,\n    ) {\n      if (!(flags & ParseBindingListFlags.IS_FUNCTION_PARAMS)) return param;\n\n      if (this.eat(tt.question)) {\n        (param as any as N.Identifier).optional = true;\n      }\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) param.typeAnnotation = type;\n      this.resetEndLocation(param);\n\n      return param;\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      switch (node.type) {\n        case \"TSTypeCastExpression\":\n          return this.isAssignable(node.expression, isBinding);\n        case \"TSParameterProperty\":\n          return true;\n        default:\n          return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      switch (node.type) {\n        case \"ParenthesizedExpression\":\n          this.toAssignableParenthesizedExpression(node, isLHS);\n          break;\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          if (isLHS) {\n            this.expressionScope.recordArrowParameterBindingError(\n              TSErrors.UnexpectedTypeCastInParameter,\n              node,\n            );\n          } else {\n            this.raise(TSErrors.UnexpectedTypeCastInParameter, node);\n          }\n          this.toAssignable(node.expression, isLHS);\n          break;\n        case \"AssignmentExpression\":\n          if (!isLHS && node.left.type === \"TSTypeCastExpression\") {\n            node.left = this.typeCastToParameter(node.left) as N.Assignable;\n          }\n        /* fall through */\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableParenthesizedExpression(\n      node: N.ParenthesizedExpression,\n      isLHS: boolean,\n    ): void {\n      switch (node.expression.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n        case \"ParenthesizedExpression\":\n          this.toAssignable(node.expression, isLHS);\n          break;\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    checkToRestConversion(node: N.Node, allowPattern: boolean): void {\n      switch (node.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n        case \"TSNonNullExpression\":\n          this.checkToRestConversion(node.expression, false);\n          break;\n        default:\n          super.checkToRestConversion(node, allowPattern);\n      }\n    }\n\n    isValidLVal(\n      type:\n        | \"TSTypeCastExpression\"\n        | \"TSParameterProperty\"\n        | \"TSNonNullExpression\"\n        | \"TSInstantiationExpression\"\n        | \"TSAsExpression\"\n        | \"TSSatisfiesExpression\"\n        | \"TSTypeAssertion\",\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      switch (type) {\n        // Allow \"typecasts\" to appear on the left of assignment expressions,\n        // because it may be in an arrow function.\n        // e.g. `const f = (foo: number = 0) => foo;`\n        case \"TSTypeCastExpression\":\n          return true;\n        case \"TSParameterProperty\":\n          return \"parameter\";\n        case \"TSNonNullExpression\":\n        case \"TSInstantiationExpression\":\n          return \"expression\";\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n          return (\n            (binding !== BindingFlag.TYPE_NONE || !isUnparenthesizedInAssign) &&\n            ([\"expression\", true] as [string, boolean])\n          );\n        default:\n          return super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n      }\n    }\n\n    parseBindingAtom(): N.Pattern {\n      if (this.state.type === tt._this) {\n        return this.parseIdentifier(/* liberal */ true);\n      }\n      return super.parseBindingAtom();\n    }\n\n    parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n      // handles `@f<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsParseTypeArgumentsInExpression();\n\n        if (this.match(tt.parenL)) {\n          const call = super.parseMaybeDecoratorArguments(\n            expr,\n          ) as N.CallExpression;\n          call.typeParameters = typeArguments;\n          return call;\n        }\n\n        this.unexpected(null, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr);\n    }\n\n    checkCommaAfterRest(\n      close: (typeof charCodes)[keyof typeof charCodes],\n    ): boolean {\n      if (\n        this.state.isAmbientContext &&\n        this.match(tt.comma) &&\n        this.lookaheadCharCode() === close\n      ) {\n        this.next();\n        return false;\n      }\n      return super.checkCommaAfterRest(close);\n    }\n\n    // === === === === === === === === === === === === === === === ===\n    // Note: All below methods are duplicates of something in flow.js.\n    // Not sure what the best way to combine these is.\n    // === === === === === === === === === === === === === === === ===\n\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    isClassProperty(): boolean {\n      return (\n        this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n      );\n    }\n\n    parseMaybeDefault(\n      startLoc?: Position | null,\n      left?: Pattern | null,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(TSErrors.TypeAnnotationAfterAssign, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    // ensure that inside types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      if (this.state.inType) {\n        if (code === charCodes.greaterThan) {\n          this.finishOp(tt.gt, 1);\n          return;\n        }\n        if (code === charCodes.lessThan) {\n          this.finishOp(tt.lt, 1);\n          return;\n        }\n      }\n      super.getTokenFromCode(code);\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    toAssignableList(\n      exprList: Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TSTypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    shouldParseArrow(params: Array<N.Node>) {\n      if (this.match(tt.colon)) {\n        return params.every(expr => this.isAssignable(expr, true));\n      }\n      return super.shouldParseArrow(params);\n    }\n\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    canHaveLeadingDecorator() {\n      // Avoid unnecessary lookahead in checking for abstract class unless needed!\n      return super.canHaveLeadingDecorator() || this.isAbstractClass();\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      // handles `<Component<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsTryParseAndCatch(() =>\n          this.tsParseTypeArgumentsInExpression(),\n        );\n        if (typeArguments) node.typeParameters = typeArguments;\n      }\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    getGetterSetterExpectedParamCount(\n      method: N.ObjectMethod | N.ClassMethod,\n    ): number {\n      const baseCount = super.getGetterSetterExpectedParamCount(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      const firstParam = params[0];\n      const hasContextParam = firstParam && this.isThisParam(firstParam);\n\n      return hasContextParam ? baseCount + 1 : baseCount;\n    }\n\n    parseCatchClauseParam(): N.Pattern {\n      const param = super.parseCatchClauseParam();\n      const type = this.tsTryParseTypeAnnotation();\n\n      if (type) {\n        param.typeAnnotation = type;\n        this.resetEndLocation(param);\n      }\n\n      return param;\n    }\n\n    tsInAmbientContext<T>(cb: () => T): T {\n      const { isAmbientContext: oldIsAmbientContext, strict: oldStrict } =\n        this.state;\n      this.state.isAmbientContext = true;\n      this.state.strict = false;\n      try {\n        return cb();\n      } finally {\n        this.state.isAmbientContext = oldIsAmbientContext;\n        this.state.strict = oldStrict;\n      }\n    }\n\n    parseClass<T extends N.Class>(\n      node: Undone<T>,\n      isStatement: boolean,\n      optionalId?: boolean,\n    ): T {\n      const oldInAbstractClass = this.state.inAbstractClass;\n      this.state.inAbstractClass = !!(node as any).abstract;\n      try {\n        return super.parseClass(node, isStatement, optionalId);\n      } finally {\n        this.state.inAbstractClass = oldInAbstractClass;\n      }\n    }\n\n    tsParseAbstractDeclaration(\n      node: any,\n      decorators: N.Decorator[] | null,\n    ): N.ClassDeclaration | N.TsInterfaceDeclaration | undefined | null {\n      if (this.match(tt._class)) {\n        node.abstract = true;\n        return this.maybeTakeDecorators(\n          decorators,\n          this.parseClass<N.ClassDeclaration>(\n            node as N.ClassDeclaration,\n            /* isStatement */ true,\n            /* optionalId */ false,\n          ),\n        );\n      } else if (this.isContextual(tt._interface)) {\n        // for invalid abstract interface\n\n        // To avoid\n        //   abstract interface\n        //   Foo {}\n        if (!this.hasFollowingLineBreak()) {\n          node.abstract = true;\n          this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, node);\n          return this.tsParseInterfaceDeclaration(\n            node as N.TsInterfaceDeclaration,\n          );\n        }\n      } else {\n        this.unexpected(null, tt._class);\n      }\n    }\n\n    parseMethod<\n      T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope?: boolean,\n    ) {\n      const method = super.parseMethod<T>(\n        node,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error todo(flow->ts) property not defined for all types in union\n      if (method.abstract) {\n        const hasBody = this.hasPlugin(\"estree\")\n          ? // @ts-expect-error estree typings\n            !!method.value.body\n          : !!method.body;\n        if (hasBody) {\n          const { key } = method;\n          this.raise(TSErrors.AbstractMethodHasImplementation, method, {\n            methodName:\n              key.type === \"Identifier\" && !method.computed\n                ? key.name\n                : `[${this.input.slice(key.start, key.end)}]`,\n          });\n        }\n      }\n      return method;\n    }\n\n    tsParseTypeParameterName(): N.Identifier | string {\n      const typeName: N.Identifier = this.parseIdentifier();\n      return process.env.BABEL_8_BREAKING ? typeName : typeName.name;\n    }\n\n    shouldParseAsAmbientContext(): boolean {\n      return !!this.getPluginOption(\"typescript\", \"dts\");\n    }\n\n    parse() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.parse();\n    }\n\n    getExpression() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.getExpression();\n    }\n\n    parseExportSpecifier(\n      node: Undone<N.ExportSpecifier>,\n      isString: boolean,\n      isInTypeExport: boolean,\n      isMaybeTypeOnly: boolean,\n    ) {\n      if (!isString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          node,\n          /* isImport */ false,\n          isInTypeExport,\n        );\n        return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n      }\n      node.exportKind = \"value\";\n      return super.parseExportSpecifier(\n        node,\n        isString,\n        isInTypeExport,\n        isMaybeTypeOnly,\n      );\n    }\n\n    parseImportSpecifier(\n      specifier: Undone<N.ImportSpecifier>,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      if (!importedIsString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          specifier,\n          /* isImport */ true,\n          isInTypeOnlyImport,\n        );\n        return this.finishNode<N.ImportSpecifier>(specifier, \"ImportSpecifier\");\n      }\n      specifier.importKind = \"value\";\n      return super.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        isInTypeOnlyImport,\n        isMaybeTypeOnly,\n        isInTypeOnlyImport\n          ? BindingFlag.TYPE_TS_TYPE_IMPORT\n          : BindingFlag.TYPE_TS_VALUE_IMPORT,\n      );\n    }\n\n    parseTypeOnlyImportExportSpecifier(\n      node: any,\n      isImport: boolean,\n      isInTypeOnlyImportExport: boolean,\n    ): void {\n      const leftOfAsKey = isImport ? \"imported\" : \"local\";\n      const rightOfAsKey = isImport ? \"local\" : \"exported\";\n\n      let leftOfAs = node[leftOfAsKey];\n      let rightOfAs;\n\n      let hasTypeSpecifier = false;\n      let canParseAsKeyword = true;\n\n      const loc = leftOfAs.loc.start;\n\n      // https://github.com/microsoft/TypeScript/blob/fc4f9d83d5939047aa6bb2a43965c6e9bbfbc35b/src/compiler/parser.ts#L7411-L7456\n      // import { type } from \"mod\";          - hasTypeSpecifier: false, leftOfAs: type\n      // import { type as } from \"mod\";       - hasTypeSpecifier: true,  leftOfAs: as\n      // import { type as as } from \"mod\";    - hasTypeSpecifier: false, leftOfAs: type, rightOfAs: as\n      // import { type as as as } from \"mod\"; - hasTypeSpecifier: true,  leftOfAs: as,   rightOfAs: as\n      if (this.isContextual(tt._as)) {\n        // { type as ...? }\n        const firstAs = this.parseIdentifier();\n        if (this.isContextual(tt._as)) {\n          // { type as as ...? }\n          const secondAs = this.parseIdentifier();\n          if (tokenIsKeywordOrIdentifier(this.state.type)) {\n            // { type as as something }\n            hasTypeSpecifier = true;\n            leftOfAs = firstAs;\n            rightOfAs = isImport\n              ? this.parseIdentifier()\n              : this.parseModuleExportName();\n            canParseAsKeyword = false;\n          } else {\n            // { type as as }\n            rightOfAs = secondAs;\n            canParseAsKeyword = false;\n          }\n        } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n          // { type as something }\n          canParseAsKeyword = false;\n          rightOfAs = isImport\n            ? this.parseIdentifier()\n            : this.parseModuleExportName();\n        } else {\n          // { type as }\n          hasTypeSpecifier = true;\n          leftOfAs = firstAs;\n        }\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n        // { type something ...? }\n        hasTypeSpecifier = true;\n        if (isImport) {\n          leftOfAs = this.parseIdentifier(true);\n          if (!this.isContextual(tt._as)) {\n            this.checkReservedWord(\n              leftOfAs.name,\n              leftOfAs.loc.start,\n              true,\n              true,\n            );\n          }\n        } else {\n          leftOfAs = this.parseModuleExportName();\n        }\n      }\n      if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n        this.raise(\n          isImport\n            ? TSErrors.TypeModifierIsUsedInTypeImports\n            : TSErrors.TypeModifierIsUsedInTypeExports,\n          loc,\n        );\n      }\n\n      node[leftOfAsKey] = leftOfAs;\n      node[rightOfAsKey] = rightOfAs;\n\n      const kindKey = isImport ? \"importKind\" : \"exportKind\";\n      node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n\n      if (canParseAsKeyword && this.eatContextual(tt._as)) {\n        node[rightOfAsKey] = isImport\n          ? this.parseIdentifier()\n          : this.parseModuleExportName();\n      }\n      if (!node[rightOfAsKey]) {\n        node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);\n      }\n      if (isImport) {\n        this.checkIdentifier(\n          node[rightOfAsKey],\n          hasTypeSpecifier\n            ? BindingFlag.TYPE_TS_TYPE_IMPORT\n            : BindingFlag.TYPE_TS_VALUE_IMPORT,\n        );\n      }\n    }\n  };\n\nfunction isPossiblyLiteralEnum(expression: N.Expression): boolean {\n  if (expression.type !== \"MemberExpression\") return false;\n\n  const { computed, property } = expression;\n\n  if (\n    computed &&\n    property.type !== \"StringLiteral\" &&\n    (property.type !== \"TemplateLiteral\" || property.expressions.length > 0)\n  ) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n\n// If a const declaration has no type annotation and is initialized to\n// a string literal, numeric literal, or enum reference, then it is\n// allowed. In an ideal world, we'd check whether init was *actually* an\n// enum reference, but we allow anything that \"could be\" a literal enum\n// in `isPossiblyLiteralEnum` since we don't have all the information\n// that the typescript compiler has.\nfunction isValidAmbientConstInitializer(\n  expression: N.Expression,\n  estree: boolean,\n): boolean {\n  const { type } = expression;\n  if (expression.extra?.parenthesized) {\n    return false;\n  }\n  if (estree) {\n    if (type === \"Literal\") {\n      const { value } = expression;\n      if (typeof value === \"string\" || typeof value === \"boolean\") {\n        return true;\n      }\n    }\n  } else {\n    if (type === \"StringLiteral\" || type === \"BooleanLiteral\") {\n      return true;\n    }\n  }\n  if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {\n    return true;\n  }\n  if (type === \"TemplateLiteral\" && expression.expressions.length === 0) {\n    return true;\n  }\n  if (isPossiblyLiteralEnum(expression)) {\n    return true;\n  }\n  return false;\n}\n\nfunction isNumber(expression: N.Expression, estree: boolean): boolean {\n  if (estree) {\n    return (\n      expression.type === \"Literal\" &&\n      (typeof expression.value === \"number\" || \"bigint\" in expression)\n    );\n  }\n  return (\n    expression.type === \"NumericLiteral\" || expression.type === \"BigIntLiteral\"\n  );\n}\n\nfunction isNegativeNumber(expression: N.Expression, estree: boolean): boolean {\n  if (expression.type === \"UnaryExpression\") {\n    const { operator, argument } = expression;\n    if (operator === \"-\" && isNumber(argument, estree)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isUncomputedMemberExpressionChain(expression: N.Expression): boolean {\n  if (expression.type === \"Identifier\") return true;\n  if (expression.type !== \"MemberExpression\" || expression.computed) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n", "import * as charCodes from \"charcodes\";\n\nimport { tokenLabelName, tt } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport { ParseErrorEnum } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { Position } from \"../util/location.ts\";\n\ntype PossiblePlaceholders = {\n  Identifier: N.Identifier;\n  StringLiteral: N.StringLiteral;\n  Expression: N.Expression;\n  Statement: N.Statement;\n  Declaration: N.Declaration;\n  BlockStatement: N.BlockStatement;\n  ClassBody: N.ClassBody;\n  Pattern: N.Pattern;\n};\nexport type PlaceholderTypes = keyof PossiblePlaceholders;\n\ntype NodeOf<T extends keyof PossiblePlaceholders> = PossiblePlaceholders[T];\n// todo: when there  is proper union type for Node\n// type NodeOf<T extends PlaceholderTypes> = Extract<N.Node, { type: T }>;\n\n// todo: Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T extends PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\n/* eslint sort-keys: \"error\" */\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\n  ClassNameIsRequired: \"A class name is required.\",\n  UnexpectedSpace: \"Unexpected space in placeholder.\",\n});\n\nexport default (superClass: typeof Parser) =>\n  class PlaceholdersParserMixin extends superClass implements Parser {\n    parsePlaceholder<T extends PlaceholderTypes>(\n      expectedNode: T,\n    ): /*?N.Placeholder<T>*/ MaybePlaceholder<T> | undefined {\n      if (this.match(tt.placeholder)) {\n        const node = this.startNode<N.Placeholder<T>>();\n        this.next();\n        this.assertNoSpace();\n\n        // We can't use this.parseIdentifier because\n        // we don't want nested placeholders.\n        node.name = super.parseIdentifier(/* liberal */ true);\n\n        this.assertNoSpace();\n        this.expect(tt.placeholder);\n        return this.finishPlaceholder(node, expectedNode);\n      }\n    }\n\n    finishPlaceholder<T extends PlaceholderTypes>(\n      node: Undone<N.Placeholder> | Undone<NodeOf<PlaceholderTypes>>,\n      expectedNode: T,\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n      let placeholder = node as unknown as N.Placeholder<T>;\n\n      if (!placeholder.expectedNode || !placeholder.type) {\n        placeholder = this.finishNode(\n          placeholder,\n          \"Placeholder\",\n        ) as unknown as N.Placeholder<T>;\n      }\n\n      placeholder.expectedNode = expectedNode;\n      return placeholder as unknown as MaybePlaceholder<T>;\n    }\n\n    /* ============================================================ *\n     * tokenizer/index.js                                           *\n     * ============================================================ */\n\n    getTokenFromCode(code: number) {\n      if (\n        code === charCodes.percentSign &&\n        this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n      ) {\n        this.finishOp(tt.placeholder, 2);\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(\n      refExpressionErrors?: ExpressionErrors | null,\n    ): MaybePlaceholder<\"Expression\"> {\n      return (\n        this.parsePlaceholder(\"Expression\") ||\n        super.parseExprAtom(refExpressionErrors)\n      );\n    }\n\n    parseIdentifier(liberal?: boolean): MaybePlaceholder<\"Identifier\"> {\n      // NOTE: This function only handles identifiers outside of\n      // expressions and binding patterns, since they are already\n      // handled by the parseExprAtom and parseBindingAtom functions.\n      // This is needed, for example, to parse \"class %%NAME%% {}\".\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(liberal)\n      );\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ) {\n      // Sometimes we call #checkReservedWord(node.name), expecting\n      // that node is an Identifier. If it is a Placeholder, name\n      // will be undefined.\n      if (word !== undefined) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/lval.js                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"Placeholder\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean): void {\n      if (\n        node &&\n        node.type === \"Placeholder\" &&\n        node.expectedNode === \"Expression\"\n      ) {\n        node.expectedNode = \"Pattern\";\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/statement.js                                          *\n     * ============================================================ */\n\n    chStartsBindingIdentifier(ch: number, pos: number): boolean {\n      if (super.chStartsBindingIdentifier(ch, pos)) {\n        return true;\n      }\n\n      // Accept \"let %%\" as the start of \"let %%placeholder%%\", as though the\n      // placeholder were an identifier.\n      const nextToken = this.lookahead();\n      if (nextToken.type === tt.placeholder) {\n        return true;\n      }\n\n      return false;\n    }\n\n    verifyBreakContinue(\n      node: N.BreakStatement | N.ContinueStatement,\n      isBreak: boolean,\n    ) {\n      // @ts-expect-error: node.label could be Placeholder\n      if (node.label && node.label.type === \"Placeholder\") return;\n      super.verifyBreakContinue(node, isBreak);\n    }\n\n    // @ts-expect-error Plugin will override parser interface\n    parseExpressionStatement(\n      node: MaybePlaceholder<\"Statement\">,\n      expr: MaybePlaceholder<\"Expression\">,\n    ): MaybePlaceholder<\"Statement\"> {\n      // @ts-expect-error placeholder typings\n      if (expr.type !== \"Placeholder\" || expr.extra?.parenthesized) {\n        // @ts-expect-error placeholder typings\n        return super.parseExpressionStatement(node, expr);\n      }\n\n      if (this.match(tt.colon)) {\n        // @ts-expect-error placeholder typings\n        const stmt: N.LabeledStatement = node;\n        stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n        this.next();\n        stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();\n        return this.finishNode(stmt, \"LabeledStatement\");\n      }\n\n      this.semicolon();\n      const stmtPlaceholder = node as unknown as N.Placeholder<\"Statement\">;\n      stmtPlaceholder.name = (expr as N.Placeholder).name;\n      return this.finishPlaceholder(stmtPlaceholder, \"Statement\");\n    }\n\n    parseBlock(\n      allowDirectives?: boolean,\n      createNewLexicalScope?: boolean,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): MaybePlaceholder<\"BlockStatement\"> {\n      return (\n        this.parsePlaceholder(\"BlockStatement\") ||\n        super.parseBlock(\n          allowDirectives,\n          createNewLexicalScope,\n          afterBlockParse,\n        )\n      );\n    }\n\n    parseFunctionId(\n      requireId?: boolean,\n    ): MaybePlaceholder<\"Identifier\"> | undefined | null {\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(requireId)\n      );\n    }\n    // @ts-expect-error Plugin will override parser interface\n    parseClass<T extends N.Class>(\n      node: T,\n      isStatement: /* T === ClassDeclaration */ boolean,\n      optionalId?: boolean,\n    ): T {\n      const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n      this.next();\n      const oldStrict = this.state.strict;\n\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (placeholder) {\n        if (\n          this.match(tt._extends) ||\n          this.match(tt.placeholder) ||\n          this.match(tt.braceL)\n        ) {\n          node.id = placeholder;\n        } else if (optionalId || !isStatement) {\n          node.id = null;\n          node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n          return this.finishNode(node, type);\n        } else {\n          throw this.raise(\n            PlaceholderErrors.ClassNameIsRequired,\n            this.state.startLoc,\n          );\n        }\n      } else {\n        this.parseClassId(node, isStatement, optionalId);\n      }\n\n      super.parseClassSuper(node);\n      node.body =\n        this.parsePlaceholder(\"ClassBody\") ||\n        super.parseClassBody(!!node.superClass, oldStrict);\n      return this.finishNode(node, type);\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseExport(node, decorators);\n\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // export %%DECL%%;\n        node2.specifiers = [];\n        node2.source = null;\n        node2.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n        return this.finishNode(node2, \"ExportNamedDeclaration\");\n      }\n\n      // export %%NAME%% from \"foo\";\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode<N.ExportDefaultSpecifier>();\n      specifier.exported = placeholder;\n      node2.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n      return super.parseExport(node2, decorators);\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.match(tt._default)) {\n        const next = this.nextTokenStart();\n        if (this.isUnparsedContextual(next, \"from\")) {\n          if (\n            this.input.startsWith(\n              tokenLabelName(tt.placeholder),\n              this.nextTokenStartSince(next + 4),\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n      return super.isExportDefaultSpecifier();\n    }\n\n    maybeParseExportDefaultSpecifier(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      maybeDefaultIdentifier: N.Identifier | null,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      if ((node as N.ExportNamedDeclaration).specifiers?.length) {\n        // \"export %%NAME%%\" has already been parsed by #parseExport.\n        return true;\n      }\n      return super.maybeParseExportDefaultSpecifier(\n        node,\n        maybeDefaultIdentifier,\n      );\n    }\n\n    checkExport(node: N.ExportNamedDeclaration): void {\n      const { specifiers } = node;\n      if (specifiers?.length) {\n        node.specifiers = specifiers.filter(\n          // @ts-expect-error placeholder typings\n          node => node.exported.type === \"Placeholder\",\n        );\n      }\n      super.checkExport(node);\n      node.specifiers = specifiers;\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration>,\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseImport(node);\n\n      node.specifiers = [];\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // import %%STRING%%;\n        node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n        this.semicolon();\n        return this.finishNode(node, \"ImportDeclaration\");\n      }\n\n      // import %%DEFAULT%% ...\n      const specifier =\n        this.startNodeAtNode<N.ImportDefaultSpecifier>(placeholder);\n      specifier.local = placeholder;\n      node.specifiers.push(\n        this.finishNode(specifier, \"ImportDefaultSpecifier\"),\n      );\n\n      if (this.eat(tt.comma)) {\n        // import %%DEFAULT%%, * as ...\n        const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n        // import %%DEFAULT%%, { ...\n        if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n      }\n\n      this.expectContextual(tt._from);\n      node.source = this.parseImportSource();\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n      // import ... from %%STRING%%;\n\n      return (\n        this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource()\n      );\n    }\n\n    // Throws if the current token and the prev one are separated by a space.\n    assertNoSpace(): void {\n      if (this.state.start > this.state.lastTokEndLoc.index) {\n        this.raise(PlaceholderErrors.UnexpectedSpace, this.state.lastTokEndLoc);\n      }\n    }\n  };\n", "import type Parser from \"../parser/index.ts\";\nimport { tokenIsIdentifier, tt } from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\n\nexport default (superClass: typeof Parser) =>\n  class V8IntrinsicMixin extends superClass implements Parser {\n    parseV8Intrinsic(): N.Expression {\n      if (this.match(tt.modulo)) {\n        const v8IntrinsicStartLoc = this.state.startLoc;\n        // let the `loc` of Identifier starts from `%`\n        const node = this.startNode<N.Identifier>();\n        this.next(); // eat '%'\n        if (tokenIsIdentifier(this.state.type)) {\n          const name = this.parseIdentifierName();\n          const identifier = this.createIdentifier(node, name);\n          // @ts-expect-error: avoid mutating AST types\n          identifier.type = \"V8IntrinsicIdentifier\";\n          if (this.match(tt.parenL)) {\n            return identifier;\n          }\n        }\n        this.unexpected(v8IntrinsicStartLoc);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      return (\n        this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors)\n      );\n    }\n  };\n", "import type Parser from \"./parser/index.ts\";\nimport type { PluginConfig } from \"./typings.ts\";\n\nexport type Plugin = PluginConfig;\n\nexport type PluginList = PluginConfig[];\n\nexport type MixinPlugin = (\n  superClass: new (...args: any) => Parser,\n) => new (...args: any) => Parser;\n\nconst PIPELINE_PROPOSALS = [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^^\", \"@@\", \"^\", \"%\", \"#\"];\n\nexport function validatePlugins(pluginsMap: Map<string, any>) {\n  if (pluginsMap.has(\"decorators\")) {\n    if (pluginsMap.has(\"decorators-legacy\")) {\n      throw new Error(\n        \"Cannot use the decorators and decorators-legacy plugin together\",\n      );\n    }\n\n    const decoratorsBeforeExport =\n      pluginsMap.get(\"decorators\").decoratorsBeforeExport;\n    if (\n      decoratorsBeforeExport != null &&\n      typeof decoratorsBeforeExport !== \"boolean\"\n    ) {\n      throw new Error(\n        \"'decoratorsBeforeExport' must be a boolean, if specified.\",\n      );\n    }\n\n    const allowCallParenthesized =\n      pluginsMap.get(\"decorators\").allowCallParenthesized;\n    if (\n      allowCallParenthesized != null &&\n      typeof allowCallParenthesized !== \"boolean\"\n    ) {\n      throw new Error(\"'allowCallParenthesized' must be a boolean.\");\n    }\n  }\n\n  if (pluginsMap.has(\"flow\") && pluginsMap.has(\"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (pluginsMap.has(\"placeholders\") && pluginsMap.has(\"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (pluginsMap.has(\"pipelineOperator\")) {\n    const proposal = pluginsMap.get(\"pipelineOperator\").proposal;\n\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(\n        `\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`,\n      );\n    }\n\n    const tupleSyntaxIsHash = process.env.BABEL_8_BREAKING\n      ? pluginsMap.has(\"recordAndTuple\")\n      : pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\";\n\n    if (proposal === \"hack\") {\n      if (pluginsMap.has(\"placeholders\")) {\n        throw new Error(\n          \"Cannot combine placeholders plugin and Hack-style pipes.\",\n        );\n      }\n\n      if (pluginsMap.has(\"v8intrinsic\")) {\n        throw new Error(\n          \"Cannot combine v8intrinsic plugin and Hack-style pipes.\",\n        );\n      }\n\n      const topicToken = pluginsMap.get(\"pipelineOperator\").topicToken;\n\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n\n        throw new Error(\n          `\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`,\n        );\n      }\n\n      if (topicToken === \"#\" && tupleSyntaxIsHash) {\n        throw new Error(\n          `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n        );\n      }\n    } else if (proposal === \"smart\" && tupleSyntaxIsHash) {\n      throw new Error(\n        `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"smart\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n      );\n    }\n  }\n\n  if (pluginsMap.has(\"moduleAttributes\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`moduleAttributes` has been removed in Babel 8, please use `importAttributes` parser plugin, or `@babel/plugin-syntax-import-attributes`.\",\n      );\n    } else {\n      if (\n        pluginsMap.has(\"importAttributes\") ||\n        pluginsMap.has(\"importAssertions\")\n      ) {\n        throw new Error(\n          \"Cannot combine importAssertions, importAttributes and moduleAttributes plugins.\",\n        );\n      }\n      const moduleAttributesVersionPluginOption =\n        pluginsMap.get(\"moduleAttributes\").version;\n      if (moduleAttributesVersionPluginOption !== \"may-2020\") {\n        throw new Error(\n          \"The 'moduleAttributes' plugin requires a 'version' option,\" +\n            \" representing the last proposal update. Currently, the\" +\n            \" only supported value is 'may-2020'.\",\n        );\n      }\n    }\n  }\n  if (\n    pluginsMap.has(\"importAttributes\") &&\n    pluginsMap.has(\"importAssertions\")\n  ) {\n    throw new Error(\n      \"Cannot combine importAssertions and importAttributes plugins.\",\n    );\n  }\n\n  if (pluginsMap.has(\"recordAndTuple\")) {\n    const syntaxType = pluginsMap.get(\"recordAndTuple\").syntaxType;\n    if (syntaxType != null) {\n      if (process.env.BABEL_8_BREAKING) {\n        if (syntaxType === \"hash\") {\n          throw new Error(\n            'The syntaxType option is no longer required in Babel 8. You can safely remove { syntaxType: \"hash\" } from the recordAndTuple config.',\n          );\n        } else {\n          throw new Error(\n            'The syntaxType option is no longer required in Babel 8. Please remove { syntaxType: \"bar\" } from the recordAndTuple config and migrate to the hash syntax #{} and #[].',\n          );\n        }\n      } else {\n        const RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n        if (!RECORD_AND_TUPLE_SYNTAX_TYPES.includes(syntaxType)) {\n          throw new Error(\n            \"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \" +\n              RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n          );\n        }\n      }\n    }\n  }\n\n  if (\n    pluginsMap.has(\"asyncDoExpressions\") &&\n    !pluginsMap.has(\"doExpressions\")\n  ) {\n    const error = new Error(\n      \"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\",\n    );\n    // @ts-expect-error so @babel/core can provide better error message\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n\n  if (\n    pluginsMap.has(\"optionalChainingAssign\") &&\n    pluginsMap.get(\"optionalChainingAssign\").version !== \"2023-07\"\n  ) {\n    throw new Error(\n      \"The 'optionalChainingAssign' plugin requires a 'version' option,\" +\n        \" representing the last proposal update. Currently, the\" +\n        \" only supported value is '2023-07'.\",\n    );\n  }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree.ts\";\nimport flow from \"./plugins/flow/index.ts\";\nimport jsx from \"./plugins/jsx/index.ts\";\nimport typescript from \"./plugins/typescript/index.ts\";\nimport placeholders from \"./plugins/placeholders.ts\";\nimport v8intrinsic from \"./plugins/v8intrinsic.ts\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders,\n};\n\nexport const mixinPluginNames = Object.keys(mixinPlugins) as ReadonlyArray<\n  \"estree\" | \"jsx\" | \"flow\" | \"typescript\" | \"v8intrinsic\" | \"placeholders\"\n>;\n", "import type { PluginList } from \"./plugin-utils.ts\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"module\" | \"unambiguous\";\n\nexport interface Options {\n  sourceType?: SourceType;\n  sourceFilename?: string;\n  startColumn?: number;\n  startLine?: number;\n  allowAwaitOutsideFunction?: boolean;\n  allowReturnOutsideFunction?: boolean;\n  allowNewTargetOutsideFunction?: boolean;\n  allowImportExportEverywhere?: boolean;\n  allowSuperOutsideMethod?: boolean;\n  allowUndeclaredExports?: boolean;\n  plugins?: PluginList;\n  strictMode?: boolean | undefined | null;\n  ranges?: boolean;\n  tokens?: boolean;\n  createImportExpressions?: boolean;\n  createParenthesizedExpressions?: boolean;\n  errorRecovery?: boolean;\n  attachComment?: boolean;\n  annexB?: boolean;\n}\n\ntype OptionsWithDefaults = { [P in keyof Options]-?: Options[P] };\n\nexport const defaultOptions: OptionsWithDefaults = {\n  // Source type (\"script\" or \"module\") for different semantics\n  sourceType: \"script\",\n  // Source filename.\n  sourceFilename: undefined,\n  // Column (0-based) from which to start counting source. Useful for\n  // integration with other tools.\n  startColumn: 0,\n  // Line (1-based) from which to start counting source. Useful for\n  // integration with other tools.\n  startLine: 1,\n  // When enabled, await at the top level is not considered an\n  // error.\n  allowAwaitOutsideFunction: false,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, new.target outside a function or class is not\n  // considered an error.\n  allowNewTargetOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program.\n  allowImportExportEverywhere: false,\n  // TODO\n  allowSuperOutsideMethod: false,\n  // When enabled, export statements can reference undeclared variables.\n  allowUndeclaredExports: false,\n  // An array of plugins to enable\n  plugins: [],\n  // TODO\n  strictMode: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // Adds all parsed tokens to a `tokens` property on the `File` node\n  tokens: false,\n  // Whether to create ImportExpression AST nodes (if false\n  // `import(foo)` will be parsed as CallExpression(Import, [Identifier(foo)])\n  createImportExpressions: process.env.BABEL_8_BREAKING ? true : false,\n  // Whether to create ParenthesizedExpression AST nodes (if false\n  // the parser sets extra.parenthesized on the expression nodes instead).\n  createParenthesizedExpressions: false,\n  // When enabled, errors are attached to the AST instead of being directly thrown.\n  // Some errors will still throw, because @babel/parser can't always recover.\n  errorRecovery: false,\n  // When enabled, comments will be attached to adjacent AST nodes as one of\n  // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\n  // is vital to preserve comments after transform. If you don't print AST back,\n  // consider set this option to `false` for performance\n  attachComment: true,\n  // When enabled, the parser will support Annex B syntax.\n  // https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers\n  annexB: true,\n};\n\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): OptionsWithDefaults {\n  if (opts == null) {\n    return { ...defaultOptions };\n  }\n  if (opts.annexB != null && opts.annexB !== false) {\n    throw new Error(\"The `annexB` option can only be set to `false`.\");\n  }\n\n  const options: any = {};\n  for (const key of Object.keys(defaultOptions) as (keyof Options)[]) {\n    options[key] = opts[key] ?? defaultOptions[key];\n  }\n  return options;\n}\n", "// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {\n  tokenCanStartExpression,\n  tokenIsAssignment,\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsOperator,\n  tokenIsPostfix,\n  tokenIsPrefix,\n  tokenIsRightAssociative,\n  tokenIsTemplate,\n  tokenKeywordOrIdentifierIsKeyword,\n  tokenLabelName,\n  tokenOperatorPrecedence,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport LValParser from \"./lval.ts\";\nimport {\n  isKeyword,\n  isReservedWord,\n  isStrictReservedWord,\n  isStrictBindReservedWord,\n  isIdentifierStart,\n  canBeReservedWord,\n} from \"../util/identifier.ts\";\nimport {\n  type Position,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport * as charCodes from \"charcodes\";\nimport { ScopeFlag, BindingFlag } from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newArrowHeadScope,\n  newAsyncArrowScope,\n  newExpressionScope,\n} from \"../util/expression-scope.ts\";\nimport { Errors, type ParseError } from \"../parse-error.ts\";\nimport {\n  UnparenthesizedPipeBodyDescriptions,\n  type UnparenthesizedPipeBodyTypes,\n} from \"../parse-error/pipeline-operator-errors.ts\";\nimport { setInnerComments } from \"./comments.ts\";\nimport { cloneIdentifier, type Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type { SourceType } from \"../options.ts\";\n\nexport default abstract class ExpressionParser extends LValParser {\n  // Forward-declaration: defined in statement.js\n  abstract parseBlock(\n    allowDirectives?: boolean,\n    createNewLexicalScope?: boolean,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement;\n  abstract parseClass(\n    node: N.Class,\n    isStatement: boolean,\n    optionalId?: boolean,\n  ): N.Class;\n  abstract parseDecorators(allowExport?: boolean): void;\n  abstract parseFunction<T extends N.NormalFunction>(\n    node: T,\n    statement?: number,\n    allowExpressionBody?: boolean,\n    isAsync?: boolean,\n  ): T;\n  abstract parseFunctionParams(node: N.Function, isConstructor?: boolean): void;\n  abstract parseBlockOrModuleBlockBody(\n    body: N.Statement[],\n    directives: N.Directive[] | null | undefined,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void;\n  abstract parseProgram(\n    program: N.Program,\n    end: TokenType,\n    sourceType?: SourceType,\n  ): N.Program;\n\n  // For object literal, check if property __proto__ has been used more than once.\n  // If the expression is a destructuring assignment, then __proto__ may appear\n  // multiple times. Otherwise, __proto__ is a duplicated key.\n\n  // For record expression, check if property __proto__ exists\n\n  checkProto(\n    prop: N.ObjectMember | N.SpreadElement,\n    isRecord: boolean | undefined | null,\n    protoRef: {\n      used: boolean;\n    },\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (\n      prop.type === \"SpreadElement\" ||\n      this.isObjectMethod(prop) ||\n      prop.computed ||\n      prop.shorthand\n    ) {\n      return;\n    }\n\n    const key = prop.key as\n      | N.Identifier\n      | N.StringLiteral\n      | N.NumericLiteral\n      | N.BigIntLiteral;\n    // It is either an Identifier or a String/NumericLiteral\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(Errors.RecordNoProto, key);\n        return;\n      }\n      if (protoRef.used) {\n        if (refExpressionErrors) {\n          // Store the first redefinition's position, otherwise ignore because\n          // we are parsing ambiguous pattern\n          if (refExpressionErrors.doubleProtoLoc === null) {\n            refExpressionErrors.doubleProtoLoc = key.loc.start;\n          }\n        } else {\n          this.raise(Errors.DuplicateProto, key);\n        }\n      }\n\n      protoRef.used = true;\n    }\n  }\n\n  shouldExitDescending(\n    expr: N.Expression | N.PrivateName,\n    potentialArrowAt: number,\n  ): expr is N.ArrowFunctionExpression {\n    return (\n      expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt\n    );\n  }\n\n  // Convenience method to parse an Expression only\n  getExpression(this: Parser): N.Expression & N.ParserOutput {\n    this.enterInitialScopes();\n    this.nextToken();\n    const expr = this.parseExpression() as N.Expression & N.ParserOutput;\n    if (!this.match(tt.eof)) {\n      this.unexpected();\n    }\n    // Unlike parseTopLevel, we need to drain remaining commentStacks\n    // because the top level node is _not_ Program.\n    this.finalizeRemainingComments();\n    expr.comments = this.comments;\n    expr.errors = this.state.errors;\n    if (this.options.tokens) {\n      expr.tokens = this.tokens;\n    }\n    return expr;\n  }\n\n  // ### Expression parsing\n\n  // These nest, from the most general expression type at the top to\n  // 'atomic', nondivisible expression types at the bottom. Most of\n  // the functions will simply let the function (s) below them parse,\n  // and, *if* the syntactic construct they handle is present, wrap\n  // the AST node that the inner parser gave them in another node.\n\n  // Parse a full expression.\n  // - `disallowIn`\n  //   is used to forbid the `in` operator (in for loops initialization expressions)\n  //   When `disallowIn` is true, the production parameter [In] is not present.\n\n  // - `refExpressionErrors `\n  //   provides reference for storing '=' operator inside shorthand\n  //   property assignment in contexts where both object expression\n  //   and object pattern might appear (so it's possible to raise\n  //   delayed syntax error at correct position).\n\n  parseExpression(\n    this: Parser,\n    disallowIn?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    if (disallowIn) {\n      return this.disallowInAnd(() =>\n        this.parseExpressionBase(refExpressionErrors),\n      );\n    }\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  // https://tc39.es/ecma262/#prod-Expression\n  parseExpressionBase(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(tt.comma)) {\n      const node = this.startNodeAt<N.SequenceExpression>(startLoc);\n      node.expressions = [expr];\n      while (this.eat(tt.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n    return expr;\n  }\n\n  // Set [~In] parameter for assignment expression\n  parseMaybeAssignDisallowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.disallowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // Set [+In] parameter for assignment expression\n  parseMaybeAssignAllowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.allowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // This method is only used by\n  // the typescript and flow plugins.\n  setOptionalParametersError(\n    refExpressionErrors: ExpressionErrors,\n    resultError?: ParseError<any>,\n  ) {\n    refExpressionErrors.optionalParametersLoc =\n      resultError?.loc ?? this.state.startLoc;\n  }\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\n  parseMaybeAssign(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    if (this.isContextual(tt._yield)) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startLoc);\n        }\n        return left;\n      }\n    }\n\n    let ownExpressionErrors;\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n    const { type } = this.state;\n\n    if (type === tt.parenL || tokenIsIdentifier(type)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startLoc);\n    }\n    if (tokenIsAssignment(this.state.type)) {\n      const node = this.startNodeAt<N.AssignmentExpression>(startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      if (this.match(tt.eq)) {\n        this.toAssignable(left, /* isLHS */ true);\n        node.left = left;\n\n        const startIndex = startLoc.index;\n        if (\n          refExpressionErrors.doubleProtoLoc != null &&\n          refExpressionErrors.doubleProtoLoc.index >= startIndex\n        ) {\n          refExpressionErrors.doubleProtoLoc = null; // reset because double __proto__ is valid in assignment expression\n        }\n        if (\n          refExpressionErrors.shorthandAssignLoc != null &&\n          refExpressionErrors.shorthandAssignLoc.index >= startIndex\n        ) {\n          refExpressionErrors.shorthandAssignLoc = null; // reset because shorthand default was used correctly\n        }\n        if (\n          refExpressionErrors.privateKeyLoc != null &&\n          refExpressionErrors.privateKeyLoc.index >= startIndex\n        ) {\n          this.checkDestructuringPrivate(refExpressionErrors);\n          refExpressionErrors.privateKeyLoc = null; // reset because `({ #x: x })` is an assignable pattern\n        }\n      } else {\n        node.left = left as unknown as N.Assignable; // checked a few lines further down\n      }\n\n      this.next();\n      node.right = this.parseMaybeAssign();\n      this.checkLVal(left, this.finishNode(node, \"AssignmentExpression\"));\n      // @ts-expect-error todo(flow->ts) improve node types\n      return node;\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    return left;\n  }\n\n  // Parse a ternary conditional (`?:`) operator.\n  // https://tc39.es/ecma262/#prod-ConditionalExpression\n\n  parseMaybeConditional(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (this.eat(tt.question)) {\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(tt.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n    return expr;\n  }\n\n  parseMaybeUnaryOrPrivate(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression | N.PrivateName {\n    return this.match(tt.privateName)\n      ? this.parsePrivateName()\n      : this.parseMaybeUnary(refExpressionErrors);\n  }\n\n  // Start the precedence parser.\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n  parseExprOps(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startLoc, -1);\n  }\n\n  // Parse binary operators with the operator precedence parsing\n  // algorithm. `left` is the left-hand side of the operator.\n  // `minPrec` provides context that allows the function to stop and\n  // defer further parser to one of its callers when it encounters an\n  // operator that has a lower precedence than the set it is parsing.\n\n  parseExprOp(\n    this: Parser,\n    left: N.Expression | N.PrivateName,\n    leftStartLoc: Position,\n    minPrec: number,\n  ): N.Expression {\n    if (this.isPrivateName(left)) {\n      // https://tc39.es/ecma262/#prod-RelationalExpression\n      // RelationalExpression [In, Yield, Await]\n      //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n\n      const value = this.getPrivateNameSV(left);\n\n      if (\n        minPrec >= tokenOperatorPrecedence(tt._in) ||\n        !this.prodParam.hasIn ||\n        !this.match(tt._in)\n      ) {\n        this.raise(Errors.PrivateInExpectedIn, left, {\n          identifierName: value,\n        });\n      }\n\n      this.classScope.usePrivateName(value, left.loc.start);\n    }\n\n    const op = this.state.type;\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(tt._in))) {\n      let prec = tokenOperatorPrecedence(op);\n      if (prec > minPrec) {\n        if (op === tt.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            // PrivateName must be followed by `in`, but we have `|>`\n            return left as N.Expression;\n          }\n          this.checkPipelineAtInfixOperator(left as N.Expression, leftStartLoc);\n        }\n        const node = this.startNodeAt<N.LogicalExpression | N.BinaryExpression>(\n          leftStartLoc,\n        );\n        node.left = left;\n        node.operator = this.state.value;\n\n        const logical = op === tt.logicalOR || op === tt.logicalAND;\n        const coalesce = op === tt.nullishCoalescing;\n\n        if (coalesce) {\n          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n          prec = tokenOperatorPrecedence(tt.logicalAND);\n        }\n\n        this.next();\n\n        if (\n          op === tt.pipeline &&\n          this.hasPlugin([\"pipelineOperator\", { proposal: \"minimal\" }])\n        ) {\n          if (this.state.type === tt._await && this.prodParam.hasAwait) {\n            throw this.raise(\n              Errors.UnexpectedAwaitAfterPipelineBody,\n              this.state.startLoc,\n            );\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        const finishedNode = this.finishNode(\n          node,\n          logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\",\n        );\n        /* this check is for all ?? operators\n         * a ?? b && c for this example\n         * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\n         * Symmetrically it also throws when op is logical and nextOp is coalesce\n         */\n        const nextOp = this.state.type;\n        if (\n          (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\n          (logical && nextOp === tt.nullishCoalescing)\n        ) {\n          throw this.raise(\n            Errors.MixingCoalesceWithLogical,\n            this.state.startLoc,\n          );\n        }\n\n        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\n      }\n    }\n    // PrivateName is followed by `in` and handled by the previous if statement\n    return left as N.Expression;\n  }\n\n  // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n  // operator expressions, then apply any operator-specific functions.\n\n  parseExprOpRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    switch (op) {\n      case tt.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              return this.parseHackPipeBody();\n            });\n\n          case \"smart\":\n            return this.withTopicBindingContext(() => {\n              if (this.prodParam.hasYield && this.isContextual(tt._yield)) {\n                throw this.raise(Errors.PipeBodyIsTighter, this.state.startLoc);\n              }\n              return this.parseSmartPipelineBodyInStyle(\n                this.parseExprOpBaseRightExpr(op, prec),\n                startLoc,\n              );\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n      // Falls through.\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n  // binary-operator expressions without applying any operator-specific functions.\n\n  parseExprOpBaseRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    return this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      tokenIsRightAssociative(op) ? prec - 1 : prec,\n    );\n  }\n\n  parseHackPipeBody(this: Parser): N.Expression {\n    const { startLoc } = this.state;\n    const body = this.parseMaybeAssign();\n    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(\n      // @ts-expect-error TS2345: Argument of type 'string' is not assignable to parameter of type '\"ArrowFunctionExpression\" | \"YieldExpression\" | \"AssignmentExpression\" | \"ConditionalExpression\"'.\n      body.type,\n    );\n\n    // TODO: Check how to handle type casts in Flow and TS once they are supported\n    if (requiredParentheses && !body.extra?.parenthesized) {\n      this.raise(Errors.PipeUnparenthesizedBody, startLoc, {\n        type: body.type as UnparenthesizedPipeBodyTypes,\n      });\n    }\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      // A Hack pipe body must use the topic reference at least once.\n      this.raise(Errors.PipeTopicUnused, startLoc);\n    }\n\n    return body;\n  }\n\n  checkExponentialAfterUnary(\n    node: N.AwaitExpression | Undone<N.UnaryExpression>,\n  ) {\n    if (this.match(tt.exponent)) {\n      this.raise(Errors.UnexpectedTokenUnaryExponentiation, node.argument);\n    }\n  }\n\n  // Parse unary operators, both prefix and postfix.\n  // https://tc39.es/ecma262/#prod-UnaryExpression\n  parseMaybeUnary(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    sawUnary?: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(tt._await);\n\n    if (isAwait && this.recordAwaitIfAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n    const update = this.match(tt.incDec);\n    const node = this.startNode<N.UnaryExpression | N.UpdateExpression>();\n    if (tokenIsPrefix(this.state.type)) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(tt._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n      const isDelete = this.match(tt._delete);\n      this.next();\n\n      node.argument = this.parseMaybeUnary(null, true);\n\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(Errors.StrictDelete, node);\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(Errors.DeletePrivateField, node);\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) {\n          this.checkExponentialAfterUnary(node as Undone<N.UnaryExpression>);\n        }\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(\n      // @ts-expect-error using \"Undone\" node as \"done\"\n      node,\n      update,\n      refExpressionErrors,\n    );\n\n    if (isAwait) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousAwait()) {\n        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, startLoc);\n        return this.parseAwait(startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  // https://tc39.es/ecma262/#prod-UpdateExpression\n  parseUpdate(\n    this: Parser,\n    node: N.Expression,\n    update: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (update) {\n      const updateExpressionNode = node as Undone<N.UpdateExpression>;\n      this.checkLVal(\n        updateExpressionNode.argument,\n        this.finishNode(updateExpressionNode, \"UpdateExpression\"),\n      );\n      return node;\n    }\n\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt<N.UpdateExpression>(startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.next();\n      this.checkLVal(expr, (expr = this.finishNode(node, \"UpdateExpression\")));\n    }\n    return expr;\n  }\n\n  // Parse call, dot, and `[]`-subscript expressions.\n  // https://tc39.es/ecma262/#prod-LeftHandSideExpression\n  parseExprSubscripts(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startLoc);\n  }\n\n  parseSubscripts(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls?: boolean | null,\n  ): N.Expression {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false,\n    };\n    do {\n      base = this.parseSubscript(base, startLoc, noCalls, state);\n\n      // After parsing a subscript, this isn't \"async\" for sure.\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n    return base;\n  }\n\n  /**\n   * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n   *   state.optionalChainMember to indicate that the member is currently in OptionalChain\n   */\n  parseSubscript(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const { type } = this.state;\n    if (!noCalls && type === tt.doubleColon) {\n      return this.parseBind(base, startLoc, noCalls, state);\n    } else if (tokenIsTemplate(type)) {\n      return this.parseTaggedTemplateExpression(base, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (type === tt.questionDot) {\n      if (noCalls) {\n        this.raise(Errors.OptionalChainingNoNew, this.state.startLoc);\n        if (this.lookaheadCharCode() === charCodes.leftParenthesis) {\n          // stop at `?.` when parsing `new a?.()`\n          state.stop = true;\n          return base;\n        }\n      }\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n\n    if (!noCalls && this.match(tt.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(\n        base,\n        startLoc,\n        state,\n        optional,\n      );\n    } else {\n      const computed = this.eat(tt.bracketL);\n      if (computed || optional || this.eat(tt.dot)) {\n        return this.parseMember(base, startLoc, state, computed, optional);\n      } else {\n        state.stop = true;\n        return base;\n      }\n    }\n  }\n\n  // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\n  // base[?Yield, ?Await] . IdentifierName\n  // base[?Yield, ?Await] . PrivateIdentifier\n  //   where `base` is one of CallExpression, MemberExpression and OptionalChain\n  parseMember(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    computed: boolean,\n    optional: boolean,\n  ): N.OptionalMemberExpression | N.MemberExpression {\n    const node = this.startNodeAt<\n      N.OptionalMemberExpression | N.MemberExpression\n    >(startLoc);\n    node.object = base;\n    node.computed = computed;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(tt.bracketR);\n    } else if (this.match(tt.privateName)) {\n      if (base.type === \"Super\") {\n        this.raise(Errors.SuperPrivateField, startLoc);\n      }\n      this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n      node.property = this.parsePrivateName();\n    } else {\n      node.property = this.parseIdentifier(true);\n    }\n\n    if (state.optionalChainMember) {\n      (node as N.OptionalMemberExpression).optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  // https://github.com/tc39/proposal-bind-operator#syntax\n  parseBind(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const node = this.startNodeAt<N.BindExpression>(startLoc);\n    node.object = base;\n    this.next(); // eat '::'\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(\n      this.finishNode(node, \"BindExpression\"),\n      startLoc,\n      noCalls,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\n  // CoverCallExpressionAndAsyncArrowHead\n  // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\n  // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\n  parseCoverCallAndAsyncArrowHead(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.Expression {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors: ExpressionErrors | null = null;\n\n    this.state.maybeInArrowParameters = true;\n    this.next(); // eat `(`\n\n    const node = this.startNodeAt<N.CallExpression | N.OptionalCallExpression>(\n      startLoc,\n    );\n    node.callee = base;\n    const { maybeAsyncArrow, optionalChainMember } = state;\n\n    if (maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (optionalChainMember) {\n      // @ts-expect-error when optionalChainMember is true, node must be an optional call\n      node.optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments(tt.parenR);\n    } else {\n      node.arguments = this.parseCallExpressionArguments(\n        tt.parenR,\n        base.type === \"Import\",\n        base.type !== \"Super\",\n        // @ts-expect-error todo(flow->ts)\n        node,\n        refExpressionErrors,\n      );\n    }\n    let finishedNode:\n      | N.CallExpression\n      | N.OptionalCallExpression\n      | N.ArrowFunctionExpression = this.finishCallExpression(\n      node,\n      optionalChainMember,\n    );\n\n    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      /*:: invariant(refExpressionErrors != null) */\n      state.stop = true;\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      finishedNode = this.parseAsyncArrowFromCallExpression(\n        this.startNodeAt<N.ArrowFunctionExpression>(startLoc),\n        finishedNode as N.CallExpression,\n      );\n    } else {\n      if (maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n      this.toReferencedArguments(finishedNode);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return finishedNode;\n  }\n\n  toReferencedArguments(\n    node: N.CallExpression | N.OptionalCallExpression,\n    isParenthesizedExpr?: boolean,\n  ) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n\n  // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  parseTaggedTemplateExpression(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n  ): N.TaggedTemplateExpression {\n    const node = this.startNodeAt<N.TaggedTemplateExpression>(startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(Errors.OptionalChainingNoTemplate, startLoc);\n    }\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base: N.Expression): boolean {\n    return (\n      base.type === \"Identifier\" &&\n      base.name === \"async\" &&\n      this.state.lastTokEndLoc.index === base.end &&\n      !this.canInsertSemicolon() &&\n      // check there are no escape sequences, such as \\u{61}sync\n      base.end - base.start === 5 &&\n      base.start === this.state.potentialArrowAt\n    );\n  }\n\n  expectImportAttributesPlugin() {\n    if (!this.hasPlugin(\"importAssertions\")) {\n      this.expectPlugin(\"importAttributes\");\n    }\n  }\n\n  finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n    node: Undone<T>,\n    optional: boolean,\n  ): T {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        if (process.env.BABEL_8_BREAKING) {\n          this.expectImportAttributesPlugin();\n        } else {\n          if (!this.hasPlugin(\"moduleAttributes\")) {\n            this.expectImportAttributesPlugin();\n          }\n        }\n      }\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(Errors.ImportCallArity, node, {\n          maxArgumentCount:\n            this.hasPlugin(\"importAttributes\") ||\n            this.hasPlugin(\"importAssertions\") ||\n            this.hasPlugin(\"moduleAttributes\")\n              ? 2\n              : 1,\n        });\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(Errors.ImportCallSpreadArgument, arg);\n          }\n        }\n      }\n    }\n    return this.finishNode(\n      node,\n      optional ? \"OptionalCallExpression\" : \"CallExpression\",\n    );\n  }\n\n  parseCallExpressionArguments(\n    this: Parser,\n    close: TokenType,\n    dynamicImport?: boolean,\n    allowPlaceholder?: boolean,\n    nodeForExtra?: N.Node | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): Array<N.Expression | undefined | null> {\n    const elts: N.Expression[] = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (\n            dynamicImport &&\n            !this.hasPlugin(\"importAttributes\") &&\n            !this.hasPlugin(\"importAssertions\") &&\n            !this.hasPlugin(\"moduleAttributes\")\n          ) {\n            this.raise(\n              Errors.ImportCallArgumentTrailingComma,\n              this.state.lastTokStartLoc,\n            );\n          }\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(\n        this.parseExprListItem(false, refExpressionErrors, allowPlaceholder),\n      );\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return elts;\n  }\n\n  shouldParseAsyncArrow(): boolean {\n    return this.match(tt.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    call: N.CallExpression,\n  ): N.ArrowFunctionExpression {\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(tt.arrow);\n    this.parseArrowExpression(\n      node,\n      call.arguments,\n      true,\n      call.extra?.trailingCommaLoc,\n    );\n    // mark inner comments of `async()` as inner comments of `async () =>`\n    if (call.innerComments) {\n      setInnerComments(node, call.innerComments);\n    }\n    // mark trailing comments of `async` to be inner comments\n    if (call.callee.trailingComments) {\n      setInnerComments(node, call.callee.trailingComments);\n    }\n    return node as N.ArrowFunctionExpression;\n  }\n\n  // Parse a no-call expression (like argument of `new` or `::` operators).\n  // https://tc39.es/ecma262/#prod-MemberExpression\n  parseNoCallExpr(this: Parser): N.Expression {\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\n  }\n\n  // Parse an atomic expression — either a single token that is an\n  // expression, an expression started by a keyword like `function` or\n  // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n  // or `{}`.\n\n  // https://tc39.es/ecma262/#prod-PrimaryExpression\n  // https://tc39.es/ecma262/#prod-AsyncArrowFunction\n  // PrimaryExpression\n  // Super\n  // Import\n  // AsyncArrowFunction\n\n  parseExprAtom(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    let node;\n    let decorators: N.Decorator[] | null = null;\n\n    const { type } = this.state;\n    switch (type) {\n      case tt._super:\n        return this.parseSuper();\n\n      case tt._import:\n        node = this.startNode<N.MetaProperty | N.Import | N.ImportExpression>();\n        this.next();\n\n        if (this.match(tt.dot)) {\n          return this.parseImportMetaProperty(node as Undone<N.MetaProperty>);\n        }\n\n        if (this.match(tt.parenL)) {\n          if (this.options.createImportExpressions) {\n            return this.parseImportCall(node as Undone<N.ImportExpression>);\n          } else {\n            return this.finishNode(node, \"Import\");\n          }\n        } else {\n          this.raise(Errors.UnsupportedImport, this.state.lastTokStartLoc);\n          return this.finishNode(node, \"Import\");\n        }\n\n      case tt._this:\n        node = this.startNode<N.ThisExpression>();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case tt._do: {\n        return this.parseDo(this.startNode(), false);\n      }\n\n      case tt.slash:\n      case tt.slashAssign: {\n        this.readRegexp();\n        return this.parseRegExpLiteral(this.state.value);\n      }\n\n      case tt.num:\n        return this.parseNumericLiteral(this.state.value);\n\n      case tt.bigint:\n        return this.parseBigIntLiteral(this.state.value);\n\n      case tt.decimal:\n        return this.parseDecimalLiteral(this.state.value);\n\n      case tt.string:\n        return this.parseStringLiteral(this.state.value);\n\n      case tt._null:\n        return this.parseNullLiteral();\n\n      case tt._true:\n        return this.parseBooleanLiteral(true);\n      case tt._false:\n        return this.parseBooleanLiteral(false);\n\n      case tt.parenL: {\n        const canBeArrow = this.state.potentialArrowAt === this.state.start;\n        return this.parseParenAndDistinguishExpression(canBeArrow);\n      }\n\n      case tt.bracketBarL:\n      case tt.bracketHashL: {\n        return this.parseArrayLike(\n          this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n          /* canBePattern */ false,\n          /* isTuple */ true,\n        );\n      }\n      case tt.bracketL: {\n        return this.parseArrayLike(\n          tt.bracketR,\n          /* canBePattern */ true,\n          /* isTuple */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceBarL:\n      case tt.braceHashL: {\n        return this.parseObjectLike(\n          this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ true,\n        );\n      }\n      case tt.braceL: {\n        return this.parseObjectLike(\n          tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case tt.at:\n        decorators = this.parseDecorators();\n      // fall through\n      case tt._class:\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            this.startNode<N.ClassExpression>(),\n          ),\n          false,\n        );\n\n      case tt._new:\n        return this.parseNewOrNewTarget();\n\n      case tt.templateNonTail:\n      case tt.templateTail:\n        return this.parseTemplate(false);\n\n      // BindExpression[Yield]\n      //   :: MemberExpression[?Yield]\n      case tt.doubleColon: {\n        node = this.startNode<N.BindExpression>();\n        this.next();\n        node.object = null;\n        const callee = (node.callee = this.parseNoCallExpr());\n        if (callee.type === \"MemberExpression\") {\n          return this.finishNode(node, \"BindExpression\");\n        } else {\n          throw this.raise(Errors.UnsupportedBind, callee);\n        }\n      }\n\n      case tt.privateName: {\n        // Standalone private names are only allowed in \"#x in obj\"\n        // expressions, and they are directly handled by callers of\n        // parseExprOp. If we reach this, the input is always invalid.\n        // We can throw a better error message and recover, rather than\n        // just throwing \"Unexpected token\" (which is the default\n        // behavior of this big switch statement).\n        this.raise(Errors.PrivateInExpectedIn, this.state.startLoc, {\n          identifierName: this.state.value,\n        });\n        return this.parsePrivateName() as unknown as N.Expression;\n      }\n\n      case tt.moduloAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.modulo, \"%\");\n      }\n\n      case tt.xorAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.bitwiseXOR, \"^\");\n      }\n\n      case tt.doubleCaret:\n      case tt.doubleAt: {\n        return this.parseTopicReference(\"hack\");\n      }\n\n      case tt.bitwiseXOR:\n      case tt.modulo:\n      case tt.hash: {\n        const pipeProposal = this.getPluginOption(\n          \"pipelineOperator\",\n          \"proposal\",\n        );\n\n        if (pipeProposal) {\n          return this.parseTopicReference(pipeProposal);\n        }\n        this.unexpected();\n        break;\n      }\n\n      case tt.lt: {\n        const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n        if (\n          isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\n          lookaheadCh === charCodes.greaterThan // Fragment <>\n        ) {\n          this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n        } else {\n          this.unexpected();\n        }\n        break;\n      }\n\n      default:\n        if (tokenIsIdentifier(type)) {\n          if (\n            this.isContextual(tt._module) &&\n            this.lookaheadInLineCharCode() === charCodes.leftCurlyBrace\n          ) {\n            return this.parseModuleExpression();\n          }\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n\n          if (\n            !containsEsc &&\n            id.name === \"async\" &&\n            !this.canInsertSemicolon()\n          ) {\n            const { type } = this.state;\n            if (type === tt._function) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseAsyncFunctionExpression(\n                this.startNodeAtNode(id),\n              );\n            } else if (tokenIsIdentifier(type)) {\n              // If the next token begins with \"=\", commit to parsing an async\n              // arrow function. (Peeking ahead for \"=\" lets us avoid a more\n              // expensive full-token lookahead on this common path.)\n              if (this.lookaheadCharCode() === charCodes.equalsTo) {\n                // although `id` is not used in async arrow unary function,\n                // we don't need to reset `async`'s trailing comments because\n                // it will be attached to the upcoming async arrow binding identifier\n                return this.parseAsyncArrowUnaryFunction(\n                  this.startNodeAtNode(id),\n                );\n              } else {\n                // Otherwise, treat \"async\" as an identifier and let calling code\n                // deal with the current tt.name token.\n                return id;\n              }\n            } else if (type === tt._do) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n\n          if (\n            canBeArrow &&\n            this.match(tt.arrow) &&\n            !this.canInsertSemicolon()\n          ) {\n            this.next();\n            return this.parseArrowExpression(\n              this.startNodeAtNode(id),\n              [id],\n              false,\n            );\n          }\n\n          return id;\n        } else {\n          this.unexpected();\n        }\n    }\n  }\n\n  // This helper method should only be called\n  // when the parser has reached a potential Hack pipe topic token\n  // that is followed by an equals sign.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  // If we find ^= or %= in an expression position\n  // (i.e., the tt.moduloAssign or tt.xorAssign token types), and if the\n  // Hack-pipes proposal is active with ^ or % as its topicToken, then the ^ or\n  // % could be the topic token (e.g., in x |> ^==y or x |> ^===y), and so we\n  // reparse the current token as ^ or %.\n  // Otherwise, this throws an unexpected-token error.\n  parseTopicReferenceThenEqualsSign(\n    topicTokenType: TokenType,\n    topicTokenValue: string,\n  ): N.Expression {\n    const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (pipeProposal) {\n      // Set the most-recent token to be a topic token\n      // given by the tokenType and tokenValue.\n      // Now the next readToken() call (in parseTopicReference)\n      // will consume that “topic token”.\n      this.state.type = topicTokenType;\n      this.state.value = topicTokenValue;\n      // Rewind the tokenizer to the end of the “topic token”, so that the\n      // following token starts at the equals sign after that topic token.\n      this.state.pos--;\n      this.state.end--;\n      // This is safe to do since the preceding character was either ^ or %, and\n      // thus not a newline.\n      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\n      // Now actually consume the topic token.\n      return this.parseTopicReference(pipeProposal);\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // This helper method should only be called\n  // when the proposal-pipeline-operator plugin is active,\n  // and when the parser has reached a potential Hack pipe topic token.\n  // Although a pipe-operator proposal is assumed to be active,\n  // its configuration might not match the current token’s type.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  parseTopicReference(pipeProposal: string): N.Expression {\n    const node = this.startNode<N.TopicReference>();\n    const startLoc = this.state.startLoc;\n    const tokenType = this.state.type;\n\n    // Consume the current token.\n    this.next();\n\n    // If the pipe-operator plugin’s configuration matches the current token’s type,\n    // then this will return `node`, will have been finished as a topic reference.\n    // Otherwise, this will throw a `PipeTopicUnconfiguredToken` error.\n    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);\n  }\n\n  // This helper method attempts to finish the given `node`\n  // into a topic-reference node for the given `pipeProposal`.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  //\n  // The method assumes that any topic token was consumed before it was called.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // and if the given `tokenType` matches the plugin’s configuration,\n  // then this method will return the finished `node`.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // but if the given `tokenType` does not match the plugin’s configuration,\n  // then this method will throw a `PipeTopicUnconfiguredToken` error.\n  finishTopicReference<\n    T extends N.PipelinePrimaryTopicReference | N.TopicReference,\n  >(\n    node: Undone<T>,\n    startLoc: Position,\n    pipeProposal: string,\n    tokenType: TokenType,\n  ): T {\n    if (\n      this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)\n    ) {\n      // The token matches the plugin’s configuration.\n      // The token is therefore a topic reference.\n\n      // Determine the node type for the topic reference\n      // that is appropriate for the active pipe-operator proposal.\n      const nodeType =\n        pipeProposal === \"smart\"\n          ? \"PipelinePrimaryTopicReference\"\n          : // The proposal must otherwise be \"hack\",\n            // as enforced by testTopicReferenceConfiguration.\n            \"TopicReference\";\n\n      if (!this.topicReferenceIsAllowedInCurrentContext()) {\n        this.raise(\n          // The topic reference is not allowed in the current context:\n          // it is outside of a pipe body.\n          // Raise recoverable errors.\n          pipeProposal === \"smart\"\n            ? Errors.PrimaryTopicNotAllowed\n            : // In this case, `pipeProposal === \"hack\"` is true.\n              Errors.PipeTopicUnbound,\n          startLoc,\n        );\n      }\n\n      // Register the topic reference so that its pipe body knows\n      // that its topic was used at least once.\n      this.registerTopicReference();\n\n      return this.finishNode(node, nodeType);\n    } else {\n      // The token does not match the plugin’s configuration.\n      throw this.raise(Errors.PipeTopicUnconfiguredToken, startLoc, {\n        token: tokenLabelName(tokenType),\n      });\n    }\n  }\n\n  // This helper method tests whether the given token type\n  // matches the pipelineOperator parser plugin’s configuration.\n  // If the active pipe proposal is Hack style,\n  // and if the given token is the same as the plugin configuration’s `topicToken`,\n  // then this is a valid topic reference.\n  // If the active pipe proposal is smart mix,\n  // then the topic token must always be `#`.\n  // If the active pipe proposal is neither (e.g., \"minimal\" or \"fsharp\"),\n  // then an error is thrown.\n  testTopicReferenceConfiguration(\n    pipeProposal: string,\n    startLoc: Position,\n    tokenType: TokenType,\n  ): boolean {\n    switch (pipeProposal) {\n      case \"hack\": {\n        return this.hasPlugin([\n          \"pipelineOperator\",\n          {\n            // @ts-expect-error token must have a label\n            topicToken: tokenLabelName(tokenType),\n          },\n        ]);\n      }\n      case \"smart\":\n        return tokenType === tt.hash;\n      default:\n        throw this.raise(Errors.PipeTopicRequiresHackPipes, startLoc);\n    }\n  }\n\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n  parseAsyncArrowUnaryFunction(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n  ): N.ArrowFunctionExpression {\n    // We don't need to push a new ParameterDeclarationScope here since we are sure\n    // 1) it is an async arrow, 2) no biding pattern is allowed in params\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.LineTerminatorBeforeArrow, this.state.curPosition());\n    }\n    this.expect(tt.arrow);\n    // let foo = async bar => {};\n    return this.parseArrowExpression(node, params, true);\n  }\n\n  // https://github.com/tc39/proposal-do-expressions\n  // https://github.com/tc39/proposal-async-do-expressions\n  parseDo(\n    this: Parser,\n    node: Undone<N.DoExpression>,\n    isAsync: boolean,\n  ): N.DoExpression {\n    this.expectPlugin(\"doExpressions\");\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n    node.async = isAsync;\n    this.next(); // eat `do`\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    if (isAsync) {\n      // AsyncDoExpression :\n      // async [no LineTerminator here] do Block[~Yield, +Await, ~Return]\n      this.prodParam.enter(ParamKind.PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  // Parse the `super` keyword\n  parseSuper(): N.Super {\n    const node = this.startNode<N.Super>();\n    this.next(); // eat `super`\n    if (\n      this.match(tt.parenL) &&\n      !this.scope.allowDirectSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(Errors.SuperNotAllowed, node);\n    } else if (\n      !this.scope.allowSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(Errors.UnexpectedSuper, node);\n    }\n\n    if (\n      !this.match(tt.parenL) &&\n      !this.match(tt.bracketL) &&\n      !this.match(tt.dot)\n    ) {\n      this.raise(Errors.UnsupportedSuper, node);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parsePrivateName(): N.PrivateName {\n    const node = this.startNode<N.PrivateName>();\n    const id = this.startNodeAt<N.Identifier>(\n      // The position is hardcoded because we merge `#` and name into a single\n      // tt.privateName token\n      createPositionWithColumnOffset(this.state.startLoc, 1),\n    );\n    const name = this.state.value;\n    this.next(); // eat #name;\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n\n  parseFunctionOrFunctionSent(\n    this: Parser,\n  ): N.FunctionExpression | N.MetaProperty {\n    const node = this.startNode<N.FunctionExpression | N.MetaProperty>();\n\n    // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\n    // is called we already know that the current token is a \"name\" with the value \"function\"\n    // This will improve perf a tiny little bit as we do not do validation but more importantly\n    // here is that parseIdentifier will remove an item from the expression stack\n    // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n    this.next(); // eat `function`\n\n    if (this.prodParam.hasYield && this.match(tt.dot)) {\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"function\",\n      );\n      this.next(); // eat `.`\n      // https://github.com/tc39/proposal-function.sent#syntax-1\n      if (this.match(tt._sent)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n        this.unexpected();\n      }\n      return this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"sent\",\n      );\n    }\n    return this.parseFunction(node as Undone<N.FunctionExpression>);\n  }\n\n  parseMetaProperty(\n    node: Undone<N.MetaProperty>,\n    meta: N.Identifier,\n    propertyName: string,\n  ): N.MetaProperty {\n    node.meta = meta;\n\n    const containsEsc = this.state.containsEsc;\n\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(Errors.UnsupportedMetaProperty, node.property, {\n        target: meta.name,\n        onlyValidPropertyName: propertyName,\n      });\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportMeta\n  parseImportMetaProperty(\n    this: Parser,\n    node: Undone<N.MetaProperty | N.ImportExpression>,\n  ): N.MetaProperty | N.ImportExpression {\n    const id = this.createIdentifier(\n      this.startNodeAtNode<N.Identifier>(node),\n      \"import\",\n    );\n    this.next(); // eat `.`\n\n    if (this.isContextual(tt._meta)) {\n      if (!this.inModule) {\n        this.raise(Errors.ImportMetaOutsideModule, id);\n      }\n      this.sawUnambiguousESM = true;\n    } else if (this.isContextual(tt._source) || this.isContextual(tt._defer)) {\n      const isSource = this.isContextual(tt._source);\n\n      // TODO: The proposal doesn't mention import.defer yet because it was\n      // pending on a decision for import.source. Wait to enable it until it's\n      // included in the proposal.\n      if (!isSource) this.unexpected();\n\n      this.expectPlugin(\n        isSource ? \"sourcePhaseImports\" : \"deferredImportEvaluation\",\n      );\n      if (!this.options.createImportExpressions) {\n        throw this.raise(\n          Errors.DynamicImportPhaseRequiresImportExpressions,\n          this.state.startLoc,\n          {\n            phase: this.state.value,\n          },\n        );\n      }\n      this.next();\n      (node as Undone<N.ImportExpression>).phase = isSource\n        ? \"source\"\n        : \"defer\";\n      return this.parseImportCall(node as Undone<N.ImportExpression>);\n    }\n\n    return this.parseMetaProperty(node as Undone<N.MetaProperty>, id, \"meta\");\n  }\n\n  parseLiteralAtNode<T extends N.Node>(\n    value: any,\n    type: T[\"type\"],\n    node: any,\n  ): T {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.value = value;\n    this.next();\n    return this.finishNode<T>(node, type);\n  }\n\n  parseLiteral<T extends N.Node>(value: any, type: T[\"type\"]): T {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n\n  parseStringLiteral(value: any) {\n    return this.parseLiteral<N.StringLiteral>(value, \"StringLiteral\");\n  }\n\n  parseNumericLiteral(value: any) {\n    return this.parseLiteral<N.NumericLiteral>(value, \"NumericLiteral\");\n  }\n\n  parseBigIntLiteral(value: any) {\n    return this.parseLiteral<N.BigIntLiteral>(value, \"BigIntLiteral\");\n  }\n\n  parseDecimalLiteral(value: any) {\n    return this.parseLiteral<N.DecimalLiteral>(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value: {\n    value: any;\n    pattern: string;\n    flags: N.RegExpLiteral[\"flags\"];\n  }) {\n    const node = this.startNode<N.RegExpLiteral>();\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    this.next();\n    return this.finishNode(node, \"RegExpLiteral\");\n  }\n\n  parseBooleanLiteral(value: boolean) {\n    const node = this.startNode<N.BooleanLiteral>();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode<N.NullLiteral>();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n  parseParenAndDistinguishExpression(\n    this: Parser,\n    canBeArrow: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    let val;\n    this.next(); // eat `(`\n    this.expressionScope.enter(newArrowHeadScope());\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    const innerStartLoc = this.state.startLoc;\n    const exprList: (N.Expression | N.RestElement)[] = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStartLoc;\n    let optionalCommaStartLoc;\n\n    while (!this.match(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(\n          tt.comma,\n          refExpressionErrors.optionalParametersLoc === null\n            ? null\n            : refExpressionErrors.optionalParametersLoc,\n        );\n        if (this.match(tt.parenR)) {\n          optionalCommaStartLoc = this.state.startLoc;\n          break;\n        }\n      }\n\n      if (this.match(tt.ellipsis)) {\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStartLoc = this.state.startLoc;\n        exprList.push(\n          this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc),\n        );\n\n        if (!this.checkCommaAfterRest(charCodes.rightParenthesis)) {\n          break;\n        }\n      } else {\n        exprList.push(\n          this.parseMaybeAssignAllowIn(\n            refExpressionErrors,\n            this.parseParenItem,\n          ),\n        );\n      }\n    }\n\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(tt.parenR);\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    let arrowNode = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n    if (\n      canBeArrow &&\n      this.shouldParseArrow(exprList) &&\n      (arrowNode = this.parseArrow(arrowNode))\n    ) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      // @ts-expect-error todo(flow->ts) improve node types\n      return arrowNode;\n    }\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStartLoc);\n    }\n    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\n    if (spreadStartLoc) this.unexpected(spreadStartLoc);\n    this.checkExpressionErrors(refExpressionErrors, true);\n\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt<N.SequenceExpression>(innerStartLoc);\n      val.expressions = exprList as N.Expression[];\n      // finish node at current location so it can pick up comments after `)`\n      this.finishNode(val, \"SequenceExpression\");\n      this.resetEndLocation(val, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    return this.wrapParenthesis(\n      startLoc,\n      // @ts-expect-error todo(flow->ts)\n      val,\n    );\n  }\n\n  wrapParenthesis(startLoc: Position, expression: N.Expression): N.Expression {\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(expression, \"parenthesized\", true);\n      this.addExtra(expression, \"parenStart\", startLoc.index);\n\n      this.takeSurroundingComments(\n        expression,\n        startLoc.index,\n        this.state.lastTokEndLoc.index,\n      );\n\n      return expression;\n    }\n\n    const parenExpression =\n      this.startNodeAt<N.ParenthesizedExpression>(startLoc);\n    parenExpression.expression = expression;\n    return this.finishNode(parenExpression, \"ParenthesizedExpression\");\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `params` is used in typescript plugin\n  shouldParseArrow(params: Array<N.Node>): boolean {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(\n    node: Undone<N.ArrowFunctionExpression>,\n  ): Undone<N.ArrowFunctionExpression> | undefined {\n    if (this.eat(tt.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n    node: T,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    startLoc: Position,\n  ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n    return node;\n  }\n\n  parseNewOrNewTarget(this: Parser): N.NewExpression | N.MetaProperty {\n    const node = this.startNode<N.NewExpression | N.MetaProperty>();\n    this.next();\n    if (this.match(tt.dot)) {\n      // https://tc39.es/ecma262/#prod-NewTarget\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"new\",\n      );\n      this.next();\n      const metaProp = this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"target\",\n      );\n\n      if (\n        !this.scope.inNonArrowFunction &&\n        !this.scope.inClass &&\n        !this.options.allowNewTargetOutsideFunction\n      ) {\n        this.raise(Errors.UnexpectedNewTarget, metaProp);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node as Undone<N.NewExpression>);\n  }\n\n  // New's precedence is slightly tricky. It must allow its argument to\n  // be a `[]` or dot subscript expression, but not a call — at least,\n  // not without wrapping it in parentheses. Thus, it uses the noCalls\n  // argument to parseSubscripts to prevent it from consuming the\n  // argument list.\n  // https://tc39.es/ecma262/#prod-NewExpression\n  parseNew(this: Parser, node: Undone<N.NewExpression>): N.NewExpression {\n    this.parseNewCallee(node);\n\n    if (this.eat(tt.parenL)) {\n      const args = this.parseExprList(tt.parenR);\n      this.toReferencedList(args);\n      // (parseExprList should be all non-null in this case)\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewCallee(this: Parser, node: Undone<N.NewExpression>): void {\n    const isImport = this.match(tt._import);\n    const callee = this.parseNoCallExpr();\n    node.callee = callee;\n    if (\n      isImport &&\n      (callee.type === \"Import\" || callee.type === \"ImportExpression\")\n    ) {\n      this.raise(Errors.ImportCallNotNewExpression, callee);\n    }\n  }\n\n  // Parse template expression.\n\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\n    const { start, startLoc, end, value } = this.state;\n    const elemStart = start + 1;\n    const elem = this.startNodeAt<N.TemplateElement>(\n      createPositionWithColumnOffset(startLoc, 1),\n    );\n    if (value === null) {\n      if (!isTagged) {\n        this.raise(\n          Errors.InvalidEscapeSequenceTemplate,\n          // FIXME: Adding 1 is probably wrong.\n          createPositionWithColumnOffset(\n            this.state.firstInvalidTemplateEscapePos,\n            1,\n          ),\n        );\n      }\n    }\n\n    const isTail = this.match(tt.templateTail);\n    const endOffset = isTail ? -1 : -2;\n    const elemEnd = end + endOffset;\n    elem.value = {\n      raw: this.input.slice(elemStart, elemEnd).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: value === null ? null : value.slice(1, endOffset),\n    };\n    elem.tail = isTail;\n    this.next();\n    const finishedNode = this.finishNode(elem, \"TemplateElement\");\n    this.resetEndLocation(\n      finishedNode,\n      createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset),\n    );\n    return finishedNode;\n  }\n\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\n  parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {\n    const node = this.startNode<N.TemplateLiteral>();\n    let curElt = this.parseTemplateElement(isTagged);\n    const quasis = [curElt];\n    const substitutions = [];\n    while (!curElt.tail) {\n      substitutions.push(this.parseTemplateSubstitution());\n      this.readTemplateContinuation();\n      quasis.push((curElt = this.parseTemplateElement(isTagged)));\n    }\n    // Type cast from (N.Expression[] | N.TsType[]). parseTemplateSubstitution\n    // returns consistent results.\n    node.expressions = substitutions as N.Expression[] | N.TsType[];\n    node.quasis = quasis;\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  // This is overwritten by the TypeScript plugin to parse template types\n  parseTemplateSubstitution(this: Parser): N.Expression | N.TsType {\n    return this.parseExpression();\n  }\n\n  // Parse an object literal, binding pattern, or record.\n\n  parseObjectLike(\n    close: TokenType,\n    isPattern: true,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectPattern;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: false | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectExpression;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: true,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.RecordExpression;\n  parseObjectLike<T extends N.ObjectPattern | N.ObjectExpression>(\n    this: Parser,\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const propHash: any = Object.create(null);\n    let first = true;\n    const node = this.startNode<\n      N.ObjectExpression | N.ObjectPattern | N.RecordExpression\n    >();\n\n    node.properties = [];\n    this.next();\n\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          this.addTrailingCommaExtraToNode(\n            // @ts-expect-error todo(flow->ts) improve node types\n            node,\n          );\n          break;\n        }\n      }\n\n      let prop;\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n      }\n\n      if (\n        isRecord &&\n        !this.isObjectProperty(prop) &&\n        prop.type !== \"SpreadElement\"\n      ) {\n        this.raise(Errors.InvalidRecordProperty, prop);\n      }\n\n      if (!process.env.BABEL_8_BREAKING) {\n        // @ts-expect-error shorthand may not index prop\n        if (prop.shorthand) {\n          this.addExtra(prop, \"shorthand\", true);\n        }\n      }\n\n      // @ts-expect-error Fixme: refine typings\n      node.properties.push(prop);\n    }\n\n    this.next();\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n    // @ts-expect-error type is well defined\n    return this.finishNode(node, type);\n  }\n\n  addTrailingCommaExtraToNode(node: N.Node): void {\n    this.addExtra(node, \"trailingComma\", this.state.lastTokStartLoc.index);\n    this.addExtra(node, \"trailingCommaLoc\", this.state.lastTokStartLoc, false);\n  }\n\n  // Check grammar production:\n  //   IdentifierName *_opt PropertyName\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n  maybeAsyncOrAccessorProp(\n    prop: Undone<N.ObjectProperty>,\n  ): prop is typeof prop & { key: N.Identifier } {\n    return (\n      !prop.computed &&\n      prop.key.type === \"Identifier\" &&\n      (this.isLiteralPropertyName() ||\n        this.match(tt.bracketL) ||\n        this.match(tt.star))\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyDefinition\n  parsePropertyDefinition(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectMember | N.SpreadElement {\n    let decorators = [];\n    if (this.match(tt.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(Errors.UnsupportedPropertyDecorator, this.state.startLoc);\n      }\n\n      // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n      // the call to this.parseDecorator\n      while (this.match(tt.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode<N.ObjectProperty>();\n    let isAsync = false;\n    let isAccessor = false;\n    let startLoc;\n\n    if (this.match(tt.ellipsis)) {\n      if (decorators.length) this.unexpected();\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (refExpressionErrors) {\n      startLoc = this.state.startLoc;\n    }\n\n    let isGenerator = this.eat(tt.star);\n    this.parsePropertyNamePrefixOperator(prop);\n    const containsEsc = this.state.containsEsc;\n    this.parsePropertyName(prop, refExpressionErrors);\n\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const { key } = prop;\n      const keyName = key.name;\n      // https://tc39.es/ecma262/#prod-AsyncMethod\n      // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(tt.star);\n        this.parsePropertyName(prop);\n      }\n      // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\n      // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n        if (this.match(tt.star)) {\n          isGenerator = true;\n          this.raise(Errors.AccessorIsGenerator, this.state.curPosition(), {\n            kind: keyName,\n          });\n          this.next();\n        }\n        this.parsePropertyName(prop);\n      }\n    }\n\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      isGenerator,\n      isAsync,\n      false /* isPattern */,\n      isAccessor,\n      refExpressionErrors,\n    );\n  }\n\n  getGetterSetterExpectedParamCount(\n    method: N.ObjectMethod | N.ClassMethod,\n  ): number {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  // This exists so we can override within the ESTree plugin\n  getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n    return method.params;\n  }\n\n  // get methods aren't allowed to have any parameters\n  // set methods must have exactly 1 parameter which is not a rest parameter\n  checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    if (params.length !== paramCount) {\n      this.raise(\n        method.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity,\n        method,\n      );\n    }\n\n    if (\n      method.kind === \"set\" &&\n      params[params.length - 1]?.type === \"RestElement\"\n    ) {\n      this.raise(Errors.BadSetterRestParameter, method);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-MethodDefinition\n  parseObjectMethod(\n    this: Parser,\n    prop: Undone<N.ObjectMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n  ): N.ObjectMethod | undefined | null {\n    if (isAccessor) {\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n      const finishedProp = this.parseMethod(\n        prop,\n        // This _should_ be false, but with error recovery, we allow it to be\n        // set for informational purposes\n        isGenerator,\n        /* isAsync */ false,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n      this.checkGetterSetterParams(finishedProp);\n      return finishedProp;\n    }\n\n    if (isAsync || isGenerator || this.match(tt.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n    }\n  }\n\n  // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\n  // else https://tc39.es/ecma262/#prod-PropertyDefinition\n  parseObjectProperty(\n    this: Parser,\n    prop: Undone<N.ObjectProperty>,\n    startLoc: Position | undefined | null,\n    isPattern: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectProperty | undefined | null {\n    prop.shorthand = false;\n\n    if (this.eat(tt.colon)) {\n      prop.value = isPattern\n        ? this.parseMaybeDefault(this.state.startLoc)\n        : this.parseMaybeAssignAllowIn(refExpressionErrors);\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      // PropertyDefinition:\n      //   IdentifierReference\n      //   CoverInitializedName\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          cloneIdentifier(prop.key),\n        );\n      } else if (this.match(tt.eq)) {\n        const shorthandAssignLoc = this.state.startLoc;\n        if (refExpressionErrors != null) {\n          if (refExpressionErrors.shorthandAssignLoc === null) {\n            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\n          }\n        } else {\n          this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n        }\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          cloneIdentifier(prop.key),\n        );\n      } else {\n        prop.value = cloneIdentifier(prop.key);\n      }\n      prop.shorthand = true;\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n  }\n\n  parseObjPropValue<T extends N.ObjectMember>(\n    this: Parser,\n    prop: Undone<T>,\n    startLoc: Position | undefined | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    const node = (this.parseObjectMethod(\n      prop as Undone<N.ObjectMethod>,\n      isGenerator,\n      isAsync,\n      isPattern,\n      isAccessor,\n    ) ||\n      this.parseObjectProperty(\n        prop as Undone<N.ObjectProperty>,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      )) as T;\n\n    if (!node) this.unexpected();\n\n    return node;\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyName\n  // when refExpressionErrors presents, it will parse private name\n  // and record the position of the first private name\n  parsePropertyName(\n    this: Parser,\n    prop:\n      | Undone<N.ObjectOrClassMember | N.ClassMember>\n      | N.TsNamedTypeElementBase,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (this.eat(tt.bracketL)) {\n      (prop as Undone<N.ObjectOrClassMember>).computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(tt.bracketR);\n    } else {\n      // We check if it's valid for it to be a private name when we push it.\n      const { type, value } = this.state;\n      let key;\n      // most un-computed property names are identifiers\n      if (tokenIsKeywordOrIdentifier(type)) {\n        key = this.parseIdentifier(true);\n      } else {\n        switch (type) {\n          case tt.num:\n            key = this.parseNumericLiteral(value);\n            break;\n          case tt.string:\n            key = this.parseStringLiteral(value);\n            break;\n          case tt.bigint:\n            key = this.parseBigIntLiteral(value);\n            break;\n          case tt.decimal:\n            key = this.parseDecimalLiteral(value);\n            break;\n          case tt.privateName: {\n            // the class private key has been handled in parseClassElementName\n            const privateKeyLoc = this.state.startLoc;\n            if (refExpressionErrors != null) {\n              if (refExpressionErrors.privateKeyLoc === null) {\n                refExpressionErrors.privateKeyLoc = privateKeyLoc;\n              }\n            } else {\n              this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n            }\n            key = this.parsePrivateName();\n            break;\n          }\n          default:\n            this.unexpected();\n        }\n      }\n      (prop as any).key = key;\n      if (type !== tt.privateName) {\n        // ClassPrivateProperty is never computed, so we don't assign in that case.\n        prop.computed = false;\n      }\n    }\n  }\n\n  // Initialize empty function node.\n\n  initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n    node.id = null;\n    node.generator = false;\n    node.async = isAsync;\n  }\n\n  // Parse object or class method.\n\n  parseMethod<T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod>(\n    this: Parser,\n    node: Undone<T>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowDirectSuper: boolean,\n    type: T[\"type\"],\n    inClassScope: boolean = false,\n  ): T {\n    this.initFunction(node, isAsync);\n    node.generator = isGenerator;\n    this.scope.enter(\n      ScopeFlag.FUNCTION |\n        ScopeFlag.SUPER |\n        (inClassScope ? ScopeFlag.CLASS : 0) |\n        (allowDirectSuper ? ScopeFlag.DIRECT_SUPER : 0),\n    );\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, isConstructor);\n    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n\n    return finishedNode;\n  }\n\n  // parse an array literal or tuple literal\n  // https://tc39.es/ecma262/#prod-ArrayLiteral\n  // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\n  parseArrayLike(\n    this: Parser,\n    close: TokenType,\n    canBePattern: boolean,\n    isTuple: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ArrayExpression | N.TupleExpression {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode<N.ArrayExpression | N.TupleExpression>();\n    this.next();\n    node.elements = this.parseExprList(\n      close,\n      /* allowEmpty */ !isTuple,\n      refExpressionErrors,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(\n      node,\n      isTuple ? \"TupleExpression\" : \"ArrayExpression\",\n    );\n  }\n\n  // Parse arrow function expression.\n  // If the parameters are provided, they will be converted to an\n  // assignable list.\n  parseArrowExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<N.Expression | N.SpreadElement>\n      | Array<N.Expression | N.RestElement>,\n    isAsync: boolean,\n    trailingCommaLoc?: Position | null,\n  ): N.ArrowFunctionExpression {\n    this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n    let flags = functionFlags(isAsync, false);\n    // ConciseBody[In] :\n    //   [lookahead ≠ {] ExpressionBody[?In, ~Await]\n    //   { FunctionBody[~Yield, ~Await] }\n    if (!this.match(tt.braceL) && this.prodParam.hasIn) {\n      flags |= ParamKind.PARAM_IN;\n    }\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaLoc);\n    }\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<N.Expression | N.SpreadElement>\n      | Array<N.Expression | N.RestElement>,\n    trailingCommaLoc?: Position | null,\n  ): void {\n    this.toAssignableList(params, trailingCommaLoc, false);\n    node.params = params as (N.Pattern | N.TSParameterProperty)[];\n  }\n\n  parseFunctionBodyAndFinish<\n    T extends\n      | N.Function\n      | N.TSDeclareMethod\n      | N.TSDeclareFunction\n      | N.ClassPrivateMethod,\n  >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n    // @ts-expect-error (node is not bodiless if we get here)\n    this.parseFunctionBody(node, false, isMethod);\n    return this.finishNode(node, type);\n  }\n\n  // Parse function body and check parameters.\n  parseFunctionBody(\n    this: Parser,\n    node: Undone<N.Function>,\n    allowExpression?: boolean | null,\n    isMethod: boolean = false,\n  ): void {\n    const isExpression = allowExpression && !this.match(tt.braceL);\n    this.expressionScope.enter(newExpressionScope());\n\n    if (isExpression) {\n      // https://tc39.es/ecma262/#prod-ExpressionBody\n      (node as Undone<N.ArrowFunctionExpression>).body =\n        this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      // Start a new scope with regard to labels\n      // flag (restore them to their old value afterwards).\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n\n      // FunctionBody[Yield, Await]:\n      //   StatementList[?Yield, ?Await, +Return] opt\n      this.prodParam.enter(\n        this.prodParam.currentFlags() | ParamKind.PARAM_RETURN,\n      );\n      node.body = this.parseBlock(\n        true,\n        false,\n        // Strict mode function checks after we parse the statements in the function body.\n        (hasStrictModeDirective: boolean) => {\n          const nonSimple = !this.isSimpleParamList(node.params);\n\n          if (hasStrictModeDirective && nonSimple) {\n            // This logic is here to align the error location with the ESTree plugin.\n            this.raise(\n              Errors.IllegalLanguageModeDirective,\n              // @ts-expect-error kind may not index node\n              (node.kind === \"method\" || node.kind === \"constructor\") &&\n                // @ts-expect-error key may not index node\n                !!node.key\n                ? // @ts-expect-error node.key has been guarded\n                  node.key.loc.end\n                : node,\n            );\n          }\n\n          const strictModeChanged = !oldStrict && this.state.strict;\n\n          // Add the params to varDeclaredNames to ensure that an error is thrown\n          // if a let/const declaration in the function clashes with one of the params.\n          this.checkParams(\n            node,\n            !this.state.strict && !allowExpression && !isMethod && !nonSimple,\n            allowExpression,\n            strictModeChanged,\n          );\n\n          // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n          if (this.state.strict && node.id) {\n            this.checkIdentifier(\n              node.id,\n              BindingFlag.TYPE_OUTSIDE,\n              strictModeChanged,\n            );\n          }\n        },\n      );\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n    this.expressionScope.exit();\n  }\n\n  isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n    return node.type === \"Identifier\";\n  }\n\n  isSimpleParamList(\n    params: ReadonlyArray<N.Pattern | N.TSParameterProperty>,\n  ): boolean {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (!this.isSimpleParameter(params[i])) return false;\n    }\n    return true;\n  }\n\n  checkParams(\n    node: Undone<N.Function>,\n    allowDuplicates: boolean,\n    isArrowFunction?: boolean | null,\n    strictModeChanged: boolean = true,\n  ): void {\n    const checkClashes = !allowDuplicates && new Set<string>();\n    // We create a fake node with the \"ephemeral\" type `FormalParameters`[1]\n    // since we just store an array of parameters. Perhaps someday we can have\n    // something like class FormalParameters extends Array { ... }, which would\n    // also be helpful when traversing this node.\n    //\n    // 1. https://tc39.es/ecma262/#prod-FormalParameters\n    const formalParameters = { type: \"FormalParameters\" } as const;\n    for (const param of node.params) {\n      this.checkLVal(\n        param,\n        formalParameters,\n        BindingFlag.TYPE_VAR,\n        checkClashes,\n        strictModeChanged,\n      );\n    }\n  }\n\n  // Parses a comma-separated list of expressions, and returns them as\n  // an array. `close` is the token type that ends the list, and\n  // `allowEmpty` can be turned on to allow subsequent commas with\n  // nothing in between them to be parsed as `null` (which is needed\n  // for array literals).\n\n  parseExprList(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    nodeForExtra?: N.Node | null,\n  ): (N.Expression | null)[] {\n    const elts: (N.Expression | null)[] = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | null;\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: false,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression;\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | N.SpreadElement | N.ArgumentPlaceholder | null {\n    let elt;\n    if (this.match(tt.comma)) {\n      if (!allowEmpty) {\n        this.raise(Errors.UnexpectedToken, this.state.curPosition(), {\n          unexpected: \",\",\n        });\n      }\n      elt = null;\n    } else if (this.match(tt.ellipsis)) {\n      const spreadNodeStartLoc = this.state.startLoc;\n\n      elt = this.parseParenItem(\n        this.parseSpread(refExpressionErrors),\n        spreadNodeStartLoc,\n      );\n    } else if (this.match(tt.question)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(Errors.UnexpectedArgumentPlaceholder, this.state.startLoc);\n      }\n      const node = this.startNode<N.ArgumentPlaceholder>();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowIn(\n        refExpressionErrors,\n        this.parseParenItem,\n      );\n    }\n    return elt;\n  }\n\n  // Parse the next token as an identifier. If `liberal` is true (used\n  // when parsing properties), it will also convert keywords into\n  // identifiers.\n  // This shouldn't be used to parse the keywords of meta properties, since they\n  // are not identifiers and cannot contain escape sequences.\n\n  parseIdentifier(liberal?: boolean): N.Identifier {\n    const node = this.startNode<N.Identifier>();\n    const name = this.parseIdentifierName(liberal);\n\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(\n    node: Omit<N.Identifier, \"type\">,\n    name: string,\n  ): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  parseIdentifierName(liberal?: boolean): string {\n    let name: string;\n\n    const { startLoc, type } = this.state;\n\n    if (tokenIsKeywordOrIdentifier(type)) {\n      name = this.state.value;\n    } else {\n      this.unexpected();\n    }\n\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\n\n    if (liberal) {\n      // If the current token is not used as a keyword, set its type to \"tt.name\".\n      // This will prevent this.next() from throwing about unexpected escapes.\n      if (tokenIsKeyword) {\n        this.replaceToken(tt.name);\n      }\n    } else {\n      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);\n    }\n\n    this.next();\n\n    return name;\n  }\n\n  checkReservedWord(\n    word: string,\n    startLoc: Position,\n    checkKeywords: boolean,\n    isBinding: boolean,\n  ): void {\n    // Every JavaScript reserved word is 10 characters or less.\n    if (word.length > 10) {\n      return;\n    }\n    // Most identifiers are not reservedWord-like, they don't need special\n    // treatments afterward, which very likely ends up throwing errors\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(Errors.UnexpectedKeyword, startLoc, {\n        keyword: word,\n      });\n      return;\n    }\n\n    const reservedTest = !this.state.strict\n      ? isReservedWord\n      : isBinding\n        ? isStrictBindReservedWord\n        : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      this.raise(Errors.UnexpectedReservedWord, startLoc, {\n        reservedWord: word,\n      });\n      return;\n    } else if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(Errors.YieldBindingIdentifier, startLoc);\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(Errors.AwaitBindingIdentifier, startLoc);\n        return;\n      }\n\n      if (this.scope.inStaticBlock) {\n        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, startLoc);\n        return;\n      }\n\n      this.expressionScope.recordAsyncArrowParametersError(startLoc);\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(Errors.ArgumentsInClass, startLoc);\n        return;\n      }\n    }\n  }\n\n  // Returns wether `await` is allowed or not in this context, and if it is\n  // keeps track of it to determine whether a module uses top-level await.\n  recordAwaitIfAllowed(): boolean {\n    const isAwaitAllowed =\n      this.prodParam.hasAwait ||\n      (this.options.allowAwaitOutsideFunction && !this.scope.inFunction);\n\n    if (isAwaitAllowed && !this.scope.inFunction) {\n      this.state.hasTopLevelAwait = true;\n    }\n\n    return isAwaitAllowed;\n  }\n\n  // Parses await expression inside async function.\n\n  parseAwait(this: Parser, startLoc: Position): N.AwaitExpression {\n    const node = this.startNodeAt<N.AwaitExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.AwaitExpressionFormalParameter,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n\n    if (this.eat(tt.star)) {\n      this.raise(Errors.ObsoleteAwaitStar, node);\n    }\n\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n      if (this.isAmbiguousAwait()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  isAmbiguousAwait(): boolean {\n    if (this.hasPrecedingLineBreak()) return true;\n    const { type } = this.state;\n    return (\n      // All the following expressions are ambiguous:\n      //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``, await of []\n      type === tt.plusMin ||\n      type === tt.parenL ||\n      type === tt.bracketL ||\n      tokenIsTemplate(type) ||\n      (type === tt._of && !this.state.containsEsc) ||\n      // Sometimes the tokenizer generates tt.slash for regexps, and this is\n      // handler by parseExprAtom\n      type === tt.regexp ||\n      type === tt.slash ||\n      // This code could be parsed both as a modulo operator or as an intrinsic:\n      //   await %x(0)\n      (this.hasPlugin(\"v8intrinsic\") && type === tt.modulo)\n    );\n  }\n\n  // Parses yield expression inside generator.\n\n  parseYield(this: Parser): N.YieldExpression {\n    const node = this.startNode<N.YieldExpression>();\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.YieldInParameter,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n\n    this.next();\n    let delegating = false;\n    let argument: N.Expression | null = null;\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(tt.star);\n      switch (this.state.type) {\n        case tt.semi:\n        case tt.eof:\n        case tt.braceR:\n        case tt.parenR:\n        case tt.bracketR:\n        case tt.braceBarR:\n        case tt.colon:\n        case tt.comma:\n          // The above is the complete set of tokens that can\n          // follow an AssignmentExpression, and none of them\n          // can start an AssignmentExpression\n          if (!delegating) break;\n        /* fallthrough */\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportCall\n  parseImportCall(\n    this: Parser,\n    node: Undone<N.ImportExpression>,\n  ): N.ImportExpression {\n    this.next(); // eat tt.parenL\n    node.source = this.parseMaybeAssignAllowIn();\n    if (\n      this.hasPlugin(\"importAttributes\") ||\n      this.hasPlugin(\"importAssertions\")\n    ) {\n      node.options = null;\n    }\n    if (this.eat(tt.comma)) {\n      this.expectImportAttributesPlugin();\n      if (!this.match(tt.parenR)) {\n        node.options = this.parseMaybeAssignAllowIn();\n        this.eat(tt.comma);\n      }\n    }\n    this.expect(tt.parenR);\n    return this.finishNode(node, \"ImportExpression\");\n  }\n\n  // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n  // of the infix operator `|>`.\n\n  checkPipelineAtInfixOperator(left: N.Expression, leftStartLoc: Position) {\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      if (left.type === \"SequenceExpression\") {\n        // Ensure that the pipeline head is not a comma-delimited\n        // sequence expression.\n        this.raise(Errors.PipelineHeadSequenceExpression, leftStartLoc);\n      }\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpr: N.Expression, startLoc: Position) {\n    if (this.isSimpleReference(childExpr)) {\n      const bodyNode = this.startNodeAt<N.PipelineBareFunction>(startLoc);\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      const bodyNode = this.startNodeAt<N.PipelineTopicExpression>(startLoc);\n      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n\n  isSimpleReference(expression: N.Expression): boolean {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return (\n          !expression.computed && this.isSimpleReference(expression.object)\n        );\n      case \"Identifier\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  // This helper method is to be called immediately\n  // after a topic-style smart-mix pipe body is parsed.\n  // The `startLoc` is the starting position of the pipe body.\n\n  checkSmartPipeTopicBodyEarlyErrors(startLoc: Position): void {\n    // If the following token is invalidly `=>`, then throw a human-friendly error\n    // instead of something like 'Unexpected token, expected \";\"'.\n    // For example, `x => x |> y => #` (assuming `#` is the topic reference)\n    // groups into `x => (x |> y) => #`,\n    // and `(x |> y) => #` is an invalid arrow function.\n    // This is because smart-mix `|>` has tighter precedence than `=>`.\n    if (this.match(tt.arrow)) {\n      throw this.raise(Errors.PipelineBodyNoArrow, this.state.startLoc);\n    }\n\n    // A topic-style smart-mix pipe body must use the topic reference at least once.\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(Errors.PipelineTopicUnused, startLoc);\n    }\n  }\n\n  // Enable topic references from outer contexts within Hack-style pipe bodies.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references.\n  // The function then calls a callback, then resets the parser\n  // to the old topic-context state that it had before the function was called.\n\n  withTopicBindingContext<T>(callback: () => T): T {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      // Enable the use of the primary topic reference.\n      maxNumOfResolvableTopics: 1,\n      // Hide the use of any topic references from outer contexts.\n      maxTopicIndex: null,\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  // This helper method is used only with the deprecated smart-mix pipe proposal.\n  // Disables topic references from outer contexts within syntax constructs\n  // such as the bodies of iteration statements.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references with the smartPipelines plugin. They then run a\n  // callback, then they reset the parser to the old topic-context state that it\n  // had before the function was called.\n\n  withSmartMixTopicForbiddingContext<T>(callback: () => T): T {\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      // Reset the parser’s topic context only if the smart-mix pipe proposal is active.\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        // Disable the use of the primary topic reference.\n        maxNumOfResolvableTopics: 0,\n        // Hide the use of any topic references from outer contexts.\n        maxTopicIndex: null,\n      };\n\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      // If the pipe proposal is \"minimal\", \"fsharp\", or \"hack\",\n      // or if no pipe proposal is active,\n      // then the callback result is returned\n      // without touching any extra parser state.\n      return callback();\n    }\n  }\n\n  withSoloAwaitPermittingContext<T>(callback: () => T): T {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = ParamKind.PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  disallowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = ParamKind.PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  // Register the use of a topic reference within the current\n  // topic-binding context.\n  registerTopicReference(): void {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  topicReferenceIsAllowedInCurrentContext(): boolean {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentContext(): boolean {\n    return (\n      this.state.topicContext.maxTopicIndex != null &&\n      this.state.topicContext.maxTopicIndex >= 0\n    );\n  }\n\n  parseFSharpPipelineBody(this: Parser, prec: number): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n\n    const ret = this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      prec,\n    );\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return ret;\n  }\n\n  // https://github.com/tc39/proposal-js-module-blocks\n  parseModuleExpression(this: Parser): N.ModuleExpression {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode<N.ModuleExpression>();\n    this.next(); // eat \"module\"\n    if (!this.match(tt.braceL)) {\n      this.unexpected(null, tt.braceL);\n    }\n    // start program node immediately after `{`\n    const program = this.startNodeAt<N.Program>(this.state.endLoc);\n    this.next(); // eat `{`\n\n    const revertScopes = this.initializeScopes(/** inModule */ true);\n    this.enterInitialScopes();\n\n    try {\n      node.body = this.parseProgram(program, tt.braceR, \"module\");\n    } finally {\n      revertScopes();\n    }\n    return this.finishNode<N.ModuleExpression>(node, \"ModuleExpression\");\n  }\n\n  // Used in Flow plugin\n  parsePropertyNamePrefixOperator(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    prop: Undone<N.ObjectOrClassMember | N.ClassMember>,\n  ): void {}\n}\n", "import type * as N from \"../types.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLoop,\n  tokenIsTemplate,\n  tt,\n  type TokenType,\n  getExportedToken,\n} from \"../tokenizer/types.ts\";\nimport ExpressionParser from \"./expression.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../util/identifier.ts\";\nimport * as charCodes from \"charcodes\";\nimport {\n  ScopeFlag,\n  ClassElementType,\n  BindingFlag,\n} from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newExpressionScope,\n  newParameterDeclarationScope,\n} from \"../util/expression-scope.ts\";\nimport type { SourceType } from \"../options.ts\";\nimport { Token } from \"../tokenizer/index.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../util/location.ts\";\nimport { cloneStringLiteral, cloneIdentifier, type Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\nimport { ParseBindingListFlags } from \"./lval.ts\";\nimport { LoopLabelKind } from \"../tokenizer/state.ts\";\n\nconst loopLabel = { kind: LoopLabelKind.Loop } as const,\n  switchLabel = { kind: LoopLabelKind.Switch } as const;\n\nexport const enum ParseFunctionFlag {\n  Expression = 0b0000,\n  Declaration = 0b0001,\n  HangingDeclaration = 0b0010,\n  NullableId = 0b0100,\n  Async = 0b1000,\n}\n\nexport const enum ParseStatementFlag {\n  StatementOnly = 0b0000,\n  AllowImportExport = 0b0001,\n  AllowDeclaration = 0b0010,\n  AllowFunctionDeclaration = 0b0100,\n  AllowLabeledFunction = 0b1000,\n}\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\n/**\n * Convert tokens for backward Babel 7 compat.\n * tt.privateName => tt.hash + tt.name\n * tt.templateTail => tt.backquote/tt.braceR + tt.template + tt.backquote\n * tt.templateNonTail => tt.backquote/tt.braceR + tt.template + tt.dollarBraceL\n * For performance reasons this routine mutates `tokens`, it is okay\n * here since we execute `parseTopLevel` once for every file.\n */\nfunction babel7CompatTokens(tokens: (Token | N.Comment)[], input: string) {\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const { type } = token;\n    if (typeof type === \"number\") {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (type === tt.privateName) {\n          const { loc, start, value, end } = token;\n          const hashEndPos = start + 1;\n          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          tokens.splice(\n            i,\n            1,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.hash),\n              value: \"#\",\n              start: start,\n              end: hashEndPos,\n              startLoc: loc.start,\n              endLoc: hashEndLoc,\n            }),\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.name),\n              value: value,\n              start: hashEndPos,\n              end: end,\n              startLoc: hashEndLoc,\n              endLoc: loc.end,\n            }),\n          );\n          i++;\n          continue;\n        }\n\n        if (tokenIsTemplate(type)) {\n          const { loc, start, value, end } = token;\n          const backquoteEnd = start + 1;\n          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          let startToken;\n          if (input.charCodeAt(start) === charCodes.graveAccent) {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          } else {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.braceR),\n              value: \"}\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          }\n          let templateValue,\n            templateElementEnd,\n            templateElementEndLoc,\n            endToken;\n          if (type === tt.templateTail) {\n            // ends with '`'\n            templateElementEnd = end - 1;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\n            templateValue = value === null ? null : value.slice(1, -1);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          } else {\n            // ends with `${`\n            templateElementEnd = end - 2;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\n            templateValue = value === null ? null : value.slice(1, -2);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.dollarBraceL),\n              value: \"${\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          }\n          tokens.splice(\n            i,\n            1,\n            startToken,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.template),\n              value: templateValue,\n              start: backquoteEnd,\n              end: templateElementEnd,\n              startLoc: backquoteEndLoc,\n              endLoc: templateElementEndLoc,\n            }),\n            endToken,\n          );\n          i += 2;\n          continue;\n        }\n      }\n      // @ts-expect-error: we manipulate `token` for performance reasons\n      token.type = getExportedToken(type);\n    }\n  }\n  return tokens;\n}\nexport default abstract class StatementParser extends ExpressionParser {\n  // ### Statement parsing\n\n  // Parse a program. Initializes the parser, reads any number of\n  // statements, and wraps them in a Program node.  Optionally takes a\n  // `program` argument.  If present, the statements will be appended\n  // to its body instead of creating a new node.\n\n  parseTopLevel(\n    this: Parser,\n    file: Undone<N.File>,\n    program: Undone<N.Program>,\n  ): N.File {\n    file.program = this.parseProgram(program);\n    file.comments = this.comments;\n\n    if (this.options.tokens) {\n      file.tokens = babel7CompatTokens(this.tokens, this.input);\n    }\n\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(\n    this: Parser,\n    program: Undone<N.Program>,\n    end: TokenType = tt.eof,\n    sourceType: SourceType = this.options.sourceType,\n  ): N.Program {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n    if (this.inModule) {\n      if (\n        !this.options.allowUndeclaredExports &&\n        this.scope.undefinedExports.size > 0\n      ) {\n        for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\n          this.raise(Errors.ModuleExportUndefined, at, { localName });\n        }\n      }\n      this.addExtra(program, \"topLevelAwait\", this.state.hasTopLevelAwait);\n    }\n    let finishedProgram: N.Program;\n    if (end === tt.eof) {\n      // finish at eof for top level program\n      finishedProgram = this.finishNode(program, \"Program\");\n    } else {\n      // finish immediately before the end token\n      finishedProgram = this.finishNodeAt(\n        program,\n        \"Program\",\n        createPositionWithColumnOffset(this.state.startLoc, -1),\n      );\n    }\n    return finishedProgram;\n  }\n\n  /**\n   * cast a Statement to a Directive. This method mutates input statement.\n   */\n  stmtToDirective(stmt: N.Statement): N.Directive {\n    const directive = stmt as any;\n    directive.type = \"Directive\";\n    directive.value = directive.expression;\n    delete directive.expression;\n\n    const directiveLiteral = directive.value;\n    const expressionValue = directiveLiteral.value;\n    const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);\n    const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n\n    directiveLiteral.type = \"DirectiveLiteral\";\n\n    return directive;\n  }\n\n  parseInterpreterDirective(): N.InterpreterDirective | null {\n    if (!this.match(tt.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode<N.InterpreterDirective>();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(): boolean {\n    if (!this.isContextual(tt._let)) {\n      return false;\n    }\n    return this.hasFollowingBindingAtom();\n  }\n\n  chStartsBindingIdentifier(ch: number, pos: number) {\n    if (isIdentifierStart(ch)) {\n      keywordRelationalOperator.lastIndex = pos;\n      if (keywordRelationalOperator.test(this.input)) {\n        // We have seen `in` or `instanceof` so far, now check if the identifier\n        // ends here\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n        if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n          return false;\n        }\n      }\n      return true;\n    } else if (ch === charCodes.backslash) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  chStartsBindingPattern(ch: number) {\n    return (\n      ch === charCodes.leftSquareBracket || ch === charCodes.leftCurlyBrace\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `let` and declaration is allowed, check if it\n   * starts a variable declaration so that it should be interpreted as a keyword.\n   */\n  hasFollowingBindingAtom(): boolean {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      this.chStartsBindingPattern(nextCh) ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `using` and declaration is allowed, check if it\n   * starts a variable declaration in the same line so that it should be interpreted as\n   * a keyword.\n   */\n  hasInLineFollowingBindingIdentifierOrBrace(): boolean {\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      nextCh === charCodes.leftCurlyBrace ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  startsUsingForOf(): boolean {\n    const { type, containsEsc } = this.lookahead();\n    if (type === tt._of && !containsEsc) {\n      // `using of` must start a for-lhs-of statement\n      return false;\n    } else if (tokenIsIdentifier(type) && !this.hasFollowingLineBreak()) {\n      this.expectPlugin(\"explicitResourceManagement\");\n      return true;\n    }\n  }\n\n  startsAwaitUsing(): boolean {\n    let next = this.nextTokenInLineStart();\n    if (this.isUnparsedContextual(next, \"using\")) {\n      next = this.nextTokenInLineStartSince(next + 5);\n      const nextCh = this.codePointAtPos(next);\n      if (this.chStartsBindingIdentifier(nextCh, next)) {\n        this.expectPlugin(\"explicitResourceManagement\");\n        return true;\n      }\n    }\n    return false;\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleItem\n  parseModuleItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowImportExport |\n        ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        // This function is actually also used to parse StatementItems,\n        // which with Annex B enabled allows labeled functions.\n        ParseStatementFlag.AllowLabeledFunction,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-StatementListItem\n  parseStatementListItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        (!this.options.annexB || this.state.strict\n          ? 0\n          : ParseStatementFlag.AllowLabeledFunction),\n    );\n  }\n\n  parseStatementOrSloppyAnnexBFunctionDeclaration(\n    this: Parser,\n    allowLabeledFunction: boolean = false,\n  ) {\n    let flags: ParseStatementFlag = ParseStatementFlag.StatementOnly;\n    if (this.options.annexB && !this.state.strict) {\n      flags |= ParseStatementFlag.AllowFunctionDeclaration;\n      if (allowLabeledFunction) {\n        flags |= ParseStatementFlag.AllowLabeledFunction;\n      }\n    }\n    return this.parseStatementLike(flags);\n  }\n\n  // Parse a single statement.\n  //\n  // If expecting a statement and finding a slash operator, parse a\n  // regular expression literal. This is to handle cases like\n  // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n  // does not help.\n  // https://tc39.es/ecma262/#prod-Statement\n  parseStatement(this: Parser) {\n    return this.parseStatementLike(ParseStatementFlag.StatementOnly);\n  }\n\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n  // when they are not at the top level\n  parseStatementLike(\n    this: Parser,\n    flags: ParseStatementFlag,\n  ):\n    | N.Statement\n    | N.Declaration\n    | N.ImportDeclaration\n    | N.ExportDefaultDeclaration\n    | N.ExportNamedDeclaration\n    | N.ExportAllDeclaration {\n    let decorators: N.Decorator[] | null = null;\n\n    if (this.match(tt.at)) {\n      decorators = this.parseDecorators(true);\n    }\n    return this.parseStatementContent(flags, decorators);\n  }\n\n  parseStatementContent(\n    this: Parser,\n    flags: ParseStatementFlag,\n    decorators?: N.Decorator[] | null,\n  ): N.Statement {\n    const startType = this.state.type;\n    const node = this.startNode();\n    const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);\n    const allowFunctionDeclaration = !!(\n      flags & ParseStatementFlag.AllowFunctionDeclaration\n    );\n    const topLevel = flags & ParseStatementFlag.AllowImportExport;\n\n    // Most types of statements are recognized by the keyword they\n    // start with. Many are trivial to parse, some require a bit of\n    // complexity.\n\n    switch (startType) {\n      case tt._break:\n        return this.parseBreakContinueStatement(node, /* isBreak */ true);\n      case tt._continue:\n        return this.parseBreakContinueStatement(node, /* isBreak */ false);\n      case tt._debugger:\n        return this.parseDebuggerStatement(node as Undone<N.DebuggerStatement>);\n      case tt._do:\n        return this.parseDoWhileStatement(node as Undone<N.DoWhileStatement>);\n      case tt._for:\n        return this.parseForStatement(node as Undone<N.ForStatement>);\n      case tt._function:\n        if (this.lookaheadCharCode() === charCodes.dot) break;\n        if (!allowFunctionDeclaration) {\n          this.raise(\n            this.state.strict\n              ? Errors.StrictFunction\n              : this.options.annexB\n                ? Errors.SloppyFunctionAnnexB\n                : Errors.SloppyFunction,\n            this.state.startLoc,\n          );\n        }\n        return this.parseFunctionStatement(\n          node as Undone<N.FunctionDeclaration>,\n          false,\n          !allowDeclaration && allowFunctionDeclaration,\n        );\n      case tt._class:\n        if (!allowDeclaration) this.unexpected();\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            node as Undone<N.ClassDeclaration>,\n          ),\n          true,\n        );\n\n      case tt._if:\n        return this.parseIfStatement(node as Undone<N.IfStatement>);\n      case tt._return:\n        return this.parseReturnStatement(node as Undone<N.ReturnStatement>);\n      case tt._switch:\n        return this.parseSwitchStatement(node as Undone<N.SwitchStatement>);\n      case tt._throw:\n        return this.parseThrowStatement(node as Undone<N.ThrowStatement>);\n      case tt._try:\n        return this.parseTryStatement(node as Undone<N.TryStatement>);\n\n      case tt._await:\n        // [+Await] await [no LineTerminator here] using [no LineTerminator here] BindingList[+Using]\n        if (!this.state.containsEsc && this.startsAwaitUsing()) {\n          if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, node);\n          } else if (!allowDeclaration) {\n            this.raise(Errors.UnexpectedLexicalDeclaration, node);\n          }\n          this.next(); // eat 'await'\n          return this.parseVarStatement(\n            node as Undone<N.VariableDeclaration>,\n            \"await using\",\n          );\n        }\n        break;\n      case tt._using:\n        // using [no LineTerminator here] BindingList[+Using]\n        if (\n          this.state.containsEsc ||\n          !this.hasInLineFollowingBindingIdentifierOrBrace()\n        ) {\n          break;\n        }\n        this.expectPlugin(\"explicitResourceManagement\");\n        if (!this.scope.inModule && this.scope.inTopLevel) {\n          this.raise(Errors.UnexpectedUsingDeclaration, this.state.startLoc);\n        } else if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          \"using\",\n        );\n      case tt._let: {\n        if (this.state.containsEsc) {\n          break;\n        }\n        // `let [` is an explicit negative lookahead for\n        // ExpressionStatement, so special-case it first.\n        const next = this.nextTokenStart();\n        const nextCh = this.codePointAtPos(next);\n        if (nextCh !== charCodes.leftSquareBracket) {\n          if (!allowDeclaration && this.hasFollowingLineBreak()) break;\n          if (\n            !this.chStartsBindingIdentifier(nextCh, next) &&\n            nextCh !== charCodes.leftCurlyBrace\n          ) {\n            break;\n          }\n        }\n      }\n      // fall through\n      case tt._const: {\n        if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n      }\n      // fall through\n      case tt._var: {\n        const kind = this.state.value;\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          kind,\n        );\n      }\n      case tt._while:\n        return this.parseWhileStatement(node as Undone<N.WhileStatement>);\n      case tt._with:\n        return this.parseWithStatement(node as Undone<N.WithStatement>);\n      case tt.braceL:\n        return this.parseBlock();\n      case tt.semi:\n        return this.parseEmptyStatement(node as Undone<N.EmptyStatement>);\n      case tt._import: {\n        const nextTokenCharCode = this.lookaheadCharCode();\n        if (\n          nextTokenCharCode === charCodes.leftParenthesis || // import()\n          nextTokenCharCode === charCodes.dot // import.meta\n        ) {\n          break;\n        }\n      }\n      // fall through\n      case tt._export: {\n        if (!this.options.allowImportExportEverywhere && !topLevel) {\n          this.raise(Errors.UnexpectedImportExport, this.state.startLoc);\n        }\n\n        this.next(); // eat `import`/`export`\n\n        let result;\n        if (startType === tt._import) {\n          result = this.parseImport(node as Undone<N.ImportDeclaration>);\n\n          if (\n            result.type === \"ImportDeclaration\" &&\n            (!result.importKind || result.importKind === \"value\")\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        } else {\n          result = this.parseExport(\n            node as Undone<\n              | N.ExportAllDeclaration\n              | N.ExportDefaultDeclaration\n              | N.ExportDefaultDeclaration\n            >,\n            decorators,\n          );\n\n          if (\n            (result.type === \"ExportNamedDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            (result.type === \"ExportAllDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            result.type === \"ExportDefaultDeclaration\"\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        }\n\n        this.assertModuleNodeAllowed(result);\n\n        return result;\n      }\n\n      default: {\n        if (this.isAsyncFunction()) {\n          if (!allowDeclaration) {\n            this.raise(\n              Errors.AsyncFunctionInSingleStatementContext,\n              this.state.startLoc,\n            );\n          }\n          this.next(); // eat 'async'\n          return this.parseFunctionStatement(\n            node as Undone<N.FunctionDeclaration>,\n            true,\n            !allowDeclaration && allowFunctionDeclaration,\n          );\n        }\n      }\n    }\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (\n      tokenIsIdentifier(startType) &&\n      expr.type === \"Identifier\" &&\n      this.eat(tt.colon)\n    ) {\n      return this.parseLabeledStatement(\n        node as Undone<N.LabeledStatement>,\n        maybeName,\n        expr,\n        flags,\n      );\n    } else {\n      return this.parseExpressionStatement(\n        node as Undone<N.ExpressionStatement>,\n        expr,\n        decorators,\n      );\n    }\n  }\n\n  assertModuleNodeAllowed(node: N.Node): void {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raise(Errors.ImportOutsideModule, node);\n    }\n  }\n\n  decoratorsEnabledBeforeExport(): boolean {\n    if (this.hasPlugin(\"decorators-legacy\")) return true;\n    return (\n      this.hasPlugin(\"decorators\") &&\n      this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") !== false\n    );\n  }\n\n  // Attach the decorators to the given class.\n  // NOTE: This method changes the .start location of the class, and thus\n  // can affect comment attachment. Calling it before or after finalizing\n  // the class node (and thus finalizing its comments) changes how comments\n  // before the `class` keyword or before the final .start location of the\n  // class are attached.\n  maybeTakeDecorators<T extends Undone<N.Class>>(\n    maybeDecorators: N.Decorator[] | null,\n    classNode: T,\n    exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\n  ): T {\n    if (maybeDecorators) {\n      if (classNode.decorators && classNode.decorators.length > 0) {\n        // Note: decorators attachment is only attempred multiple times\n        // when the class is part of an export declaration.\n        if (\n          typeof this.getPluginOption(\n            \"decorators\",\n            \"decoratorsBeforeExport\",\n          ) !== \"boolean\"\n        ) {\n          // If `decoratorsBeforeExport` was set to `true` or `false`, we\n          // already threw an error about decorators not being in a valid\n          // position.\n          this.raise(\n            Errors.DecoratorsBeforeAfterExport,\n            classNode.decorators[0],\n          );\n        }\n        classNode.decorators.unshift(...maybeDecorators);\n      } else {\n        classNode.decorators = maybeDecorators;\n      }\n      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\n      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\n    }\n    return classNode;\n  }\n\n  canHaveLeadingDecorator(): boolean {\n    return this.match(tt._class);\n  }\n\n  parseDecorators(this: Parser, allowExport?: boolean): N.Decorator[] {\n    const decorators = [];\n    do {\n      decorators.push(this.parseDecorator());\n    } while (this.match(tt.at));\n\n    if (this.match(tt._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (!this.decoratorsEnabledBeforeExport()) {\n        this.raise(Errors.DecoratorExportClass, this.state.startLoc);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(Errors.UnexpectedLeadingDecorator, this.state.startLoc);\n    }\n\n    return decorators;\n  }\n\n  parseDecorator(this: Parser): N.Decorator {\n    this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n    const node = this.startNode<N.Decorator>();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      const startLoc = this.state.startLoc;\n      let expr: N.Expression;\n\n      if (this.match(tt.parenL)) {\n        const startLoc = this.state.startLoc;\n        this.next(); // eat '('\n        expr = this.parseExpression();\n        this.expect(tt.parenR);\n        expr = this.wrapParenthesis(startLoc, expr);\n\n        const paramsStartLoc = this.state.startLoc;\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n        if (\n          this.getPluginOption(\"decorators\", \"allowCallParenthesized\") ===\n            false &&\n          node.expression !== expr\n        ) {\n          this.raise(\n            Errors.DecoratorArgumentsOutsideParentheses,\n            paramsStartLoc,\n          );\n        }\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(tt.dot)) {\n          const node = this.startNodeAt<N.MemberExpression>(startLoc);\n          node.object = expr;\n          if (this.match(tt.privateName)) {\n            this.classScope.usePrivateName(\n              this.state.value,\n              this.state.startLoc,\n            );\n            node.property = this.parsePrivateName();\n          } else {\n            node.property = this.parseIdentifier(true);\n          }\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n      }\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(this: Parser, expr: N.Expression): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAtNode<N.CallExpression>(expr);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: true,\n  ): N.BreakStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: false,\n  ): N.ContinueStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ): N.BreakStatement | N.ContinueStatement {\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, isBreak);\n\n    return this.finishNode(\n      node,\n      isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n    );\n  }\n\n  verifyBreakContinue(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ) {\n    let i;\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === LoopLabelKind.Loop)) {\n          break;\n        }\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      const type = isBreak ? \"BreakStatement\" : \"ContinueStatement\";\n      this.raise(Errors.IllegalBreakContinue, node, { type });\n    }\n  }\n\n  parseDebuggerStatement(\n    node: Undone<N.DebuggerStatement>,\n  ): N.DebuggerStatement {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression(this: Parser): N.Expression {\n    this.expect(tt.parenL);\n    const val = this.parseExpression();\n    this.expect(tt.parenR);\n    return val;\n  }\n\n  // https://tc39.es/ecma262/#prod-DoWhileStatement\n  parseDoWhileStatement(\n    this: Parser,\n    node: Undone<N.DoWhileStatement>,\n  ): N.DoWhileStatement {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body's body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body's body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    this.expect(tt._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(tt.semi);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n  // loop is non-trivial. Basically, we have to parse the init `var`\n  // statement or expression, disallowing the `in` operator (see\n  // the second parameter to `parseExpression`), and then check\n  // whether the next token is `in` or `of`. When there is no init\n  // part (semicolon immediately after the opening parenthesis), it\n  // is a regular `for` loop.\n\n  parseForStatement(\n    this: Parser,\n    node: Undone<N.ForStatement | N.ForInOf>,\n  ): N.ForLike {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    let awaitAt = null;\n\n    if (this.isContextual(tt._await) && this.recordAwaitIfAllowed()) {\n      awaitAt = this.state.startLoc;\n      this.next();\n    }\n    this.scope.enter(ScopeFlag.OTHER);\n    this.expect(tt.parenL);\n\n    if (this.match(tt.semi)) {\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node as Undone<N.ForStatement>, null);\n    }\n\n    const startsWithLet = this.isContextual(tt._let);\n    {\n      const startsWithAwaitUsing =\n        this.isContextual(tt._await) && this.startsAwaitUsing();\n      const starsWithUsingDeclaration =\n        startsWithAwaitUsing ||\n        (this.isContextual(tt._using) && this.startsUsingForOf());\n      const isLetOrUsing =\n        (startsWithLet && this.hasFollowingBindingAtom()) ||\n        starsWithUsingDeclaration;\n\n      if (this.match(tt._var) || this.match(tt._const) || isLetOrUsing) {\n        const initNode = this.startNode<N.VariableDeclaration>();\n        let kind;\n        if (startsWithAwaitUsing) {\n          kind = \"await using\";\n          if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, this.state.startLoc);\n          }\n          this.next(); // eat 'await'\n        } else {\n          kind = this.state.value;\n        }\n        this.next();\n        this.parseVar(initNode, true, kind);\n        const init = this.finishNode(initNode, \"VariableDeclaration\");\n\n        const isForIn = this.match(tt._in);\n        if (isForIn && starsWithUsingDeclaration) {\n          this.raise(Errors.ForInUsing, init);\n        }\n        if (\n          (isForIn || this.isContextual(tt._of)) &&\n          init.declarations.length === 1\n        ) {\n          return this.parseForIn(node as Undone<N.ForInOf>, init, awaitAt);\n        }\n        if (awaitAt !== null) {\n          this.unexpected(awaitAt);\n        }\n        return this.parseFor(node as Undone<N.ForStatement>, init);\n      }\n    }\n\n    // Check whether the first token is possibly a contextual keyword, so that\n    // we can forbid `for (async of` if this turns out to be a for-of loop.\n    const startsWithAsync = this.isContextual(tt._async);\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(tt._of);\n    if (isForOf) {\n      // Check for leading tokens that are forbidden in for-of loops:\n      if (startsWithLet) {\n        this.raise(Errors.ForOfLet, init);\n      }\n\n      if (\n        // `for await (async of []);` is allowed.\n        awaitAt === null &&\n        startsWithAsync &&\n        init.type === \"Identifier\"\n      ) {\n        // This catches the case where the `async` in `for (async of` was\n        // parsed as an identifier. If it was parsed as the start of an async\n        // arrow function (e.g. `for (async of => {} of []);`), the LVal check\n        // further down will raise a more appropriate error.\n        this.raise(Errors.ForOfAsync, init);\n      }\n    }\n    if (isForOf || this.match(tt._in)) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.toAssignable(init, /* isLHS */ true);\n      const type = isForOf ? \"ForOfStatement\" : \"ForInStatement\";\n      this.checkLVal(init, { type });\n      return this.parseForIn(\n        node as Undone<N.ForInStatement | N.ForOfStatement>,\n        // @ts-expect-error init has been transformed to an assignable\n        init,\n        awaitAt,\n      );\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt !== null) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node as Undone<N.ForStatement>, init);\n  }\n\n  // https://tc39.es/ecma262/#prod-HoistableDeclaration\n  parseFunctionStatement(\n    this: Parser,\n    node: Undone<N.FunctionDeclaration>,\n    isAsync: boolean,\n    isHangingDeclaration: boolean,\n  ): N.FunctionDeclaration {\n    this.next(); // eat 'function'\n    return this.parseFunction(\n      node,\n      ParseFunctionFlag.Declaration |\n        (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) |\n        (isAsync ? ParseFunctionFlag.Async : 0),\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-IfStatement\n  parseIfStatement(this: Parser, node: Undone<N.IfStatement>) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    // Annex B.3.3\n    // https://tc39.es/ecma262/#sec-functiondeclarations-in-ifstatement-statement-clauses\n    node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();\n    node.alternate = this.eat(tt._else)\n      ? this.parseStatementOrSloppyAnnexBFunctionDeclaration()\n      : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(this: Parser, node: Undone<N.ReturnStatement>) {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(Errors.IllegalReturn, this.state.startLoc);\n    }\n\n    this.next();\n\n    // In `return` (and `break`/`continue`), the keywords with\n    // optional arguments, we eagerly look for a semicolon or the\n    // possibility to insert one.\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-SwitchStatement\n  parseSwitchStatement(this: Parser, node: Undone<N.SwitchStatement>) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases: N.SwitchStatement[\"cases\"] = (node.cases = []);\n    this.expect(tt.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(ScopeFlag.OTHER);\n\n    // Statements under must be grouped (by label) in SwitchCase\n    // nodes. `cur` is used to keep the node that we are currently\n    // adding statements to.\n\n    let cur;\n    for (let sawDefault; !this.match(tt.braceR); ) {\n      if (this.match(tt._case) || this.match(tt._default)) {\n        const isCase = this.match(tt._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        // @ts-expect-error Fixme\n        cases.push((cur = this.startNode<N.SwitchCase>()));\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(\n              Errors.MultipleDefaultsInSwitch,\n              this.state.lastTokStartLoc,\n            );\n          }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(tt.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatementListItem());\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next(); // Closing brace\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(this: Parser, node: Undone<N.ThrowStatement>) {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.NewlineAfterThrow, this.state.lastTokEndLoc);\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam(this: Parser): N.Pattern {\n    const param = this.parseBindingAtom();\n\n    this.scope.enter(\n      this.options.annexB && param.type === \"Identifier\"\n        ? ScopeFlag.SIMPLE_CATCH\n        : 0,\n    );\n    this.checkLVal(\n      param,\n      { type: \"CatchClause\" },\n      BindingFlag.TYPE_CATCH_PARAM,\n    );\n\n    return param;\n  }\n\n  parseTryStatement(\n    this: Parser,\n    node: Undone<N.TryStatement>,\n  ): N.TryStatement {\n    this.next();\n\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(tt._catch)) {\n      const clause = this.startNode<N.CatchClause>();\n      this.next();\n      if (this.match(tt.parenL)) {\n        this.expect(tt.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(tt.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(ScopeFlag.OTHER);\n      }\n\n      // Parse the catch clause's body.\n      clause.body =\n        // For the smartPipelines plugin: Disable topic references from outer\n        // contexts within the catch clause's body.\n        this.withSmartMixTopicForbiddingContext(() =>\n          // Parse the catch clause's body.\n          this.parseBlock(false, false),\n        );\n\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(Errors.NoCatchOrFinally, node);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-VariableStatement\n  // https://tc39.es/ecma262/#prod-LexicalDeclaration\n  parseVarStatement(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): N.VariableDeclaration {\n    this.next();\n    this.parseVar(node, false, kind, allowMissingInitializer);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  // https://tc39.es/ecma262/#prod-WhileStatement\n  parseWhileStatement(\n    this: Parser,\n    node: Undone<N.WhileStatement>,\n  ): N.WhileStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(\n    this: Parser,\n    node: Undone<N.WithStatement>,\n  ): N.WithStatement {\n    if (this.state.strict) {\n      this.raise(Errors.StrictWith, this.state.startLoc);\n    }\n    this.next();\n    node.object = this.parseHeaderExpression();\n\n    // Parse the statement body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the with statement's body.\n      // They are permitted in function default-parameter expressions, which are\n      // part of the outer context, outside of the with statement's body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the statement body.\n        this.parseStatement(),\n      );\n\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node: Undone<N.EmptyStatement>): N.EmptyStatement {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-LabelledStatement\n  parseLabeledStatement(\n    this: Parser,\n    node: Undone<N.LabeledStatement>,\n    maybeName: string,\n    expr: N.Identifier,\n    flags: ParseStatementFlag,\n  ): N.LabeledStatement {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(Errors.LabelRedeclaration, expr, {\n          labelName: maybeName,\n        });\n      }\n    }\n\n    const kind = tokenIsLoop(this.state.type)\n      ? LoopLabelKind.Loop\n      : this.match(tt._switch)\n        ? LoopLabelKind.Switch\n        : null;\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n      if (label.statementStart === node.start) {\n        label.statementStart = this.state.start;\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.state.start,\n    });\n    // https://tc39.es/ecma262/#prod-LabelledItem\n    node.body =\n      flags & ParseStatementFlag.AllowLabeledFunction\n        ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true)\n        : this.parseStatement();\n\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(\n    node: Undone<N.ExpressionStatement>,\n    expr: N.Expression,\n    /* eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    decorators: N.Decorator[] | null,\n  ) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  // Parse a semicolon-enclosed block of statements, handling `\"use\n  // strict\"` declarations when `allowDirectives` is true (used for\n  // function bodies).\n\n  parseBlock(\n    this: Parser,\n    allowDirectives: boolean = false,\n    createNewLexicalScope: boolean = true,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement {\n    const node = this.startNode<N.BlockStatement>();\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n    this.expect(tt.braceL);\n    if (createNewLexicalScope) {\n      this.scope.enter(ScopeFlag.OTHER);\n    }\n    this.parseBlockBody(\n      node,\n      allowDirectives,\n      false,\n      tt.braceR,\n      afterBlockParse,\n    );\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt: N.Statement): boolean {\n    return (\n      stmt.type === \"ExpressionStatement\" &&\n      stmt.expression.type === \"StringLiteral\" &&\n      !stmt.expression.extra.parenthesized\n    );\n  }\n\n  parseBlockBody(\n    this: Parser,\n    node: Undone<N.BlockStatementLike>,\n    allowDirectives: boolean | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const body: N.BlockStatementLike[\"body\"] = (node.body = []);\n    const directives: N.BlockStatementLike[\"directives\"] = (node.directives =\n      []);\n    this.parseBlockOrModuleBlockBody(\n      body,\n      allowDirectives ? directives : undefined,\n      topLevel,\n      end,\n      afterBlockParse,\n    );\n  }\n\n  // Undefined directives means that directives are not allowed.\n  // https://tc39.es/ecma262/#prod-Block\n  // https://tc39.es/ecma262/#prod-ModuleBody\n  parseBlockOrModuleBlockBody(\n    this: Parser,\n    body: N.Statement[],\n    directives: N.Directive[] | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      const stmt = topLevel\n        ? this.parseModuleItem()\n        : this.parseStatementListItem();\n\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n\n          if (\n            !hasStrictModeDirective &&\n            directive.value.value === \"use strict\"\n          ) {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n\n          continue;\n        }\n        parsedNonDirective = true;\n        // clear strict errors since the strict mode will not change within the block\n        this.state.strictErrors.clear();\n      }\n      body.push(stmt);\n    }\n\n    afterBlockParse?.call(this, hasStrictModeDirective);\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  // Parse a regular `for` loop. The disambiguation code in\n  // `parseStatement` will already have parsed the init statement or\n  // expression.\n\n  parseFor(\n    this: Parser,\n    node: Undone<N.ForStatement>,\n    init?: N.VariableDeclaration | N.Expression | null,\n  ): N.ForStatement {\n    node.init = init;\n    this.semicolon(/* allowAsi */ false);\n    node.test = this.match(tt.semi) ? null : this.parseExpression();\n    this.semicolon(/* allowAsi */ false);\n    node.update = this.match(tt.parenR) ? null : this.parseExpression();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  // Parse a `for`/`in` and `for`/`of` loop, which are almost\n  // same from parser's perspective.\n\n  parseForIn(\n    this: Parser,\n    node: Undone<N.ForInOf>,\n    init: N.VariableDeclaration | N.AssignmentPattern,\n    awaitAt?: Position | null,\n  ): N.ForInOf {\n    const isForIn = this.match(tt._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt !== null) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt !== null;\n    }\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (!isForIn ||\n        !this.options.annexB ||\n        this.state.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\")\n    ) {\n      this.raise(Errors.ForInOfLoopInitializer, init, {\n        type: isForIn ? \"ForInStatement\" : \"ForOfStatement\",\n      });\n    }\n\n    if (init.type === \"AssignmentPattern\") {\n      this.raise(Errors.InvalidLhs, init, {\n        ancestor: { type: \"ForStatement\" },\n      });\n    }\n\n    node.left = init;\n    node.right = isForIn\n      ? this.parseExpression()\n      : this.parseMaybeAssignAllowIn();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  // Parse a list of variable declarations.\n\n  parseVar(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    isFor: boolean,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): Undone<N.VariableDeclaration> {\n    const declarations: N.VariableDeclarator[] = (node.declarations = []);\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode<N.VariableDeclarator>();\n      this.parseVarId(decl, kind);\n      decl.init = !this.eat(tt.eq)\n        ? null\n        : isFor\n          ? this.parseMaybeAssignDisallowIn()\n          : this.parseMaybeAssignAllowIn();\n\n      if (decl.init === null && !allowMissingInitializer) {\n        if (\n          decl.id.type !== \"Identifier\" &&\n          !(isFor && (this.match(tt._in) || this.isContextual(tt._of)))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            {\n              kind: \"destructuring\",\n            },\n          );\n        } else if (\n          (kind === \"const\" || kind === \"using\" || kind === \"await using\") &&\n          !(this.match(tt._in) || this.isContextual(tt._of))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            { kind },\n          );\n        }\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(tt.comma)) break;\n    }\n    return node;\n  }\n\n  parseVarId(\n    this: Parser,\n    decl: Undone<N.VariableDeclarator>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n  ): void {\n    const id = this.parseBindingAtom();\n    if (kind === \"using\" || kind === \"await using\") {\n      if (id.type === \"ArrayPattern\" || id.type === \"ObjectPattern\") {\n        this.raise(Errors.UsingDeclarationHasBindingPattern, id.loc.start);\n      }\n    }\n    this.checkLVal(\n      id,\n      { type: \"VariableDeclarator\" },\n      kind === \"var\" ? BindingFlag.TYPE_VAR : BindingFlag.TYPE_LEXICAL,\n    );\n    decl.id = id;\n  }\n\n  // https://tc39.es/ecma262/#prod-AsyncFunctionExpression\n  parseAsyncFunctionExpression(\n    this: Parser,\n    node: Undone<N.FunctionExpression>,\n  ): N.FunctionExpression {\n    return this.parseFunction(node, ParseFunctionFlag.Async);\n  }\n\n  // Parse a function declaration or expression (depending on the\n  // ParseFunctionFlag.Declaration flag).\n\n  parseFunction<T extends N.NormalFunction>(\n    this: Parser,\n    node: Undone<T>,\n    flags: ParseFunctionFlag = ParseFunctionFlag.Expression,\n  ): T {\n    const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;\n    const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);\n    const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);\n    const isAsync = !!(flags & ParseFunctionFlag.Async);\n\n    this.initFunction(node, isAsync);\n\n    if (this.match(tt.star)) {\n      if (hangingDeclaration) {\n        this.raise(\n          Errors.GeneratorInSingleStatementContext,\n          this.state.startLoc,\n        );\n      }\n      this.next(); // eat *\n      node.generator = true;\n    }\n\n    if (isDeclaration) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(ScopeFlag.FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isDeclaration) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, /* isConstructor */ false);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the function body. They are permitted in function\n    // default-parameter expressions, outside of the function body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the function body.\n      this.parseFunctionBodyAndFinish(\n        node,\n        isDeclaration ? \"FunctionDeclaration\" : \"FunctionExpression\",\n      );\n    });\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isDeclaration && !hangingDeclaration) {\n      // We need to register this _after_ parsing the function body\n      // because of TypeScript body-less function declarations,\n      // which shouldn't be added to the scope.\n      this.registerFunctionStatementId(node as T);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node as T;\n  }\n\n  parseFunctionId(requireId?: boolean): N.Identifier | undefined | null {\n    return requireId || tokenIsIdentifier(this.state.type)\n      ? this.parseIdentifier()\n      : null;\n  }\n\n  parseFunctionParams(\n    this: Parser,\n    node: Undone<N.Function>,\n    isConstructor?: boolean,\n  ): void {\n    this.expect(tt.parenL);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(\n      tt.parenR,\n      charCodes.rightParenthesis,\n      ParseBindingListFlags.IS_FUNCTION_PARAMS |\n        (isConstructor ? ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS : 0),\n    );\n\n    this.expressionScope.exit();\n  }\n\n  registerFunctionStatementId(node: N.Function): void {\n    if (!node.id) return;\n\n    // If it is a regular function declaration in sloppy mode, then it is\n    // subject to Annex B semantics (BindingFlag.TYPE_FUNCTION). Otherwise, the binding\n    // mode depends on properties of the current scope (see\n    // treatFunctionsAsVar).\n    this.scope.declareName(\n      node.id.name,\n      !this.options.annexB || this.state.strict || node.generator || node.async\n        ? this.scope.treatFunctionsAsVar\n          ? BindingFlag.TYPE_VAR\n          : BindingFlag.TYPE_LEXICAL\n        : BindingFlag.TYPE_FUNCTION,\n      node.id.loc.start,\n    );\n  }\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseClass<T extends N.Class>(\n    this: Parser,\n    node: Undone<T>,\n    isStatement: /* T === ClassDeclaration */ boolean,\n    optionalId?: boolean,\n  ): T {\n    this.next(); // 'class'\n\n    // A class definition is always strict mode code.\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    // this.state.strict is restored in parseClassBody\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n\n    return this.finishNode(\n      node,\n      isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n    );\n  }\n\n  isClassProperty(): boolean {\n    return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n  }\n\n  isClassMethod(): boolean {\n    return this.match(tt.parenL);\n  }\n\n  nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n    return (\n      (key.type === \"Identifier\" && key.name === \"constructor\") ||\n      (key.type === \"StringLiteral\" && key.value === \"constructor\")\n    );\n  }\n\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n    return (\n      !method.computed && !method.static && this.nameIsConstructor(method.key)\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassBody\n  parseClassBody(\n    this: Parser,\n    hadSuperClass: boolean,\n    oldStrict: boolean,\n  ): N.ClassBody {\n    this.classScope.enter();\n\n    const state: N.ParseClassMemberState = {\n      hadConstructor: false,\n      hadSuperClass,\n    };\n    let decorators: N.Decorator[] = [];\n    const classBody = this.startNode<N.ClassBody>();\n    classBody.body = [];\n\n    this.expect(tt.braceL);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the class body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the contents within the braces.\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(\n              Errors.DecoratorSemicolon,\n              this.state.lastTokEndLoc,\n            );\n          }\n          continue;\n        }\n\n        if (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode<N.ClassMember>();\n\n        // steal the decorators if there are any\n        if (decorators.length) {\n          // @ts-expect-error Fixme\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (\n          // @ts-expect-error Fixme\n          member.kind === \"constructor\" &&\n          // @ts-expect-error Fixme\n          member.decorators &&\n          // @ts-expect-error Fixme\n          member.decorators.length > 0\n        ) {\n          this.raise(Errors.DecoratorConstructor, member);\n        }\n      }\n    });\n\n    this.state.strict = oldStrict;\n\n    this.next(); // eat `}`\n\n    if (decorators.length) {\n      throw this.raise(Errors.TrailingDecorator, this.state.startLoc);\n    }\n\n    this.classScope.exit();\n\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  // returns true if the current identifier is a method/field name,\n  // false if it is a modifier\n  parseClassMemberFromModifier(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n  ): boolean {\n    const key = this.parseIdentifier(true); // eats the modifier\n\n    if (this.isClassMethod()) {\n      const method: N.ClassMethod = member as any;\n\n      // a method named like the modifier\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(\n        classBody,\n        method,\n        false,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop: N.ClassProperty = member as any;\n\n      // a property named like the modifier\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n\n  parseClassMember(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n  ): void {\n    const isStatic = this.isContextual(tt._static);\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        // a class element named 'static'\n        return;\n      }\n      if (this.eat(tt.braceL)) {\n        this.parseClassStaticBlock(classBody, member as any as N.StaticBlock);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n    isStatic: boolean,\n  ) {\n    const publicMethod = member as N.ClassMethod;\n    const privateMethod = member as N.ClassPrivateMethod;\n    const publicProp = member as N.ClassProperty;\n    const privateProp = member as N.ClassPrivateProperty;\n    const accessorProp = member as N.ClassAccessorProperty;\n\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n    member.static = isStatic;\n    this.parsePropertyNamePrefixOperator(member);\n\n    if (this.eat(tt.star)) {\n      // a generator\n      method.kind = \"method\";\n      const isPrivateName = this.match(tt.privateName);\n      this.parseClassElementName(method);\n\n      if (isPrivateName) {\n        // Private generator method\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(Errors.ConstructorIsGenerator, publicMethod.key);\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        true,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n\n      return;\n    }\n\n    const isContextual =\n      !this.state.containsEsc && tokenIsIdentifier(this.state.type);\n    const key = this.parseClassElementName(member);\n    const maybeContextualKw = isContextual ? (key as N.Identifier).name : null;\n    const isPrivate = this.isPrivateName(key);\n    const maybeQuestionTokenStartLoc = this.state.startLoc;\n\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      // a normal method\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        // TypeScript allows multiple overloaded constructor declarations.\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(Errors.DuplicateConstructor, key);\n        }\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(Errors.OverrideOnConstructor, key);\n        }\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        false,\n        false,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (maybeContextualKw === \"async\" && !this.isLineTerminator()) {\n      // an async method\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(tt.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStartLoc);\n      }\n\n      method.kind = \"method\";\n      // The so-called parsed name would have been \"async\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (isPrivate) {\n        // private async method\n        this.pushClassPrivateMethod(\n          classBody,\n          privateMethod,\n          isGenerator,\n          true,\n        );\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAsync, publicMethod.key);\n        }\n\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          isGenerator,\n          true,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n    } else if (\n      (maybeContextualKw === \"get\" || maybeContextualKw === \"set\") &&\n      !(this.match(tt.star) && this.isLineTerminator())\n    ) {\n      // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n      // a getter or setter\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = maybeContextualKw;\n      // The so-called parsed name would have been \"get/set\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicMethod);\n\n      if (isPrivate) {\n        // private getter/setter\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAccessor, publicMethod.key);\n        }\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          false,\n          false,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (maybeContextualKw === \"accessor\" && !this.isLineTerminator()) {\n      this.expectPlugin(\"decoratorAutoAccessors\");\n      this.resetPreviousNodeTrailingComments(key);\n\n      // The so-called parsed name would have been \"accessor\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicProp);\n      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\n    } else if (this.isLineTerminator()) {\n      // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassElementName\n  parseClassElementName(\n    this: Parser,\n    member: Undone<N.ClassMember>,\n  ): N.Expression | N.Identifier | N.PrivateName {\n    const { type, value } = this.state;\n    if (\n      (type === tt.name || type === tt.string) &&\n      member.static &&\n      value === \"prototype\"\n    ) {\n      this.raise(Errors.StaticPrototype, this.state.startLoc);\n    }\n\n    if (type === tt.privateName) {\n      if (value === \"constructor\") {\n        this.raise(Errors.ConstructorClassPrivateField, this.state.startLoc);\n      }\n      const key = this.parsePrivateName();\n      member.key = key;\n      return key;\n    }\n\n    this.parsePropertyName(member);\n    return member.key;\n  }\n\n  parseClassStaticBlock(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<\n      N.StaticBlock & {\n        decorators?: Array<N.Decorator>;\n      }\n    >,\n  ) {\n    // Start a new lexical scope\n    this.scope.enter(\n      ScopeFlag.CLASS | ScopeFlag.STATIC_BLOCK | ScopeFlag.SUPER,\n    );\n    // Start a new scope with regard to loop labels\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    // ClassStaticBlockStatementList:\n    //   StatementList[~Yield, ~Await, ~Return] opt\n    this.prodParam.enter(ParamKind.PARAM);\n    const body: N.Statement[] = (member.body = []);\n    this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode<N.StaticBlock>(member, \"StaticBlock\"));\n    if (member.decorators?.length) {\n      this.raise(Errors.DecoratorStaticBlock, member);\n    }\n  }\n\n  pushClassProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassProperty,\n  ) {\n    if (!prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: Undone<N.ClassPrivateProperty>,\n  ) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key),\n      ClassElementType.OTHER,\n      node.key.loc.start,\n    );\n  }\n\n  pushClassAccessorProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassAccessorProperty,\n    isPrivate: boolean,\n  ) {\n    if (!isPrivate && !prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    const node = this.parseClassAccessorProperty(prop);\n    classBody.body.push(node);\n\n    if (isPrivate) {\n      this.classScope.declarePrivateName(\n        this.getPrivateNameSV(node.key as N.PrivateName),\n        ClassElementType.OTHER,\n        node.key.loc.start,\n      );\n    }\n  }\n\n  pushClassMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowsDirectSuper: boolean,\n  ): void {\n    classBody.body.push(\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      ),\n    );\n  }\n\n  pushClassPrivateMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassPrivateMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n  ): void {\n    const node = this.parseMethod(\n      method,\n      isGenerator,\n      isAsync,\n      /* isConstructor */ false,\n      false,\n      \"ClassPrivateMethod\",\n      true,\n    );\n    classBody.body.push(node);\n\n    const kind =\n      node.kind === \"get\"\n        ? node.static\n          ? ClassElementType.STATIC_GETTER\n          : ClassElementType.INSTANCE_GETTER\n        : node.kind === \"set\"\n          ? node.static\n            ? ClassElementType.STATIC_SETTER\n            : ClassElementType.INSTANCE_SETTER\n          : ClassElementType.OTHER;\n    this.declareClassPrivateMethodInScope(node, kind);\n  }\n\n  declareClassPrivateMethodInScope(\n    node: Undone<N.ClassPrivateMethod | N.TSDeclareMethod>,\n    kind: number,\n  ) {\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key as N.PrivateName),\n      kind,\n      node.key.loc.start,\n    );\n  }\n\n  // Overridden in typescript.js\n  parsePostMemberNameModifiers(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    methodOrProp: Undone<N.ClassMethod | N.ClassProperty>,\n  ): void {}\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassPrivateProperty(\n    this: Parser,\n    node: Undone<N.ClassPrivateProperty>,\n  ): N.ClassPrivateProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassProperty(this: Parser, node: N.ClassProperty): N.ClassProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseClassAccessorProperty(\n    this: Parser,\n    node: N.ClassAccessorProperty,\n  ): N.ClassAccessorProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassAccessorProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-Initializer\n  parseInitializer(\n    this: Parser,\n    node: Undone<\n      N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty\n    >,\n  ): void {\n    this.scope.enter(ScopeFlag.CLASS | ScopeFlag.SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(ParamKind.PARAM);\n    node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n\n  parseClassId(\n    node: Undone<N.Class>,\n    isStatement: boolean,\n    optionalId?: boolean | null,\n    bindingType: BindingFlag = BindingFlag.TYPE_CLASS,\n  ): void {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.declareNameFromIdentifier(node.id, bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        throw this.raise(Errors.MissingClassName, this.state.startLoc);\n      }\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassHeritage\n  parseClassSuper(this: Parser, node: Undone<N.Class>): void {\n    node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  // Parses module export declaration.\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n\n  parseExport(\n    this: Parser,\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    decorators: N.Decorator[] | null,\n  ): N.AnyExport {\n    const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n      node,\n      /* isExport */ true,\n    );\n    const hasDefault = this.maybeParseExportDefaultSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace =\n      hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace =\n      parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(node, true);\n\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {\n      this.unexpected(null, tt.braceL);\n    }\n\n    if (hasNamespace && parseAfterNamespace) {\n      this.unexpected(null, tt._from);\n    }\n\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(\n        node as Undone<N.ExportNamedDeclaration>,\n        isFromRequired,\n      );\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(\n        node as Undone<N.ExportNamedDeclaration>,\n      );\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n      this.checkExport(node2, true, false, !!node2.source);\n      if (node2.declaration?.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, node2.declaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      return this.finishNode(node2, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(tt._default)) {\n      const node2 = node as Undone<N.ExportDefaultDeclaration>;\n      // export default ...\n      const decl = this.parseExportDefaultExpression();\n      node2.declaration = decl;\n\n      if (decl.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, decl as N.ClassDeclaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n\n      this.checkExport(node2, true, true);\n\n      return this.finishNode(node2, \"ExportDefaultDeclaration\");\n    }\n\n    this.unexpected(null, tt.braceL);\n  }\n\n  eatExportStar(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n    return this.eat(tt.star);\n  }\n\n  maybeParseExportDefaultSpecifier(\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (maybeDefaultIdentifier || this.isExportDefaultSpecifier()) {\n      // export defaultObj ...\n      this.expectPlugin(\"exportDefaultFrom\", maybeDefaultIdentifier?.loc.start);\n      const id = maybeDefaultIdentifier || this.parseIdentifier(true);\n      const specifier = this.startNodeAtNode<N.ExportDefaultSpecifier>(id);\n      specifier.exported = id;\n      (node as Undone<N.ExportNamedDeclaration>).specifiers = [\n        this.finishNode(specifier, \"ExportDefaultSpecifier\"),\n      ];\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.isContextual(tt._as)) {\n      (node as Undone<N.ExportNamedDeclaration>).specifiers ??= [];\n\n      const specifier = this.startNodeAt<N.ExportNamespaceSpecifier>(\n        this.state.lastTokStartLoc,\n      );\n\n      this.next();\n\n      specifier.exported = this.parseModuleExportName();\n      (node as Undone<N.ExportNamedDeclaration>).specifiers.push(\n        this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.match(tt.braceL)) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!node2.specifiers) node2.specifiers = [];\n      const isTypeExport = node2.exportKind === \"type\";\n      node2.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n\n      node2.source = null;\n      node2.declaration = null;\n      if (this.hasPlugin(\"importAssertions\")) {\n        node2.assertions = [];\n      }\n\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportDeclaration(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration>,\n  ): boolean {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      if (this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      }\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n\n  isAsyncFunction(): boolean {\n    if (!this.isContextual(tt._async)) return false;\n    const next = this.nextTokenInLineStart();\n    return this.isUnparsedContextual(next, \"function\");\n  }\n\n  parseExportDefaultExpression(\n    this: Parser,\n  ): N.ExportDefaultDeclaration[\"declaration\"] {\n    const expr = this.startNode();\n\n    if (this.match(tt._function)) {\n      this.next();\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId,\n      );\n    } else if (this.isAsyncFunction()) {\n      this.next(); // eat 'async'\n      this.next(); // eat 'function'\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration |\n          ParseFunctionFlag.NullableId |\n          ParseFunctionFlag.Async,\n      );\n    }\n\n    if (this.match(tt._class)) {\n      return this.parseClass(expr as Undone<N.ClassExpression>, true, true);\n    }\n\n    if (this.match(tt.at)) {\n      if (\n        this.hasPlugin(\"decorators\") &&\n        this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n      ) {\n        this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n      }\n      return this.parseClass(\n        this.maybeTakeDecorators(\n          this.parseDecorators(false),\n          this.startNode<N.ClassDeclaration>(),\n        ),\n        true,\n        true,\n      );\n    }\n\n    if (this.match(tt._const) || this.match(tt._var) || this.isLet()) {\n      throw this.raise(Errors.UnsupportedDefaultExport, this.state.startLoc);\n    }\n\n    const res = this.parseMaybeAssignAllowIn();\n    this.semicolon();\n    return res;\n  }\n\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n  parseExportDeclaration(\n    this: Parser,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    node: Undone<N.ExportNamedDeclaration>,\n  ): N.Declaration | undefined | null {\n    if (this.match(tt._class)) {\n      const node = this.parseClass(\n        this.startNode<N.ClassDeclaration>(),\n        true,\n        false,\n      );\n      return node;\n    }\n    return this.parseStatementListItem() as N.Declaration;\n  }\n\n  isExportDefaultSpecifier(): boolean {\n    const { type } = this.state;\n    if (tokenIsIdentifier(type)) {\n      if ((type === tt._async && !this.state.containsEsc) || type === tt._let) {\n        return false;\n      }\n      if (\n        (type === tt._type || type === tt._interface) &&\n        !this.state.containsEsc\n      ) {\n        const { type: nextType } = this.lookahead();\n        // If we see any variable name other than `from` after `type` keyword,\n        // we consider it as flow/typescript type exports\n        // note that this approach may fail on some pedantic cases\n        // export type from = number\n        if (\n          (tokenIsIdentifier(nextType) && nextType !== tt._from) ||\n          nextType === tt.braceL\n        ) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(tt._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n    if (\n      this.input.charCodeAt(next) === charCodes.comma ||\n      (tokenIsIdentifier(this.state.type) && hasFrom)\n    ) {\n      return true;\n    }\n    // lookahead again when `export default from` is seen\n    if (this.match(tt._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(\n        this.nextTokenStartSince(next + 4),\n      );\n      return (\n        nextAfterFrom === charCodes.quotationMark ||\n        nextAfterFrom === charCodes.apostrophe\n      );\n    }\n    return false;\n  }\n\n  parseExportFrom(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    expect?: boolean,\n  ): void {\n    if (this.eatContextual(tt._from)) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      this.maybeParseImportAttributes(node);\n      this.checkJSONModuleImport(node);\n    } else if (expect) {\n      this.unexpected();\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration(): boolean {\n    const { type } = this.state;\n    if (type === tt.at) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (\n          this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n        ) {\n          this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n        }\n\n        return true;\n      }\n    }\n\n    if (this.isContextual(tt._using)) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    if (this.isContextual(tt._await) && this.startsAwaitUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    return (\n      type === tt._var ||\n      type === tt._const ||\n      type === tt._function ||\n      type === tt._class ||\n      this.isLet() ||\n      this.isAsyncFunction()\n    );\n  }\n\n  checkExport(\n    node: Undone<\n      | N.ExportNamedDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportDefaultDeclaration\n    >,\n    checkNames?: boolean,\n    isDefault?: boolean,\n    isFrom?: boolean,\n  ): void {\n    if (checkNames) {\n      // Check for duplicate exports\n      if (isDefault) {\n        // Default exports\n        this.checkDuplicateExports(node, \"default\");\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          const declaration = (node as any as N.ExportDefaultDeclaration)\n            .declaration;\n          if (\n            declaration.type === \"Identifier\" &&\n            declaration.name === \"from\" &&\n            declaration.end - declaration.start === 4 && // does not contain escape\n            !declaration.extra?.parenthesized\n          ) {\n            this.raise(Errors.ExportDefaultFromAsIdentifier, declaration);\n          }\n        }\n        // @ts-expect-error node.specifiers may not exist\n      } else if (node.specifiers?.length) {\n        // Named exports\n        // @ts-expect-error node.specifiers may not exist\n        for (const specifier of node.specifiers) {\n          const { exported } = specifier;\n          const exportName =\n            exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportName);\n          if (!isFrom && specifier.local) {\n            const { local } = specifier;\n            if (local.type !== \"Identifier\") {\n              this.raise(Errors.ExportBindingIsString, specifier, {\n                localName: local.value,\n                exportName,\n              });\n            } else {\n              // check for keywords used as local names\n              this.checkReservedWord(local.name, local.loc.start, true, false);\n              // check if export is defined\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if ((node as Undone<N.ExportNamedDeclaration>).declaration) {\n        const decl = (node as Undone<N.ExportNamedDeclaration>).declaration;\n        // Exported declarations\n        if (\n          decl.type === \"FunctionDeclaration\" ||\n          decl.type === \"ClassDeclaration\"\n        ) {\n          const { id } = decl;\n          if (!id) throw new Error(\"Assertion failure\");\n\n          this.checkDuplicateExports(node, id.name);\n        } else if (decl.type === \"VariableDeclaration\") {\n          for (const declaration of decl.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n  }\n\n  checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      // @ts-expect-error migrate to Babel types\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(\n    node: Undone<\n      | N.Identifier\n      | N.StringLiteral\n      | N.ExportNamedDeclaration\n      | N.ExportSpecifier\n      | N.ExportDefaultSpecifier\n    >,\n    exportName: string,\n  ): void {\n    if (this.exportedIdentifiers.has(exportName)) {\n      if (exportName === \"default\") {\n        this.raise(Errors.DuplicateDefaultExport, node);\n      } else {\n        this.raise(Errors.DuplicateExport, node, { exportName });\n      }\n    }\n    this.exportedIdentifiers.add(exportName);\n  }\n\n  // Parses a comma-separated list of module exports.\n\n  parseExportSpecifiers(isInTypeExport: boolean): Array<N.ExportSpecifier> {\n    const nodes = [];\n    let first = true;\n\n    // export { x, y as z } [from '...']\n    this.expect(tt.braceL);\n\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      const isString = this.match(tt.string);\n      const node = this.startNode<N.ExportSpecifier>();\n      node.local = this.parseModuleExportName() as N.Identifier;\n      nodes.push(\n        this.parseExportSpecifier(\n          node,\n          isString,\n          isInTypeExport,\n          isMaybeTypeOnly,\n        ),\n      );\n    }\n\n    return nodes;\n  }\n\n  parseExportSpecifier(\n    node: any,\n    isString: boolean,\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    isInTypeExport: boolean,\n    isMaybeTypeOnly: boolean,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): N.ExportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      node.exported = this.parseModuleExportName();\n    } else if (isString) {\n      node.exported = cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = cloneIdentifier(node.local);\n    }\n    return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleExportName\n  parseModuleExportName(): N.StringLiteral | N.Identifier {\n    if (this.match(tt.string)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = loneSurrogate.exec(result.value);\n      if (surrogate) {\n        this.raise(Errors.ModuleExportNameHasLoneSurrogate, result, {\n          surrogateCharCode: surrogate[0].charCodeAt(0),\n        });\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n\n  isJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ): boolean {\n    if (node.assertions != null) {\n      return node.assertions.some(({ key, value }) => {\n        return (\n          value.value === \"json\" &&\n          (key.type === \"Identifier\"\n            ? key.name === \"type\"\n            : key.value === \"type\")\n        );\n      });\n    }\n    return false;\n  }\n\n  checkImportReflection(node: Undone<N.ImportDeclaration>) {\n    const { specifiers } = node;\n    const singleBindingType =\n      specifiers.length === 1 ? specifiers[0].type : null;\n\n    if (node.phase === \"source\") {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(\n          Errors.SourcePhaseImportRequiresDefault,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.phase === \"defer\") {\n      if (singleBindingType !== \"ImportNamespaceSpecifier\") {\n        this.raise(\n          Errors.DeferImportRequiresNamespace,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.module) {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(Errors.ImportReflectionNotBinding, specifiers[0].loc.start);\n      }\n      if (node.assertions?.length > 0) {\n        this.raise(\n          Errors.ImportReflectionHasAssertion,\n          specifiers[0].loc.start,\n        );\n      }\n    }\n  }\n\n  checkJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ) {\n    // @ts-expect-error Fixme: node.type must be undefined because they are undone\n    if (this.isJSONModuleImport(node) && node.type !== \"ExportAllDeclaration\") {\n      // @ts-expect-error specifiers may not index node\n      const { specifiers } = node;\n      if (specifiers != null) {\n        // @ts-expect-error refine specifier types\n        const nonDefaultNamedSpecifier = specifiers.find(specifier => {\n          let imported;\n          if (specifier.type === \"ExportSpecifier\") {\n            imported = specifier.local;\n          } else if (specifier.type === \"ImportSpecifier\") {\n            imported = specifier.imported;\n          }\n          if (imported !== undefined) {\n            return imported.type === \"Identifier\"\n              ? imported.name !== \"default\"\n              : imported.value !== \"default\";\n          }\n        });\n        if (nonDefaultNamedSpecifier !== undefined) {\n          this.raise(\n            Errors.ImportJSONBindingNotDefault,\n            nonDefaultNamedSpecifier.loc.start,\n          );\n        }\n      }\n    }\n  }\n\n  isPotentialImportPhase(isExport: boolean): boolean {\n    if (isExport) return false;\n    return (\n      this.isContextual(tt._source) ||\n      this.isContextual(tt._defer) ||\n      this.isContextual(tt._module)\n    );\n  }\n\n  applyImportPhase(\n    node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n    isExport: boolean,\n    phase: string | null,\n    loc?: Position,\n  ): void {\n    if (isExport) {\n      if (!process.env.IS_PUBLISH) {\n        if (phase === \"module\" || phase === \"source\") {\n          throw new Error(\n            `Assertion failure: export declarations do not support the '${phase}' phase.`,\n          );\n        }\n      }\n      return;\n    }\n\n    if (phase === \"module\") {\n      this.expectPlugin(\"importReflection\", loc);\n      (node as N.ImportDeclaration).module = true;\n    } else if (this.hasPlugin(\"importReflection\")) {\n      (node as N.ImportDeclaration).module = false;\n    }\n\n    if (phase === \"source\") {\n      this.expectPlugin(\"sourcePhaseImports\", loc);\n      (node as N.ImportDeclaration).phase = \"source\";\n    } else if (phase === \"defer\") {\n      this.expectPlugin(\"deferredImportEvaluation\", loc);\n      (node as N.ImportDeclaration).phase = \"defer\";\n    } else if (this.hasPlugin(\"sourcePhaseImports\")) {\n      (node as N.ImportDeclaration).phase = null;\n    }\n  }\n\n  /*\n   * Parse `module` in `import module x from \"x\"`, disambiguating\n   * `import module from \"x\"` and `import module from from \"x\"`.\n   *\n   * This function might return an identifier representing the `module`\n   * if it eats `module` and then discovers that it was the default import\n   * binding and not the import reflection.\n   *\n   * This function is also used to parse `import type` and `import typeof`\n   * in the TS and Flow plugins.\n   *\n   * Note: the proposal has been updated to use `source` instead of `module`,\n   * but it has not been implemented yet.\n   */\n  parseMaybeImportPhase(\n    node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    isExport: boolean,\n  ): N.Identifier | null {\n    if (!this.isPotentialImportPhase(isExport)) {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      return null;\n    }\n\n    const phaseIdentifier = this.parseIdentifier(true);\n\n    const { type } = this.state;\n    const isImportPhase = tokenIsKeywordOrIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n\n    if (isImportPhase) {\n      this.resetPreviousIdentifierLeadingComments(phaseIdentifier);\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        phaseIdentifier.name,\n        phaseIdentifier.loc.start,\n      );\n      return null;\n    } else {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      // `<phase>` is a default binding, return it to the main import declaration parser\n      return phaseIdentifier;\n    }\n  }\n\n  isPrecedingIdImportPhase(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    phase: string,\n  ) {\n    const { type } = this.state;\n    return tokenIsIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n  }\n\n  // Parses import declaration.\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n  parseImport(this: Parser, node: Undone<N.ImportDeclaration>): N.AnyImport {\n    if (this.match(tt.string)) {\n      // import '...'\n      return this.parseImportSourceAndAttributes(node);\n    }\n\n    return this.parseImportSpecifiersAndAfter(\n      node,\n      this.parseMaybeImportPhase(node, /* isExport */ false),\n    );\n  }\n\n  parseImportSpecifiersAndAfter(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): N.AnyImport {\n    node.specifiers = [];\n\n    // check if we have a default import like\n    // import React from \"react\";\n    const hasDefault = this.maybeParseDefaultImportSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    /* we are checking if we do not have a default import, then it is obvious that we need named imports\n     * import { get } from \"axios\";\n     * but if we do have a default import\n     * we need to check if we have a comma after that and\n     * that is where this `|| this.eat` condition comes into play\n     */\n    const parseNext = !hasDefault || this.eat(tt.comma);\n    // if we do have to parse the next set of specifiers, we first check for star imports\n    // import React, * from \"react\";\n    const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n    // now we check if we need to parse the next imports\n    // but only if they are not importing * (everything)\n    if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n    this.expectContextual(tt._from);\n\n    return this.parseImportSourceAndAttributes(node);\n  }\n\n  parseImportSourceAndAttributes(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n  ): N.AnyImport {\n    node.specifiers ??= [];\n    node.source = this.parseImportSource();\n    this.maybeParseImportAttributes(node);\n    this.checkImportReflection(node);\n    this.checkJSONModuleImport(node);\n\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource(this: Parser): N.StringLiteral {\n    if (!this.match(tt.string)) this.unexpected();\n    return this.parseExprAtom() as N.StringLiteral;\n  }\n\n  parseImportSpecifierLocal<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    node: Undone<N.ImportDeclaration>,\n    specifier: Undone<T>,\n    type: T[\"type\"],\n  ): void {\n    specifier.local = this.parseIdentifier();\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\n  }\n\n  finishImportSpecifier<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    specifier: Undone<T>,\n    type: T[\"type\"],\n    bindingType: BindingFlag = BindingFlag.TYPE_LEXICAL,\n  ) {\n    this.checkLVal(specifier.local, { type }, bindingType);\n    return this.finishNode(specifier, type);\n  }\n\n  /**\n   * parse assert entries\n   *\n   * @see {@link https://tc39.es/proposal-import-attributes/#prod-WithEntries WithEntries}\n   */\n  parseImportAttributes(): N.ImportAttribute[] {\n    this.expect(tt.braceL);\n\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(tt.braceR)) {\n        break;\n      }\n\n      const node = this.startNode<N.ImportAttribute>();\n\n      // parse AssertionKey : IdentifierName, StringLiteral\n      const keyName = this.state.value;\n      // check if we already have an entry for an attribute\n      // if a duplicate entry is found, throw an error\n      // for now this logic will come into play only when someone declares `type` twice\n      if (attrNames.has(keyName)) {\n        this.raise(\n          Errors.ModuleAttributesWithDuplicateKeys,\n          this.state.startLoc,\n          {\n            key: keyName,\n          },\n        );\n      }\n      attrNames.add(keyName);\n      if (this.match(tt.string)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n      this.expect(tt.colon);\n\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    this.expect(tt.braceR);\n\n    return attrs;\n  }\n\n  /**\n   * parse module attributes\n   * @deprecated It will be removed in Babel 8\n   */\n  parseModuleAttributes() {\n    const attrs: N.ImportAttribute[] = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode<N.ImportAttribute>();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(Errors.ModuleAttributeDifferentFromType, node.key);\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, node.key, {\n          key: node.key.name,\n        });\n      }\n      attributes.add(node.key.name);\n      this.expect(tt.colon);\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAttributes(\n    node: Undone<\n      N.ImportDeclaration | N.ExportNamedDeclaration | N.ExportAllDeclaration\n    >,\n  ) {\n    let attributes: N.ImportAttribute[];\n    let useWith = false;\n\n    // https://tc39.es/proposal-import-attributes/#prod-WithClause\n    if (this.match(tt._with)) {\n      if (\n        this.hasPrecedingLineBreak() &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      ) {\n        // This will be parsed as a with statement, and we will throw a\n        // better error about it not being supported in strict mode.\n        return;\n      }\n\n      this.next(); // eat `with`\n\n      if (!process.env.BABEL_8_BREAKING) {\n        if (this.hasPlugin(\"moduleAttributes\")) {\n          attributes = this.parseModuleAttributes();\n        } else {\n          this.expectImportAttributesPlugin();\n          attributes = this.parseImportAttributes();\n        }\n      } else {\n        this.expectImportAttributesPlugin();\n        attributes = this.parseImportAttributes();\n      }\n      useWith = true;\n    } else if (this.isContextual(tt._assert) && !this.hasPrecedingLineBreak()) {\n      if (this.hasPlugin(\"importAttributes\")) {\n        if (\n          this.getPluginOption(\"importAttributes\", \"deprecatedAssertSyntax\") !==\n          true\n        ) {\n          this.raise(Errors.ImportAttributesUseAssert, this.state.startLoc);\n        }\n        this.addExtra(node, \"deprecatedAssertSyntax\", true);\n      } else {\n        this.expectOnePlugin([\"importAttributes\", \"importAssertions\"]);\n      }\n      this.next(); // eat `assert`\n      attributes = this.parseImportAttributes();\n    } else if (\n      this.hasPlugin(\"importAttributes\") ||\n      this.hasPlugin(\"importAssertions\")\n    ) {\n      attributes = [];\n    } else if (!process.env.BABEL_8_BREAKING) {\n      if (this.hasPlugin(\"moduleAttributes\")) {\n        attributes = [];\n      } else return;\n    } else return;\n\n    if (!useWith && this.hasPlugin(\"importAssertions\")) {\n      node.assertions = attributes;\n    } else {\n      node.attributes = attributes;\n    }\n  }\n\n  maybeParseDefaultImportSpecifier(\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): boolean {\n    // import defaultObj, { x, y as z } from '...'\n    if (maybeDefaultIdentifier) {\n      const specifier = this.startNodeAtNode<N.ImportDefaultSpecifier>(\n        maybeDefaultIdentifier,\n      );\n      specifier.local = maybeDefaultIdentifier;\n      node.specifiers.push(\n        this.finishImportSpecifier(specifier, \"ImportDefaultSpecifier\"),\n      );\n      return true;\n    } else if (\n      // We allow keywords, and parseImportSpecifierLocal will report a recoverable error\n      tokenIsKeywordOrIdentifier(this.state.type)\n    ) {\n      this.parseImportSpecifierLocal(\n        node,\n        this.startNode<N.ImportDefaultSpecifier>(),\n        \"ImportDefaultSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\n    if (this.match(tt.star)) {\n      const specifier = this.startNode<N.ImportNamespaceSpecifier>();\n      this.next();\n      this.expectContextual(tt._as);\n\n      this.parseImportSpecifierLocal(\n        node,\n        specifier,\n        \"ImportNamespaceSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node: Undone<N.ImportDeclaration>) {\n    let first = true;\n    this.expect(tt.braceL);\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        // Detect an attempt to deep destructure\n        if (this.eat(tt.colon)) {\n          throw this.raise(Errors.DestructureNamedImport, this.state.startLoc);\n        }\n\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      const specifier = this.startNode<N.ImportSpecifier>();\n      const importedIsString = this.match(tt.string);\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      specifier.imported = this.parseModuleExportName();\n      const importSpecifier = this.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        node.importKind === \"type\" || node.importKind === \"typeof\",\n        isMaybeTypeOnly,\n        undefined,\n      );\n      node.specifiers.push(importSpecifier);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\n  parseImportSpecifier(\n    specifier: Undone<N.ImportSpecifier>,\n    importedIsString: boolean,\n    /* used in TypeScript and Flow parser */\n    isInTypeOnlyImport: boolean,\n    isMaybeTypeOnly: boolean,\n    bindingType: BindingFlag | undefined,\n  ): N.ImportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const { imported } = specifier;\n      if (importedIsString) {\n        throw this.raise(Errors.ImportBindingIsString, specifier, {\n          importName: (imported as N.StringLiteral).value,\n        });\n      }\n      this.checkReservedWord(\n        (imported as N.Identifier).name,\n        specifier.loc.start,\n        true,\n        true,\n      );\n      if (!specifier.local) {\n        specifier.local = cloneIdentifier(imported);\n      }\n    }\n    return this.finishImportSpecifier(\n      specifier,\n      \"ImportSpecifier\",\n      bindingType,\n    );\n  }\n\n  // This is used in flow and typescript plugin\n  // Determine whether a parameter is a this param\n  isThisParam(\n    param: N.Pattern | N.Identifier | N.TSParameterProperty,\n  ): boolean {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n}\n", "import type { Options } from \"../options.ts\";\nimport type * as N from \"../types.ts\";\nimport { getOptions } from \"../options.ts\";\nimport StatementParser from \"./statement.ts\";\nimport ScopeHandler from \"../util/scope.ts\";\n\nexport type PluginsMap = Map<\n  string,\n  {\n    [x: string]: any;\n  }\n>;\n\nexport default class Parser extends StatementParser {\n  // Forward-declaration so typescript plugin can override jsx plugin\n  // todo(flow->ts) - this probably can be removed\n  // abstract jsxParseOpeningElementAfterName(\n  //   node: N.JSXOpeningElement,\n  // ): N.JSXOpeningElement;\n\n  constructor(\n    options: Options | undefined | null,\n    input: string,\n    pluginsMap: PluginsMap,\n  ) {\n    options = getOptions(options);\n    super(options, input);\n\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap;\n    this.filename = options.sourceFilename;\n  }\n\n  // This can be overwritten, for example, by the TypeScript plugin.\n  getScopeHandler(): new (...args: any) => ScopeHandler {\n    return ScopeHandler;\n  }\n\n  parse(): N.File {\n    this.enterInitialScopes();\n    const file = this.startNode<N.File>();\n    const program = this.startNode<N.Program>();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    file.comments.length = this.state.commentsLen;\n    return file as N.File;\n  }\n}\n", "import type { Options } from \"./options.ts\";\nimport {\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n} from \"./plugin-utils.ts\";\nimport type {\n  PluginConfig as ParserPlugin,\n  FlowPluginOptions,\n  RecordAndTuplePluginOptions,\n  PipelineOperatorPluginOptions,\n} from \"./typings.ts\";\nimport Parser, { type PluginsMap } from \"./parser/index.ts\";\n\nimport type { ExportedTokenType } from \"./tokenizer/types.ts\";\nimport {\n  getExportedToken,\n  tt as internalTokenTypes,\n  type InternalTokenTypes,\n} from \"./tokenizer/types.ts\";\n\nimport type { Expression, File } from \"./types.ts\";\nexport type { Expression, File };\n\nexport function parse(input: string, options?: Options): File {\n  if (options?.sourceType === \"unambiguous\") {\n    options = {\n      ...options,\n    };\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        // Top level await introduces code which can be both a valid script and\n        // a valid module, but which produces different ASTs:\n        //    await\n        //    0\n        // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch {}\n      } else {\n        // This is both a valid module and a valid script, but\n        // we parse it as a script by default\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\n\nexport function parseExpression(input: string, options?: Options): Expression {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression();\n}\n\nfunction generateExportedTokenTypes(\n  internalTokenTypes: InternalTokenTypes,\n): Record<string, ExportedTokenType> {\n  const tokenTypes: Record<string, ExportedTokenType> = {};\n  for (const typeName of Object.keys(\n    internalTokenTypes,\n  ) as (keyof InternalTokenTypes)[]) {\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n  }\n  return tokenTypes;\n}\n\nexport const tokTypes = generateExportedTokenTypes(internalTokenTypes);\n\nfunction getParser(options: Options | undefined | null, input: string): Parser {\n  let cls = Parser;\n  const pluginsMap: PluginsMap = new Map();\n  if (options?.plugins) {\n    for (const plugin of options.plugins) {\n      let name, opts;\n      if (typeof plugin === \"string\") {\n        name = plugin;\n      } else {\n        [name, opts] = plugin;\n      }\n      if (!pluginsMap.has(name)) {\n        pluginsMap.set(name, opts || {});\n      }\n    }\n    validatePlugins(pluginsMap);\n    cls = getParserClass(pluginsMap);\n  }\n\n  return new cls(options, input, pluginsMap);\n}\n\nconst parserClassCache = new Map<string, new (...args: any) => Parser>();\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(\n  pluginsMap: Map<string, any>,\n): new (...args: any) => Parser {\n  const pluginList = [];\n  for (const name of mixinPluginNames) {\n    if (pluginsMap.has(name)) {\n      pluginList.push(name);\n    }\n  }\n  const key = pluginList.join(\"|\");\n  let cls = parserClassCache.get(key);\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      // @ts-expect-error todo(flow->ts)\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache.set(key, cls);\n  }\n  return cls;\n}\n\nexport type {\n  FlowPluginOptions,\n  ParserPlugin,\n  PipelineOperatorPluginOptions,\n  RecordAndTuplePluginOptions,\n};\nexport type ParserOptions = Partial<Options>;\n", "import { promises } from 'node:fs';\nimport 'fs';\nimport sourceMap from 'source-map-js';\nimport * as babelParser from '@babel/parser';\n\nfunction sharedPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var Type = types.Type;\n  var builtin = types.builtInTypes;\n  var isNumber = builtin.number;\n  function geq(than) {\n    return Type.from(\n      (value) => isNumber.check(value) && value >= than,\n      isNumber + \" >= \" + than\n    );\n  }\n  const defaults = {\n    // Functions were used because (among other reasons) that's the most\n    // elegant way to allow for the emptyArray one always to give a new\n    // array instance.\n    \"null\": function() {\n      return null;\n    },\n    \"emptyArray\": function() {\n      return [];\n    },\n    \"false\": function() {\n      return false;\n    },\n    \"true\": function() {\n      return true;\n    },\n    \"undefined\": function() {\n    },\n    \"use strict\": function() {\n      return \"use strict\";\n    }\n  };\n  var naiveIsPrimitive = Type.or(\n    builtin.string,\n    builtin.number,\n    builtin.boolean,\n    builtin.null,\n    builtin.undefined\n  );\n  const isPrimitive = Type.from(\n    (value) => {\n      if (value === null)\n        return true;\n      var type = typeof value;\n      if (type === \"object\" || type === \"function\") {\n        return false;\n      }\n      return true;\n    },\n    naiveIsPrimitive.toString()\n  );\n  return {\n    geq,\n    defaults,\n    isPrimitive\n  };\n}\nfunction maybeSetModuleExports(moduleGetter) {\n  try {\n    var nodeModule = moduleGetter();\n    var originalExports = nodeModule.exports;\n    var defaultExport = originalExports[\"default\"];\n  } catch {\n    return;\n  }\n  if (defaultExport && defaultExport !== originalExports && typeof originalExports === \"object\") {\n    Object.assign(defaultExport, originalExports, { \"default\": defaultExport });\n    if (originalExports.__esModule) {\n      Object.defineProperty(defaultExport, \"__esModule\", { value: true });\n    }\n    nodeModule.exports = defaultExport;\n  }\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$2 = (obj, key, value) => {\n  __defNormalProp$2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nconst Op$1 = Object.prototype;\nconst objToStr = Op$1.toString;\nconst hasOwn$6 = Op$1.hasOwnProperty;\nclass BaseType {\n  assert(value, deep) {\n    if (!this.check(value, deep)) {\n      var str = shallowStringify(value);\n      throw new Error(str + \" does not match type \" + this);\n    }\n    return true;\n  }\n  arrayOf() {\n    const elemType = this;\n    return new ArrayType(elemType);\n  }\n}\nclass ArrayType extends BaseType {\n  constructor(elemType) {\n    super();\n    this.elemType = elemType;\n    __publicField$2(this, \"kind\", \"ArrayType\");\n  }\n  toString() {\n    return \"[\" + this.elemType + \"]\";\n  }\n  check(value, deep) {\n    return Array.isArray(value) && value.every((elem) => this.elemType.check(elem, deep));\n  }\n}\nclass IdentityType extends BaseType {\n  constructor(value) {\n    super();\n    this.value = value;\n    __publicField$2(this, \"kind\", \"IdentityType\");\n  }\n  toString() {\n    return String(this.value);\n  }\n  check(value, deep) {\n    const result = value === this.value;\n    if (!result && typeof deep === \"function\") {\n      deep(this, value);\n    }\n    return result;\n  }\n}\nclass ObjectType extends BaseType {\n  constructor(fields) {\n    super();\n    this.fields = fields;\n    __publicField$2(this, \"kind\", \"ObjectType\");\n  }\n  toString() {\n    return \"{ \" + this.fields.join(\", \") + \" }\";\n  }\n  check(value, deep) {\n    return objToStr.call(value) === objToStr.call({}) && this.fields.every((field) => {\n      return field.type.check(value[field.name], deep);\n    });\n  }\n}\nclass OrType extends BaseType {\n  constructor(types) {\n    super();\n    this.types = types;\n    __publicField$2(this, \"kind\", \"OrType\");\n  }\n  toString() {\n    return this.types.join(\" | \");\n  }\n  check(value, deep) {\n    if (this.types.some((type) => type.check(value, !!deep))) {\n      return true;\n    }\n    if (typeof deep === \"function\") {\n      deep(this, value);\n    }\n    return false;\n  }\n}\nclass PredicateType extends BaseType {\n  constructor(name, predicate) {\n    super();\n    this.name = name;\n    this.predicate = predicate;\n    __publicField$2(this, \"kind\", \"PredicateType\");\n  }\n  toString() {\n    return this.name;\n  }\n  check(value, deep) {\n    const result = this.predicate(value, deep);\n    if (!result && typeof deep === \"function\") {\n      deep(this, value);\n    }\n    return result;\n  }\n}\nclass Def {\n  constructor(type, typeName) {\n    this.type = type;\n    this.typeName = typeName;\n    __publicField$2(this, \"baseNames\", []);\n    __publicField$2(this, \"ownFields\", /* @__PURE__ */ Object.create(null));\n    // Includes own typeName. Populated during finalization.\n    __publicField$2(this, \"allSupertypes\", /* @__PURE__ */ Object.create(null));\n    // Linear inheritance hierarchy. Populated during finalization.\n    __publicField$2(this, \"supertypeList\", []);\n    // Includes inherited fields.\n    __publicField$2(this, \"allFields\", /* @__PURE__ */ Object.create(null));\n    // Non-hidden keys of allFields.\n    __publicField$2(this, \"fieldNames\", []);\n    // This property will be overridden as true by individual Def instances\n    // when they are finalized.\n    __publicField$2(this, \"finalized\", false);\n    // False by default until .build(...) is called on an instance.\n    __publicField$2(this, \"buildable\", false);\n    __publicField$2(this, \"buildParams\", []);\n  }\n  isSupertypeOf(that) {\n    if (that instanceof Def) {\n      if (this.finalized !== true || that.finalized !== true) {\n        throw new Error(\"\");\n      }\n      return hasOwn$6.call(that.allSupertypes, this.typeName);\n    } else {\n      throw new Error(that + \" is not a Def\");\n    }\n  }\n  checkAllFields(value, deep) {\n    var allFields = this.allFields;\n    if (this.finalized !== true) {\n      throw new Error(\"\" + this.typeName);\n    }\n    function checkFieldByName(name) {\n      var field = allFields[name];\n      var type = field.type;\n      var child = field.getValue(value);\n      return type.check(child, deep);\n    }\n    return value !== null && typeof value === \"object\" && Object.keys(allFields).every(checkFieldByName);\n  }\n  bases(...supertypeNames) {\n    var bases = this.baseNames;\n    if (this.finalized) {\n      if (supertypeNames.length !== bases.length) {\n        throw new Error(\"\");\n      }\n      for (var i = 0; i < supertypeNames.length; i++) {\n        if (supertypeNames[i] !== bases[i]) {\n          throw new Error(\"\");\n        }\n      }\n      return this;\n    }\n    supertypeNames.forEach((baseName) => {\n      if (bases.indexOf(baseName) < 0) {\n        bases.push(baseName);\n      }\n    });\n    return this;\n  }\n}\nclass Field {\n  constructor(name, type, defaultFn, hidden) {\n    this.name = name;\n    this.type = type;\n    this.defaultFn = defaultFn;\n    __publicField$2(this, \"hidden\");\n    this.hidden = !!hidden;\n  }\n  toString() {\n    return JSON.stringify(this.name) + \": \" + this.type;\n  }\n  getValue(obj) {\n    var value = obj[this.name];\n    if (typeof value !== \"undefined\") {\n      return value;\n    }\n    if (typeof this.defaultFn === \"function\") {\n      value = this.defaultFn.call(obj);\n    }\n    return value;\n  }\n}\nfunction shallowStringify(value) {\n  if (Array.isArray(value)) {\n    return \"[\" + value.map(shallowStringify).join(\", \") + \"]\";\n  }\n  if (value && typeof value === \"object\") {\n    return \"{ \" + Object.keys(value).map(function(key) {\n      return key + \": \" + value[key];\n    }).join(\", \") + \" }\";\n  }\n  return JSON.stringify(value);\n}\nfunction typesPlugin(_fork) {\n  const Type = {\n    or(...types) {\n      return new OrType(types.map((type) => Type.from(type)));\n    },\n    from(value, name) {\n      if (value instanceof ArrayType || value instanceof IdentityType || value instanceof ObjectType || value instanceof OrType || value instanceof PredicateType) {\n        return value;\n      }\n      if (value instanceof Def) {\n        return value.type;\n      }\n      if (isArray.check(value)) {\n        if (value.length !== 1) {\n          throw new Error(\"only one element type is permitted for typed arrays\");\n        }\n        return new ArrayType(Type.from(value[0]));\n      }\n      if (isObject.check(value)) {\n        return new ObjectType(Object.keys(value).map((name2) => {\n          return new Field(name2, Type.from(value[name2], name2));\n        }));\n      }\n      if (typeof value === \"function\") {\n        var bicfIndex = builtInCtorFns.indexOf(value);\n        if (bicfIndex >= 0) {\n          return builtInCtorTypes[bicfIndex];\n        }\n        if (typeof name !== \"string\") {\n          throw new Error(\"missing name\");\n        }\n        return new PredicateType(name, value);\n      }\n      return new IdentityType(value);\n    },\n    // Define a type whose name is registered in a namespace (the defCache) so\n    // that future definitions will return the same type given the same name.\n    // In particular, this system allows for circular and forward definitions.\n    // The Def object d returned from Type.def may be used to configure the\n    // type d.type by calling methods such as d.bases, d.build, and d.field.\n    def(typeName) {\n      return hasOwn$6.call(defCache, typeName) ? defCache[typeName] : defCache[typeName] = new DefImpl(typeName);\n    },\n    hasDef(typeName) {\n      return hasOwn$6.call(defCache, typeName);\n    }\n  };\n  var builtInCtorFns = [];\n  var builtInCtorTypes = [];\n  function defBuiltInType(name, example) {\n    const objStr = objToStr.call(example);\n    const type = new PredicateType(\n      name,\n      (value) => objToStr.call(value) === objStr\n    );\n    if (example && typeof example.constructor === \"function\") {\n      builtInCtorFns.push(example.constructor);\n      builtInCtorTypes.push(type);\n    }\n    return type;\n  }\n  const isString = defBuiltInType(\"string\", \"truthy\");\n  const isFunction = defBuiltInType(\"function\", function() {\n  });\n  const isArray = defBuiltInType(\"array\", []);\n  const isObject = defBuiltInType(\"object\", {});\n  const isRegExp = defBuiltInType(\"RegExp\", /./);\n  const isDate = defBuiltInType(\"Date\", /* @__PURE__ */ new Date());\n  const isNumber = defBuiltInType(\"number\", 3);\n  const isBoolean = defBuiltInType(\"boolean\", true);\n  const isNull = defBuiltInType(\"null\", null);\n  const isUndefined = defBuiltInType(\"undefined\", void 0);\n  const isBigInt = typeof BigInt === \"function\" ? defBuiltInType(\"BigInt\", BigInt(1234)) : new PredicateType(\"BigInt\", () => false);\n  const builtInTypes = {\n    string: isString,\n    function: isFunction,\n    array: isArray,\n    object: isObject,\n    RegExp: isRegExp,\n    Date: isDate,\n    number: isNumber,\n    boolean: isBoolean,\n    null: isNull,\n    undefined: isUndefined,\n    BigInt: isBigInt\n  };\n  var defCache = /* @__PURE__ */ Object.create(null);\n  function defFromValue(value) {\n    if (value && typeof value === \"object\") {\n      var type = value.type;\n      if (typeof type === \"string\" && hasOwn$6.call(defCache, type)) {\n        var d = defCache[type];\n        if (d.finalized) {\n          return d;\n        }\n      }\n    }\n    return null;\n  }\n  class DefImpl extends Def {\n    constructor(typeName) {\n      super(\n        new PredicateType(typeName, (value, deep) => this.check(value, deep)),\n        typeName\n      );\n    }\n    check(value, deep) {\n      if (this.finalized !== true) {\n        throw new Error(\n          \"prematurely checking unfinalized type \" + this.typeName\n        );\n      }\n      if (value === null || typeof value !== \"object\") {\n        return false;\n      }\n      var vDef = defFromValue(value);\n      if (!vDef) {\n        if (this.typeName === \"SourceLocation\" || this.typeName === \"Position\") {\n          return this.checkAllFields(value, deep);\n        }\n        return false;\n      }\n      if (deep && vDef === this) {\n        return this.checkAllFields(value, deep);\n      }\n      if (!this.isSupertypeOf(vDef)) {\n        return false;\n      }\n      if (!deep) {\n        return true;\n      }\n      return vDef.checkAllFields(value, deep) && this.checkAllFields(value, false);\n    }\n    build(...buildParams) {\n      this.buildParams = buildParams;\n      if (this.buildable) {\n        return this;\n      }\n      this.field(\"type\", String, () => this.typeName);\n      this.buildable = true;\n      const addParam = (built, param, arg, isArgAvailable) => {\n        if (hasOwn$6.call(built, param))\n          return;\n        var all = this.allFields;\n        if (!hasOwn$6.call(all, param)) {\n          throw new Error(\"\" + param);\n        }\n        var field = all[param];\n        var type = field.type;\n        var value;\n        if (isArgAvailable) {\n          value = arg;\n        } else if (field.defaultFn) {\n          value = field.defaultFn.call(built);\n        } else {\n          var message = \"no value or default function given for field \" + JSON.stringify(param) + \" of \" + this.typeName + \"(\" + this.buildParams.map(function(name) {\n            return all[name];\n          }).join(\", \") + \")\";\n          throw new Error(message);\n        }\n        if (!type.check(value)) {\n          throw new Error(\n            shallowStringify(value) + \" does not match field \" + field + \" of type \" + this.typeName\n          );\n        }\n        built[param] = value;\n      };\n      const builder = (...args) => {\n        var argc = args.length;\n        if (!this.finalized) {\n          throw new Error(\n            \"attempting to instantiate unfinalized type \" + this.typeName\n          );\n        }\n        var built = Object.create(nodePrototype);\n        this.buildParams.forEach(function(param, i) {\n          if (i < argc) {\n            addParam(built, param, args[i], true);\n          } else {\n            addParam(built, param, null, false);\n          }\n        });\n        Object.keys(this.allFields).forEach(function(param) {\n          addParam(built, param, null, false);\n        });\n        if (built.type !== this.typeName) {\n          throw new Error(\"\");\n        }\n        return built;\n      };\n      builder.from = (obj) => {\n        if (!this.finalized) {\n          throw new Error(\n            \"attempting to instantiate unfinalized type \" + this.typeName\n          );\n        }\n        var built = Object.create(nodePrototype);\n        Object.keys(this.allFields).forEach(function(param) {\n          if (hasOwn$6.call(obj, param)) {\n            addParam(built, param, obj[param], true);\n          } else {\n            addParam(built, param, null, false);\n          }\n        });\n        if (built.type !== this.typeName) {\n          throw new Error(\"\");\n        }\n        return built;\n      };\n      Object.defineProperty(builders, getBuilderName(this.typeName), {\n        enumerable: true,\n        value: builder\n      });\n      return this;\n    }\n    // The reason fields are specified using .field(...) instead of an object\n    // literal syntax is somewhat subtle: the object literal syntax would\n    // support only one key and one value, but with .field(...) we can pass\n    // any number of arguments to specify the field.\n    field(name, type, defaultFn, hidden) {\n      if (this.finalized) {\n        console.error(\"Ignoring attempt to redefine field \" + JSON.stringify(name) + \" of finalized type \" + JSON.stringify(this.typeName));\n        return this;\n      }\n      this.ownFields[name] = new Field(name, Type.from(type), defaultFn, hidden);\n      return this;\n    }\n    finalize() {\n      if (!this.finalized) {\n        var allFields = this.allFields;\n        var allSupertypes = this.allSupertypes;\n        this.baseNames.forEach((name) => {\n          var def = defCache[name];\n          if (def instanceof Def) {\n            def.finalize();\n            extend(allFields, def.allFields);\n            extend(allSupertypes, def.allSupertypes);\n          } else {\n            var message = \"unknown supertype name \" + JSON.stringify(name) + \" for subtype \" + JSON.stringify(this.typeName);\n            throw new Error(message);\n          }\n        });\n        extend(allFields, this.ownFields);\n        allSupertypes[this.typeName] = this;\n        this.fieldNames.length = 0;\n        for (var fieldName in allFields) {\n          if (hasOwn$6.call(allFields, fieldName) && !allFields[fieldName].hidden) {\n            this.fieldNames.push(fieldName);\n          }\n        }\n        Object.defineProperty(namedTypes, this.typeName, {\n          enumerable: true,\n          value: this.type\n        });\n        this.finalized = true;\n        populateSupertypeList(this.typeName, this.supertypeList);\n        if (this.buildable && this.supertypeList.lastIndexOf(\"Expression\") >= 0) {\n          wrapExpressionBuilderWithStatement(this.typeName);\n        }\n      }\n    }\n  }\n  function getSupertypeNames(typeName) {\n    if (!hasOwn$6.call(defCache, typeName)) {\n      throw new Error(\"\");\n    }\n    var d = defCache[typeName];\n    if (d.finalized !== true) {\n      throw new Error(\"\");\n    }\n    return d.supertypeList.slice(1);\n  }\n  function computeSupertypeLookupTable(candidates) {\n    var table = {};\n    var typeNames = Object.keys(defCache);\n    var typeNameCount = typeNames.length;\n    for (var i = 0; i < typeNameCount; ++i) {\n      var typeName = typeNames[i];\n      var d = defCache[typeName];\n      if (d.finalized !== true) {\n        throw new Error(\"\" + typeName);\n      }\n      for (var j = 0; j < d.supertypeList.length; ++j) {\n        var superTypeName = d.supertypeList[j];\n        if (hasOwn$6.call(candidates, superTypeName)) {\n          table[typeName] = superTypeName;\n          break;\n        }\n      }\n    }\n    return table;\n  }\n  var builders = /* @__PURE__ */ Object.create(null);\n  var nodePrototype = {};\n  function defineMethod(name, func) {\n    var old = nodePrototype[name];\n    if (isUndefined.check(func)) {\n      delete nodePrototype[name];\n    } else {\n      isFunction.assert(func);\n      Object.defineProperty(nodePrototype, name, {\n        enumerable: true,\n        // For discoverability.\n        configurable: true,\n        // For delete proto[name].\n        value: func\n      });\n    }\n    return old;\n  }\n  function getBuilderName(typeName) {\n    return typeName.replace(/^[A-Z]+/, function(upperCasePrefix) {\n      var len = upperCasePrefix.length;\n      switch (len) {\n        case 0:\n          return \"\";\n        case 1:\n          return upperCasePrefix.toLowerCase();\n        default:\n          return upperCasePrefix.slice(\n            0,\n            len - 1\n          ).toLowerCase() + upperCasePrefix.charAt(len - 1);\n      }\n    });\n  }\n  function getStatementBuilderName(typeName) {\n    typeName = getBuilderName(typeName);\n    return typeName.replace(/(Expression)?$/, \"Statement\");\n  }\n  var namedTypes = {};\n  function getFieldNames(object) {\n    var d = defFromValue(object);\n    if (d) {\n      return d.fieldNames.slice(0);\n    }\n    if (\"type\" in object) {\n      throw new Error(\n        \"did not recognize object of type \" + JSON.stringify(object.type)\n      );\n    }\n    return Object.keys(object);\n  }\n  function getFieldValue(object, fieldName) {\n    var d = defFromValue(object);\n    if (d) {\n      var field = d.allFields[fieldName];\n      if (field) {\n        return field.getValue(object);\n      }\n    }\n    return object && object[fieldName];\n  }\n  function eachField(object, callback, context) {\n    getFieldNames(object).forEach(function(name) {\n      callback.call(this, name, getFieldValue(object, name));\n    }, context);\n  }\n  function someField(object, callback, context) {\n    return getFieldNames(object).some(function(name) {\n      return callback.call(this, name, getFieldValue(object, name));\n    }, context);\n  }\n  function wrapExpressionBuilderWithStatement(typeName) {\n    var wrapperName = getStatementBuilderName(typeName);\n    if (builders[wrapperName])\n      return;\n    var wrapped = builders[getBuilderName(typeName)];\n    if (!wrapped)\n      return;\n    const builder = function(...args) {\n      return builders.expressionStatement(wrapped.apply(builders, args));\n    };\n    builder.from = function(...args) {\n      return builders.expressionStatement(wrapped.from.apply(builders, args));\n    };\n    builders[wrapperName] = builder;\n  }\n  function populateSupertypeList(typeName, list) {\n    list.length = 0;\n    list.push(typeName);\n    var lastSeen = /* @__PURE__ */ Object.create(null);\n    for (var pos = 0; pos < list.length; ++pos) {\n      typeName = list[pos];\n      var d = defCache[typeName];\n      if (d.finalized !== true) {\n        throw new Error(\"\");\n      }\n      if (hasOwn$6.call(lastSeen, typeName)) {\n        delete list[lastSeen[typeName]];\n      }\n      lastSeen[typeName] = pos;\n      list.push.apply(list, d.baseNames);\n    }\n    for (var to = 0, from = to, len = list.length; from < len; ++from) {\n      if (hasOwn$6.call(list, from)) {\n        list[to++] = list[from];\n      }\n    }\n    list.length = to;\n  }\n  function extend(into, from) {\n    Object.keys(from).forEach(function(name) {\n      into[name] = from[name];\n    });\n    return into;\n  }\n  function finalize() {\n    Object.keys(defCache).forEach(function(name) {\n      defCache[name].finalize();\n    });\n  }\n  return {\n    Type,\n    builtInTypes,\n    getSupertypeNames,\n    computeSupertypeLookupTable,\n    builders,\n    defineMethod,\n    getBuilderName,\n    getStatementBuilderName,\n    namedTypes,\n    getFieldNames,\n    getFieldValue,\n    eachField,\n    someField,\n    finalize\n  };\n}\nmaybeSetModuleExports(() => module);\n\nvar Op = Object.prototype;\nvar hasOwn$5 = Op.hasOwnProperty;\nfunction pathPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var isArray = types.builtInTypes.array;\n  var isNumber = types.builtInTypes.number;\n  const Path = function Path2(value, parentPath, name) {\n    if (!(this instanceof Path2)) {\n      throw new Error(\"Path constructor cannot be invoked without 'new'\");\n    }\n    if (parentPath) {\n      if (!(parentPath instanceof Path2)) {\n        throw new Error(\"\");\n      }\n    } else {\n      parentPath = null;\n      name = null;\n    }\n    this.value = value;\n    this.parentPath = parentPath;\n    this.name = name;\n    this.__childCache = null;\n  };\n  var Pp = Path.prototype;\n  function getChildCache(path) {\n    return path.__childCache || (path.__childCache = /* @__PURE__ */ Object.create(null));\n  }\n  function getChildPath(path, name) {\n    var cache = getChildCache(path);\n    var actualChildValue = path.getValueProperty(name);\n    var childPath = cache[name];\n    if (!hasOwn$5.call(cache, name) || // Ensure consistency between cache and reality.\n    childPath.value !== actualChildValue) {\n      childPath = cache[name] = new path.constructor(\n        actualChildValue,\n        path,\n        name\n      );\n    }\n    return childPath;\n  }\n  Pp.getValueProperty = function getValueProperty(name) {\n    return this.value[name];\n  };\n  Pp.get = function get(...names) {\n    var path = this;\n    var count = names.length;\n    for (var i = 0; i < count; ++i) {\n      path = getChildPath(path, names[i]);\n    }\n    return path;\n  };\n  Pp.each = function each(callback, context) {\n    var childPaths = [];\n    var len = this.value.length;\n    var i = 0;\n    for (var i = 0; i < len; ++i) {\n      if (hasOwn$5.call(this.value, i)) {\n        childPaths[i] = this.get(i);\n      }\n    }\n    context = context || this;\n    for (i = 0; i < len; ++i) {\n      if (hasOwn$5.call(childPaths, i)) {\n        callback.call(context, childPaths[i]);\n      }\n    }\n  };\n  Pp.map = function map(callback, context) {\n    var result = [];\n    this.each(function(childPath) {\n      result.push(callback.call(this, childPath));\n    }, context);\n    return result;\n  };\n  Pp.filter = function filter(callback, context) {\n    var result = [];\n    this.each(function(childPath) {\n      if (callback.call(this, childPath)) {\n        result.push(childPath);\n      }\n    }, context);\n    return result;\n  };\n  function emptyMoves() {\n  }\n  function getMoves(path, offset, start, end) {\n    isArray.assert(path.value);\n    if (offset === 0) {\n      return emptyMoves;\n    }\n    var length = path.value.length;\n    if (length < 1) {\n      return emptyMoves;\n    }\n    var argc = arguments.length;\n    if (argc === 2) {\n      start = 0;\n      end = length;\n    } else if (argc === 3) {\n      start = Math.max(start, 0);\n      end = length;\n    } else {\n      start = Math.max(start, 0);\n      end = Math.min(end, length);\n    }\n    isNumber.assert(start);\n    isNumber.assert(end);\n    var moves = /* @__PURE__ */ Object.create(null);\n    var cache = getChildCache(path);\n    for (var i = start; i < end; ++i) {\n      if (hasOwn$5.call(path.value, i)) {\n        var childPath = path.get(i);\n        if (childPath.name !== i) {\n          throw new Error(\"\");\n        }\n        var newIndex = i + offset;\n        childPath.name = newIndex;\n        moves[newIndex] = childPath;\n        delete cache[i];\n      }\n    }\n    delete cache.length;\n    return function() {\n      for (var newIndex2 in moves) {\n        var childPath2 = moves[newIndex2];\n        if (childPath2.name !== +newIndex2) {\n          throw new Error(\"\");\n        }\n        cache[newIndex2] = childPath2;\n        path.value[newIndex2] = childPath2.value;\n      }\n    };\n  }\n  Pp.shift = function shift() {\n    var move = getMoves(this, -1);\n    var result = this.value.shift();\n    move();\n    return result;\n  };\n  Pp.unshift = function unshift(...args) {\n    var move = getMoves(this, args.length);\n    var result = this.value.unshift.apply(this.value, args);\n    move();\n    return result;\n  };\n  Pp.push = function push(...args) {\n    isArray.assert(this.value);\n    delete getChildCache(this).length;\n    return this.value.push.apply(this.value, args);\n  };\n  Pp.pop = function pop() {\n    isArray.assert(this.value);\n    var cache = getChildCache(this);\n    delete cache[this.value.length - 1];\n    delete cache.length;\n    return this.value.pop();\n  };\n  Pp.insertAt = function insertAt(index) {\n    var argc = arguments.length;\n    var move = getMoves(this, argc - 1, index);\n    if (move === emptyMoves && argc <= 1) {\n      return this;\n    }\n    index = Math.max(index, 0);\n    for (var i = 1; i < argc; ++i) {\n      this.value[index + i - 1] = arguments[i];\n    }\n    move();\n    return this;\n  };\n  Pp.insertBefore = function insertBefore(...args) {\n    var pp = this.parentPath;\n    var argc = args.length;\n    var insertAtArgs = [this.name];\n    for (var i = 0; i < argc; ++i) {\n      insertAtArgs.push(args[i]);\n    }\n    return pp.insertAt.apply(pp, insertAtArgs);\n  };\n  Pp.insertAfter = function insertAfter(...args) {\n    var pp = this.parentPath;\n    var argc = args.length;\n    var insertAtArgs = [this.name + 1];\n    for (var i = 0; i < argc; ++i) {\n      insertAtArgs.push(args[i]);\n    }\n    return pp.insertAt.apply(pp, insertAtArgs);\n  };\n  function repairRelationshipWithParent(path) {\n    if (!(path instanceof Path)) {\n      throw new Error(\"\");\n    }\n    var pp = path.parentPath;\n    if (!pp) {\n      return path;\n    }\n    var parentValue = pp.value;\n    var parentCache = getChildCache(pp);\n    if (parentValue[path.name] === path.value) {\n      parentCache[path.name] = path;\n    } else if (isArray.check(parentValue)) {\n      var i = parentValue.indexOf(path.value);\n      if (i >= 0) {\n        parentCache[path.name = i] = path;\n      }\n    } else {\n      parentValue[path.name] = path.value;\n      parentCache[path.name] = path;\n    }\n    if (parentValue[path.name] !== path.value) {\n      throw new Error(\"\");\n    }\n    if (path.parentPath.get(path.name) !== path) {\n      throw new Error(\"\");\n    }\n    return path;\n  }\n  Pp.replace = function replace(replacement) {\n    var results = [];\n    var parentValue = this.parentPath.value;\n    var parentCache = getChildCache(this.parentPath);\n    var count = arguments.length;\n    repairRelationshipWithParent(this);\n    if (isArray.check(parentValue)) {\n      var originalLength = parentValue.length;\n      var move = getMoves(this.parentPath, count - 1, this.name + 1);\n      var spliceArgs = [this.name, 1];\n      for (var i = 0; i < count; ++i) {\n        spliceArgs.push(arguments[i]);\n      }\n      var splicedOut = parentValue.splice.apply(parentValue, spliceArgs);\n      if (splicedOut[0] !== this.value) {\n        throw new Error(\"\");\n      }\n      if (parentValue.length !== originalLength - 1 + count) {\n        throw new Error(\"\");\n      }\n      move();\n      if (count === 0) {\n        delete this.value;\n        delete parentCache[this.name];\n        this.__childCache = null;\n      } else {\n        if (parentValue[this.name] !== replacement) {\n          throw new Error(\"\");\n        }\n        if (this.value !== replacement) {\n          this.value = replacement;\n          this.__childCache = null;\n        }\n        for (i = 0; i < count; ++i) {\n          results.push(this.parentPath.get(this.name + i));\n        }\n        if (results[0] !== this) {\n          throw new Error(\"\");\n        }\n      }\n    } else if (count === 1) {\n      if (this.value !== replacement) {\n        this.__childCache = null;\n      }\n      this.value = parentValue[this.name] = replacement;\n      results.push(this);\n    } else if (count === 0) {\n      delete parentValue[this.name];\n      delete this.value;\n      this.__childCache = null;\n    } else {\n      throw new Error(\"Could not replace path\");\n    }\n    return results;\n  };\n  return Path;\n}\nmaybeSetModuleExports(() => module);\n\nvar hasOwn$4 = Object.prototype.hasOwnProperty;\nfunction scopePlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var Type = types.Type;\n  var namedTypes = types.namedTypes;\n  var Node = namedTypes.Node;\n  var Expression = namedTypes.Expression;\n  var isArray = types.builtInTypes.array;\n  var b = types.builders;\n  const Scope = function Scope2(path, parentScope) {\n    if (!(this instanceof Scope2)) {\n      throw new Error(\"Scope constructor cannot be invoked without 'new'\");\n    }\n    if (!TypeParameterScopeType.check(path.value)) {\n      ScopeType.assert(path.value);\n    }\n    var depth;\n    if (parentScope) {\n      if (!(parentScope instanceof Scope2)) {\n        throw new Error(\"\");\n      }\n      depth = parentScope.depth + 1;\n    } else {\n      parentScope = null;\n      depth = 0;\n    }\n    Object.defineProperties(this, {\n      path: { value: path },\n      node: { value: path.value },\n      isGlobal: { value: !parentScope, enumerable: true },\n      depth: { value: depth },\n      parent: { value: parentScope },\n      bindings: { value: {} },\n      types: { value: {} }\n    });\n  };\n  var ScopeType = Type.or(\n    // Program nodes introduce global scopes.\n    namedTypes.Program,\n    // Function is the supertype of FunctionExpression,\n    // FunctionDeclaration, ArrowExpression, etc.\n    namedTypes.Function,\n    // In case you didn't know, the caught parameter shadows any variable\n    // of the same name in an outer scope.\n    namedTypes.CatchClause\n  );\n  var TypeParameterScopeType = Type.or(\n    namedTypes.Function,\n    namedTypes.ClassDeclaration,\n    namedTypes.ClassExpression,\n    namedTypes.InterfaceDeclaration,\n    namedTypes.TSInterfaceDeclaration,\n    namedTypes.TypeAlias,\n    namedTypes.TSTypeAliasDeclaration\n  );\n  var FlowOrTSTypeParameterType = Type.or(\n    namedTypes.TypeParameter,\n    namedTypes.TSTypeParameter\n  );\n  Scope.isEstablishedBy = function(node) {\n    return ScopeType.check(node) || TypeParameterScopeType.check(node);\n  };\n  var Sp = Scope.prototype;\n  Sp.didScan = false;\n  Sp.declares = function(name) {\n    this.scan();\n    return hasOwn$4.call(this.bindings, name);\n  };\n  Sp.declaresType = function(name) {\n    this.scan();\n    return hasOwn$4.call(this.types, name);\n  };\n  Sp.declareTemporary = function(prefix) {\n    if (prefix) {\n      if (!/^[a-z$_]/i.test(prefix)) {\n        throw new Error(\"\");\n      }\n    } else {\n      prefix = \"t$\";\n    }\n    prefix += this.depth.toString(36) + \"$\";\n    this.scan();\n    var index = 0;\n    while (this.declares(prefix + index)) {\n      ++index;\n    }\n    var name = prefix + index;\n    return this.bindings[name] = types.builders.identifier(name);\n  };\n  Sp.injectTemporary = function(identifier, init) {\n    identifier || (identifier = this.declareTemporary());\n    var bodyPath = this.path.get(\"body\");\n    if (namedTypes.BlockStatement.check(bodyPath.value)) {\n      bodyPath = bodyPath.get(\"body\");\n    }\n    bodyPath.unshift(\n      b.variableDeclaration(\n        \"var\",\n        [b.variableDeclarator(identifier, init || null)]\n      )\n    );\n    return identifier;\n  };\n  Sp.scan = function(force) {\n    if (force || !this.didScan) {\n      for (var name in this.bindings) {\n        delete this.bindings[name];\n      }\n      for (var name in this.types) {\n        delete this.types[name];\n      }\n      scanScope(this.path, this.bindings, this.types);\n      this.didScan = true;\n    }\n  };\n  Sp.getBindings = function() {\n    this.scan();\n    return this.bindings;\n  };\n  Sp.getTypes = function() {\n    this.scan();\n    return this.types;\n  };\n  function scanScope(path, bindings, scopeTypes) {\n    var node = path.value;\n    if (TypeParameterScopeType.check(node)) {\n      const params = path.get(\"typeParameters\", \"params\");\n      if (isArray.check(params.value)) {\n        params.each((childPath) => {\n          addTypeParameter(childPath, scopeTypes);\n        });\n      }\n    }\n    if (ScopeType.check(node)) {\n      if (namedTypes.CatchClause.check(node)) {\n        addPattern(path.get(\"param\"), bindings);\n      } else {\n        recursiveScanScope(path, bindings, scopeTypes);\n      }\n    }\n  }\n  function recursiveScanScope(path, bindings, scopeTypes) {\n    var node = path.value;\n    if (path.parent && namedTypes.FunctionExpression.check(path.parent.node) && path.parent.node.id) {\n      addPattern(path.parent.get(\"id\"), bindings);\n    }\n    if (!node) ; else if (isArray.check(node)) {\n      path.each((childPath) => {\n        recursiveScanChild(childPath, bindings, scopeTypes);\n      });\n    } else if (namedTypes.Function.check(node)) {\n      path.get(\"params\").each((paramPath) => {\n        addPattern(paramPath, bindings);\n      });\n      recursiveScanChild(path.get(\"body\"), bindings, scopeTypes);\n      recursiveScanScope(path.get(\"typeParameters\"), bindings, scopeTypes);\n    } else if (namedTypes.TypeAlias && namedTypes.TypeAlias.check(node) || namedTypes.InterfaceDeclaration && namedTypes.InterfaceDeclaration.check(node) || namedTypes.TSTypeAliasDeclaration && namedTypes.TSTypeAliasDeclaration.check(node) || namedTypes.TSInterfaceDeclaration && namedTypes.TSInterfaceDeclaration.check(node)) {\n      addTypePattern(path.get(\"id\"), scopeTypes);\n    } else if (namedTypes.VariableDeclarator.check(node)) {\n      addPattern(path.get(\"id\"), bindings);\n      recursiveScanChild(path.get(\"init\"), bindings, scopeTypes);\n    } else if (node.type === \"ImportSpecifier\" || node.type === \"ImportNamespaceSpecifier\" || node.type === \"ImportDefaultSpecifier\") {\n      addPattern(\n        // Esprima used to use the .name field to refer to the local\n        // binding identifier for ImportSpecifier nodes, but .id for\n        // ImportNamespaceSpecifier and ImportDefaultSpecifier nodes.\n        // ESTree/Acorn/ESpree use .local for all three node types.\n        path.get(node.local ? \"local\" : node.name ? \"name\" : \"id\"),\n        bindings\n      );\n    } else if (Node.check(node) && !Expression.check(node)) {\n      types.eachField(node, function(name, child) {\n        var childPath = path.get(name);\n        if (!pathHasValue(childPath, child)) {\n          throw new Error(\"\");\n        }\n        recursiveScanChild(childPath, bindings, scopeTypes);\n      });\n    }\n  }\n  function pathHasValue(path, value) {\n    if (path.value === value) {\n      return true;\n    }\n    if (Array.isArray(path.value) && path.value.length === 0 && Array.isArray(value) && value.length === 0) {\n      return true;\n    }\n    return false;\n  }\n  function recursiveScanChild(path, bindings, scopeTypes) {\n    var node = path.value;\n    if (!node || Expression.check(node)) ; else if (namedTypes.FunctionDeclaration.check(node) && node.id !== null) {\n      addPattern(path.get(\"id\"), bindings);\n    } else if (namedTypes.ClassDeclaration && namedTypes.ClassDeclaration.check(node) && node.id !== null) {\n      addPattern(path.get(\"id\"), bindings);\n      recursiveScanScope(path.get(\"typeParameters\"), bindings, scopeTypes);\n    } else if (namedTypes.InterfaceDeclaration && namedTypes.InterfaceDeclaration.check(node) || namedTypes.TSInterfaceDeclaration && namedTypes.TSInterfaceDeclaration.check(node)) {\n      addTypePattern(path.get(\"id\"), scopeTypes);\n    } else if (ScopeType.check(node)) {\n      if (namedTypes.CatchClause.check(node) && // TODO Broaden this to accept any pattern.\n      namedTypes.Identifier.check(node.param)) {\n        var catchParamName = node.param.name;\n        var hadBinding = hasOwn$4.call(bindings, catchParamName);\n        recursiveScanScope(path.get(\"body\"), bindings, scopeTypes);\n        if (!hadBinding) {\n          delete bindings[catchParamName];\n        }\n      }\n    } else {\n      recursiveScanScope(path, bindings, scopeTypes);\n    }\n  }\n  function addPattern(patternPath, bindings) {\n    var pattern = patternPath.value;\n    namedTypes.Pattern.assert(pattern);\n    if (namedTypes.Identifier.check(pattern)) {\n      if (hasOwn$4.call(bindings, pattern.name)) {\n        bindings[pattern.name].push(patternPath);\n      } else {\n        bindings[pattern.name] = [patternPath];\n      }\n    } else if (namedTypes.AssignmentPattern && namedTypes.AssignmentPattern.check(pattern)) {\n      addPattern(patternPath.get(\"left\"), bindings);\n    } else if (namedTypes.ObjectPattern && namedTypes.ObjectPattern.check(pattern)) {\n      patternPath.get(\"properties\").each(function(propertyPath) {\n        var property = propertyPath.value;\n        if (namedTypes.Pattern.check(property)) {\n          addPattern(propertyPath, bindings);\n        } else if (namedTypes.Property.check(property) || namedTypes.ObjectProperty && namedTypes.ObjectProperty.check(property)) {\n          addPattern(propertyPath.get(\"value\"), bindings);\n        } else if (namedTypes.SpreadProperty && namedTypes.SpreadProperty.check(property)) {\n          addPattern(propertyPath.get(\"argument\"), bindings);\n        }\n      });\n    } else if (namedTypes.ArrayPattern && namedTypes.ArrayPattern.check(pattern)) {\n      patternPath.get(\"elements\").each(function(elementPath) {\n        var element = elementPath.value;\n        if (namedTypes.Pattern.check(element)) {\n          addPattern(elementPath, bindings);\n        } else if (namedTypes.SpreadElement && namedTypes.SpreadElement.check(element)) {\n          addPattern(elementPath.get(\"argument\"), bindings);\n        }\n      });\n    } else if (namedTypes.PropertyPattern && namedTypes.PropertyPattern.check(pattern)) {\n      addPattern(patternPath.get(\"pattern\"), bindings);\n    } else if (namedTypes.SpreadElementPattern && namedTypes.SpreadElementPattern.check(pattern) || namedTypes.RestElement && namedTypes.RestElement.check(pattern) || namedTypes.SpreadPropertyPattern && namedTypes.SpreadPropertyPattern.check(pattern)) {\n      addPattern(patternPath.get(\"argument\"), bindings);\n    }\n  }\n  function addTypePattern(patternPath, types2) {\n    var pattern = patternPath.value;\n    namedTypes.Pattern.assert(pattern);\n    if (namedTypes.Identifier.check(pattern)) {\n      if (hasOwn$4.call(types2, pattern.name)) {\n        types2[pattern.name].push(patternPath);\n      } else {\n        types2[pattern.name] = [patternPath];\n      }\n    }\n  }\n  function addTypeParameter(parameterPath, types2) {\n    var parameter = parameterPath.value;\n    FlowOrTSTypeParameterType.assert(parameter);\n    if (hasOwn$4.call(types2, parameter.name)) {\n      types2[parameter.name].push(parameterPath);\n    } else {\n      types2[parameter.name] = [parameterPath];\n    }\n  }\n  Sp.lookup = function(name) {\n    for (var scope = this; scope; scope = scope.parent)\n      if (scope.declares(name))\n        break;\n    return scope;\n  };\n  Sp.lookupType = function(name) {\n    for (var scope = this; scope; scope = scope.parent)\n      if (scope.declaresType(name))\n        break;\n    return scope;\n  };\n  Sp.getGlobalScope = function() {\n    var scope = this;\n    while (!scope.isGlobal)\n      scope = scope.parent;\n    return scope;\n  };\n  return Scope;\n}\nmaybeSetModuleExports(() => module);\n\nfunction nodePathPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var n = types.namedTypes;\n  var b = types.builders;\n  var isNumber = types.builtInTypes.number;\n  var isArray = types.builtInTypes.array;\n  var Path2 = fork.use(pathPlugin);\n  var Scope2 = fork.use(scopePlugin);\n  const NodePath = function NodePath2(value, parentPath, name) {\n    if (!(this instanceof NodePath2)) {\n      throw new Error(\"NodePath constructor cannot be invoked without 'new'\");\n    }\n    Path2.call(this, value, parentPath, name);\n  };\n  var NPp = NodePath.prototype = Object.create(Path2.prototype, {\n    constructor: {\n      value: NodePath,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  Object.defineProperties(NPp, {\n    node: {\n      get: function() {\n        Object.defineProperty(this, \"node\", {\n          configurable: true,\n          // Enable deletion.\n          value: this._computeNode()\n        });\n        return this.node;\n      }\n    },\n    parent: {\n      get: function() {\n        Object.defineProperty(this, \"parent\", {\n          configurable: true,\n          // Enable deletion.\n          value: this._computeParent()\n        });\n        return this.parent;\n      }\n    },\n    scope: {\n      get: function() {\n        Object.defineProperty(this, \"scope\", {\n          configurable: true,\n          // Enable deletion.\n          value: this._computeScope()\n        });\n        return this.scope;\n      }\n    }\n  });\n  NPp.replace = function() {\n    delete this.node;\n    delete this.parent;\n    delete this.scope;\n    return Path2.prototype.replace.apply(this, arguments);\n  };\n  NPp.prune = function() {\n    var remainingNodePath = this.parent;\n    this.replace();\n    return cleanUpNodesAfterPrune(remainingNodePath);\n  };\n  NPp._computeNode = function() {\n    var value = this.value;\n    if (n.Node.check(value)) {\n      return value;\n    }\n    var pp = this.parentPath;\n    return pp && pp.node || null;\n  };\n  NPp._computeParent = function() {\n    var value = this.value;\n    var pp = this.parentPath;\n    if (!n.Node.check(value)) {\n      while (pp && !n.Node.check(pp.value)) {\n        pp = pp.parentPath;\n      }\n      if (pp) {\n        pp = pp.parentPath;\n      }\n    }\n    while (pp && !n.Node.check(pp.value)) {\n      pp = pp.parentPath;\n    }\n    return pp || null;\n  };\n  NPp._computeScope = function() {\n    var value = this.value;\n    var pp = this.parentPath;\n    var scope = pp && pp.scope;\n    if (n.Node.check(value) && Scope2.isEstablishedBy(value)) {\n      scope = new Scope2(this, scope);\n    }\n    return scope || null;\n  };\n  NPp.getValueProperty = function(name) {\n    return types.getFieldValue(this.value, name);\n  };\n  NPp.needsParens = function(assumeExpressionContext) {\n    var pp = this.parentPath;\n    if (!pp) {\n      return false;\n    }\n    var node = this.value;\n    if (!n.Expression.check(node)) {\n      return false;\n    }\n    if (node.type === \"Identifier\") {\n      return false;\n    }\n    while (!n.Node.check(pp.value)) {\n      pp = pp.parentPath;\n      if (!pp) {\n        return false;\n      }\n    }\n    var parent = pp.value;\n    switch (node.type) {\n      case \"UnaryExpression\":\n      case \"SpreadElement\":\n      case \"SpreadProperty\":\n        return parent.type === \"MemberExpression\" && this.name === \"object\" && parent.object === node;\n      case \"BinaryExpression\":\n      case \"LogicalExpression\":\n        switch (parent.type) {\n          case \"CallExpression\":\n            return this.name === \"callee\" && parent.callee === node;\n          case \"UnaryExpression\":\n          case \"SpreadElement\":\n          case \"SpreadProperty\":\n            return true;\n          case \"MemberExpression\":\n            return this.name === \"object\" && parent.object === node;\n          case \"BinaryExpression\":\n          case \"LogicalExpression\": {\n            const n2 = node;\n            const po = parent.operator;\n            const pp2 = PRECEDENCE[po];\n            const no = n2.operator;\n            const np = PRECEDENCE[no];\n            if (pp2 > np) {\n              return true;\n            }\n            if (pp2 === np && this.name === \"right\") {\n              if (parent.right !== n2) {\n                throw new Error(\"Nodes must be equal\");\n              }\n              return true;\n            }\n          }\n          default:\n            return false;\n        }\n      case \"SequenceExpression\":\n        switch (parent.type) {\n          case \"ForStatement\":\n            return false;\n          case \"ExpressionStatement\":\n            return this.name !== \"expression\";\n          default:\n            return true;\n        }\n      case \"YieldExpression\":\n        switch (parent.type) {\n          case \"BinaryExpression\":\n          case \"LogicalExpression\":\n          case \"UnaryExpression\":\n          case \"SpreadElement\":\n          case \"SpreadProperty\":\n          case \"CallExpression\":\n          case \"MemberExpression\":\n          case \"NewExpression\":\n          case \"ConditionalExpression\":\n          case \"YieldExpression\":\n            return true;\n          default:\n            return false;\n        }\n      case \"Literal\":\n        return parent.type === \"MemberExpression\" && isNumber.check(node.value) && this.name === \"object\" && parent.object === node;\n      case \"AssignmentExpression\":\n      case \"ConditionalExpression\":\n        switch (parent.type) {\n          case \"UnaryExpression\":\n          case \"SpreadElement\":\n          case \"SpreadProperty\":\n          case \"BinaryExpression\":\n          case \"LogicalExpression\":\n            return true;\n          case \"CallExpression\":\n            return this.name === \"callee\" && parent.callee === node;\n          case \"ConditionalExpression\":\n            return this.name === \"test\" && parent.test === node;\n          case \"MemberExpression\":\n            return this.name === \"object\" && parent.object === node;\n          default:\n            return false;\n        }\n      default:\n        if (parent.type === \"NewExpression\" && this.name === \"callee\" && parent.callee === node) {\n          return containsCallExpression(node);\n        }\n    }\n    if (assumeExpressionContext !== true && !this.canBeFirstInStatement() && this.firstInStatement())\n      return true;\n    return false;\n  };\n  function isBinary(node) {\n    return n.BinaryExpression.check(node) || n.LogicalExpression.check(node);\n  }\n  var PRECEDENCE = {};\n  [\n    [\"||\"],\n    [\"&&\"],\n    [\"|\"],\n    [\"^\"],\n    [\"&\"],\n    [\"==\", \"===\", \"!=\", \"!==\"],\n    [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n    [\">>\", \"<<\", \">>>\"],\n    [\"+\", \"-\"],\n    [\"*\", \"/\", \"%\"]\n  ].forEach(function(tier, i) {\n    tier.forEach(function(op) {\n      PRECEDENCE[op] = i;\n    });\n  });\n  function containsCallExpression(node) {\n    if (n.CallExpression.check(node)) {\n      return true;\n    }\n    if (isArray.check(node)) {\n      return node.some(containsCallExpression);\n    }\n    if (n.Node.check(node)) {\n      return types.someField(node, function(_name, child) {\n        return containsCallExpression(child);\n      });\n    }\n    return false;\n  }\n  NPp.canBeFirstInStatement = function() {\n    var node = this.node;\n    return !n.FunctionExpression.check(node) && !n.ObjectExpression.check(node);\n  };\n  NPp.firstInStatement = function() {\n    return firstInStatement(this);\n  };\n  function firstInStatement(path) {\n    for (var node, parent; path.parent; path = path.parent) {\n      node = path.node;\n      parent = path.parent.node;\n      if (n.BlockStatement.check(parent) && path.parent.name === \"body\" && path.name === 0) {\n        if (parent.body[0] !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        return true;\n      }\n      if (n.ExpressionStatement.check(parent) && path.name === \"expression\") {\n        if (parent.expression !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        return true;\n      }\n      if (n.SequenceExpression.check(parent) && path.parent.name === \"expressions\" && path.name === 0) {\n        if (parent.expressions[0] !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.CallExpression.check(parent) && path.name === \"callee\") {\n        if (parent.callee !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.MemberExpression.check(parent) && path.name === \"object\") {\n        if (parent.object !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.ConditionalExpression.check(parent) && path.name === \"test\") {\n        if (parent.test !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (isBinary(parent) && path.name === \"left\") {\n        if (parent.left !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.UnaryExpression.check(parent) && !parent.prefix && path.name === \"argument\") {\n        if (parent.argument !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      return false;\n    }\n    return true;\n  }\n  function cleanUpNodesAfterPrune(remainingNodePath) {\n    if (n.VariableDeclaration.check(remainingNodePath.node)) {\n      var declarations = remainingNodePath.get(\"declarations\").value;\n      if (!declarations || declarations.length === 0) {\n        return remainingNodePath.prune();\n      }\n    } else if (n.ExpressionStatement.check(remainingNodePath.node)) {\n      if (!remainingNodePath.get(\"expression\").value) {\n        return remainingNodePath.prune();\n      }\n    } else if (n.IfStatement.check(remainingNodePath.node)) {\n      cleanUpIfStatementAfterPrune(remainingNodePath);\n    }\n    return remainingNodePath;\n  }\n  function cleanUpIfStatementAfterPrune(ifStatement) {\n    var testExpression = ifStatement.get(\"test\").value;\n    var alternate = ifStatement.get(\"alternate\").value;\n    var consequent = ifStatement.get(\"consequent\").value;\n    if (!consequent && !alternate) {\n      var testExpressionStatement = b.expressionStatement(testExpression);\n      ifStatement.replace(testExpressionStatement);\n    } else if (!consequent && alternate) {\n      var negatedTestExpression = b.unaryExpression(\"!\", testExpression, true);\n      if (n.UnaryExpression.check(testExpression) && testExpression.operator === \"!\") {\n        negatedTestExpression = testExpression.argument;\n      }\n      ifStatement.get(\"test\").replace(negatedTestExpression);\n      ifStatement.get(\"consequent\").replace(alternate);\n      ifStatement.get(\"alternate\").replace();\n    }\n  }\n  return NodePath;\n}\nmaybeSetModuleExports(() => module);\n\nvar hasOwn$3 = Object.prototype.hasOwnProperty;\nfunction pathVisitorPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var NodePath2 = fork.use(nodePathPlugin);\n  var isArray = types.builtInTypes.array;\n  var isObject = types.builtInTypes.object;\n  var isFunction = types.builtInTypes.function;\n  var undefined$1;\n  const PathVisitor = function PathVisitor2() {\n    if (!(this instanceof PathVisitor2)) {\n      throw new Error(\n        \"PathVisitor constructor cannot be invoked without 'new'\"\n      );\n    }\n    this._reusableContextStack = [];\n    this._methodNameTable = computeMethodNameTable(this);\n    this._shouldVisitComments = hasOwn$3.call(this._methodNameTable, \"Block\") || hasOwn$3.call(this._methodNameTable, \"Line\");\n    this.Context = makeContextConstructor(this);\n    this._visiting = false;\n    this._changeReported = false;\n  };\n  function computeMethodNameTable(visitor) {\n    var typeNames = /* @__PURE__ */ Object.create(null);\n    for (var methodName in visitor) {\n      if (/^visit[A-Z]/.test(methodName)) {\n        typeNames[methodName.slice(\"visit\".length)] = true;\n      }\n    }\n    var supertypeTable = types.computeSupertypeLookupTable(typeNames);\n    var methodNameTable = /* @__PURE__ */ Object.create(null);\n    var typeNameKeys = Object.keys(supertypeTable);\n    var typeNameCount = typeNameKeys.length;\n    for (var i = 0; i < typeNameCount; ++i) {\n      var typeName = typeNameKeys[i];\n      methodName = \"visit\" + supertypeTable[typeName];\n      if (isFunction.check(visitor[methodName])) {\n        methodNameTable[typeName] = methodName;\n      }\n    }\n    return methodNameTable;\n  }\n  PathVisitor.fromMethodsObject = function fromMethodsObject(methods) {\n    if (methods instanceof PathVisitor) {\n      return methods;\n    }\n    if (!isObject.check(methods)) {\n      return new PathVisitor();\n    }\n    const Visitor = function Visitor2() {\n      if (!(this instanceof Visitor2)) {\n        throw new Error(\n          \"Visitor constructor cannot be invoked without 'new'\"\n        );\n      }\n      PathVisitor.call(this);\n    };\n    var Vp = Visitor.prototype = Object.create(PVp);\n    Vp.constructor = Visitor;\n    extend(Vp, methods);\n    extend(Visitor, PathVisitor);\n    isFunction.assert(Visitor.fromMethodsObject);\n    isFunction.assert(Visitor.visit);\n    return new Visitor();\n  };\n  function extend(target, source) {\n    for (var property in source) {\n      if (hasOwn$3.call(source, property)) {\n        target[property] = source[property];\n      }\n    }\n    return target;\n  }\n  PathVisitor.visit = function visit(node, methods) {\n    return PathVisitor.fromMethodsObject(methods).visit(node);\n  };\n  var PVp = PathVisitor.prototype;\n  PVp.visit = function() {\n    if (this._visiting) {\n      throw new Error(\n        \"Recursively calling visitor.visit(path) resets visitor state. Try this.visit(path) or this.traverse(path) instead.\"\n      );\n    }\n    this._visiting = true;\n    this._changeReported = false;\n    this._abortRequested = false;\n    var argc = arguments.length;\n    var args = new Array(argc);\n    for (var i = 0; i < argc; ++i) {\n      args[i] = arguments[i];\n    }\n    if (!(args[0] instanceof NodePath2)) {\n      args[0] = new NodePath2({ root: args[0] }).get(\"root\");\n    }\n    this.reset.apply(this, args);\n    var didNotThrow;\n    try {\n      var root = this.visitWithoutReset(args[0]);\n      didNotThrow = true;\n    } finally {\n      this._visiting = false;\n      if (!didNotThrow && this._abortRequested) {\n        return args[0].value;\n      }\n    }\n    return root;\n  };\n  PVp.AbortRequest = function AbortRequest() {\n  };\n  PVp.abort = function() {\n    var visitor = this;\n    visitor._abortRequested = true;\n    var request = new visitor.AbortRequest();\n    request.cancel = function() {\n      visitor._abortRequested = false;\n    };\n    throw request;\n  };\n  PVp.reset = function(_path) {\n  };\n  PVp.visitWithoutReset = function(path) {\n    if (this instanceof this.Context) {\n      return this.visitor.visitWithoutReset(path);\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    var value = path.value;\n    var methodName = value && typeof value === \"object\" && typeof value.type === \"string\" && this._methodNameTable[value.type];\n    if (methodName) {\n      var context = this.acquireContext(path);\n      try {\n        return context.invokeVisitorMethod(methodName);\n      } finally {\n        this.releaseContext(context);\n      }\n    } else {\n      return visitChildren(path, this);\n    }\n  };\n  function visitChildren(path, visitor) {\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    if (!(visitor instanceof PathVisitor)) {\n      throw new Error(\"\");\n    }\n    var value = path.value;\n    if (isArray.check(value)) {\n      path.each(visitor.visitWithoutReset, visitor);\n    } else if (!isObject.check(value)) ; else {\n      var childNames = types.getFieldNames(value);\n      if (visitor._shouldVisitComments && value.comments && childNames.indexOf(\"comments\") < 0) {\n        childNames.push(\"comments\");\n      }\n      var childCount = childNames.length;\n      var childPaths = [];\n      for (var i = 0; i < childCount; ++i) {\n        var childName = childNames[i];\n        if (!hasOwn$3.call(value, childName)) {\n          value[childName] = types.getFieldValue(value, childName);\n        }\n        childPaths.push(path.get(childName));\n      }\n      for (var i = 0; i < childCount; ++i) {\n        visitor.visitWithoutReset(childPaths[i]);\n      }\n    }\n    return path.value;\n  }\n  PVp.acquireContext = function(path) {\n    if (this._reusableContextStack.length === 0) {\n      return new this.Context(path);\n    }\n    return this._reusableContextStack.pop().reset(path);\n  };\n  PVp.releaseContext = function(context) {\n    if (!(context instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    this._reusableContextStack.push(context);\n    context.currentPath = null;\n  };\n  PVp.reportChanged = function() {\n    this._changeReported = true;\n  };\n  PVp.wasChangeReported = function() {\n    return this._changeReported;\n  };\n  function makeContextConstructor(visitor) {\n    function Context(path) {\n      if (!(this instanceof Context)) {\n        throw new Error(\"\");\n      }\n      if (!(this instanceof PathVisitor)) {\n        throw new Error(\"\");\n      }\n      if (!(path instanceof NodePath2)) {\n        throw new Error(\"\");\n      }\n      Object.defineProperty(this, \"visitor\", {\n        value: visitor,\n        writable: false,\n        enumerable: true,\n        configurable: false\n      });\n      this.currentPath = path;\n      this.needToCallTraverse = true;\n      Object.seal(this);\n    }\n    if (!(visitor instanceof PathVisitor)) {\n      throw new Error(\"\");\n    }\n    var Cp = Context.prototype = Object.create(visitor);\n    Cp.constructor = Context;\n    extend(Cp, sharedContextProtoMethods);\n    return Context;\n  }\n  var sharedContextProtoMethods = /* @__PURE__ */ Object.create(null);\n  sharedContextProtoMethods.reset = function reset(path) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    this.currentPath = path;\n    this.needToCallTraverse = true;\n    return this;\n  };\n  sharedContextProtoMethods.invokeVisitorMethod = function invokeVisitorMethod(methodName) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(this.currentPath instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    var result = this.visitor[methodName].call(this, this.currentPath);\n    if (result === false) {\n      this.needToCallTraverse = false;\n    } else if (result !== undefined$1) {\n      this.currentPath = this.currentPath.replace(result)[0];\n      if (this.needToCallTraverse) {\n        this.traverse(this.currentPath);\n      }\n    }\n    if (this.needToCallTraverse !== false) {\n      throw new Error(\n        \"Must either call this.traverse or return false in \" + methodName\n      );\n    }\n    var path = this.currentPath;\n    return path && path.value;\n  };\n  sharedContextProtoMethods.traverse = function traverse(path, newVisitor) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    if (!(this.currentPath instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    this.needToCallTraverse = false;\n    return visitChildren(path, PathVisitor.fromMethodsObject(\n      newVisitor || this.visitor\n    ));\n  };\n  sharedContextProtoMethods.visit = function visit(path, newVisitor) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    if (!(this.currentPath instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    this.needToCallTraverse = false;\n    return PathVisitor.fromMethodsObject(\n      newVisitor || this.visitor\n    ).visitWithoutReset(path);\n  };\n  sharedContextProtoMethods.reportChanged = function reportChanged() {\n    this.visitor.reportChanged();\n  };\n  sharedContextProtoMethods.abort = function abort() {\n    this.needToCallTraverse = false;\n    this.visitor.abort();\n  };\n  return PathVisitor;\n}\nmaybeSetModuleExports(() => module);\n\nfunction equivPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var getFieldNames = types.getFieldNames;\n  var getFieldValue = types.getFieldValue;\n  var isArray = types.builtInTypes.array;\n  var isObject = types.builtInTypes.object;\n  var isDate = types.builtInTypes.Date;\n  var isRegExp = types.builtInTypes.RegExp;\n  var hasOwn = Object.prototype.hasOwnProperty;\n  function astNodesAreEquivalent(a, b, problemPath) {\n    if (isArray.check(problemPath)) {\n      problemPath.length = 0;\n    } else {\n      problemPath = null;\n    }\n    return areEquivalent(a, b, problemPath);\n  }\n  astNodesAreEquivalent.assert = function(a, b) {\n    var problemPath = [];\n    if (!astNodesAreEquivalent(a, b, problemPath)) {\n      if (problemPath.length === 0) {\n        if (a !== b) {\n          throw new Error(\"Nodes must be equal\");\n        }\n      } else {\n        throw new Error(\n          \"Nodes differ in the following path: \" + problemPath.map(subscriptForProperty).join(\"\")\n        );\n      }\n    }\n  };\n  function subscriptForProperty(property) {\n    if (/[_$a-z][_$a-z0-9]*/i.test(property)) {\n      return \".\" + property;\n    }\n    return \"[\" + JSON.stringify(property) + \"]\";\n  }\n  function areEquivalent(a, b, problemPath) {\n    if (a === b) {\n      return true;\n    }\n    if (isArray.check(a)) {\n      return arraysAreEquivalent(a, b, problemPath);\n    }\n    if (isObject.check(a)) {\n      return objectsAreEquivalent(a, b, problemPath);\n    }\n    if (isDate.check(a)) {\n      return isDate.check(b) && +a === +b;\n    }\n    if (isRegExp.check(a)) {\n      return isRegExp.check(b) && (a.source === b.source && a.global === b.global && a.multiline === b.multiline && a.ignoreCase === b.ignoreCase);\n    }\n    return a == b;\n  }\n  function arraysAreEquivalent(a, b, problemPath) {\n    isArray.assert(a);\n    var aLength = a.length;\n    if (!isArray.check(b) || b.length !== aLength) {\n      if (problemPath) {\n        problemPath.push(\"length\");\n      }\n      return false;\n    }\n    for (var i = 0; i < aLength; ++i) {\n      if (problemPath) {\n        problemPath.push(i);\n      }\n      if (i in a !== i in b) {\n        return false;\n      }\n      if (!areEquivalent(a[i], b[i], problemPath)) {\n        return false;\n      }\n      if (problemPath) {\n        var problemPathTail = problemPath.pop();\n        if (problemPathTail !== i) {\n          throw new Error(\"\" + problemPathTail);\n        }\n      }\n    }\n    return true;\n  }\n  function objectsAreEquivalent(a, b, problemPath) {\n    isObject.assert(a);\n    if (!isObject.check(b)) {\n      return false;\n    }\n    if (a.type !== b.type) {\n      if (problemPath) {\n        problemPath.push(\"type\");\n      }\n      return false;\n    }\n    var aNames = getFieldNames(a);\n    var aNameCount = aNames.length;\n    var bNames = getFieldNames(b);\n    var bNameCount = bNames.length;\n    if (aNameCount === bNameCount) {\n      for (var i = 0; i < aNameCount; ++i) {\n        var name = aNames[i];\n        var aChild = getFieldValue(a, name);\n        var bChild = getFieldValue(b, name);\n        if (problemPath) {\n          problemPath.push(name);\n        }\n        if (!areEquivalent(aChild, bChild, problemPath)) {\n          return false;\n        }\n        if (problemPath) {\n          var problemPathTail = problemPath.pop();\n          if (problemPathTail !== name) {\n            throw new Error(\"\" + problemPathTail);\n          }\n        }\n      }\n      return true;\n    }\n    if (!problemPath) {\n      return false;\n    }\n    var seenNames = /* @__PURE__ */ Object.create(null);\n    for (i = 0; i < aNameCount; ++i) {\n      seenNames[aNames[i]] = true;\n    }\n    for (i = 0; i < bNameCount; ++i) {\n      name = bNames[i];\n      if (!hasOwn.call(seenNames, name)) {\n        problemPath.push(name);\n        return false;\n      }\n      delete seenNames[name];\n    }\n    for (name in seenNames) {\n      problemPath.push(name);\n      break;\n    }\n    return false;\n  }\n  return astNodesAreEquivalent;\n}\nmaybeSetModuleExports(() => module);\n\nfunction fork(plugins) {\n  const fork = createFork();\n  const types = fork.use(typesPlugin);\n  plugins.forEach(fork.use);\n  types.finalize();\n  const PathVisitor = fork.use(pathVisitorPlugin);\n  return {\n    Type: types.Type,\n    builtInTypes: types.builtInTypes,\n    namedTypes: types.namedTypes,\n    builders: types.builders,\n    defineMethod: types.defineMethod,\n    getFieldNames: types.getFieldNames,\n    getFieldValue: types.getFieldValue,\n    eachField: types.eachField,\n    someField: types.someField,\n    getSupertypeNames: types.getSupertypeNames,\n    getBuilderName: types.getBuilderName,\n    astNodesAreEquivalent: fork.use(equivPlugin),\n    finalize: types.finalize,\n    Path: fork.use(pathPlugin),\n    NodePath: fork.use(nodePathPlugin),\n    PathVisitor,\n    use: fork.use,\n    visit: PathVisitor.visit\n  };\n}\nfunction createFork() {\n  const used = [];\n  const usedResult = [];\n  function use(plugin) {\n    var idx = used.indexOf(plugin);\n    if (idx === -1) {\n      idx = used.length;\n      used.push(plugin);\n      usedResult[idx] = plugin(fork);\n    }\n    return usedResult[idx];\n  }\n  var fork = { use };\n  return fork;\n}\nmaybeSetModuleExports(() => module);\n\nfunction coreOpsDef() {\n  return {\n    BinaryOperators: [\n      \"==\",\n      \"!=\",\n      \"===\",\n      \"!==\",\n      \"<\",\n      \"<=\",\n      \">\",\n      \">=\",\n      \"<<\",\n      \">>\",\n      \">>>\",\n      \"+\",\n      \"-\",\n      \"*\",\n      \"/\",\n      \"%\",\n      \"&\",\n      \"|\",\n      \"^\",\n      \"in\",\n      \"instanceof\"\n    ],\n    AssignmentOperators: [\n      \"=\",\n      \"+=\",\n      \"-=\",\n      \"*=\",\n      \"/=\",\n      \"%=\",\n      \"<<=\",\n      \">>=\",\n      \">>>=\",\n      \"|=\",\n      \"^=\",\n      \"&=\"\n    ],\n    LogicalOperators: [\n      \"||\",\n      \"&&\"\n    ]\n  };\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2016OpsDef(fork) {\n  const result = fork.use(coreOpsDef);\n  if (result.BinaryOperators.indexOf(\"**\") < 0) {\n    result.BinaryOperators.push(\"**\");\n  }\n  if (result.AssignmentOperators.indexOf(\"**=\") < 0) {\n    result.AssignmentOperators.push(\"**=\");\n  }\n  return result;\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2020OpsDef(fork) {\n  const result = fork.use(es2016OpsDef);\n  if (result.LogicalOperators.indexOf(\"??\") < 0) {\n    result.LogicalOperators.push(\"??\");\n  }\n  return result;\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2021OpsDef(fork) {\n  const result = fork.use(es2020OpsDef);\n  result.LogicalOperators.forEach((op) => {\n    const assignOp = op + \"=\";\n    if (result.AssignmentOperators.indexOf(assignOp) < 0) {\n      result.AssignmentOperators.push(assignOp);\n    }\n  });\n  return result;\n}\nmaybeSetModuleExports(() => module);\n\nfunction coreDef(fork) {\n  var types = fork.use(typesPlugin);\n  var Type = types.Type;\n  var def = Type.def;\n  var or = Type.or;\n  var shared = fork.use(sharedPlugin);\n  var defaults = shared.defaults;\n  var geq = shared.geq;\n  const {\n    BinaryOperators,\n    AssignmentOperators,\n    LogicalOperators\n  } = fork.use(coreOpsDef);\n  def(\"Printable\").field(\"loc\", or(\n    def(\"SourceLocation\"),\n    null\n  ), defaults[\"null\"], true);\n  def(\"Node\").bases(\"Printable\").field(\"type\", String).field(\"comments\", or(\n    [def(\"Comment\")],\n    null\n  ), defaults[\"null\"], true);\n  def(\"SourceLocation\").field(\"start\", def(\"Position\")).field(\"end\", def(\"Position\")).field(\"source\", or(String, null), defaults[\"null\"]);\n  def(\"Position\").field(\"line\", geq(1)).field(\"column\", geq(0));\n  def(\"File\").bases(\"Node\").build(\"program\", \"name\").field(\"program\", def(\"Program\")).field(\"name\", or(String, null), defaults[\"null\"]);\n  def(\"Program\").bases(\"Node\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"Function\").bases(\"Node\").field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"params\", [def(\"Pattern\")]).field(\"body\", def(\"BlockStatement\")).field(\"generator\", Boolean, defaults[\"false\"]).field(\"async\", Boolean, defaults[\"false\"]);\n  def(\"Statement\").bases(\"Node\");\n  def(\"EmptyStatement\").bases(\"Statement\").build();\n  def(\"BlockStatement\").bases(\"Statement\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"ExpressionStatement\").bases(\"Statement\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"IfStatement\").bases(\"Statement\").build(\"test\", \"consequent\", \"alternate\").field(\"test\", def(\"Expression\")).field(\"consequent\", def(\"Statement\")).field(\"alternate\", or(def(\"Statement\"), null), defaults[\"null\"]);\n  def(\"LabeledStatement\").bases(\"Statement\").build(\"label\", \"body\").field(\"label\", def(\"Identifier\")).field(\"body\", def(\"Statement\"));\n  def(\"BreakStatement\").bases(\"Statement\").build(\"label\").field(\"label\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"ContinueStatement\").bases(\"Statement\").build(\"label\").field(\"label\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"WithStatement\").bases(\"Statement\").build(\"object\", \"body\").field(\"object\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"SwitchStatement\").bases(\"Statement\").build(\"discriminant\", \"cases\", \"lexical\").field(\"discriminant\", def(\"Expression\")).field(\"cases\", [def(\"SwitchCase\")]).field(\"lexical\", Boolean, defaults[\"false\"]);\n  def(\"ReturnStatement\").bases(\"Statement\").build(\"argument\").field(\"argument\", or(def(\"Expression\"), null));\n  def(\"ThrowStatement\").bases(\"Statement\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"TryStatement\").bases(\"Statement\").build(\"block\", \"handler\", \"finalizer\").field(\"block\", def(\"BlockStatement\")).field(\"handler\", or(def(\"CatchClause\"), null), function() {\n    return this.handlers && this.handlers[0] || null;\n  }).field(\"handlers\", [def(\"CatchClause\")], function() {\n    return this.handler ? [this.handler] : [];\n  }, true).field(\"guardedHandlers\", [def(\"CatchClause\")], defaults.emptyArray).field(\"finalizer\", or(def(\"BlockStatement\"), null), defaults[\"null\"]);\n  def(\"CatchClause\").bases(\"Node\").build(\"param\", \"guard\", \"body\").field(\"param\", def(\"Pattern\")).field(\"guard\", or(def(\"Expression\"), null), defaults[\"null\"]).field(\"body\", def(\"BlockStatement\"));\n  def(\"WhileStatement\").bases(\"Statement\").build(\"test\", \"body\").field(\"test\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"DoWhileStatement\").bases(\"Statement\").build(\"body\", \"test\").field(\"body\", def(\"Statement\")).field(\"test\", def(\"Expression\"));\n  def(\"ForStatement\").bases(\"Statement\").build(\"init\", \"test\", \"update\", \"body\").field(\"init\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Expression\"),\n    null\n  )).field(\"test\", or(def(\"Expression\"), null)).field(\"update\", or(def(\"Expression\"), null)).field(\"body\", def(\"Statement\"));\n  def(\"ForInStatement\").bases(\"Statement\").build(\"left\", \"right\", \"body\").field(\"left\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Expression\")\n  )).field(\"right\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"DebuggerStatement\").bases(\"Statement\").build();\n  def(\"Declaration\").bases(\"Statement\");\n  def(\"FunctionDeclaration\").bases(\"Function\", \"Declaration\").build(\"id\", \"params\", \"body\").field(\"id\", def(\"Identifier\"));\n  def(\"FunctionExpression\").bases(\"Function\", \"Expression\").build(\"id\", \"params\", \"body\");\n  def(\"VariableDeclaration\").bases(\"Declaration\").build(\"kind\", \"declarations\").field(\"kind\", or(\"var\", \"let\", \"const\")).field(\"declarations\", [def(\"VariableDeclarator\")]);\n  def(\"VariableDeclarator\").bases(\"Node\").build(\"id\", \"init\").field(\"id\", def(\"Pattern\")).field(\"init\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"Expression\").bases(\"Node\");\n  def(\"ThisExpression\").bases(\"Expression\").build();\n  def(\"ArrayExpression\").bases(\"Expression\").build(\"elements\").field(\"elements\", [or(def(\"Expression\"), null)]);\n  def(\"ObjectExpression\").bases(\"Expression\").build(\"properties\").field(\"properties\", [def(\"Property\")]);\n  def(\"Property\").bases(\"Node\").build(\"kind\", \"key\", \"value\").field(\"kind\", or(\"init\", \"get\", \"set\")).field(\"key\", or(def(\"Literal\"), def(\"Identifier\"))).field(\"value\", def(\"Expression\"));\n  def(\"SequenceExpression\").bases(\"Expression\").build(\"expressions\").field(\"expressions\", [def(\"Expression\")]);\n  var UnaryOperator = or(\n    \"-\",\n    \"+\",\n    \"!\",\n    \"~\",\n    \"typeof\",\n    \"void\",\n    \"delete\"\n  );\n  def(\"UnaryExpression\").bases(\"Expression\").build(\"operator\", \"argument\", \"prefix\").field(\"operator\", UnaryOperator).field(\"argument\", def(\"Expression\")).field(\"prefix\", Boolean, defaults[\"true\"]);\n  const BinaryOperator = or(...BinaryOperators);\n  def(\"BinaryExpression\").bases(\"Expression\").build(\"operator\", \"left\", \"right\").field(\"operator\", BinaryOperator).field(\"left\", def(\"Expression\")).field(\"right\", def(\"Expression\"));\n  const AssignmentOperator = or(...AssignmentOperators);\n  def(\"AssignmentExpression\").bases(\"Expression\").build(\"operator\", \"left\", \"right\").field(\"operator\", AssignmentOperator).field(\"left\", or(def(\"Pattern\"), def(\"MemberExpression\"))).field(\"right\", def(\"Expression\"));\n  var UpdateOperator = or(\"++\", \"--\");\n  def(\"UpdateExpression\").bases(\"Expression\").build(\"operator\", \"argument\", \"prefix\").field(\"operator\", UpdateOperator).field(\"argument\", def(\"Expression\")).field(\"prefix\", Boolean);\n  var LogicalOperator = or(...LogicalOperators);\n  def(\"LogicalExpression\").bases(\"Expression\").build(\"operator\", \"left\", \"right\").field(\"operator\", LogicalOperator).field(\"left\", def(\"Expression\")).field(\"right\", def(\"Expression\"));\n  def(\"ConditionalExpression\").bases(\"Expression\").build(\"test\", \"consequent\", \"alternate\").field(\"test\", def(\"Expression\")).field(\"consequent\", def(\"Expression\")).field(\"alternate\", def(\"Expression\"));\n  def(\"NewExpression\").bases(\"Expression\").build(\"callee\", \"arguments\").field(\"callee\", def(\"Expression\")).field(\"arguments\", [def(\"Expression\")]);\n  def(\"CallExpression\").bases(\"Expression\").build(\"callee\", \"arguments\").field(\"callee\", def(\"Expression\")).field(\"arguments\", [def(\"Expression\")]);\n  def(\"MemberExpression\").bases(\"Expression\").build(\"object\", \"property\", \"computed\").field(\"object\", def(\"Expression\")).field(\"property\", or(def(\"Identifier\"), def(\"Expression\"))).field(\"computed\", Boolean, function() {\n    var type = this.property.type;\n    if (type === \"Literal\" || type === \"MemberExpression\" || type === \"BinaryExpression\") {\n      return true;\n    }\n    return false;\n  });\n  def(\"Pattern\").bases(\"Node\");\n  def(\"SwitchCase\").bases(\"Node\").build(\"test\", \"consequent\").field(\"test\", or(def(\"Expression\"), null)).field(\"consequent\", [def(\"Statement\")]);\n  def(\"Identifier\").bases(\"Expression\", \"Pattern\").build(\"name\").field(\"name\", String).field(\"optional\", Boolean, defaults[\"false\"]);\n  def(\"Literal\").bases(\"Expression\").build(\"value\").field(\"value\", or(String, Boolean, null, Number, RegExp, BigInt));\n  def(\"Comment\").bases(\"Printable\").field(\"value\", String).field(\"leading\", Boolean, defaults[\"true\"]).field(\"trailing\", Boolean, defaults[\"false\"]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es6Def(fork) {\n  fork.use(coreDef);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"Function\").field(\"generator\", Boolean, defaults[\"false\"]).field(\"expression\", Boolean, defaults[\"false\"]).field(\"defaults\", [or(def(\"Expression\"), null)], defaults.emptyArray).field(\"rest\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"RestElement\").bases(\"Pattern\").build(\"argument\").field(\"argument\", def(\"Pattern\")).field(\n    \"typeAnnotation\",\n    // for Babylon. Flow parser puts it on the identifier\n    or(def(\"TypeAnnotation\"), def(\"TSTypeAnnotation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"SpreadElementPattern\").bases(\"Pattern\").build(\"argument\").field(\"argument\", def(\"Pattern\"));\n  def(\"FunctionDeclaration\").build(\"id\", \"params\", \"body\", \"generator\", \"expression\").field(\"id\", or(def(\"Identifier\"), null));\n  def(\"FunctionExpression\").build(\"id\", \"params\", \"body\", \"generator\", \"expression\");\n  def(\"ArrowFunctionExpression\").bases(\"Function\", \"Expression\").build(\"params\", \"body\", \"expression\").field(\"id\", null, defaults[\"null\"]).field(\"body\", or(def(\"BlockStatement\"), def(\"Expression\"))).field(\"generator\", false, defaults[\"false\"]);\n  def(\"ForOfStatement\").bases(\"Statement\").build(\"left\", \"right\", \"body\").field(\"left\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Pattern\")\n  )).field(\"right\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"YieldExpression\").bases(\"Expression\").build(\"argument\", \"delegate\").field(\"argument\", or(def(\"Expression\"), null)).field(\"delegate\", Boolean, defaults[\"false\"]);\n  def(\"GeneratorExpression\").bases(\"Expression\").build(\"body\", \"blocks\", \"filter\").field(\"body\", def(\"Expression\")).field(\"blocks\", [def(\"ComprehensionBlock\")]).field(\"filter\", or(def(\"Expression\"), null));\n  def(\"ComprehensionExpression\").bases(\"Expression\").build(\"body\", \"blocks\", \"filter\").field(\"body\", def(\"Expression\")).field(\"blocks\", [def(\"ComprehensionBlock\")]).field(\"filter\", or(def(\"Expression\"), null));\n  def(\"ComprehensionBlock\").bases(\"Node\").build(\"left\", \"right\", \"each\").field(\"left\", def(\"Pattern\")).field(\"right\", def(\"Expression\")).field(\"each\", Boolean);\n  def(\"Property\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"value\", or(def(\"Expression\"), def(\"Pattern\"))).field(\"method\", Boolean, defaults[\"false\"]).field(\"shorthand\", Boolean, defaults[\"false\"]).field(\"computed\", Boolean, defaults[\"false\"]);\n  def(\"ObjectProperty\").field(\"shorthand\", Boolean, defaults[\"false\"]);\n  def(\"PropertyPattern\").bases(\"Pattern\").build(\"key\", \"pattern\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"pattern\", def(\"Pattern\")).field(\"computed\", Boolean, defaults[\"false\"]);\n  def(\"ObjectPattern\").bases(\"Pattern\").build(\"properties\").field(\"properties\", [or(def(\"PropertyPattern\"), def(\"Property\"))]);\n  def(\"ArrayPattern\").bases(\"Pattern\").build(\"elements\").field(\"elements\", [or(def(\"Pattern\"), null)]);\n  def(\"SpreadElement\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"ArrayExpression\").field(\"elements\", [or(\n    def(\"Expression\"),\n    def(\"SpreadElement\"),\n    def(\"RestElement\"),\n    null\n  )]);\n  def(\"NewExpression\").field(\"arguments\", [or(def(\"Expression\"), def(\"SpreadElement\"))]);\n  def(\"CallExpression\").field(\"arguments\", [or(def(\"Expression\"), def(\"SpreadElement\"))]);\n  def(\"AssignmentPattern\").bases(\"Pattern\").build(\"left\", \"right\").field(\"left\", def(\"Pattern\")).field(\"right\", def(\"Expression\"));\n  def(\"MethodDefinition\").bases(\"Declaration\").build(\"kind\", \"key\", \"value\", \"static\").field(\"kind\", or(\"constructor\", \"method\", \"get\", \"set\")).field(\"key\", def(\"Expression\")).field(\"value\", def(\"Function\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"static\", Boolean, defaults[\"false\"]);\n  const ClassBodyElement = or(\n    def(\"MethodDefinition\"),\n    def(\"VariableDeclarator\"),\n    def(\"ClassPropertyDefinition\"),\n    def(\"ClassProperty\"),\n    def(\"StaticBlock\")\n  );\n  def(\"ClassProperty\").bases(\"Declaration\").build(\"key\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"computed\", Boolean, defaults[\"false\"]);\n  def(\"ClassPropertyDefinition\").bases(\"Declaration\").build(\"definition\").field(\"definition\", ClassBodyElement);\n  def(\"ClassBody\").bases(\"Declaration\").build(\"body\").field(\"body\", [ClassBodyElement]);\n  def(\"ClassDeclaration\").bases(\"Declaration\").build(\"id\", \"body\", \"superClass\").field(\"id\", or(def(\"Identifier\"), null)).field(\"body\", def(\"ClassBody\")).field(\"superClass\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"ClassExpression\").bases(\"Expression\").build(\"id\", \"body\", \"superClass\").field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"body\", def(\"ClassBody\")).field(\"superClass\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"Super\").bases(\"Expression\").build();\n  def(\"Specifier\").bases(\"Node\");\n  def(\"ModuleSpecifier\").bases(\"Specifier\").field(\"local\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"name\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"ImportSpecifier\").bases(\"ModuleSpecifier\").build(\"imported\", \"local\").field(\"imported\", def(\"Identifier\"));\n  def(\"ImportDefaultSpecifier\").bases(\"ModuleSpecifier\").build(\"local\");\n  def(\"ImportNamespaceSpecifier\").bases(\"ModuleSpecifier\").build(\"local\");\n  def(\"ImportDeclaration\").bases(\"Declaration\").build(\"specifiers\", \"source\", \"importKind\").field(\"specifiers\", [or(\n    def(\"ImportSpecifier\"),\n    def(\"ImportNamespaceSpecifier\"),\n    def(\"ImportDefaultSpecifier\")\n  )], defaults.emptyArray).field(\"source\", def(\"Literal\")).field(\"importKind\", or(\n    \"value\",\n    \"type\"\n  ), function() {\n    return \"value\";\n  });\n  def(\"ExportNamedDeclaration\").bases(\"Declaration\").build(\"declaration\", \"specifiers\", \"source\").field(\"declaration\", or(def(\"Declaration\"), null)).field(\"specifiers\", [def(\"ExportSpecifier\")], defaults.emptyArray).field(\"source\", or(def(\"Literal\"), null), defaults[\"null\"]);\n  def(\"ExportSpecifier\").bases(\"ModuleSpecifier\").build(\"local\", \"exported\").field(\"exported\", def(\"Identifier\"));\n  def(\"ExportDefaultDeclaration\").bases(\"Declaration\").build(\"declaration\").field(\"declaration\", or(def(\"Declaration\"), def(\"Expression\")));\n  def(\"ExportAllDeclaration\").bases(\"Declaration\").build(\"source\").field(\"source\", def(\"Literal\"));\n  def(\"TaggedTemplateExpression\").bases(\"Expression\").build(\"tag\", \"quasi\").field(\"tag\", def(\"Expression\")).field(\"quasi\", def(\"TemplateLiteral\"));\n  def(\"TemplateLiteral\").bases(\"Expression\").build(\"quasis\", \"expressions\").field(\"quasis\", [def(\"TemplateElement\")]).field(\"expressions\", [def(\"Expression\")]);\n  def(\"TemplateElement\").bases(\"Node\").build(\"value\", \"tail\").field(\"value\", { \"cooked\": String, \"raw\": String }).field(\"tail\", Boolean);\n  def(\"MetaProperty\").bases(\"Expression\").build(\"meta\", \"property\").field(\"meta\", def(\"Identifier\")).field(\"property\", def(\"Identifier\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2016Def(fork) {\n  fork.use(es2016OpsDef);\n  fork.use(es6Def);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2017Def(fork) {\n  fork.use(es2016Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"Function\").field(\"async\", Boolean, defaults[\"false\"]);\n  def(\"AwaitExpression\").bases(\"Expression\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2018Def(fork) {\n  fork.use(es2017Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"ForOfStatement\").field(\"await\", Boolean, defaults[\"false\"]);\n  def(\"SpreadProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"ObjectExpression\").field(\"properties\", [or(\n    def(\"Property\"),\n    def(\"SpreadProperty\"),\n    // Legacy\n    def(\"SpreadElement\")\n  )]);\n  def(\"TemplateElement\").field(\"value\", { \"cooked\": or(String, null), \"raw\": String });\n  def(\"SpreadPropertyPattern\").bases(\"Pattern\").build(\"argument\").field(\"argument\", def(\"Pattern\"));\n  def(\"ObjectPattern\").field(\"properties\", [or(def(\"PropertyPattern\"), def(\"Property\"), def(\"RestElement\"), def(\"SpreadPropertyPattern\"))]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2019Def(fork) {\n  fork.use(es2018Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"CatchClause\").field(\"param\", or(def(\"Pattern\"), null), defaults[\"null\"]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2020Def(fork) {\n  fork.use(es2020OpsDef);\n  fork.use(es2019Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const shared = fork.use(sharedPlugin);\n  const defaults = shared.defaults;\n  def(\"ImportExpression\").bases(\"Expression\").build(\"source\").field(\"source\", def(\"Expression\"));\n  def(\"ExportAllDeclaration\").bases(\"Declaration\").build(\"source\", \"exported\").field(\"source\", def(\"Literal\")).field(\"exported\", or(\n    def(\"Identifier\"),\n    null,\n    void 0\n  ), defaults[\"null\"]);\n  def(\"ChainElement\").bases(\"Node\").field(\"optional\", Boolean, defaults[\"false\"]);\n  def(\"CallExpression\").bases(\"Expression\", \"ChainElement\");\n  def(\"MemberExpression\").bases(\"Expression\", \"ChainElement\");\n  def(\"ChainExpression\").bases(\"Expression\").build(\"expression\").field(\"expression\", def(\"ChainElement\"));\n  def(\"OptionalCallExpression\").bases(\"CallExpression\").build(\"callee\", \"arguments\", \"optional\").field(\"optional\", Boolean, defaults[\"true\"]);\n  def(\"OptionalMemberExpression\").bases(\"MemberExpression\").build(\"object\", \"property\", \"computed\", \"optional\").field(\"optional\", Boolean, defaults[\"true\"]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2021Def(fork) {\n  fork.use(es2021OpsDef);\n  fork.use(es2020Def);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2022Def(fork) {\n  fork.use(es2021Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  def(\"StaticBlock\").bases(\"Declaration\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction esProposalsDef(fork) {\n  fork.use(es2022Def);\n  const types = fork.use(typesPlugin);\n  const Type = types.Type;\n  const def = types.Type.def;\n  const or = Type.or;\n  const shared = fork.use(sharedPlugin);\n  const defaults = shared.defaults;\n  def(\"AwaitExpression\").build(\"argument\", \"all\").field(\"argument\", or(def(\"Expression\"), null)).field(\"all\", Boolean, defaults[\"false\"]);\n  def(\"Decorator\").bases(\"Node\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"Property\").field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"MethodDefinition\").field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"PrivateName\").bases(\"Expression\", \"Pattern\").build(\"id\").field(\"id\", def(\"Identifier\"));\n  def(\"ClassPrivateProperty\").bases(\"ClassProperty\").build(\"key\", \"value\").field(\"key\", def(\"PrivateName\")).field(\"value\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"ImportAttribute\").bases(\"Node\").build(\"key\", \"value\").field(\"key\", or(def(\"Identifier\"), def(\"Literal\"))).field(\"value\", def(\"Expression\"));\n  [\n    \"ImportDeclaration\",\n    \"ExportAllDeclaration\",\n    \"ExportNamedDeclaration\"\n  ].forEach((decl) => {\n    def(decl).field(\n      \"assertions\",\n      [def(\"ImportAttribute\")],\n      defaults.emptyArray\n    );\n  });\n  def(\"RecordExpression\").bases(\"Expression\").build(\"properties\").field(\"properties\", [or(\n    def(\"ObjectProperty\"),\n    def(\"ObjectMethod\"),\n    def(\"SpreadElement\")\n  )]);\n  def(\"TupleExpression\").bases(\"Expression\").build(\"elements\").field(\"elements\", [or(\n    def(\"Expression\"),\n    def(\"SpreadElement\"),\n    null\n  )]);\n  def(\"ModuleExpression\").bases(\"Node\").build(\"body\").field(\"body\", def(\"Program\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction jsxDef(fork) {\n  fork.use(esProposalsDef);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"JSXAttribute\").bases(\"Node\").build(\"name\", \"value\").field(\"name\", or(def(\"JSXIdentifier\"), def(\"JSXNamespacedName\"))).field(\"value\", or(\n    def(\"Literal\"),\n    // attr=\"value\"\n    def(\"JSXExpressionContainer\"),\n    // attr={value}\n    def(\"JSXElement\"),\n    // attr=<div />\n    def(\"JSXFragment\"),\n    // attr=<></>\n    null\n    // attr= or just attr\n  ), defaults[\"null\"]);\n  def(\"JSXIdentifier\").bases(\"Identifier\").build(\"name\").field(\"name\", String);\n  def(\"JSXNamespacedName\").bases(\"Node\").build(\"namespace\", \"name\").field(\"namespace\", def(\"JSXIdentifier\")).field(\"name\", def(\"JSXIdentifier\"));\n  def(\"JSXMemberExpression\").bases(\"MemberExpression\").build(\"object\", \"property\").field(\"object\", or(def(\"JSXIdentifier\"), def(\"JSXMemberExpression\"))).field(\"property\", def(\"JSXIdentifier\")).field(\"computed\", Boolean, defaults.false);\n  const JSXElementName = or(\n    def(\"JSXIdentifier\"),\n    def(\"JSXNamespacedName\"),\n    def(\"JSXMemberExpression\")\n  );\n  def(\"JSXSpreadAttribute\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  const JSXAttributes = [or(\n    def(\"JSXAttribute\"),\n    def(\"JSXSpreadAttribute\")\n  )];\n  def(\"JSXExpressionContainer\").bases(\"Expression\").build(\"expression\").field(\"expression\", or(def(\"Expression\"), def(\"JSXEmptyExpression\")));\n  const JSXChildren = [or(\n    def(\"JSXText\"),\n    def(\"JSXExpressionContainer\"),\n    def(\"JSXSpreadChild\"),\n    def(\"JSXElement\"),\n    def(\"JSXFragment\"),\n    def(\"Literal\")\n    // Legacy: Esprima should return JSXText instead.\n  )];\n  def(\"JSXElement\").bases(\"Expression\").build(\"openingElement\", \"closingElement\", \"children\").field(\"openingElement\", def(\"JSXOpeningElement\")).field(\"closingElement\", or(def(\"JSXClosingElement\"), null), defaults[\"null\"]).field(\"children\", JSXChildren, defaults.emptyArray).field(\"name\", JSXElementName, function() {\n    return this.openingElement.name;\n  }, true).field(\"selfClosing\", Boolean, function() {\n    return this.openingElement.selfClosing;\n  }, true).field(\"attributes\", JSXAttributes, function() {\n    return this.openingElement.attributes;\n  }, true);\n  def(\"JSXOpeningElement\").bases(\"Node\").build(\"name\", \"attributes\", \"selfClosing\").field(\"name\", JSXElementName).field(\"attributes\", JSXAttributes, defaults.emptyArray).field(\"selfClosing\", Boolean, defaults[\"false\"]);\n  def(\"JSXClosingElement\").bases(\"Node\").build(\"name\").field(\"name\", JSXElementName);\n  def(\"JSXFragment\").bases(\"Expression\").build(\"openingFragment\", \"closingFragment\", \"children\").field(\"openingFragment\", def(\"JSXOpeningFragment\")).field(\"closingFragment\", def(\"JSXClosingFragment\")).field(\"children\", JSXChildren, defaults.emptyArray);\n  def(\"JSXOpeningFragment\").bases(\"Node\").build();\n  def(\"JSXClosingFragment\").bases(\"Node\").build();\n  def(\"JSXText\").bases(\"Literal\").build(\"value\", \"raw\").field(\"value\", String).field(\"raw\", String, function() {\n    return this.value;\n  });\n  def(\"JSXEmptyExpression\").bases(\"Node\").build();\n  def(\"JSXSpreadChild\").bases(\"Node\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction typeAnnotationsDef(fork) {\n  var types = fork.use(typesPlugin);\n  var def = types.Type.def;\n  var or = types.Type.or;\n  var defaults = fork.use(sharedPlugin).defaults;\n  var TypeAnnotation = or(\n    def(\"TypeAnnotation\"),\n    def(\"TSTypeAnnotation\"),\n    null\n  );\n  var TypeParamDecl = or(\n    def(\"TypeParameterDeclaration\"),\n    def(\"TSTypeParameterDeclaration\"),\n    null\n  );\n  def(\"Identifier\").field(\"typeAnnotation\", TypeAnnotation, defaults[\"null\"]);\n  def(\"ObjectPattern\").field(\"typeAnnotation\", TypeAnnotation, defaults[\"null\"]);\n  def(\"Function\").field(\"returnType\", TypeAnnotation, defaults[\"null\"]).field(\"typeParameters\", TypeParamDecl, defaults[\"null\"]);\n  def(\"ClassProperty\").build(\"key\", \"value\", \"typeAnnotation\", \"static\").field(\"value\", or(def(\"Expression\"), null)).field(\"static\", Boolean, defaults[\"false\"]).field(\"typeAnnotation\", TypeAnnotation, defaults[\"null\"]);\n  [\n    \"ClassDeclaration\",\n    \"ClassExpression\"\n  ].forEach((typeName) => {\n    def(typeName).field(\"typeParameters\", TypeParamDecl, defaults[\"null\"]).field(\n      \"superTypeParameters\",\n      or(\n        def(\"TypeParameterInstantiation\"),\n        def(\"TSTypeParameterInstantiation\"),\n        null\n      ),\n      defaults[\"null\"]\n    ).field(\n      \"implements\",\n      or(\n        [def(\"ClassImplements\")],\n        [def(\"TSExpressionWithTypeArguments\")]\n      ),\n      defaults.emptyArray\n    );\n  });\n}\nmaybeSetModuleExports(() => module);\n\nfunction flowDef(fork) {\n  fork.use(esProposalsDef);\n  fork.use(typeAnnotationsDef);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"Flow\").bases(\"Node\");\n  def(\"FlowType\").bases(\"Flow\");\n  def(\"AnyTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"EmptyTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"MixedTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"VoidTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"SymbolTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"NumberTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"BigIntTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"NumberLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", Number).field(\"raw\", String);\n  def(\"NumericLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", Number).field(\"raw\", String);\n  def(\"BigIntLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", null).field(\"raw\", String);\n  def(\"StringTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"StringLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", String).field(\"raw\", String);\n  def(\"BooleanTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"BooleanLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", Boolean).field(\"raw\", String);\n  def(\"TypeAnnotation\").bases(\"Node\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"FlowType\"));\n  def(\"NullableTypeAnnotation\").bases(\"FlowType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"FlowType\"));\n  def(\"NullLiteralTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"NullTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"ThisTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"ExistsTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"ExistentialTypeParam\").bases(\"FlowType\").build();\n  def(\"FunctionTypeAnnotation\").bases(\"FlowType\").build(\"params\", \"returnType\", \"rest\", \"typeParameters\").field(\"params\", [def(\"FunctionTypeParam\")]).field(\"returnType\", def(\"FlowType\")).field(\"rest\", or(def(\"FunctionTypeParam\"), null)).field(\"typeParameters\", or(def(\"TypeParameterDeclaration\"), null));\n  def(\"FunctionTypeParam\").bases(\"Node\").build(\"name\", \"typeAnnotation\", \"optional\").field(\"name\", or(def(\"Identifier\"), null)).field(\"typeAnnotation\", def(\"FlowType\")).field(\"optional\", Boolean);\n  def(\"ArrayTypeAnnotation\").bases(\"FlowType\").build(\"elementType\").field(\"elementType\", def(\"FlowType\"));\n  def(\"ObjectTypeAnnotation\").bases(\"FlowType\").build(\"properties\", \"indexers\", \"callProperties\").field(\"properties\", [\n    or(\n      def(\"ObjectTypeProperty\"),\n      def(\"ObjectTypeSpreadProperty\")\n    )\n  ]).field(\"indexers\", [def(\"ObjectTypeIndexer\")], defaults.emptyArray).field(\n    \"callProperties\",\n    [def(\"ObjectTypeCallProperty\")],\n    defaults.emptyArray\n  ).field(\"inexact\", or(Boolean, void 0), defaults[\"undefined\"]).field(\"exact\", Boolean, defaults[\"false\"]).field(\"internalSlots\", [def(\"ObjectTypeInternalSlot\")], defaults.emptyArray);\n  def(\"Variance\").bases(\"Node\").build(\"kind\").field(\"kind\", or(\"plus\", \"minus\"));\n  const LegacyVariance = or(\n    def(\"Variance\"),\n    \"plus\",\n    \"minus\",\n    null\n  );\n  def(\"ObjectTypeProperty\").bases(\"Node\").build(\"key\", \"value\", \"optional\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"))).field(\"value\", def(\"FlowType\")).field(\"optional\", Boolean).field(\"variance\", LegacyVariance, defaults[\"null\"]);\n  def(\"ObjectTypeIndexer\").bases(\"Node\").build(\"id\", \"key\", \"value\").field(\"id\", def(\"Identifier\")).field(\"key\", def(\"FlowType\")).field(\"value\", def(\"FlowType\")).field(\"variance\", LegacyVariance, defaults[\"null\"]).field(\"static\", Boolean, defaults[\"false\"]);\n  def(\"ObjectTypeCallProperty\").bases(\"Node\").build(\"value\").field(\"value\", def(\"FunctionTypeAnnotation\")).field(\"static\", Boolean, defaults[\"false\"]);\n  def(\"QualifiedTypeIdentifier\").bases(\"Node\").build(\"qualification\", \"id\").field(\n    \"qualification\",\n    or(\n      def(\"Identifier\"),\n      def(\"QualifiedTypeIdentifier\")\n    )\n  ).field(\"id\", def(\"Identifier\"));\n  def(\"GenericTypeAnnotation\").bases(\"FlowType\").build(\"id\", \"typeParameters\").field(\"id\", or(def(\"Identifier\"), def(\"QualifiedTypeIdentifier\"))).field(\"typeParameters\", or(def(\"TypeParameterInstantiation\"), null));\n  def(\"MemberTypeAnnotation\").bases(\"FlowType\").build(\"object\", \"property\").field(\"object\", def(\"Identifier\")).field(\n    \"property\",\n    or(\n      def(\"MemberTypeAnnotation\"),\n      def(\"GenericTypeAnnotation\")\n    )\n  );\n  def(\"IndexedAccessType\").bases(\"FlowType\").build(\"objectType\", \"indexType\").field(\"objectType\", def(\"FlowType\")).field(\"indexType\", def(\"FlowType\"));\n  def(\"OptionalIndexedAccessType\").bases(\"FlowType\").build(\"objectType\", \"indexType\", \"optional\").field(\"objectType\", def(\"FlowType\")).field(\"indexType\", def(\"FlowType\")).field(\"optional\", Boolean);\n  def(\"UnionTypeAnnotation\").bases(\"FlowType\").build(\"types\").field(\"types\", [def(\"FlowType\")]);\n  def(\"IntersectionTypeAnnotation\").bases(\"FlowType\").build(\"types\").field(\"types\", [def(\"FlowType\")]);\n  def(\"TypeofTypeAnnotation\").bases(\"FlowType\").build(\"argument\").field(\"argument\", def(\"FlowType\"));\n  def(\"ObjectTypeSpreadProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"FlowType\"));\n  def(\"ObjectTypeInternalSlot\").bases(\"Node\").build(\"id\", \"value\", \"optional\", \"static\", \"method\").field(\"id\", def(\"Identifier\")).field(\"value\", def(\"FlowType\")).field(\"optional\", Boolean).field(\"static\", Boolean).field(\"method\", Boolean);\n  def(\"TypeParameterDeclaration\").bases(\"Node\").build(\"params\").field(\"params\", [def(\"TypeParameter\")]);\n  def(\"TypeParameterInstantiation\").bases(\"Node\").build(\"params\").field(\"params\", [def(\"FlowType\")]);\n  def(\"TypeParameter\").bases(\"FlowType\").build(\"name\", \"variance\", \"bound\", \"default\").field(\"name\", String).field(\"variance\", LegacyVariance, defaults[\"null\"]).field(\"bound\", or(def(\"TypeAnnotation\"), null), defaults[\"null\"]).field(\"default\", or(def(\"FlowType\"), null), defaults[\"null\"]);\n  def(\"ClassProperty\").field(\"variance\", LegacyVariance, defaults[\"null\"]);\n  def(\"ClassImplements\").bases(\"Node\").build(\"id\").field(\"id\", def(\"Identifier\")).field(\"superClass\", or(def(\"Expression\"), null), defaults[\"null\"]).field(\n    \"typeParameters\",\n    or(def(\"TypeParameterInstantiation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"InterfaceTypeAnnotation\").bases(\"FlowType\").build(\"body\", \"extends\").field(\"body\", def(\"ObjectTypeAnnotation\")).field(\"extends\", or([def(\"InterfaceExtends\")], null), defaults[\"null\"]);\n  def(\"InterfaceDeclaration\").bases(\"Declaration\").build(\"id\", \"body\", \"extends\").field(\"id\", def(\"Identifier\")).field(\n    \"typeParameters\",\n    or(def(\"TypeParameterDeclaration\"), null),\n    defaults[\"null\"]\n  ).field(\"body\", def(\"ObjectTypeAnnotation\")).field(\"extends\", [def(\"InterfaceExtends\")]);\n  def(\"DeclareInterface\").bases(\"InterfaceDeclaration\").build(\"id\", \"body\", \"extends\");\n  def(\"InterfaceExtends\").bases(\"Node\").build(\"id\").field(\"id\", def(\"Identifier\")).field(\n    \"typeParameters\",\n    or(def(\"TypeParameterInstantiation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TypeAlias\").bases(\"Declaration\").build(\"id\", \"typeParameters\", \"right\").field(\"id\", def(\"Identifier\")).field(\"typeParameters\", or(def(\"TypeParameterDeclaration\"), null)).field(\"right\", def(\"FlowType\"));\n  def(\"DeclareTypeAlias\").bases(\"TypeAlias\").build(\"id\", \"typeParameters\", \"right\");\n  def(\"OpaqueType\").bases(\"Declaration\").build(\"id\", \"typeParameters\", \"impltype\", \"supertype\").field(\"id\", def(\"Identifier\")).field(\"typeParameters\", or(def(\"TypeParameterDeclaration\"), null)).field(\"impltype\", def(\"FlowType\")).field(\"supertype\", or(def(\"FlowType\"), null));\n  def(\"DeclareOpaqueType\").bases(\"OpaqueType\").build(\"id\", \"typeParameters\", \"supertype\").field(\"impltype\", or(def(\"FlowType\"), null));\n  def(\"TypeCastExpression\").bases(\"Expression\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TypeAnnotation\"));\n  def(\"TupleTypeAnnotation\").bases(\"FlowType\").build(\"types\").field(\"types\", [def(\"FlowType\")]);\n  def(\"DeclareVariable\").bases(\"Statement\").build(\"id\").field(\"id\", def(\"Identifier\"));\n  def(\"DeclareFunction\").bases(\"Statement\").build(\"id\").field(\"id\", def(\"Identifier\")).field(\"predicate\", or(def(\"FlowPredicate\"), null), defaults[\"null\"]);\n  def(\"DeclareClass\").bases(\"InterfaceDeclaration\").build(\"id\");\n  def(\"DeclareModule\").bases(\"Statement\").build(\"id\", \"body\").field(\"id\", or(def(\"Identifier\"), def(\"Literal\"))).field(\"body\", def(\"BlockStatement\"));\n  def(\"DeclareModuleExports\").bases(\"Statement\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TypeAnnotation\"));\n  def(\"DeclareExportDeclaration\").bases(\"Declaration\").build(\"default\", \"declaration\", \"specifiers\", \"source\").field(\"default\", Boolean).field(\"declaration\", or(\n    def(\"DeclareVariable\"),\n    def(\"DeclareFunction\"),\n    def(\"DeclareClass\"),\n    def(\"FlowType\"),\n    // Implies default.\n    def(\"TypeAlias\"),\n    // Implies named type\n    def(\"DeclareOpaqueType\"),\n    // Implies named opaque type\n    def(\"InterfaceDeclaration\"),\n    null\n  )).field(\"specifiers\", [or(\n    def(\"ExportSpecifier\"),\n    def(\"ExportBatchSpecifier\")\n  )], defaults.emptyArray).field(\"source\", or(\n    def(\"Literal\"),\n    null\n  ), defaults[\"null\"]);\n  def(\"DeclareExportAllDeclaration\").bases(\"Declaration\").build(\"source\").field(\"source\", or(\n    def(\"Literal\"),\n    null\n  ), defaults[\"null\"]);\n  def(\"ImportDeclaration\").field(\"importKind\", or(\"value\", \"type\", \"typeof\"), () => \"value\");\n  def(\"FlowPredicate\").bases(\"Flow\");\n  def(\"InferredPredicate\").bases(\"FlowPredicate\").build();\n  def(\"DeclaredPredicate\").bases(\"FlowPredicate\").build(\"value\").field(\"value\", def(\"Expression\"));\n  def(\"Function\").field(\"predicate\", or(def(\"FlowPredicate\"), null), defaults[\"null\"]);\n  def(\"CallExpression\").field(\"typeArguments\", or(\n    null,\n    def(\"TypeParameterInstantiation\")\n  ), defaults[\"null\"]);\n  def(\"NewExpression\").field(\"typeArguments\", or(\n    null,\n    def(\"TypeParameterInstantiation\")\n  ), defaults[\"null\"]);\n  def(\"EnumDeclaration\").bases(\"Declaration\").build(\"id\", \"body\").field(\"id\", def(\"Identifier\")).field(\"body\", or(\n    def(\"EnumBooleanBody\"),\n    def(\"EnumNumberBody\"),\n    def(\"EnumStringBody\"),\n    def(\"EnumSymbolBody\")\n  ));\n  def(\"EnumBooleanBody\").build(\"members\", \"explicitType\").field(\"members\", [def(\"EnumBooleanMember\")]).field(\"explicitType\", Boolean);\n  def(\"EnumNumberBody\").build(\"members\", \"explicitType\").field(\"members\", [def(\"EnumNumberMember\")]).field(\"explicitType\", Boolean);\n  def(\"EnumStringBody\").build(\"members\", \"explicitType\").field(\"members\", or([def(\"EnumStringMember\")], [def(\"EnumDefaultedMember\")])).field(\"explicitType\", Boolean);\n  def(\"EnumSymbolBody\").build(\"members\").field(\"members\", [def(\"EnumDefaultedMember\")]);\n  def(\"EnumBooleanMember\").build(\"id\", \"init\").field(\"id\", def(\"Identifier\")).field(\"init\", or(def(\"Literal\"), Boolean));\n  def(\"EnumNumberMember\").build(\"id\", \"init\").field(\"id\", def(\"Identifier\")).field(\"init\", def(\"Literal\"));\n  def(\"EnumStringMember\").build(\"id\", \"init\").field(\"id\", def(\"Identifier\")).field(\"init\", def(\"Literal\"));\n  def(\"EnumDefaultedMember\").build(\"id\").field(\"id\", def(\"Identifier\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction esprimaDef(fork) {\n  fork.use(esProposalsDef);\n  var types = fork.use(typesPlugin);\n  var defaults = fork.use(sharedPlugin).defaults;\n  var def = types.Type.def;\n  var or = types.Type.or;\n  def(\"VariableDeclaration\").field(\"declarations\", [or(\n    def(\"VariableDeclarator\"),\n    def(\"Identifier\")\n    // Esprima deviation.\n  )]);\n  def(\"Property\").field(\"value\", or(\n    def(\"Expression\"),\n    def(\"Pattern\")\n    // Esprima deviation.\n  ));\n  def(\"ArrayPattern\").field(\"elements\", [or(\n    def(\"Pattern\"),\n    def(\"SpreadElement\"),\n    null\n  )]);\n  def(\"ObjectPattern\").field(\"properties\", [or(\n    def(\"Property\"),\n    def(\"PropertyPattern\"),\n    def(\"SpreadPropertyPattern\"),\n    def(\"SpreadProperty\")\n    // Used by Esprima.\n  )]);\n  def(\"ExportSpecifier\").bases(\"ModuleSpecifier\").build(\"id\", \"name\");\n  def(\"ExportBatchSpecifier\").bases(\"Specifier\").build();\n  def(\"ExportDeclaration\").bases(\"Declaration\").build(\"default\", \"declaration\", \"specifiers\", \"source\").field(\"default\", Boolean).field(\"declaration\", or(\n    def(\"Declaration\"),\n    def(\"Expression\"),\n    // Implies default.\n    null\n  )).field(\"specifiers\", [or(\n    def(\"ExportSpecifier\"),\n    def(\"ExportBatchSpecifier\")\n  )], defaults.emptyArray).field(\"source\", or(\n    def(\"Literal\"),\n    null\n  ), defaults[\"null\"]);\n  def(\"Block\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n  def(\"Line\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n}\nmaybeSetModuleExports(() => module);\n\nfunction babelCoreDef(fork) {\n  fork.use(esProposalsDef);\n  const types = fork.use(typesPlugin);\n  const defaults = fork.use(sharedPlugin).defaults;\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const {\n    undefined: isUndefined\n  } = types.builtInTypes;\n  def(\"Noop\").bases(\"Statement\").build();\n  def(\"DoExpression\").bases(\"Expression\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"BindExpression\").bases(\"Expression\").build(\"object\", \"callee\").field(\"object\", or(def(\"Expression\"), null)).field(\"callee\", def(\"Expression\"));\n  def(\"ParenthesizedExpression\").bases(\"Expression\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"ExportNamespaceSpecifier\").bases(\"Specifier\").build(\"exported\").field(\"exported\", def(\"Identifier\"));\n  def(\"ExportDefaultSpecifier\").bases(\"Specifier\").build(\"exported\").field(\"exported\", def(\"Identifier\"));\n  def(\"CommentBlock\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n  def(\"CommentLine\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n  def(\"Directive\").bases(\"Node\").build(\"value\").field(\"value\", def(\"DirectiveLiteral\"));\n  def(\"DirectiveLiteral\").bases(\"Node\", \"Expression\").build(\"value\").field(\"value\", String, defaults[\"use strict\"]);\n  def(\"InterpreterDirective\").bases(\"Node\").build(\"value\").field(\"value\", String);\n  def(\"BlockStatement\").bases(\"Statement\").build(\"body\").field(\"body\", [def(\"Statement\")]).field(\"directives\", [def(\"Directive\")], defaults.emptyArray);\n  def(\"Program\").bases(\"Node\").build(\"body\").field(\"body\", [def(\"Statement\")]).field(\"directives\", [def(\"Directive\")], defaults.emptyArray).field(\"interpreter\", or(def(\"InterpreterDirective\"), null), defaults[\"null\"]);\n  function makeLiteralExtra(rawValueType = String, toRaw) {\n    return [\n      \"extra\",\n      {\n        rawValue: rawValueType,\n        raw: String\n      },\n      function getDefault() {\n        const value = types.getFieldValue(this, \"value\");\n        return {\n          rawValue: value,\n          raw: toRaw ? toRaw(value) : String(value)\n        };\n      }\n    ];\n  }\n  def(\"StringLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", String).field(...makeLiteralExtra(String, (val) => JSON.stringify(val)));\n  def(\"NumericLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", Number).field(\"raw\", or(String, null), defaults[\"null\"]).field(...makeLiteralExtra(Number));\n  def(\"BigIntLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", or(String, Number)).field(...makeLiteralExtra(String, (val) => val + \"n\"));\n  def(\"DecimalLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", String).field(...makeLiteralExtra(String, (val) => val + \"m\"));\n  def(\"NullLiteral\").bases(\"Literal\").build().field(\"value\", null, defaults[\"null\"]);\n  def(\"BooleanLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", Boolean);\n  def(\"RegExpLiteral\").bases(\"Literal\").build(\"pattern\", \"flags\").field(\"pattern\", String).field(\"flags\", String).field(\"value\", RegExp, function() {\n    return new RegExp(this.pattern, this.flags);\n  }).field(...makeLiteralExtra(\n    or(RegExp, isUndefined),\n    (exp) => `/${exp.pattern}/${exp.flags || \"\"}`\n  )).field(\"regex\", {\n    pattern: String,\n    flags: String\n  }, function() {\n    return {\n      pattern: this.pattern,\n      flags: this.flags\n    };\n  });\n  var ObjectExpressionProperty = or(\n    def(\"Property\"),\n    def(\"ObjectMethod\"),\n    def(\"ObjectProperty\"),\n    def(\"SpreadProperty\"),\n    def(\"SpreadElement\")\n  );\n  def(\"ObjectExpression\").bases(\"Expression\").build(\"properties\").field(\"properties\", [ObjectExpressionProperty]);\n  def(\"ObjectMethod\").bases(\"Node\", \"Function\").build(\"kind\", \"key\", \"params\", \"body\", \"computed\").field(\"kind\", or(\"method\", \"get\", \"set\")).field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"params\", [def(\"Pattern\")]).field(\"body\", def(\"BlockStatement\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"generator\", Boolean, defaults[\"false\"]).field(\"async\", Boolean, defaults[\"false\"]).field(\n    \"accessibility\",\n    // TypeScript\n    or(def(\"Literal\"), null),\n    defaults[\"null\"]\n  ).field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"ObjectProperty\").bases(\"Node\").build(\"key\", \"value\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"value\", or(def(\"Expression\"), def(\"Pattern\"))).field(\n    \"accessibility\",\n    // TypeScript\n    or(def(\"Literal\"), null),\n    defaults[\"null\"]\n  ).field(\"computed\", Boolean, defaults[\"false\"]);\n  var ClassBodyElement = or(\n    def(\"MethodDefinition\"),\n    def(\"VariableDeclarator\"),\n    def(\"ClassPropertyDefinition\"),\n    def(\"ClassProperty\"),\n    def(\"ClassPrivateProperty\"),\n    def(\"ClassMethod\"),\n    def(\"ClassPrivateMethod\"),\n    def(\"ClassAccessorProperty\"),\n    def(\"StaticBlock\")\n  );\n  def(\"ClassBody\").bases(\"Declaration\").build(\"body\").field(\"body\", [ClassBodyElement]);\n  def(\"ClassMethod\").bases(\"Declaration\", \"Function\").build(\"kind\", \"key\", \"params\", \"body\", \"computed\", \"static\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\")));\n  def(\"ClassPrivateMethod\").bases(\"Declaration\", \"Function\").build(\"key\", \"params\", \"body\", \"kind\", \"computed\", \"static\").field(\"key\", def(\"PrivateName\"));\n  def(\"ClassAccessorProperty\").bases(\"Declaration\").build(\"key\", \"value\", \"decorators\", \"computed\", \"static\").field(\"key\", or(\n    def(\"Literal\"),\n    def(\"Identifier\"),\n    def(\"PrivateName\"),\n    // Only when .computed is true (TODO enforce this)\n    def(\"Expression\")\n  )).field(\"value\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  [\n    \"ClassMethod\",\n    \"ClassPrivateMethod\"\n  ].forEach((typeName) => {\n    def(typeName).field(\"kind\", or(\"get\", \"set\", \"method\", \"constructor\"), () => \"method\").field(\"body\", def(\"BlockStatement\")).field(\"access\", or(\"public\", \"private\", \"protected\", null), defaults[\"null\"]);\n  });\n  [\n    \"ClassMethod\",\n    \"ClassPrivateMethod\",\n    \"ClassAccessorProperty\"\n  ].forEach((typeName) => {\n    def(typeName).field(\"computed\", Boolean, defaults[\"false\"]).field(\"static\", Boolean, defaults[\"false\"]).field(\"abstract\", Boolean, defaults[\"false\"]).field(\"accessibility\", or(\"public\", \"private\", \"protected\", null), defaults[\"null\"]).field(\"decorators\", or([def(\"Decorator\")], null), defaults[\"null\"]).field(\"definite\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\"override\", Boolean, defaults[\"false\"]).field(\"readonly\", Boolean, defaults[\"false\"]);\n  });\n  var ObjectPatternProperty = or(\n    def(\"Property\"),\n    def(\"PropertyPattern\"),\n    def(\"SpreadPropertyPattern\"),\n    def(\"SpreadProperty\"),\n    // Used by Esprima\n    def(\"ObjectProperty\"),\n    // Babel 6\n    def(\"RestProperty\"),\n    // Babel 6\n    def(\"RestElement\")\n    // Babel 6\n  );\n  def(\"ObjectPattern\").bases(\"Pattern\").build(\"properties\").field(\"properties\", [ObjectPatternProperty]).field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"SpreadProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"RestProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"ForAwaitStatement\").bases(\"Statement\").build(\"left\", \"right\", \"body\").field(\"left\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Expression\")\n  )).field(\"right\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"Import\").bases(\"Expression\").build();\n}\nmaybeSetModuleExports(() => module);\n\nfunction babelDef(fork) {\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  fork.use(babelCoreDef);\n  fork.use(flowDef);\n  def(\"V8IntrinsicIdentifier\").bases(\"Expression\").build(\"name\").field(\"name\", String);\n  def(\"TopicReference\").bases(\"Expression\").build();\n}\nmaybeSetModuleExports(() => module);\n\nfunction typescriptDef(fork) {\n  fork.use(babelCoreDef);\n  fork.use(typeAnnotationsDef);\n  var types = fork.use(typesPlugin);\n  var n = types.namedTypes;\n  var def = types.Type.def;\n  var or = types.Type.or;\n  var defaults = fork.use(sharedPlugin).defaults;\n  var StringLiteral = types.Type.from(function(value, deep) {\n    if (n.StringLiteral && n.StringLiteral.check(value, deep)) {\n      return true;\n    }\n    if (n.Literal && n.Literal.check(value, deep) && typeof value.value === \"string\") {\n      return true;\n    }\n    return false;\n  }, \"StringLiteral\");\n  def(\"TSType\").bases(\"Node\");\n  var TSEntityName = or(\n    def(\"Identifier\"),\n    def(\"TSQualifiedName\")\n  );\n  def(\"TSTypeReference\").bases(\"TSType\", \"TSHasOptionalTypeParameterInstantiation\").build(\"typeName\", \"typeParameters\").field(\"typeName\", TSEntityName);\n  def(\"TSHasOptionalTypeParameterInstantiation\").field(\n    \"typeParameters\",\n    or(def(\"TSTypeParameterInstantiation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSHasOptionalTypeParameters\").field(\n    \"typeParameters\",\n    or(def(\"TSTypeParameterDeclaration\"), null, void 0),\n    defaults[\"null\"]\n  );\n  def(\"TSHasOptionalTypeAnnotation\").field(\n    \"typeAnnotation\",\n    or(def(\"TSTypeAnnotation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSQualifiedName\").bases(\"Node\").build(\"left\", \"right\").field(\"left\", TSEntityName).field(\"right\", TSEntityName);\n  def(\"TSAsExpression\").bases(\"Expression\", \"Pattern\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TSType\")).field(\n    \"extra\",\n    or({ parenthesized: Boolean }, null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeCastExpression\").bases(\"Expression\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSSatisfiesExpression\").bases(\"Expression\", \"Pattern\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSNonNullExpression\").bases(\"Expression\", \"Pattern\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  [\n    // Define all the simple keyword types.\n    \"TSAnyKeyword\",\n    \"TSBigIntKeyword\",\n    \"TSBooleanKeyword\",\n    \"TSNeverKeyword\",\n    \"TSNullKeyword\",\n    \"TSNumberKeyword\",\n    \"TSObjectKeyword\",\n    \"TSStringKeyword\",\n    \"TSSymbolKeyword\",\n    \"TSUndefinedKeyword\",\n    \"TSUnknownKeyword\",\n    \"TSVoidKeyword\",\n    \"TSIntrinsicKeyword\",\n    \"TSThisType\"\n  ].forEach((keywordType) => {\n    def(keywordType).bases(\"TSType\").build();\n  });\n  def(\"TSArrayType\").bases(\"TSType\").build(\"elementType\").field(\"elementType\", def(\"TSType\"));\n  def(\"TSLiteralType\").bases(\"TSType\").build(\"literal\").field(\"literal\", or(\n    def(\"NumericLiteral\"),\n    def(\"StringLiteral\"),\n    def(\"BooleanLiteral\"),\n    def(\"TemplateLiteral\"),\n    def(\"UnaryExpression\"),\n    def(\"BigIntLiteral\")\n  ));\n  def(\"TemplateLiteral\").field(\"expressions\", or(\n    [def(\"Expression\")],\n    [def(\"TSType\")]\n  ));\n  [\n    \"TSUnionType\",\n    \"TSIntersectionType\"\n  ].forEach((typeName) => {\n    def(typeName).bases(\"TSType\").build(\"types\").field(\"types\", [def(\"TSType\")]);\n  });\n  def(\"TSConditionalType\").bases(\"TSType\").build(\"checkType\", \"extendsType\", \"trueType\", \"falseType\").field(\"checkType\", def(\"TSType\")).field(\"extendsType\", def(\"TSType\")).field(\"trueType\", def(\"TSType\")).field(\"falseType\", def(\"TSType\"));\n  def(\"TSInferType\").bases(\"TSType\").build(\"typeParameter\").field(\"typeParameter\", def(\"TSTypeParameter\"));\n  def(\"TSParenthesizedType\").bases(\"TSType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TSType\"));\n  var ParametersType = [or(\n    def(\"Identifier\"),\n    def(\"RestElement\"),\n    def(\"ArrayPattern\"),\n    def(\"ObjectPattern\")\n  )];\n  [\n    \"TSFunctionType\",\n    \"TSConstructorType\"\n  ].forEach((typeName) => {\n    def(typeName).bases(\n      \"TSType\",\n      \"TSHasOptionalTypeParameters\",\n      \"TSHasOptionalTypeAnnotation\"\n    ).build(\"parameters\").field(\"parameters\", ParametersType);\n  });\n  def(\"TSDeclareFunction\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"id\", \"params\", \"returnType\").field(\"declare\", Boolean, defaults[\"false\"]).field(\"async\", Boolean, defaults[\"false\"]).field(\"generator\", Boolean, defaults[\"false\"]).field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"params\", [def(\"Pattern\")]).field(\n    \"returnType\",\n    or(\n      def(\"TSTypeAnnotation\"),\n      def(\"Noop\"),\n      // Still used?\n      null\n    ),\n    defaults[\"null\"]\n  );\n  def(\"TSDeclareMethod\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"key\", \"params\", \"returnType\").field(\"async\", Boolean, defaults[\"false\"]).field(\"generator\", Boolean, defaults[\"false\"]).field(\"params\", [def(\"Pattern\")]).field(\"abstract\", Boolean, defaults[\"false\"]).field(\n    \"accessibility\",\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  ).field(\"static\", Boolean, defaults[\"false\"]).field(\"computed\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\"key\", or(\n    def(\"Identifier\"),\n    def(\"StringLiteral\"),\n    def(\"NumericLiteral\"),\n    // Only allowed if .computed is true.\n    def(\"Expression\")\n  )).field(\n    \"kind\",\n    or(\"get\", \"set\", \"method\", \"constructor\"),\n    function getDefault() {\n      return \"method\";\n    }\n  ).field(\n    \"access\",\n    // Not \"accessibility\"?\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  ).field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  ).field(\n    \"returnType\",\n    or(\n      def(\"TSTypeAnnotation\"),\n      def(\"Noop\"),\n      // Still used?\n      null\n    ),\n    defaults[\"null\"]\n  );\n  def(\"TSMappedType\").bases(\"TSType\").build(\"typeParameter\", \"typeAnnotation\").field(\"readonly\", or(Boolean, \"+\", \"-\"), defaults[\"false\"]).field(\"typeParameter\", def(\"TSTypeParameter\")).field(\"optional\", or(Boolean, \"+\", \"-\"), defaults[\"false\"]).field(\n    \"typeAnnotation\",\n    or(def(\"TSType\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSTupleType\").bases(\"TSType\").build(\"elementTypes\").field(\"elementTypes\", [or(\n    def(\"TSType\"),\n    def(\"TSNamedTupleMember\")\n  )]);\n  def(\"TSNamedTupleMember\").bases(\"TSType\").build(\"label\", \"elementType\", \"optional\").field(\"label\", def(\"Identifier\")).field(\"optional\", Boolean, defaults[\"false\"]).field(\"elementType\", def(\"TSType\"));\n  def(\"TSRestType\").bases(\"TSType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSOptionalType\").bases(\"TSType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSIndexedAccessType\").bases(\"TSType\").build(\"objectType\", \"indexType\").field(\"objectType\", def(\"TSType\")).field(\"indexType\", def(\"TSType\"));\n  def(\"TSTypeOperator\").bases(\"TSType\").build(\"operator\").field(\"operator\", String).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSTypeAnnotation\").bases(\"Node\").build(\"typeAnnotation\").field(\n    \"typeAnnotation\",\n    or(\n      def(\"TSType\"),\n      def(\"TSTypeAnnotation\")\n    )\n  );\n  def(\"TSIndexSignature\").bases(\"Declaration\", \"TSHasOptionalTypeAnnotation\").build(\"parameters\", \"typeAnnotation\").field(\"parameters\", [def(\"Identifier\")]).field(\"readonly\", Boolean, defaults[\"false\"]);\n  def(\"TSPropertySignature\").bases(\"Declaration\", \"TSHasOptionalTypeAnnotation\").build(\"key\", \"typeAnnotation\", \"optional\").field(\"key\", def(\"Expression\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"readonly\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\n    \"initializer\",\n    or(def(\"Expression\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSMethodSignature\").bases(\n    \"Declaration\",\n    \"TSHasOptionalTypeParameters\",\n    \"TSHasOptionalTypeAnnotation\"\n  ).build(\"key\", \"parameters\", \"typeAnnotation\").field(\"key\", def(\"Expression\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\"parameters\", ParametersType);\n  def(\"TSTypePredicate\").bases(\"TSTypeAnnotation\", \"TSType\").build(\"parameterName\", \"typeAnnotation\", \"asserts\").field(\n    \"parameterName\",\n    or(\n      def(\"Identifier\"),\n      def(\"TSThisType\")\n    )\n  ).field(\n    \"typeAnnotation\",\n    or(def(\"TSTypeAnnotation\"), null),\n    defaults[\"null\"]\n  ).field(\"asserts\", Boolean, defaults[\"false\"]);\n  [\n    \"TSCallSignatureDeclaration\",\n    \"TSConstructSignatureDeclaration\"\n  ].forEach((typeName) => {\n    def(typeName).bases(\n      \"Declaration\",\n      \"TSHasOptionalTypeParameters\",\n      \"TSHasOptionalTypeAnnotation\"\n    ).build(\"parameters\", \"typeAnnotation\").field(\"parameters\", ParametersType);\n  });\n  def(\"TSEnumMember\").bases(\"Node\").build(\"id\", \"initializer\").field(\"id\", or(def(\"Identifier\"), StringLiteral)).field(\n    \"initializer\",\n    or(def(\"Expression\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeQuery\").bases(\"TSType\").build(\"exprName\").field(\"exprName\", or(TSEntityName, def(\"TSImportType\")));\n  var TSTypeMember = or(\n    def(\"TSCallSignatureDeclaration\"),\n    def(\"TSConstructSignatureDeclaration\"),\n    def(\"TSIndexSignature\"),\n    def(\"TSMethodSignature\"),\n    def(\"TSPropertySignature\")\n  );\n  def(\"TSTypeLiteral\").bases(\"TSType\").build(\"members\").field(\"members\", [TSTypeMember]);\n  def(\"TSTypeParameter\").bases(\"Identifier\").build(\"name\", \"constraint\", \"default\").field(\"name\", or(def(\"Identifier\"), String)).field(\"constraint\", or(def(\"TSType\"), void 0), defaults[\"undefined\"]).field(\"default\", or(def(\"TSType\"), void 0), defaults[\"undefined\"]);\n  def(\"TSTypeAssertion\").bases(\"Expression\", \"Pattern\").build(\"typeAnnotation\", \"expression\").field(\"typeAnnotation\", def(\"TSType\")).field(\"expression\", def(\"Expression\")).field(\n    \"extra\",\n    or({ parenthesized: Boolean }, null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeParameterDeclaration\").bases(\"Declaration\").build(\"params\").field(\"params\", [def(\"TSTypeParameter\")]);\n  def(\"TSInstantiationExpression\").bases(\"Expression\", \"TSHasOptionalTypeParameterInstantiation\").build(\"expression\", \"typeParameters\").field(\"expression\", def(\"Expression\"));\n  def(\"TSTypeParameterInstantiation\").bases(\"Node\").build(\"params\").field(\"params\", [def(\"TSType\")]);\n  def(\"TSEnumDeclaration\").bases(\"Declaration\").build(\"id\", \"members\").field(\"id\", def(\"Identifier\")).field(\"const\", Boolean, defaults[\"false\"]).field(\"declare\", Boolean, defaults[\"false\"]).field(\"members\", [def(\"TSEnumMember\")]).field(\n    \"initializer\",\n    or(def(\"Expression\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeAliasDeclaration\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"id\", \"typeAnnotation\").field(\"id\", def(\"Identifier\")).field(\"declare\", Boolean, defaults[\"false\"]).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSModuleBlock\").bases(\"Node\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"TSModuleDeclaration\").bases(\"Declaration\").build(\"id\", \"body\").field(\"id\", or(StringLiteral, TSEntityName)).field(\"declare\", Boolean, defaults[\"false\"]).field(\"global\", Boolean, defaults[\"false\"]).field(\n    \"body\",\n    or(\n      def(\"TSModuleBlock\"),\n      def(\"TSModuleDeclaration\"),\n      null\n    ),\n    defaults[\"null\"]\n  );\n  def(\"TSImportType\").bases(\"TSType\", \"TSHasOptionalTypeParameterInstantiation\").build(\"argument\", \"qualifier\", \"typeParameters\").field(\"argument\", StringLiteral).field(\"qualifier\", or(TSEntityName, void 0), defaults[\"undefined\"]);\n  def(\"TSImportEqualsDeclaration\").bases(\"Declaration\").build(\"id\", \"moduleReference\").field(\"id\", def(\"Identifier\")).field(\"isExport\", Boolean, defaults[\"false\"]).field(\n    \"moduleReference\",\n    or(\n      TSEntityName,\n      def(\"TSExternalModuleReference\")\n    )\n  );\n  def(\"TSExternalModuleReference\").bases(\"Declaration\").build(\"expression\").field(\"expression\", StringLiteral);\n  def(\"TSExportAssignment\").bases(\"Statement\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"TSNamespaceExportDeclaration\").bases(\"Declaration\").build(\"id\").field(\"id\", def(\"Identifier\"));\n  def(\"TSInterfaceBody\").bases(\"Node\").build(\"body\").field(\"body\", [TSTypeMember]);\n  def(\"TSExpressionWithTypeArguments\").bases(\"TSType\", \"TSHasOptionalTypeParameterInstantiation\").build(\"expression\", \"typeParameters\").field(\"expression\", TSEntityName);\n  def(\"TSInterfaceDeclaration\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"id\", \"body\").field(\"id\", TSEntityName).field(\"declare\", Boolean, defaults[\"false\"]).field(\n    \"extends\",\n    or([def(\"TSExpressionWithTypeArguments\")], null),\n    defaults[\"null\"]\n  ).field(\"body\", def(\"TSInterfaceBody\"));\n  def(\"TSParameterProperty\").bases(\"Pattern\").build(\"parameter\").field(\n    \"accessibility\",\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  ).field(\"readonly\", Boolean, defaults[\"false\"]).field(\"parameter\", or(\n    def(\"Identifier\"),\n    def(\"AssignmentPattern\")\n  ));\n  def(\"ClassProperty\").field(\n    \"access\",\n    // Not \"accessibility\"?\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  );\n  def(\"ClassAccessorProperty\").bases(\"Declaration\", \"TSHasOptionalTypeAnnotation\");\n  def(\"ClassBody\").field(\"body\", [or(\n    def(\"MethodDefinition\"),\n    def(\"VariableDeclarator\"),\n    def(\"ClassPropertyDefinition\"),\n    def(\"ClassProperty\"),\n    def(\"ClassPrivateProperty\"),\n    def(\"ClassAccessorProperty\"),\n    def(\"ClassMethod\"),\n    def(\"ClassPrivateMethod\"),\n    def(\"StaticBlock\"),\n    // Just need to add these types:\n    def(\"TSDeclareMethod\"),\n    TSTypeMember\n  )]);\n}\nmaybeSetModuleExports(() => module);\n\nvar namedTypes$1;\n((namedTypes2) => {\n})(namedTypes$1 || (namedTypes$1 = {}));\n\nconst {\n  astNodesAreEquivalent,\n  builders: builders$1,\n  builtInTypes,\n  defineMethod,\n  eachField,\n  finalize,\n  getBuilderName,\n  getFieldNames,\n  getFieldValue,\n  getSupertypeNames,\n  namedTypes: n$3,\n  NodePath,\n  Path,\n  PathVisitor,\n  someField,\n  Type,\n  use,\n  visit\n} = fork([\n  // Feel free to add to or remove from this list of extension modules to\n  // configure the precise type hierarchy that you need.\n  esProposalsDef,\n  jsxDef,\n  flowDef,\n  esprimaDef,\n  babelDef,\n  typescriptDef\n]);\nObject.assign(namedTypes$1, n$3);\n\nconst n$2 = namedTypes$1;\nconst SourceMapConsumer = sourceMap.SourceMapConsumer;\nconst SourceMapGenerator = sourceMap.SourceMapGenerator;\nconst hasOwn$2 = Object.prototype.hasOwnProperty;\nfunction getLineTerminator() {\n  return \"\\n\";\n}\nfunction getOption(options, key, defaultValue) {\n  if (options && hasOwn$2.call(options, key)) {\n    return options[key];\n  }\n  return defaultValue;\n}\nfunction getUnionOfKeys(...args) {\n  const result = {};\n  const argc = args.length;\n  for (let i = 0; i < argc; ++i) {\n    const keys = Object.keys(args[i]);\n    const keyCount = keys.length;\n    for (let j = 0; j < keyCount; ++j) {\n      result[keys[j]] = true;\n    }\n  }\n  return result;\n}\nfunction comparePos(pos1, pos2) {\n  return pos1.line - pos2.line || pos1.column - pos2.column;\n}\nfunction copyPos(pos) {\n  return {\n    line: pos.line,\n    column: pos.column\n  };\n}\nfunction composeSourceMaps(formerMap, latterMap) {\n  if (formerMap) {\n    if (!latterMap) {\n      return formerMap;\n    }\n  } else {\n    return latterMap || null;\n  }\n  const smcFormer = new SourceMapConsumer(formerMap);\n  const smcLatter = new SourceMapConsumer(latterMap);\n  const smg = new SourceMapGenerator({\n    file: latterMap.file,\n    sourceRoot: latterMap.sourceRoot\n  });\n  const sourcesToContents = {};\n  smcLatter.eachMapping(function(mapping) {\n    const origPos = smcFormer.originalPositionFor({\n      line: mapping.originalLine,\n      column: mapping.originalColumn\n    });\n    const sourceName = origPos.source;\n    if (sourceName === null) {\n      return;\n    }\n    smg.addMapping({\n      source: sourceName,\n      original: copyPos(origPos),\n      generated: {\n        line: mapping.generatedLine,\n        column: mapping.generatedColumn\n      },\n      name: mapping.name\n    });\n    const sourceContent = smcFormer.sourceContentFor(sourceName);\n    if (sourceContent && !hasOwn$2.call(sourcesToContents, sourceName)) {\n      sourcesToContents[sourceName] = sourceContent;\n      smg.setSourceContent(sourceName, sourceContent);\n    }\n  });\n  return smg.toJSON();\n}\nfunction getTrueLoc(node, lines) {\n  if (!node.loc) {\n    return null;\n  }\n  const result = {\n    start: node.loc.start,\n    end: node.loc.end\n  };\n  function include(node2) {\n    expandLoc(result, node2.loc);\n  }\n  if (node.declaration && node.declaration.decorators && isExportDeclaration(node)) {\n    node.declaration.decorators.forEach(include);\n  }\n  if (comparePos(result.start, result.end) < 0) {\n    result.start = copyPos(result.start);\n    lines.skipSpaces(result.start, false, true);\n    if (comparePos(result.start, result.end) < 0) {\n      result.end = copyPos(result.end);\n      lines.skipSpaces(result.end, true, true);\n    }\n  }\n  if (node.comments) {\n    node.comments.forEach(include);\n  }\n  return result;\n}\nfunction expandLoc(parentLoc, childLoc) {\n  if (parentLoc && childLoc) {\n    if (comparePos(childLoc.start, parentLoc.start) < 0) {\n      parentLoc.start = childLoc.start;\n    }\n    if (comparePos(parentLoc.end, childLoc.end) < 0) {\n      parentLoc.end = childLoc.end;\n    }\n  }\n}\nfunction fixFaultyLocations(node, lines) {\n  const loc = node.loc;\n  if (loc) {\n    if (loc.start.line < 1) {\n      loc.start.line = 1;\n    }\n    if (loc.end.line < 1) {\n      loc.end.line = 1;\n    }\n  }\n  if (node.type === \"File\") {\n    loc.start = lines.firstPos();\n    loc.end = lines.lastPos();\n  }\n  fixForLoopHead(node, lines);\n  fixTemplateLiteral(node, lines);\n  if (loc && node.decorators) {\n    node.decorators.forEach(function(decorator) {\n      expandLoc(loc, decorator.loc);\n    });\n  } else if (node.declaration && isExportDeclaration(node)) {\n    node.declaration.loc = null;\n    const decorators = node.declaration.decorators;\n    if (decorators) {\n      decorators.forEach(function(decorator) {\n        expandLoc(loc, decorator.loc);\n      });\n    }\n  } else if (n$2.MethodDefinition && n$2.MethodDefinition.check(node) || n$2.Property.check(node) && (node.method || node.shorthand)) {\n    node.value.loc = null;\n    if (n$2.FunctionExpression.check(node.value)) {\n      node.value.id = null;\n    }\n  } else if (node.type === \"ObjectTypeProperty\") {\n    const loc2 = node.loc;\n    let end = loc2 && loc2.end;\n    if (end) {\n      end = copyPos(end);\n      if (lines.prevPos(end) && lines.charAt(end) === \",\") {\n        if (end = lines.skipSpaces(end, true, true)) {\n          loc2.end = end;\n        }\n      }\n    }\n  }\n}\nfunction fixForLoopHead(node, lines) {\n  if (node.type !== \"ForStatement\") {\n    return;\n  }\n  function fix(child) {\n    const loc = child && child.loc;\n    const start = loc && loc.start;\n    const end = loc && copyPos(loc.end);\n    while (start && end && comparePos(start, end) < 0) {\n      lines.prevPos(end);\n      if (lines.charAt(end) === \";\") {\n        loc.end.line = end.line;\n        loc.end.column = end.column;\n      } else {\n        break;\n      }\n    }\n  }\n  fix(node.init);\n  fix(node.test);\n  fix(node.update);\n}\nfunction fixTemplateLiteral(node, lines) {\n  if (node.type !== \"TemplateLiteral\") {\n    return;\n  }\n  if (node.quasis.length === 0) {\n    return;\n  }\n  if (node.loc) {\n    const afterLeftBackTickPos = copyPos(node.loc.start);\n    const firstQuasi = node.quasis[0];\n    if (comparePos(firstQuasi.loc.start, afterLeftBackTickPos) < 0) {\n      firstQuasi.loc.start = afterLeftBackTickPos;\n    }\n    const rightBackTickPos = copyPos(node.loc.end);\n    const lastQuasi = node.quasis[node.quasis.length - 1];\n    if (comparePos(rightBackTickPos, lastQuasi.loc.end) < 0) {\n      lastQuasi.loc.end = rightBackTickPos;\n    }\n  }\n  node.expressions.forEach(function(expr, i) {\n    const dollarCurlyPos = lines.skipSpaces(expr.loc.start, true, false);\n    if (lines.prevPos(dollarCurlyPos) && lines.charAt(dollarCurlyPos) === \"{\" && lines.prevPos(dollarCurlyPos) && lines.charAt(dollarCurlyPos) === \"$\") {\n      const quasiBefore = node.quasis[i];\n      if (comparePos(dollarCurlyPos, quasiBefore.loc.end) < 0) {\n        quasiBefore.loc.end = dollarCurlyPos;\n      }\n    }\n    const rightCurlyPos = lines.skipSpaces(expr.loc.end, false, false);\n    if (lines.charAt(rightCurlyPos) === \"}\") {\n      const quasiAfter = node.quasis[i + 1];\n      if (comparePos(quasiAfter.loc.start, rightCurlyPos) < 0) {\n        quasiAfter.loc.start = rightCurlyPos;\n      }\n    }\n  });\n}\nfunction isExportDeclaration(node) {\n  if (node)\n    switch (node.type) {\n      case \"ExportDeclaration\":\n      case \"ExportDefaultDeclaration\":\n      case \"ExportDefaultSpecifier\":\n      case \"DeclareExportDeclaration\":\n      case \"ExportNamedDeclaration\":\n      case \"ExportAllDeclaration\":\n        return true;\n    }\n  return false;\n}\nfunction getParentExportDeclaration(path) {\n  const parentNode = path.getParentNode();\n  if (path.getName() === \"declaration\" && isExportDeclaration(parentNode)) {\n    return parentNode;\n  }\n  return null;\n}\nfunction isTrailingCommaEnabled(options, context) {\n  const trailingComma = options.trailingComma;\n  if (typeof trailingComma === \"object\") {\n    return !!trailingComma[context];\n  }\n  return !!trailingComma;\n}\n\nconst defaults = {\n  tabWidth: 4,\n  useTabs: false,\n  reuseWhitespace: true,\n  lineTerminator: getLineTerminator(),\n  wrapColumn: 74,\n  // Aspirational for now.\n  sourceFileName: null,\n  sourceMapName: null,\n  sourceRoot: null,\n  inputSourceMap: null,\n  range: false,\n  tolerant: true,\n  quote: null,\n  trailingComma: false,\n  arrayBracketSpacing: false,\n  objectCurlySpacing: true,\n  arrowParensAlways: false,\n  flowObjectCommas: true,\n  tokens: true\n};\nconst hasOwn$1 = defaults.hasOwnProperty;\nfunction normalize(opts) {\n  const options = opts || defaults;\n  function get(key) {\n    return hasOwn$1.call(options, key) ? options[key] : defaults[key];\n  }\n  return {\n    tabWidth: +get(\"tabWidth\"),\n    useTabs: !!get(\"useTabs\"),\n    reuseWhitespace: !!get(\"reuseWhitespace\"),\n    lineTerminator: get(\"lineTerminator\"),\n    wrapColumn: Math.max(get(\"wrapColumn\"), 0),\n    sourceFileName: get(\"sourceFileName\"),\n    sourceMapName: get(\"sourceMapName\"),\n    sourceRoot: get(\"sourceRoot\"),\n    inputSourceMap: get(\"inputSourceMap\"),\n    parser: get(\"esprima\") || get(\"parser\"),\n    range: get(\"range\"),\n    tolerant: get(\"tolerant\"),\n    quote: get(\"quote\"),\n    trailingComma: get(\"trailingComma\"),\n    arrayBracketSpacing: get(\"arrayBracketSpacing\"),\n    objectCurlySpacing: get(\"objectCurlySpacing\"),\n    arrowParensAlways: get(\"arrowParensAlways\"),\n    flowObjectCommas: get(\"flowObjectCommas\"),\n    tokens: !!get(\"tokens\")\n  };\n}\n\nclass Mapping {\n  constructor(sourceLines, sourceLoc, targetLoc = sourceLoc) {\n    this.sourceLines = sourceLines;\n    this.sourceLoc = sourceLoc;\n    this.targetLoc = targetLoc;\n  }\n  slice(lines, start, end = lines.lastPos()) {\n    const sourceLines = this.sourceLines;\n    let sourceLoc = this.sourceLoc;\n    let targetLoc = this.targetLoc;\n    function skip(name) {\n      const sourceFromPos = sourceLoc[name];\n      const targetFromPos = targetLoc[name];\n      let targetToPos = start;\n      if (name === \"end\") {\n        targetToPos = end;\n      }\n      return skipChars(\n        sourceLines,\n        sourceFromPos,\n        lines,\n        targetFromPos,\n        targetToPos\n      );\n    }\n    if (comparePos(start, targetLoc.start) <= 0) {\n      if (comparePos(targetLoc.end, end) <= 0) {\n        targetLoc = {\n          start: subtractPos(targetLoc.start, start.line, start.column),\n          end: subtractPos(targetLoc.end, start.line, start.column)\n        };\n      } else if (comparePos(end, targetLoc.start) <= 0) {\n        return null;\n      } else {\n        sourceLoc = {\n          start: sourceLoc.start,\n          end: skip(\"end\")\n        };\n        targetLoc = {\n          start: subtractPos(targetLoc.start, start.line, start.column),\n          end: subtractPos(end, start.line, start.column)\n        };\n      }\n    } else {\n      if (comparePos(targetLoc.end, start) <= 0) {\n        return null;\n      }\n      if (comparePos(targetLoc.end, end) <= 0) {\n        sourceLoc = {\n          start: skip(\"start\"),\n          end: sourceLoc.end\n        };\n        targetLoc = {\n          // Same as subtractPos(start, start.line, start.column):\n          start: { line: 1, column: 0 },\n          end: subtractPos(targetLoc.end, start.line, start.column)\n        };\n      } else {\n        sourceLoc = {\n          start: skip(\"start\"),\n          end: skip(\"end\")\n        };\n        targetLoc = {\n          // Same as subtractPos(start, start.line, start.column):\n          start: { line: 1, column: 0 },\n          end: subtractPos(end, start.line, start.column)\n        };\n      }\n    }\n    return new Mapping(this.sourceLines, sourceLoc, targetLoc);\n  }\n  add(line, column) {\n    return new Mapping(this.sourceLines, this.sourceLoc, {\n      start: addPos(this.targetLoc.start, line, column),\n      end: addPos(this.targetLoc.end, line, column)\n    });\n  }\n  subtract(line, column) {\n    return new Mapping(this.sourceLines, this.sourceLoc, {\n      start: subtractPos(this.targetLoc.start, line, column),\n      end: subtractPos(this.targetLoc.end, line, column)\n    });\n  }\n  indent(by, skipFirstLine = false, noNegativeColumns = false) {\n    if (by === 0) {\n      return this;\n    }\n    let targetLoc = this.targetLoc;\n    const startLine = targetLoc.start.line;\n    const endLine = targetLoc.end.line;\n    if (skipFirstLine && startLine === 1 && endLine === 1) {\n      return this;\n    }\n    targetLoc = {\n      start: targetLoc.start,\n      end: targetLoc.end\n    };\n    if (!skipFirstLine || startLine > 1) {\n      const startColumn = targetLoc.start.column + by;\n      targetLoc.start = {\n        line: startLine,\n        column: noNegativeColumns ? Math.max(0, startColumn) : startColumn\n      };\n    }\n    if (!skipFirstLine || endLine > 1) {\n      const endColumn = targetLoc.end.column + by;\n      targetLoc.end = {\n        line: endLine,\n        column: noNegativeColumns ? Math.max(0, endColumn) : endColumn\n      };\n    }\n    return new Mapping(this.sourceLines, this.sourceLoc, targetLoc);\n  }\n}\nfunction addPos(toPos, line, column) {\n  return {\n    line: toPos.line + line - 1,\n    column: toPos.line === 1 ? toPos.column + column : toPos.column\n  };\n}\nfunction subtractPos(fromPos, line, column) {\n  return {\n    line: fromPos.line - line + 1,\n    column: fromPos.line === line ? fromPos.column - column : fromPos.column\n  };\n}\nfunction skipChars(sourceLines, sourceFromPos, targetLines, targetFromPos, targetToPos) {\n  const targetComparison = comparePos(targetFromPos, targetToPos);\n  if (targetComparison === 0) {\n    return sourceFromPos;\n  }\n  let sourceCursor, targetCursor;\n  if (targetComparison < 0) {\n    sourceCursor = sourceLines.skipSpaces(sourceFromPos) || sourceLines.lastPos();\n    targetCursor = targetLines.skipSpaces(targetFromPos) || targetLines.lastPos();\n    const lineDiff = targetToPos.line - targetCursor.line;\n    sourceCursor.line += lineDiff;\n    targetCursor.line += lineDiff;\n    if (lineDiff > 0) {\n      sourceCursor.column = 0;\n      targetCursor.column = 0;\n    }\n    while (comparePos(targetCursor, targetToPos) < 0 && targetLines.nextPos(targetCursor, true)) {\n    }\n  } else {\n    sourceCursor = sourceLines.skipSpaces(sourceFromPos, true) || sourceLines.firstPos();\n    targetCursor = targetLines.skipSpaces(targetFromPos, true) || targetLines.firstPos();\n    const lineDiff = targetToPos.line - targetCursor.line;\n    sourceCursor.line += lineDiff;\n    targetCursor.line += lineDiff;\n    if (lineDiff < 0) {\n      sourceCursor.column = sourceLines.getLineLength(sourceCursor.line);\n      targetCursor.column = targetLines.getLineLength(targetCursor.line);\n    }\n    while (comparePos(targetToPos, targetCursor) < 0 && targetLines.prevPos(targetCursor, true)) {\n    }\n  }\n  return sourceCursor;\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => {\n  __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass Lines {\n  constructor(infos, sourceFileName = null) {\n    this.infos = infos;\n    __publicField$1(this, \"length\");\n    __publicField$1(this, \"name\");\n    __publicField$1(this, \"mappings\", []);\n    __publicField$1(this, \"cachedSourceMap\", null);\n    __publicField$1(this, \"cachedTabWidth\");\n    this.length = infos.length;\n    this.name = sourceFileName || null;\n    if (this.name) {\n      this.mappings.push(\n        new Mapping(this, {\n          start: this.firstPos(),\n          end: this.lastPos()\n        })\n      );\n    }\n  }\n  toString(options) {\n    return this.sliceString(this.firstPos(), this.lastPos(), options);\n  }\n  getSourceMap(sourceMapName, sourceRoot) {\n    if (!sourceMapName) {\n      return null;\n    }\n    const targetLines = this;\n    function updateJSON(json) {\n      json = json || {};\n      json.file = sourceMapName;\n      if (sourceRoot) {\n        json.sourceRoot = sourceRoot;\n      }\n      return json;\n    }\n    if (targetLines.cachedSourceMap) {\n      return updateJSON(targetLines.cachedSourceMap.toJSON());\n    }\n    const smg = new sourceMap.SourceMapGenerator(updateJSON());\n    const sourcesToContents = {};\n    targetLines.mappings.forEach(function(mapping) {\n      const sourceCursor = mapping.sourceLines.skipSpaces(mapping.sourceLoc.start) || mapping.sourceLines.lastPos();\n      const targetCursor = targetLines.skipSpaces(mapping.targetLoc.start) || targetLines.lastPos();\n      while (comparePos(sourceCursor, mapping.sourceLoc.end) < 0 && comparePos(targetCursor, mapping.targetLoc.end) < 0) {\n        mapping.sourceLines.charAt(sourceCursor);\n        targetLines.charAt(targetCursor);\n        const sourceName = mapping.sourceLines.name;\n        smg.addMapping({\n          source: sourceName,\n          original: { line: sourceCursor.line, column: sourceCursor.column },\n          generated: { line: targetCursor.line, column: targetCursor.column }\n        });\n        if (!hasOwn.call(sourcesToContents, sourceName)) {\n          const sourceContent = mapping.sourceLines.toString();\n          smg.setSourceContent(sourceName, sourceContent);\n          sourcesToContents[sourceName] = sourceContent;\n        }\n        targetLines.nextPos(targetCursor, true);\n        mapping.sourceLines.nextPos(sourceCursor, true);\n      }\n    });\n    targetLines.cachedSourceMap = smg;\n    return smg.toJSON();\n  }\n  bootstrapCharAt(pos) {\n    const line = pos.line, column = pos.column, strings = this.toString().split(lineTerminatorSeqExp), string = strings[line - 1];\n    if (typeof string === \"undefined\")\n      return \"\";\n    if (column === string.length && line < strings.length)\n      return \"\\n\";\n    if (column >= string.length)\n      return \"\";\n    return string.charAt(column);\n  }\n  charAt(pos) {\n    let line = pos.line, column = pos.column, secret = this, infos = secret.infos, info = infos[line - 1], c = column;\n    if (typeof info === \"undefined\" || c < 0)\n      return \"\";\n    const indent = this.getIndentAt(line);\n    if (c < indent)\n      return \" \";\n    c += info.sliceStart - indent;\n    if (c === info.sliceEnd && line < this.length)\n      return \"\\n\";\n    if (c >= info.sliceEnd)\n      return \"\";\n    return info.line.charAt(c);\n  }\n  stripMargin(width, skipFirstLine) {\n    if (width === 0)\n      return this;\n    if (skipFirstLine && this.length === 1)\n      return this;\n    const lines = new Lines(\n      this.infos.map(function(info, i) {\n        if (info.line && (i > 0 || !skipFirstLine)) {\n          info = {\n            ...info,\n            indent: Math.max(0, info.indent - width)\n          };\n        }\n        return info;\n      })\n    );\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        newMappings.push(mapping.indent(width, skipFirstLine, true));\n      });\n    }\n    return lines;\n  }\n  indent(by) {\n    if (by === 0) {\n      return this;\n    }\n    const lines = new Lines(\n      this.infos.map(function(info) {\n        if (info.line && !info.locked) {\n          info = {\n            ...info,\n            indent: info.indent + by\n          };\n        }\n        return info;\n      })\n    );\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        newMappings.push(mapping.indent(by));\n      });\n    }\n    return lines;\n  }\n  indentTail(by) {\n    if (by === 0) {\n      return this;\n    }\n    if (this.length < 2) {\n      return this;\n    }\n    const lines = new Lines(\n      this.infos.map(function(info, i) {\n        if (i > 0 && info.line && !info.locked) {\n          info = {\n            ...info,\n            indent: info.indent + by\n          };\n        }\n        return info;\n      })\n    );\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        newMappings.push(mapping.indent(by, true));\n      });\n    }\n    return lines;\n  }\n  lockIndentTail() {\n    if (this.length < 2) {\n      return this;\n    }\n    return new Lines(\n      this.infos.map((info, i) => ({\n        ...info,\n        locked: i > 0\n      }))\n    );\n  }\n  getIndentAt(line) {\n    return Math.max(this.infos[line - 1].indent, 0);\n  }\n  guessTabWidth() {\n    if (typeof this.cachedTabWidth === \"number\") {\n      return this.cachedTabWidth;\n    }\n    const counts = [];\n    let lastIndent = 0;\n    for (let line = 1, last = this.length; line <= last; ++line) {\n      const info = this.infos[line - 1];\n      const sliced = info.line.slice(info.sliceStart, info.sliceEnd);\n      if (isOnlyWhitespace(sliced)) {\n        continue;\n      }\n      const diff = Math.abs(info.indent - lastIndent);\n      counts[diff] = ~~counts[diff] + 1;\n      lastIndent = info.indent;\n    }\n    let maxCount = -1;\n    let result = 2;\n    for (let tabWidth = 1; tabWidth < counts.length; tabWidth += 1) {\n      if (hasOwn.call(counts, tabWidth) && counts[tabWidth] > maxCount) {\n        maxCount = counts[tabWidth];\n        result = tabWidth;\n      }\n    }\n    return this.cachedTabWidth = result;\n  }\n  // Determine if the list of lines has a first line that starts with a //\n  // or /* comment. If this is the case, the code may need to be wrapped in\n  // parens to avoid ASI issues.\n  startsWithComment() {\n    if (this.infos.length === 0) {\n      return false;\n    }\n    const firstLineInfo = this.infos[0], sliceStart = firstLineInfo.sliceStart, sliceEnd = firstLineInfo.sliceEnd, firstLine = firstLineInfo.line.slice(sliceStart, sliceEnd).trim();\n    return firstLine.length === 0 || firstLine.slice(0, 2) === \"//\" || firstLine.slice(0, 2) === \"/*\";\n  }\n  isOnlyWhitespace() {\n    return isOnlyWhitespace(this.toString());\n  }\n  isPrecededOnlyByWhitespace(pos) {\n    const info = this.infos[pos.line - 1];\n    const indent = Math.max(info.indent, 0);\n    const diff = pos.column - indent;\n    if (diff <= 0) {\n      return true;\n    }\n    const start = info.sliceStart;\n    const end = Math.min(start + diff, info.sliceEnd);\n    const prefix = info.line.slice(start, end);\n    return isOnlyWhitespace(prefix);\n  }\n  getLineLength(line) {\n    const info = this.infos[line - 1];\n    return this.getIndentAt(line) + info.sliceEnd - info.sliceStart;\n  }\n  nextPos(pos, skipSpaces = false) {\n    const l = Math.max(pos.line, 0), c = Math.max(pos.column, 0);\n    if (c < this.getLineLength(l)) {\n      pos.column += 1;\n      return skipSpaces ? !!this.skipSpaces(pos, false, true) : true;\n    }\n    if (l < this.length) {\n      pos.line += 1;\n      pos.column = 0;\n      return skipSpaces ? !!this.skipSpaces(pos, false, true) : true;\n    }\n    return false;\n  }\n  prevPos(pos, skipSpaces = false) {\n    let l = pos.line, c = pos.column;\n    if (c < 1) {\n      l -= 1;\n      if (l < 1)\n        return false;\n      c = this.getLineLength(l);\n    } else {\n      c = Math.min(c - 1, this.getLineLength(l));\n    }\n    pos.line = l;\n    pos.column = c;\n    return skipSpaces ? !!this.skipSpaces(pos, true, true) : true;\n  }\n  firstPos() {\n    return { line: 1, column: 0 };\n  }\n  lastPos() {\n    return {\n      line: this.length,\n      column: this.getLineLength(this.length)\n    };\n  }\n  skipSpaces(pos, backward = false, modifyInPlace = false) {\n    if (pos) {\n      pos = modifyInPlace ? pos : {\n        line: pos.line,\n        column: pos.column\n      };\n    } else if (backward) {\n      pos = this.lastPos();\n    } else {\n      pos = this.firstPos();\n    }\n    if (backward) {\n      while (this.prevPos(pos)) {\n        if (!isOnlyWhitespace(this.charAt(pos)) && this.nextPos(pos)) {\n          return pos;\n        }\n      }\n      return null;\n    } else {\n      while (isOnlyWhitespace(this.charAt(pos))) {\n        if (!this.nextPos(pos)) {\n          return null;\n        }\n      }\n      return pos;\n    }\n  }\n  trimLeft() {\n    const pos = this.skipSpaces(this.firstPos(), false, true);\n    return pos ? this.slice(pos) : emptyLines;\n  }\n  trimRight() {\n    const pos = this.skipSpaces(this.lastPos(), true, true);\n    return pos ? this.slice(this.firstPos(), pos) : emptyLines;\n  }\n  trim() {\n    const start = this.skipSpaces(this.firstPos(), false, true);\n    if (start === null) {\n      return emptyLines;\n    }\n    const end = this.skipSpaces(this.lastPos(), true, true);\n    if (end === null) {\n      return emptyLines;\n    }\n    return this.slice(start, end);\n  }\n  eachPos(callback, startPos = this.firstPos(), skipSpaces = false) {\n    const pos = this.firstPos();\n    if (startPos) {\n      pos.line = startPos.line, pos.column = startPos.column;\n    }\n    if (skipSpaces && !this.skipSpaces(pos, false, true)) {\n      return;\n    }\n    do\n      callback.call(this, pos);\n    while (this.nextPos(pos, skipSpaces));\n  }\n  bootstrapSlice(start, end) {\n    const strings = this.toString().split(lineTerminatorSeqExp).slice(start.line - 1, end.line);\n    if (strings.length > 0) {\n      strings.push(strings.pop().slice(0, end.column));\n      strings[0] = strings[0].slice(start.column);\n    }\n    return fromString(strings.join(\"\\n\"));\n  }\n  slice(start, end) {\n    if (!end) {\n      if (!start) {\n        return this;\n      }\n      end = this.lastPos();\n    }\n    if (!start) {\n      throw new Error(\"cannot slice with end but not start\");\n    }\n    const sliced = this.infos.slice(start.line - 1, end.line);\n    if (start.line === end.line) {\n      sliced[0] = sliceInfo(sliced[0], start.column, end.column);\n    } else {\n      sliced[0] = sliceInfo(sliced[0], start.column);\n      sliced.push(sliceInfo(sliced.pop(), 0, end.column));\n    }\n    const lines = new Lines(sliced);\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        const sliced2 = mapping.slice(this, start, end);\n        if (sliced2) {\n          newMappings.push(sliced2);\n        }\n      }, this);\n    }\n    return lines;\n  }\n  bootstrapSliceString(start, end, options) {\n    return this.slice(start, end).toString(options);\n  }\n  sliceString(start = this.firstPos(), end = this.lastPos(), options) {\n    const { tabWidth, useTabs, reuseWhitespace, lineTerminator } = normalize(options);\n    const parts = [];\n    for (let line = start.line; line <= end.line; ++line) {\n      let info = this.infos[line - 1];\n      if (line === start.line) {\n        if (line === end.line) {\n          info = sliceInfo(info, start.column, end.column);\n        } else {\n          info = sliceInfo(info, start.column);\n        }\n      } else if (line === end.line) {\n        info = sliceInfo(info, 0, end.column);\n      }\n      const indent = Math.max(info.indent, 0);\n      const before = info.line.slice(0, info.sliceStart);\n      if (reuseWhitespace && isOnlyWhitespace(before) && countSpaces(before, tabWidth) === indent) {\n        parts.push(info.line.slice(0, info.sliceEnd));\n        continue;\n      }\n      let tabs = 0;\n      let spaces = indent;\n      if (useTabs) {\n        tabs = Math.floor(indent / tabWidth);\n        spaces -= tabs * tabWidth;\n      }\n      let result = \"\";\n      if (tabs > 0) {\n        result += new Array(tabs + 1).join(\"\t\");\n      }\n      if (spaces > 0) {\n        result += new Array(spaces + 1).join(\" \");\n      }\n      result += info.line.slice(info.sliceStart, info.sliceEnd);\n      parts.push(result);\n    }\n    return parts.join(lineTerminator);\n  }\n  isEmpty() {\n    return this.length < 2 && this.getLineLength(1) < 1;\n  }\n  join(elements) {\n    const separator = this;\n    const infos = [];\n    const mappings = [];\n    let prevInfo;\n    function appendLines(linesOrNull) {\n      if (linesOrNull === null) {\n        return;\n      }\n      if (prevInfo) {\n        const info = linesOrNull.infos[0];\n        const indent = new Array(info.indent + 1).join(\" \");\n        const prevLine = infos.length;\n        const prevColumn = Math.max(prevInfo.indent, 0) + prevInfo.sliceEnd - prevInfo.sliceStart;\n        prevInfo.line = prevInfo.line.slice(0, prevInfo.sliceEnd) + indent + info.line.slice(info.sliceStart, info.sliceEnd);\n        prevInfo.locked = prevInfo.locked || info.locked;\n        prevInfo.sliceEnd = prevInfo.line.length;\n        if (linesOrNull.mappings.length > 0) {\n          linesOrNull.mappings.forEach(function(mapping) {\n            mappings.push(mapping.add(prevLine, prevColumn));\n          });\n        }\n      } else if (linesOrNull.mappings.length > 0) {\n        mappings.push.apply(mappings, linesOrNull.mappings);\n      }\n      linesOrNull.infos.forEach(function(info, i) {\n        if (!prevInfo || i > 0) {\n          prevInfo = { ...info };\n          infos.push(prevInfo);\n        }\n      });\n    }\n    function appendWithSeparator(linesOrNull, i) {\n      if (i > 0)\n        appendLines(separator);\n      appendLines(linesOrNull);\n    }\n    elements.map(function(elem) {\n      const lines2 = fromString(elem);\n      if (lines2.isEmpty())\n        return null;\n      return lines2;\n    }).forEach((linesOrNull, i) => {\n      if (separator.isEmpty()) {\n        appendLines(linesOrNull);\n      } else {\n        appendWithSeparator(linesOrNull, i);\n      }\n    });\n    if (infos.length < 1)\n      return emptyLines;\n    const lines = new Lines(infos);\n    lines.mappings = mappings;\n    return lines;\n  }\n  concat(...args) {\n    const list = [this];\n    list.push.apply(list, args);\n    return emptyLines.join(list);\n  }\n}\nconst fromStringCache = {};\nconst hasOwn = fromStringCache.hasOwnProperty;\nconst maxCacheKeyLen = 10;\nfunction countSpaces(spaces, tabWidth) {\n  let count = 0;\n  const len = spaces.length;\n  for (let i = 0; i < len; ++i) {\n    switch (spaces.charCodeAt(i)) {\n      case 9: {\n        const next = Math.ceil(count / tabWidth) * tabWidth;\n        if (next === count) {\n          count += tabWidth;\n        } else {\n          count = next;\n        }\n        break;\n      }\n      case 11:\n      case 12:\n      case 13:\n      case 65279:\n        break;\n      case 32:\n      default:\n        count += 1;\n        break;\n    }\n  }\n  return count;\n}\nconst leadingSpaceExp = /^\\s*/;\nconst lineTerminatorSeqExp = /\\u000D\\u000A|\\u000D(?!\\u000A)|\\u000A|\\u2028|\\u2029/;\nfunction fromString(string, options) {\n  if (string instanceof Lines)\n    return string;\n  string += \"\";\n  const tabWidth = options && options.tabWidth;\n  const tabless = string.indexOf(\"\t\") < 0;\n  const cacheable = !options && tabless && string.length <= maxCacheKeyLen;\n  if (cacheable && hasOwn.call(fromStringCache, string))\n    return fromStringCache[string];\n  const lines = new Lines(\n    string.split(lineTerminatorSeqExp).map(function(line) {\n      const spaces = leadingSpaceExp.exec(line)[0];\n      return {\n        line,\n        indent: countSpaces(spaces, tabWidth),\n        // Boolean indicating whether this line can be reindented.\n        locked: false,\n        sliceStart: spaces.length,\n        sliceEnd: line.length\n      };\n    }),\n    normalize(options).sourceFileName\n  );\n  if (cacheable)\n    fromStringCache[string] = lines;\n  return lines;\n}\nfunction isOnlyWhitespace(string) {\n  return !/\\S/.test(string);\n}\nfunction sliceInfo(info, startCol, endCol) {\n  let sliceStart = info.sliceStart;\n  let sliceEnd = info.sliceEnd;\n  let indent = Math.max(info.indent, 0);\n  let lineLength = indent + sliceEnd - sliceStart;\n  if (typeof endCol === \"undefined\") {\n    endCol = lineLength;\n  }\n  startCol = Math.max(startCol, 0);\n  endCol = Math.min(endCol, lineLength);\n  endCol = Math.max(endCol, startCol);\n  if (endCol < indent) {\n    indent = endCol;\n    sliceEnd = sliceStart;\n  } else {\n    sliceEnd -= lineLength - endCol;\n  }\n  lineLength = endCol;\n  lineLength -= startCol;\n  if (startCol < indent) {\n    indent -= startCol;\n  } else {\n    startCol -= indent;\n    indent = 0;\n    sliceStart += startCol;\n  }\n  if (info.indent === indent && info.sliceStart === sliceStart && info.sliceEnd === sliceEnd) {\n    return info;\n  }\n  return {\n    line: info.line,\n    indent,\n    // A destructive slice always unlocks indentation.\n    locked: false,\n    sliceStart,\n    sliceEnd\n  };\n}\nfunction concat(elements) {\n  return emptyLines.join(elements);\n}\nconst emptyLines = fromString(\"\");\n\nconst n$1 = namedTypes$1;\nconst isArray$3 = builtInTypes.array;\nconst isObject$3 = builtInTypes.object;\nconst childNodesCache = /* @__PURE__ */ new WeakMap();\nfunction getSortedChildNodes(node, lines, resultArray) {\n  if (!node) {\n    return resultArray;\n  }\n  fixFaultyLocations(node, lines);\n  if (resultArray) {\n    if (n$1.Node.check(node) && n$1.SourceLocation.check(node.loc)) {\n      let i = resultArray.length - 1;\n      for (; i >= 0; --i) {\n        const child = resultArray[i];\n        if (child && child.loc && comparePos(child.loc.end, node.loc.start) <= 0) {\n          break;\n        }\n      }\n      resultArray.splice(i + 1, 0, node);\n      return resultArray;\n    }\n  } else {\n    const childNodes = childNodesCache.get(node);\n    if (childNodes) {\n      return childNodes;\n    }\n  }\n  let names;\n  if (isArray$3.check(node)) {\n    names = Object.keys(node);\n  } else if (isObject$3.check(node)) {\n    names = getFieldNames(node);\n  } else {\n    return resultArray;\n  }\n  if (!resultArray) {\n    childNodesCache.set(node, resultArray = []);\n  }\n  for (let i = 0, nameCount = names.length; i < nameCount; ++i) {\n    getSortedChildNodes(node[names[i]], lines, resultArray);\n  }\n  return resultArray;\n}\nfunction decorateComment(node, comment, lines) {\n  const childNodes = getSortedChildNodes(node, lines);\n  let left = 0;\n  let right = childNodes && childNodes.length;\n  let precedingNode;\n  let followingNode;\n  while (typeof right === \"number\" && left < right) {\n    const middle = left + right >> 1;\n    const child = childNodes[middle];\n    if (comparePos(child.loc.start, comment.loc.start) <= 0 && comparePos(comment.loc.end, child.loc.end) <= 0) {\n      decorateComment(comment.enclosingNode = child, comment, lines);\n      return;\n    }\n    if (comparePos(child.loc.end, comment.loc.start) <= 0) {\n      precedingNode = child;\n      left = middle + 1;\n      continue;\n    }\n    if (comparePos(comment.loc.end, child.loc.start) <= 0) {\n      followingNode = child;\n      right = middle;\n      continue;\n    }\n    throw new Error(\"Comment location overlaps with node location\");\n  }\n  if (precedingNode) {\n    comment.precedingNode = precedingNode;\n  }\n  if (followingNode) {\n    comment.followingNode = followingNode;\n  }\n}\nfunction attach(comments, ast, lines) {\n  if (!isArray$3.check(comments)) {\n    return;\n  }\n  const tiesToBreak = [];\n  comments.forEach(function(comment) {\n    comment.loc.lines = lines;\n    decorateComment(ast, comment, lines);\n    const pn = comment.precedingNode;\n    const en = comment.enclosingNode;\n    const fn = comment.followingNode;\n    if (pn && fn) {\n      const tieCount = tiesToBreak.length;\n      if (tieCount > 0) {\n        const lastTie = tiesToBreak[tieCount - 1];\n        if (lastTie.followingNode !== comment.followingNode) {\n          breakTies(tiesToBreak, lines);\n        }\n      }\n      tiesToBreak.push(comment);\n    } else if (pn) {\n      breakTies(tiesToBreak, lines);\n      addTrailingComment(pn, comment);\n    } else if (fn) {\n      breakTies(tiesToBreak, lines);\n      addLeadingComment(fn, comment);\n    } else if (en) {\n      breakTies(tiesToBreak, lines);\n      addDanglingComment(en, comment);\n    } else {\n      throw new Error(\"AST contains no nodes at all?\");\n    }\n  });\n  breakTies(tiesToBreak, lines);\n  comments.forEach(function(comment) {\n    delete comment.precedingNode;\n    delete comment.enclosingNode;\n    delete comment.followingNode;\n  });\n}\nfunction breakTies(tiesToBreak, lines) {\n  const tieCount = tiesToBreak.length;\n  if (tieCount === 0) {\n    return;\n  }\n  const pn = tiesToBreak[0].precedingNode;\n  const fn = tiesToBreak[0].followingNode;\n  let gapEndPos = fn.loc.start;\n  let indexOfFirstLeadingComment = tieCount;\n  let comment;\n  for (; indexOfFirstLeadingComment > 0; --indexOfFirstLeadingComment) {\n    comment = tiesToBreak[indexOfFirstLeadingComment - 1];\n    const gap = lines.sliceString(comment.loc.end, gapEndPos);\n    if (/\\S/.test(gap)) {\n      break;\n    }\n    gapEndPos = comment.loc.start;\n  }\n  while (indexOfFirstLeadingComment <= tieCount && (comment = tiesToBreak[indexOfFirstLeadingComment]) && // If the comment is a //-style comment and indented more\n  // deeply than the node itself, reconsider it as trailing.\n  (comment.type === \"Line\" || comment.type === \"CommentLine\") && comment.loc.start.column > fn.loc.start.column) {\n    ++indexOfFirstLeadingComment;\n  }\n  if (indexOfFirstLeadingComment) {\n    const { enclosingNode } = tiesToBreak[indexOfFirstLeadingComment - 1];\n    if (enclosingNode?.type === \"CallExpression\") {\n      --indexOfFirstLeadingComment;\n    }\n  }\n  tiesToBreak.forEach(function(comment2, i) {\n    if (i < indexOfFirstLeadingComment) {\n      addTrailingComment(pn, comment2);\n    } else {\n      addLeadingComment(fn, comment2);\n    }\n  });\n  tiesToBreak.length = 0;\n}\nfunction addCommentHelper(node, comment) {\n  const comments = node.comments || (node.comments = []);\n  comments.push(comment);\n}\nfunction addLeadingComment(node, comment) {\n  comment.leading = true;\n  comment.trailing = false;\n  addCommentHelper(node, comment);\n}\nfunction addDanglingComment(node, comment) {\n  comment.leading = false;\n  comment.trailing = false;\n  addCommentHelper(node, comment);\n}\nfunction addTrailingComment(node, comment) {\n  comment.leading = false;\n  comment.trailing = true;\n  addCommentHelper(node, comment);\n}\nfunction printLeadingComment(commentPath, print) {\n  const comment = commentPath.getValue();\n  n$1.Comment.assert(comment);\n  const loc = comment.loc;\n  const lines = loc && loc.lines;\n  const parts = [print(commentPath)];\n  if (comment.trailing) {\n    parts.push(\"\\n\");\n  } else if (lines instanceof Lines) {\n    const trailingSpace = lines.slice(\n      loc.end,\n      lines.skipSpaces(loc.end) || lines.lastPos()\n    );\n    if (trailingSpace.length === 1) {\n      parts.push(trailingSpace);\n    } else {\n      parts.push(new Array(trailingSpace.length).join(\"\\n\"));\n    }\n  } else {\n    parts.push(\"\\n\");\n  }\n  return concat(parts);\n}\nfunction printTrailingComment(commentPath, print) {\n  const comment = commentPath.getValue(commentPath);\n  n$1.Comment.assert(comment);\n  const loc = comment.loc;\n  const lines = loc && loc.lines;\n  const parts = [];\n  if (lines instanceof Lines) {\n    const fromPos = lines.skipSpaces(loc.start, true) || lines.firstPos();\n    const leadingSpace = lines.slice(fromPos, loc.start);\n    if (leadingSpace.length === 1) {\n      parts.push(leadingSpace);\n    } else {\n      parts.push(new Array(leadingSpace.length).join(\"\\n\"));\n    }\n  }\n  parts.push(print(commentPath));\n  return concat(parts);\n}\nfunction printComments(path, print) {\n  const value = path.getValue();\n  const innerLines = print(path);\n  const comments = n$1.Node.check(value) && getFieldValue(value, \"comments\");\n  if (!comments || comments.length === 0) {\n    return innerLines;\n  }\n  const leadingParts = [];\n  const trailingParts = [innerLines];\n  path.each(function(commentPath) {\n    const comment = commentPath.getValue();\n    const leading = getFieldValue(comment, \"leading\");\n    const trailing = getFieldValue(comment, \"trailing\");\n    if (leading || trailing && !(n$1.Statement.check(value) || comment.type === \"Block\" || comment.type === \"CommentBlock\")) {\n      leadingParts.push(printLeadingComment(commentPath, print));\n    } else if (trailing) {\n      trailingParts.push(printTrailingComment(commentPath, print));\n    }\n  }, \"comments\");\n  leadingParts.push.apply(leadingParts, trailingParts);\n  return concat(leadingParts);\n}\n\nconst b$5 = builders$1;\nconst isObject$2 = builtInTypes.object;\nconst isArray$2 = builtInTypes.array;\nfunction parse(source, options) {\n  options = normalize(options);\n  const lines = fromString(source, options);\n  const sourceWithoutTabs = lines.toString({\n    tabWidth: options.tabWidth,\n    reuseWhitespace: false,\n    useTabs: false\n  });\n  let comments = [];\n  const ast = options.parser.parse(sourceWithoutTabs, {\n    jsx: true,\n    loc: true,\n    locations: true,\n    range: options.range,\n    comment: true,\n    onComment: comments,\n    tolerant: getOption(options, \"tolerant\", true),\n    ecmaVersion: 6,\n    sourceType: getOption(options, \"sourceType\", \"module\")\n  });\n  const tokens = Array.isArray(ast.tokens) ? ast.tokens : false;\n  delete ast.tokens;\n  tokens.forEach(function(token) {\n    if (typeof token.value !== \"string\") {\n      token.value = lines.sliceString(token.loc.start, token.loc.end);\n    }\n  });\n  if (Array.isArray(ast.comments)) {\n    comments = ast.comments;\n    delete ast.comments;\n  }\n  if (ast.loc) {\n    fixFaultyLocations(ast, lines);\n  } else {\n    ast.loc = {\n      start: lines.firstPos(),\n      end: lines.lastPos()\n    };\n  }\n  ast.loc.lines = lines;\n  ast.loc.indent = 0;\n  let file;\n  let program;\n  if (ast.type === \"Program\") {\n    program = ast;\n    file = b$5.file(ast, options.sourceFileName || null);\n    file.loc = {\n      start: lines.firstPos(),\n      end: lines.lastPos(),\n      lines,\n      indent: 0\n    };\n  } else if (ast.type === \"File\") {\n    file = ast;\n    program = file.program;\n  }\n  if (options.tokens) {\n    file.tokens = tokens;\n  }\n  const trueProgramLoc = getTrueLoc(\n    {\n      type: program.type,\n      loc: program.loc,\n      body: [],\n      comments\n    },\n    lines\n  );\n  program.loc.start = trueProgramLoc.start;\n  program.loc.end = trueProgramLoc.end;\n  attach(comments, program.body.length ? file.program : file, lines);\n  return new TreeCopier(lines, tokens).copy(file);\n}\nconst TreeCopier = function TreeCopier2(lines, tokens) {\n  this.lines = lines;\n  this.tokens = tokens;\n  this.startTokenIndex = 0;\n  this.endTokenIndex = tokens.length;\n  this.indent = 0;\n  this.seen = /* @__PURE__ */ new Map();\n};\nconst TCp = TreeCopier.prototype;\nTCp.copy = function(node) {\n  if (this.seen.has(node)) {\n    return this.seen.get(node);\n  }\n  if (isArray$2.check(node)) {\n    const copy2 = new Array(node.length);\n    this.seen.set(node, copy2);\n    node.forEach(function(item, i) {\n      copy2[i] = this.copy(item);\n    }, this);\n    return copy2;\n  }\n  if (!isObject$2.check(node)) {\n    return node;\n  }\n  fixFaultyLocations(node, this.lines);\n  const copy = Object.create(Object.getPrototypeOf(node), {\n    original: {\n      // Provide a link from the copy to the original.\n      value: node,\n      configurable: false,\n      enumerable: false,\n      writable: true\n    }\n  });\n  this.seen.set(node, copy);\n  const loc = node.loc;\n  const oldIndent = this.indent;\n  let newIndent = oldIndent;\n  const oldStartTokenIndex = this.startTokenIndex;\n  const oldEndTokenIndex = this.endTokenIndex;\n  if (loc) {\n    if (node.type === \"Block\" || node.type === \"Line\" || node.type === \"CommentBlock\" || node.type === \"CommentLine\" || this.lines.isPrecededOnlyByWhitespace(loc.start)) {\n      newIndent = this.indent = loc.start.column;\n    }\n    loc.lines = this.lines;\n    loc.tokens = this.tokens;\n    loc.indent = newIndent;\n    this.findTokenRange(loc);\n  }\n  const keys = Object.keys(node);\n  const keyCount = keys.length;\n  for (let i = 0; i < keyCount; ++i) {\n    const key = keys[i];\n    if (key === \"loc\") {\n      copy[key] = node[key];\n    } else if (key === \"tokens\" && node.type === \"File\") {\n      copy[key] = node[key];\n    } else {\n      copy[key] = this.copy(node[key]);\n    }\n  }\n  this.indent = oldIndent;\n  this.startTokenIndex = oldStartTokenIndex;\n  this.endTokenIndex = oldEndTokenIndex;\n  return copy;\n};\nTCp.findTokenRange = function(loc) {\n  while (this.startTokenIndex > 0) {\n    const token = loc.tokens[this.startTokenIndex];\n    if (comparePos(loc.start, token.loc.start) < 0) {\n      --this.startTokenIndex;\n    } else\n      break;\n  }\n  while (this.endTokenIndex < loc.tokens.length) {\n    const token = loc.tokens[this.endTokenIndex];\n    if (comparePos(token.loc.end, loc.end) < 0) {\n      ++this.endTokenIndex;\n    } else\n      break;\n  }\n  while (this.startTokenIndex < this.endTokenIndex) {\n    const token = loc.tokens[this.startTokenIndex];\n    if (comparePos(token.loc.start, loc.start) < 0) {\n      ++this.startTokenIndex;\n    } else\n      break;\n  }\n  loc.start.token = this.startTokenIndex;\n  while (this.endTokenIndex > this.startTokenIndex) {\n    const token = loc.tokens[this.endTokenIndex - 1];\n    if (comparePos(loc.end, token.loc.end) < 0) {\n      --this.endTokenIndex;\n    } else\n      break;\n  }\n  loc.end.token = this.endTokenIndex;\n};\n\nconst n = namedTypes$1;\nconst isArray$1 = builtInTypes.array;\nconst isNumber = builtInTypes.number;\nconst PRECEDENCE = {};\n[\n  [\"??\"],\n  [\"||\"],\n  [\"&&\"],\n  [\"|\"],\n  [\"^\"],\n  [\"&\"],\n  [\"==\", \"===\", \"!=\", \"!==\"],\n  [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n  [\">>\", \"<<\", \">>>\"],\n  [\"+\", \"-\"],\n  [\"*\", \"/\", \"%\"],\n  [\"**\"]\n].forEach(function(tier, i) {\n  tier.forEach(function(op) {\n    PRECEDENCE[op] = i;\n  });\n});\nconst FastPath = function FastPath2(value) {\n  this.stack = [value];\n};\nconst FPp = FastPath.prototype;\nFastPath.from = function(obj) {\n  if (obj instanceof FastPath) {\n    return obj.copy();\n  }\n  if (obj instanceof NodePath) {\n    const copy2 = Object.create(FastPath.prototype);\n    const stack = [obj.value];\n    for (let pp; pp = obj.parentPath; obj = pp)\n      stack.push(obj.name, pp.value);\n    copy2.stack = stack.reverse();\n    return copy2;\n  }\n  return new FastPath(obj);\n};\nFPp.copy = function copy() {\n  const copy2 = Object.create(FastPath.prototype);\n  copy2.stack = this.stack.slice(0);\n  return copy2;\n};\nFPp.getName = function getName() {\n  const s = this.stack;\n  const len = s.length;\n  if (len > 1) {\n    return s[len - 2];\n  }\n  return null;\n};\nFPp.getValue = function getValue() {\n  const s = this.stack;\n  return s[s.length - 1];\n};\nFPp.valueIsDuplicate = function() {\n  const s = this.stack;\n  const valueIndex = s.length - 1;\n  return s.lastIndexOf(s[valueIndex], valueIndex - 1) >= 0;\n};\nfunction getNodeHelper(path, count) {\n  const s = path.stack;\n  for (let i = s.length - 1; i >= 0; i -= 2) {\n    const value = s[i];\n    if (n.Node.check(value) && --count < 0) {\n      return value;\n    }\n  }\n  return null;\n}\nFPp.getNode = function getNode(count = 0) {\n  return getNodeHelper(this, ~~count);\n};\nFPp.getParentNode = function getParentNode(count = 0) {\n  return getNodeHelper(this, ~~count + 1);\n};\nFPp.getRootValue = function getRootValue() {\n  const s = this.stack;\n  if (s.length % 2 === 0) {\n    return s[1];\n  }\n  return s[0];\n};\nFPp.call = function call(callback) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  const result = callback(this);\n  s.length = origLen;\n  return result;\n};\nFPp.each = function each(callback) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  for (let i = 0; i < value.length; ++i) {\n    if (i in value) {\n      s.push(i, value[i]);\n      callback(this);\n      s.length -= 2;\n    }\n  }\n  s.length = origLen;\n};\nFPp.map = function map(callback) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  const result = new Array(value.length);\n  for (let i = 0; i < value.length; ++i) {\n    if (i in value) {\n      s.push(i, value[i]);\n      result[i] = callback(this, i);\n      s.length -= 2;\n    }\n  }\n  s.length = origLen;\n  return result;\n};\nFPp.hasParens = function() {\n  const node = this.getNode();\n  const prevToken = this.getPrevToken(node);\n  if (!prevToken) {\n    return false;\n  }\n  const nextToken = this.getNextToken(node);\n  if (!nextToken) {\n    return false;\n  }\n  if (prevToken.value === \"(\") {\n    if (nextToken.value === \")\") {\n      return true;\n    }\n    const justNeedsOpeningParen = !this.canBeFirstInStatement() && this.firstInStatement() && !this.needsParens(true);\n    if (justNeedsOpeningParen) {\n      return true;\n    }\n  }\n  return false;\n};\nFPp.getPrevToken = function(node) {\n  node = node || this.getNode();\n  const loc = node && node.loc;\n  const tokens = loc && loc.tokens;\n  if (tokens && loc.start.token > 0) {\n    const token = tokens[loc.start.token - 1];\n    if (token) {\n      const rootLoc = this.getRootValue().loc;\n      if (comparePos(rootLoc.start, token.loc.start) <= 0) {\n        return token;\n      }\n    }\n  }\n  return null;\n};\nFPp.getNextToken = function(node) {\n  node = node || this.getNode();\n  const loc = node && node.loc;\n  const tokens = loc && loc.tokens;\n  if (tokens && loc.end.token < tokens.length) {\n    const token = tokens[loc.end.token];\n    if (token) {\n      const rootLoc = this.getRootValue().loc;\n      if (comparePos(token.loc.end, rootLoc.end) <= 0) {\n        return token;\n      }\n    }\n  }\n  return null;\n};\nFPp.needsParens = function(assumeExpressionContext) {\n  const node = this.getNode();\n  if (node.type === \"AssignmentExpression\" && node.left.type === \"ObjectPattern\") {\n    return true;\n  }\n  const parent = this.getParentNode();\n  const name = this.getName();\n  if (this.getValue() !== node) {\n    return false;\n  }\n  if (n.Statement.check(node)) {\n    return false;\n  }\n  if (node.type === \"Identifier\") {\n    return false;\n  }\n  if (parent && parent.type === \"ParenthesizedExpression\") {\n    return false;\n  }\n  if (node.extra && node.extra.parenthesized) {\n    return true;\n  }\n  if (!parent)\n    return false;\n  if (node.type === \"UnaryExpression\" && parent.type === \"BinaryExpression\" && name === \"left\" && parent.left === node && parent.operator === \"**\") {\n    return true;\n  }\n  switch (node.type) {\n    case \"UnaryExpression\":\n    case \"SpreadElement\":\n    case \"SpreadProperty\":\n      return parent.type === \"MemberExpression\" && name === \"object\" && parent.object === node;\n    case \"BinaryExpression\":\n    case \"LogicalExpression\":\n      switch (parent.type) {\n        case \"CallExpression\":\n          return name === \"callee\" && parent.callee === node;\n        case \"UnaryExpression\":\n        case \"SpreadElement\":\n        case \"SpreadProperty\":\n          return true;\n        case \"MemberExpression\":\n          return name === \"object\" && parent.object === node;\n        case \"BinaryExpression\":\n        case \"LogicalExpression\": {\n          const po = parent.operator;\n          const pp = PRECEDENCE[po];\n          const no = node.operator;\n          const np = PRECEDENCE[no];\n          if (pp > np) {\n            return true;\n          }\n          if (pp === np && name === \"right\") {\n            return true;\n          }\n          break;\n        }\n        default:\n          return false;\n      }\n      break;\n    case \"SequenceExpression\":\n      switch (parent.type) {\n        case \"ReturnStatement\":\n          return false;\n        case \"ForStatement\":\n          return false;\n        case \"ExpressionStatement\":\n          return name !== \"expression\";\n        default:\n          return true;\n      }\n    case \"OptionalIndexedAccessType\":\n      return node.optional && parent.type === \"IndexedAccessType\";\n    case \"IntersectionTypeAnnotation\":\n    case \"UnionTypeAnnotation\":\n      return parent.type === \"NullableTypeAnnotation\";\n    case \"Literal\":\n      return parent.type === \"MemberExpression\" && isNumber.check(node.value) && name === \"object\" && parent.object === node;\n    case \"NumericLiteral\":\n      return parent.type === \"MemberExpression\" && name === \"object\" && parent.object === node;\n    case \"YieldExpression\":\n    case \"AwaitExpression\":\n    case \"AssignmentExpression\":\n    case \"ConditionalExpression\":\n      switch (parent.type) {\n        case \"UnaryExpression\":\n        case \"SpreadElement\":\n        case \"SpreadProperty\":\n        case \"BinaryExpression\":\n        case \"LogicalExpression\":\n          return true;\n        case \"CallExpression\":\n        case \"NewExpression\":\n          return name === \"callee\" && parent.callee === node;\n        case \"ConditionalExpression\":\n          return name === \"test\" && parent.test === node;\n        case \"MemberExpression\":\n          return name === \"object\" && parent.object === node;\n        default:\n          return false;\n      }\n    case \"ArrowFunctionExpression\":\n      if (n.CallExpression.check(parent) && name === \"callee\" && parent.callee === node) {\n        return true;\n      }\n      if (n.MemberExpression.check(parent) && name === \"object\" && parent.object === node) {\n        return true;\n      }\n      if (n.TSAsExpression && n.TSAsExpression.check(parent) && name === \"expression\" && parent.expression === node) {\n        return true;\n      }\n      return isBinary(parent);\n    case \"ObjectExpression\":\n      if (parent.type === \"ArrowFunctionExpression\" && name === \"body\" && parent.body === node) {\n        return true;\n      }\n      break;\n    case \"TSAsExpression\":\n      if (parent.type === \"ArrowFunctionExpression\" && name === \"body\" && parent.body === node && node.expression.type === \"ObjectExpression\") {\n        return true;\n      }\n      break;\n    case \"CallExpression\":\n      if (name === \"declaration\" && n.ExportDefaultDeclaration.check(parent) && n.FunctionExpression.check(node.callee)) {\n        return true;\n      }\n  }\n  if (parent.type === \"NewExpression\" && name === \"callee\" && parent.callee === node) {\n    return containsCallExpression(node);\n  }\n  if (assumeExpressionContext !== true && !this.canBeFirstInStatement() && this.firstInStatement()) {\n    return true;\n  }\n  return false;\n};\nfunction isBinary(node) {\n  return n.BinaryExpression.check(node) || n.LogicalExpression.check(node);\n}\nfunction containsCallExpression(node) {\n  if (n.CallExpression.check(node)) {\n    return true;\n  }\n  if (isArray$1.check(node)) {\n    return node.some(containsCallExpression);\n  }\n  if (n.Node.check(node)) {\n    return someField(\n      node,\n      (_name, child) => containsCallExpression(child)\n    );\n  }\n  return false;\n}\nFPp.canBeFirstInStatement = function() {\n  const node = this.getNode();\n  if (n.FunctionExpression.check(node)) {\n    return false;\n  }\n  if (n.ObjectExpression.check(node)) {\n    return false;\n  }\n  if (n.ClassExpression.check(node)) {\n    return false;\n  }\n  return true;\n};\nFPp.firstInStatement = function() {\n  const s = this.stack;\n  let parentName, parent;\n  let childName, child;\n  for (let i = s.length - 1; i >= 0; i -= 2) {\n    if (n.Node.check(s[i])) {\n      childName = parentName;\n      child = parent;\n      parentName = s[i - 1];\n      parent = s[i];\n    }\n    if (!parent || !child) {\n      continue;\n    }\n    if (n.BlockStatement.check(parent) && parentName === \"body\" && childName === 0) {\n      return true;\n    }\n    if (n.ExpressionStatement.check(parent) && childName === \"expression\") {\n      return true;\n    }\n    if (n.AssignmentExpression.check(parent) && childName === \"left\") {\n      return true;\n    }\n    if (n.ArrowFunctionExpression.check(parent) && childName === \"body\") {\n      return true;\n    }\n    if (n.SequenceExpression.check(parent) && s[i + 1] === \"expressions\" && childName === 0) {\n      continue;\n    }\n    if (n.CallExpression.check(parent) && childName === \"callee\") {\n      continue;\n    }\n    if (n.MemberExpression.check(parent) && childName === \"object\") {\n      continue;\n    }\n    if (n.ConditionalExpression.check(parent) && childName === \"test\") {\n      continue;\n    }\n    if (isBinary(parent) && childName === \"left\") {\n      continue;\n    }\n    if (n.UnaryExpression.check(parent) && !parent.prefix && childName === \"argument\") {\n      continue;\n    }\n    return false;\n  }\n  return true;\n};\n\nconst Printable = namedTypes$1.Printable;\nconst Expression = namedTypes$1.Expression;\nconst ReturnStatement = namedTypes$1.ReturnStatement;\nconst SourceLocation = namedTypes$1.SourceLocation;\nconst isObject$1 = builtInTypes.object;\nconst isArray = builtInTypes.array;\nconst isString$1 = builtInTypes.string;\nconst riskyAdjoiningCharExp = /[0-9a-z_$]/i;\nconst Patcher = function Patcher2(lines) {\n  const self = this, replacements = [];\n  self.replace = function(loc, lines2) {\n    if (isString$1.check(lines2))\n      lines2 = fromString(lines2);\n    replacements.push({\n      lines: lines2,\n      start: loc.start,\n      end: loc.end\n    });\n  };\n  self.get = function(loc) {\n    loc = loc || {\n      start: { line: 1, column: 0 },\n      end: { line: lines.length, column: lines.getLineLength(lines.length) }\n    };\n    let sliceFrom = loc.start, toConcat = [];\n    function pushSlice(from, to) {\n      toConcat.push(lines.slice(from, to));\n    }\n    replacements.sort((a, b) => comparePos(a.start, b.start)).forEach(function(rep) {\n      if (comparePos(sliceFrom, rep.start) > 0) ; else {\n        pushSlice(sliceFrom, rep.start);\n        toConcat.push(rep.lines);\n        sliceFrom = rep.end;\n      }\n    });\n    pushSlice(sliceFrom, loc.end);\n    return concat(toConcat);\n  };\n};\nconst Pp = Patcher.prototype;\nPp.tryToReprintComments = function(newNode, oldNode, print) {\n  const patcher = this;\n  if (!newNode.comments && !oldNode.comments) {\n    return true;\n  }\n  const newPath = FastPath.from(newNode);\n  const oldPath = FastPath.from(oldNode);\n  newPath.stack.push(\"comments\", getSurroundingComments(newNode));\n  oldPath.stack.push(\"comments\", getSurroundingComments(oldNode));\n  const reprints = [];\n  const ableToReprintComments = findArrayReprints(newPath, oldPath, reprints);\n  if (ableToReprintComments && reprints.length > 0) {\n    reprints.forEach(function(reprint) {\n      const oldComment = reprint.oldPath.getValue();\n      patcher.replace(\n        oldComment.loc,\n        // Comments can't have .comments, so it doesn't matter whether we\n        // print with comments or without.\n        print(reprint.newPath).indentTail(oldComment.loc.indent)\n      );\n    });\n  }\n  return ableToReprintComments;\n};\nfunction getSurroundingComments(node) {\n  const result = [];\n  if (node.comments && node.comments.length > 0) {\n    node.comments.forEach(function(comment) {\n      if (comment.leading || comment.trailing) {\n        result.push(comment);\n      }\n    });\n  }\n  return result;\n}\nPp.deleteComments = function(node) {\n  if (!node.comments) {\n    return;\n  }\n  const patcher = this;\n  node.comments.forEach(function(comment) {\n    if (comment.leading) {\n      patcher.replace(\n        {\n          start: comment.loc.start,\n          end: node.loc.lines.skipSpaces(comment.loc.end, false, false)\n        },\n        \"\"\n      );\n    } else if (comment.trailing) {\n      patcher.replace(\n        {\n          start: node.loc.lines.skipSpaces(comment.loc.start, true, false),\n          end: comment.loc.end\n        },\n        \"\"\n      );\n    }\n  });\n};\nfunction getReprinter(path) {\n  const node = path.getValue();\n  if (!Printable.check(node))\n    return;\n  const orig = node.original;\n  const origLoc = orig && orig.loc;\n  const lines = origLoc && origLoc.lines;\n  const reprints = [];\n  if (!lines || !findReprints(path, reprints))\n    return;\n  return function(print) {\n    const patcher = new Patcher(lines);\n    reprints.forEach(function(reprint) {\n      const newNode = reprint.newPath.getValue();\n      const oldNode = reprint.oldPath.getValue();\n      SourceLocation.assert(oldNode.loc, true);\n      const needToPrintNewPathWithComments = !patcher.tryToReprintComments(\n        newNode,\n        oldNode,\n        print\n      );\n      if (needToPrintNewPathWithComments) {\n        patcher.deleteComments(oldNode);\n      }\n      let newLines = print(reprint.newPath, {\n        includeComments: needToPrintNewPathWithComments,\n        // If the oldNode we're replacing already had parentheses, we may\n        // not need to print the new node with any extra parentheses,\n        // because the existing parentheses will suffice. However, if the\n        // newNode has a different type than the oldNode, let the printer\n        // decide if reprint.newPath needs parentheses, as usual.\n        avoidRootParens: oldNode.type === newNode.type && reprint.oldPath.hasParens()\n      }).indentTail(oldNode.loc.indent);\n      const nls = needsLeadingSpace(lines, oldNode.loc, newLines);\n      const nts = needsTrailingSpace(lines, oldNode.loc, newLines);\n      if (nls || nts) {\n        const newParts = [];\n        nls && newParts.push(\" \");\n        newParts.push(newLines);\n        nts && newParts.push(\" \");\n        newLines = concat(newParts);\n      }\n      patcher.replace(oldNode.loc, newLines);\n    });\n    const patchedLines = patcher.get(origLoc).indentTail(-orig.loc.indent);\n    if (path.needsParens()) {\n      return concat([\"(\", patchedLines, \")\"]);\n    }\n    return patchedLines;\n  };\n}\nfunction needsLeadingSpace(oldLines, oldLoc, newLines) {\n  const posBeforeOldLoc = copyPos(oldLoc.start);\n  const charBeforeOldLoc = oldLines.prevPos(posBeforeOldLoc) && oldLines.charAt(posBeforeOldLoc);\n  const newFirstChar = newLines.charAt(newLines.firstPos());\n  return charBeforeOldLoc && riskyAdjoiningCharExp.test(charBeforeOldLoc) && newFirstChar && riskyAdjoiningCharExp.test(newFirstChar);\n}\nfunction needsTrailingSpace(oldLines, oldLoc, newLines) {\n  const charAfterOldLoc = oldLines.charAt(oldLoc.end);\n  const newLastPos = newLines.lastPos();\n  const newLastChar = newLines.prevPos(newLastPos) && newLines.charAt(newLastPos);\n  return newLastChar && riskyAdjoiningCharExp.test(newLastChar) && charAfterOldLoc && riskyAdjoiningCharExp.test(charAfterOldLoc);\n}\nfunction findReprints(newPath, reprints) {\n  const newNode = newPath.getValue();\n  Printable.assert(newNode);\n  const oldNode = newNode.original;\n  Printable.assert(oldNode);\n  if (newNode.type !== oldNode.type) {\n    return false;\n  }\n  const oldPath = new FastPath(oldNode);\n  const canReprint = findChildReprints(newPath, oldPath, reprints);\n  if (!canReprint) {\n    reprints.length = 0;\n  }\n  return canReprint;\n}\nfunction findAnyReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  const oldNode = oldPath.getValue();\n  if (newNode === oldNode)\n    return true;\n  if (isArray.check(newNode))\n    return findArrayReprints(newPath, oldPath, reprints);\n  if (isObject$1.check(newNode))\n    return findObjectReprints(newPath, oldPath, reprints);\n  return false;\n}\nfunction findArrayReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  const oldNode = oldPath.getValue();\n  if (newNode === oldNode || newPath.valueIsDuplicate() || oldPath.valueIsDuplicate()) {\n    return true;\n  }\n  isArray.assert(newNode);\n  const len = newNode.length;\n  if (!(isArray.check(oldNode) && oldNode.length === len))\n    return false;\n  for (let i = 0; i < len; ++i) {\n    newPath.stack.push(i, newNode[i]);\n    oldPath.stack.push(i, oldNode[i]);\n    const canReprint = findAnyReprints(newPath, oldPath, reprints);\n    newPath.stack.length -= 2;\n    oldPath.stack.length -= 2;\n    if (!canReprint) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction findObjectReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  isObject$1.assert(newNode);\n  if (newNode.original === null) {\n    return false;\n  }\n  const oldNode = oldPath.getValue();\n  if (!isObject$1.check(oldNode))\n    return false;\n  if (newNode === oldNode || newPath.valueIsDuplicate() || oldPath.valueIsDuplicate()) {\n    return true;\n  }\n  if (Printable.check(newNode)) {\n    if (!Printable.check(oldNode)) {\n      return false;\n    }\n    const newParentNode = newPath.getParentNode();\n    const oldParentNode = oldPath.getParentNode();\n    if (oldParentNode !== null && oldParentNode.type === \"FunctionTypeAnnotation\" && newParentNode !== null && newParentNode.type === \"FunctionTypeAnnotation\") {\n      const oldNeedsParens = oldParentNode.params.length !== 1 || !!oldParentNode.params[0].name;\n      const newNeedParens = newParentNode.params.length !== 1 || !!newParentNode.params[0].name;\n      if (!oldNeedsParens && newNeedParens) {\n        return false;\n      }\n    }\n    if (newNode.type === oldNode.type) {\n      const childReprints = [];\n      if (findChildReprints(newPath, oldPath, childReprints)) {\n        reprints.push.apply(reprints, childReprints);\n      } else if (oldNode.loc) {\n        reprints.push({\n          oldPath: oldPath.copy(),\n          newPath: newPath.copy()\n        });\n      } else {\n        return false;\n      }\n      return true;\n    }\n    if (Expression.check(newNode) && Expression.check(oldNode) && // If we have no .loc information for oldNode, then we won't be\n    // able to reprint it.\n    oldNode.loc) {\n      reprints.push({\n        oldPath: oldPath.copy(),\n        newPath: newPath.copy()\n      });\n      return true;\n    }\n    return false;\n  }\n  return findChildReprints(newPath, oldPath, reprints);\n}\nfunction findChildReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  const oldNode = oldPath.getValue();\n  isObject$1.assert(newNode);\n  isObject$1.assert(oldNode);\n  if (newNode.original === null) {\n    return false;\n  }\n  if (newPath.needsParens() && !oldPath.hasParens()) {\n    return false;\n  }\n  const keys = getUnionOfKeys(oldNode, newNode);\n  if (oldNode.type === \"File\" || newNode.type === \"File\") {\n    delete keys.tokens;\n  }\n  delete keys.loc;\n  const originalReprintCount = reprints.length;\n  for (let k in keys) {\n    if (k.charAt(0) === \"_\") {\n      continue;\n    }\n    newPath.stack.push(k, getFieldValue(newNode, k));\n    oldPath.stack.push(k, getFieldValue(oldNode, k));\n    const canReprint = findAnyReprints(newPath, oldPath, reprints);\n    newPath.stack.length -= 2;\n    oldPath.stack.length -= 2;\n    if (!canReprint) {\n      return false;\n    }\n  }\n  if (ReturnStatement.check(newPath.getNode()) && reprints.length > originalReprintCount) {\n    return false;\n  }\n  return true;\n}\n\nconst namedTypes = namedTypes$1;\nconst isString = builtInTypes.string;\nconst isObject = builtInTypes.object;\nconst PrintResult = function PrintResult2(code, sourceMap) {\n  isString.assert(code);\n  this.code = code;\n  if (sourceMap) {\n    isObject.assert(sourceMap);\n    this.map = sourceMap;\n  }\n};\nconst PRp = PrintResult.prototype;\nlet warnedAboutToString = false;\nPRp.toString = function() {\n  if (!warnedAboutToString) {\n    console.warn(\n      \"Deprecation warning: recast.print now returns an object with a .code property. You appear to be treating the object as a string, which might still work but is strongly discouraged.\"\n    );\n    warnedAboutToString = true;\n  }\n  return this.code;\n};\nconst emptyPrintResult = new PrintResult(\"\");\nconst Printer = function Printer2(config) {\n  const explicitTabWidth = config && config.tabWidth;\n  config = normalize(config);\n  config.sourceFileName = null;\n  function makePrintFunctionWith(options, overrides) {\n    options = Object.assign({}, options, overrides);\n    return (path) => print(path, options);\n  }\n  function print(path, options) {\n    options = options || {};\n    if (options.includeComments) {\n      return printComments(\n        path,\n        makePrintFunctionWith(options, {\n          includeComments: false\n        })\n      );\n    }\n    const oldTabWidth = config.tabWidth;\n    if (!explicitTabWidth) {\n      const loc = path.getNode().loc;\n      if (loc && loc.lines && loc.lines.guessTabWidth) {\n        config.tabWidth = loc.lines.guessTabWidth();\n      }\n    }\n    const reprinter = getReprinter(path);\n    const lines = reprinter ? (\n      // Since the print function that we pass to the reprinter will\n      // be used to print \"new\" nodes, it's tempting to think we\n      // should pass printRootGenerically instead of print, to avoid\n      // calling maybeReprint again, but that would be a mistake\n      // because the new nodes might not be entirely new, but merely\n      // moved from elsewhere in the AST. The print function is the\n      // right choice because it gives us the opportunity to reprint\n      // such nodes using their original source.\n      reprinter(print)\n    ) : genericPrint(\n      path,\n      config,\n      options,\n      makePrintFunctionWith(options, {\n        includeComments: true,\n        avoidRootParens: false\n      })\n    );\n    config.tabWidth = oldTabWidth;\n    return lines;\n  }\n  this.print = function(ast) {\n    if (!ast) {\n      return emptyPrintResult;\n    }\n    const lines = print(FastPath.from(ast), {\n      includeComments: true,\n      avoidRootParens: false\n    });\n    return new PrintResult(\n      lines.toString(config),\n      composeSourceMaps(\n        config.inputSourceMap,\n        lines.getSourceMap(config.sourceMapName, config.sourceRoot)\n      )\n    );\n  };\n  this.printGenerically = function(ast) {\n    if (!ast) {\n      return emptyPrintResult;\n    }\n    function printGenerically(path2) {\n      return printComments(\n        path2,\n        (path3) => genericPrint(\n          path3,\n          config,\n          {\n            includeComments: true,\n            avoidRootParens: false\n          },\n          printGenerically\n        )\n      );\n    }\n    const path = FastPath.from(ast);\n    const oldReuseWhitespace = config.reuseWhitespace;\n    config.reuseWhitespace = false;\n    const pr = new PrintResult(printGenerically(path).toString(config));\n    config.reuseWhitespace = oldReuseWhitespace;\n    return pr;\n  };\n};\nfunction genericPrint(path, config, options, printPath) {\n  const node = path.getValue();\n  const parts = [];\n  const linesWithoutParens = genericPrintNoParens(path, config, printPath);\n  if (!node || linesWithoutParens.isEmpty()) {\n    return linesWithoutParens;\n  }\n  let shouldAddParens = false;\n  const decoratorsLines = printDecorators(path, printPath);\n  if (decoratorsLines.isEmpty()) {\n    if (!options.avoidRootParens) {\n      shouldAddParens = path.needsParens();\n    }\n  } else {\n    parts.push(decoratorsLines);\n  }\n  if (shouldAddParens) {\n    parts.unshift(\"(\");\n  }\n  parts.push(linesWithoutParens);\n  if (shouldAddParens) {\n    parts.push(\")\");\n  }\n  return concat(parts);\n}\nfunction genericPrintNoParens(path, options, print) {\n  const n = path.getValue();\n  if (!n) {\n    return fromString(\"\");\n  }\n  if (typeof n === \"string\") {\n    return fromString(n, options);\n  }\n  namedTypes.Printable.assert(n);\n  const parts = [];\n  switch (n.type) {\n    case \"File\":\n      return path.call(print, \"program\");\n    case \"Program\":\n      if (n.directives) {\n        path.each(function(childPath) {\n          parts.push(print(childPath), \";\\n\");\n        }, \"directives\");\n      }\n      if (n.interpreter) {\n        parts.push(path.call(print, \"interpreter\"));\n      }\n      parts.push(\n        path.call(\n          (bodyPath) => printStatementSequence(bodyPath, options, print),\n          \"body\"\n        )\n      );\n      return concat(parts);\n    case \"Noop\":\n    case \"EmptyStatement\":\n      return fromString(\"\");\n    case \"ExpressionStatement\":\n      return concat([path.call(print, \"expression\"), \";\"]);\n    case \"ParenthesizedExpression\":\n      return concat([\"(\", path.call(print, \"expression\"), \")\"]);\n    case \"BinaryExpression\":\n    case \"LogicalExpression\":\n    case \"AssignmentExpression\":\n      return fromString(\" \").join([\n        path.call(print, \"left\"),\n        n.operator,\n        path.call(print, \"right\")\n      ]);\n    case \"AssignmentPattern\":\n      return concat([\n        path.call(print, \"left\"),\n        \" = \",\n        path.call(print, \"right\")\n      ]);\n    case \"MemberExpression\":\n    case \"OptionalMemberExpression\": {\n      parts.push(path.call(print, \"object\"));\n      const property = path.call(print, \"property\");\n      const optional = getFieldValue(n, \"optional\");\n      if (n.computed) {\n        parts.push(optional ? \"?.[\" : \"[\", property, \"]\");\n      } else {\n        parts.push(optional ? \"?.\" : \".\", property);\n      }\n      return concat(parts);\n    }\n    case \"ChainExpression\":\n      return path.call(print, \"expression\");\n    case \"MetaProperty\":\n      return concat([\n        path.call(print, \"meta\"),\n        \".\",\n        path.call(print, \"property\")\n      ]);\n    case \"BindExpression\":\n      if (n.object) {\n        parts.push(path.call(print, \"object\"));\n      }\n      parts.push(\"::\", path.call(print, \"callee\"));\n      return concat(parts);\n    case \"Path\":\n      return fromString(\".\").join(n.body);\n    case \"Identifier\":\n      return concat([\n        fromString(n.name, options),\n        n.optional ? \"?\" : \"\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"SpreadElement\":\n    case \"SpreadElementPattern\":\n    case \"RestProperty\":\n    case \"SpreadProperty\":\n    case \"SpreadPropertyPattern\":\n    case \"ObjectTypeSpreadProperty\":\n    case \"RestElement\":\n      return concat([\n        \"...\",\n        path.call(print, \"argument\"),\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"FunctionDeclaration\":\n    case \"FunctionExpression\":\n    case \"TSDeclareFunction\":\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      if (n.async) {\n        parts.push(\"async \");\n      }\n      parts.push(\"function\");\n      if (n.generator)\n        parts.push(\"*\");\n      if (n.id) {\n        parts.push(\n          \" \",\n          path.call(print, \"id\"),\n          path.call(print, \"typeParameters\")\n        );\n      } else {\n        if (n.typeParameters) {\n          parts.push(path.call(print, \"typeParameters\"));\n        }\n      }\n      parts.push(\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"returnType\")\n      );\n      if (n.body) {\n        parts.push(\" \", path.call(print, \"body\"));\n      }\n      return concat(parts);\n    case \"ArrowFunctionExpression\":\n      if (n.async) {\n        parts.push(\"async \");\n      }\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (!options.arrowParensAlways && n.params.length === 1 && !n.rest && n.params[0].type === \"Identifier\" && !n.params[0].typeAnnotation && !n.returnType) {\n        parts.push(path.call(print, \"params\", 0));\n      } else {\n        parts.push(\n          \"(\",\n          printFunctionParams(path, options, print),\n          \")\",\n          path.call(print, \"returnType\")\n        );\n      }\n      parts.push(\" => \", path.call(print, \"body\"));\n      return concat(parts);\n    case \"MethodDefinition\":\n      return printMethod(path, options, print);\n    case \"YieldExpression\":\n      parts.push(\"yield\");\n      if (n.delegate)\n        parts.push(\"*\");\n      if (n.argument)\n        parts.push(\" \", path.call(print, \"argument\"));\n      return concat(parts);\n    case \"AwaitExpression\":\n      parts.push(\"await\");\n      if (n.all)\n        parts.push(\"*\");\n      if (n.argument)\n        parts.push(\" \", path.call(print, \"argument\"));\n      return concat(parts);\n    case \"ModuleExpression\":\n      return concat([\n        \"module {\\n\",\n        path.call(print, \"body\").indent(options.tabWidth),\n        \"\\n}\"\n      ]);\n    case \"ModuleDeclaration\":\n      parts.push(\"module\", path.call(print, \"id\"));\n      if (n.source) {\n        parts.push(\"from\", path.call(print, \"source\"));\n      } else {\n        parts.push(path.call(print, \"body\"));\n      }\n      return fromString(\" \").join(parts);\n    case \"ImportSpecifier\":\n      if (n.importKind && n.importKind !== \"value\") {\n        parts.push(n.importKind + \" \");\n      }\n      if (n.imported) {\n        parts.push(path.call(print, \"imported\"));\n        if (n.local && n.local.name !== n.imported.name) {\n          parts.push(\" as \", path.call(print, \"local\"));\n        }\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n        if (n.name) {\n          parts.push(\" as \", path.call(print, \"name\"));\n        }\n      }\n      return concat(parts);\n    case \"ExportSpecifier\":\n      if (n.exportKind && n.exportKind !== \"value\") {\n        parts.push(n.exportKind + \" \");\n      }\n      if (n.local) {\n        parts.push(path.call(print, \"local\"));\n        if (n.exported && n.exported.name !== n.local.name) {\n          parts.push(\" as \", path.call(print, \"exported\"));\n        }\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n        if (n.name) {\n          parts.push(\" as \", path.call(print, \"name\"));\n        }\n      }\n      return concat(parts);\n    case \"ExportBatchSpecifier\":\n      return fromString(\"*\");\n    case \"ImportNamespaceSpecifier\":\n      parts.push(\"* as \");\n      if (n.local) {\n        parts.push(path.call(print, \"local\"));\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n      }\n      return concat(parts);\n    case \"ImportDefaultSpecifier\":\n      if (n.local) {\n        return path.call(print, \"local\");\n      }\n      return path.call(print, \"id\");\n    case \"TSExportAssignment\":\n      return concat([\"export = \", path.call(print, \"expression\")]);\n    case \"ExportDeclaration\":\n    case \"ExportDefaultDeclaration\":\n    case \"ExportNamedDeclaration\":\n      return printExportDeclaration(path, options, print);\n    case \"ExportAllDeclaration\":\n      parts.push(\"export *\");\n      if (n.exported) {\n        parts.push(\" as \", path.call(print, \"exported\"));\n      }\n      parts.push(\" from \", path.call(print, \"source\"), \";\");\n      return concat(parts);\n    case \"TSNamespaceExportDeclaration\":\n      parts.push(\"export as namespace \", path.call(print, \"id\"));\n      return maybeAddSemicolon(concat(parts));\n    case \"ExportNamespaceSpecifier\":\n      return concat([\"* as \", path.call(print, \"exported\")]);\n    case \"ExportDefaultSpecifier\":\n      return path.call(print, \"exported\");\n    case \"Import\":\n      return fromString(\"import\", options);\n    case \"ImportExpression\":\n      return concat([\"import(\", path.call(print, \"source\"), \")\"]);\n    case \"ImportDeclaration\": {\n      parts.push(\"import \");\n      if (n.importKind && n.importKind !== \"value\") {\n        parts.push(n.importKind + \" \");\n      }\n      if (n.specifiers && n.specifiers.length > 0) {\n        const unbracedSpecifiers = [];\n        const bracedSpecifiers = [];\n        path.each(function(specifierPath) {\n          const spec = specifierPath.getValue();\n          if (spec.type === \"ImportSpecifier\") {\n            bracedSpecifiers.push(print(specifierPath));\n          } else if (spec.type === \"ImportDefaultSpecifier\" || spec.type === \"ImportNamespaceSpecifier\") {\n            unbracedSpecifiers.push(print(specifierPath));\n          }\n        }, \"specifiers\");\n        unbracedSpecifiers.forEach((lines, i) => {\n          if (i > 0) {\n            parts.push(\", \");\n          }\n          parts.push(lines);\n        });\n        if (bracedSpecifiers.length > 0) {\n          let lines = fromString(\", \").join(bracedSpecifiers);\n          if (lines.getLineLength(1) > options.wrapColumn) {\n            lines = concat([\n              fromString(\",\\n\").join(bracedSpecifiers).indent(options.tabWidth),\n              \",\"\n            ]);\n          }\n          if (unbracedSpecifiers.length > 0) {\n            parts.push(\", \");\n          }\n          if (lines.length > 1) {\n            parts.push(\"{\\n\", lines, \"\\n}\");\n          } else if (options.objectCurlySpacing) {\n            parts.push(\"{ \", lines, \" }\");\n          } else {\n            parts.push(\"{\", lines, \"}\");\n          }\n        }\n        parts.push(\" from \");\n      }\n      parts.push(\n        path.call(print, \"source\"),\n        maybePrintImportAssertions(path, options, print),\n        \";\"\n      );\n      return concat(parts);\n    }\n    case \"ImportAttribute\":\n      return concat([path.call(print, \"key\"), \": \", path.call(print, \"value\")]);\n    case \"StaticBlock\":\n      parts.push(\"static \");\n    case \"BlockStatement\": {\n      const naked = path.call(\n        (bodyPath) => printStatementSequence(bodyPath, options, print),\n        \"body\"\n      );\n      if (naked.isEmpty()) {\n        if (!n.directives || n.directives.length === 0) {\n          parts.push(\"{}\");\n          return concat(parts);\n        }\n      }\n      parts.push(\"{\\n\");\n      if (n.directives) {\n        path.each(function(childPath) {\n          parts.push(\n            maybeAddSemicolon(print(childPath).indent(options.tabWidth)),\n            n.directives.length > 1 || !naked.isEmpty() ? \"\\n\" : \"\"\n          );\n        }, \"directives\");\n      }\n      parts.push(naked.indent(options.tabWidth));\n      parts.push(\"\\n}\");\n      return concat(parts);\n    }\n    case \"ReturnStatement\": {\n      parts.push(\"return\");\n      if (n.argument) {\n        const argLines = path.call(print, \"argument\");\n        if (argLines.startsWithComment() || argLines.length > 1 && namedTypes.JSXElement && namedTypes.JSXElement.check(n.argument)) {\n          parts.push(\" (\\n\", argLines.indent(options.tabWidth), \"\\n)\");\n        } else {\n          parts.push(\" \", argLines);\n        }\n      }\n      parts.push(\";\");\n      return concat(parts);\n    }\n    case \"CallExpression\":\n    case \"OptionalCallExpression\":\n      parts.push(path.call(print, \"callee\"));\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (n.typeArguments) {\n        parts.push(path.call(print, \"typeArguments\"));\n      }\n      if (getFieldValue(n, \"optional\")) {\n        parts.push(\"?.\");\n      }\n      parts.push(printArgumentsList(path, options, print));\n      return concat(parts);\n    case \"RecordExpression\":\n      parts.push(\"#\");\n    case \"ObjectExpression\":\n    case \"ObjectPattern\":\n    case \"ObjectTypeAnnotation\": {\n      const isTypeAnnotation = n.type === \"ObjectTypeAnnotation\";\n      const separator = options.flowObjectCommas ? \",\" : isTypeAnnotation ? \";\" : \",\";\n      const fields = [];\n      let allowBreak = false;\n      if (isTypeAnnotation) {\n        fields.push(\"indexers\", \"callProperties\");\n        if (n.internalSlots != null) {\n          fields.push(\"internalSlots\");\n        }\n      }\n      fields.push(\"properties\");\n      let len = 0;\n      fields.forEach(function(field) {\n        len += n[field].length;\n      });\n      const oneLine = isTypeAnnotation && len === 1 || len === 0;\n      const leftBrace = n.exact ? \"{|\" : \"{\";\n      const rightBrace = n.exact ? \"|}\" : \"}\";\n      parts.push(oneLine ? leftBrace : leftBrace + \"\\n\");\n      const leftBraceIndex = parts.length - 1;\n      let i = 0;\n      fields.forEach(function(field) {\n        path.each(function(childPath) {\n          let lines = print(childPath);\n          if (!oneLine) {\n            lines = lines.indent(options.tabWidth);\n          }\n          const multiLine = !isTypeAnnotation && lines.length > 1;\n          if (multiLine && allowBreak) {\n            parts.push(\"\\n\");\n          }\n          parts.push(lines);\n          if (i < len - 1) {\n            parts.push(separator + (multiLine ? \"\\n\\n\" : \"\\n\"));\n            allowBreak = !multiLine;\n          } else if (len !== 1 && isTypeAnnotation) {\n            parts.push(separator);\n          } else if (!oneLine && isTrailingCommaEnabled(options, \"objects\") && childPath.getValue().type !== \"RestElement\") {\n            parts.push(separator);\n          }\n          i++;\n        }, field);\n      });\n      if (n.inexact) {\n        const line = fromString(\"...\", options);\n        if (oneLine) {\n          if (len > 0) {\n            parts.push(separator, \" \");\n          }\n          parts.push(line);\n        } else {\n          parts.push(\"\\n\", line.indent(options.tabWidth));\n        }\n      }\n      parts.push(oneLine ? rightBrace : \"\\n\" + rightBrace);\n      if (i !== 0 && oneLine && options.objectCurlySpacing) {\n        parts[leftBraceIndex] = leftBrace + \" \";\n        parts[parts.length - 1] = \" \" + rightBrace;\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      return concat(parts);\n    }\n    case \"PropertyPattern\":\n      return concat([\n        path.call(print, \"key\"),\n        \": \",\n        path.call(print, \"pattern\")\n      ]);\n    case \"ObjectProperty\":\n    case \"Property\": {\n      if (n.method || n.kind === \"get\" || n.kind === \"set\") {\n        return printMethod(path, options, print);\n      }\n      if (n.shorthand && n.value.type === \"AssignmentPattern\") {\n        return path.call(print, \"value\");\n      }\n      const key = path.call(print, \"key\");\n      if (n.computed) {\n        parts.push(\"[\", key, \"]\");\n      } else {\n        parts.push(key);\n      }\n      if (!n.shorthand || n.key.name !== n.value.name) {\n        parts.push(\": \", path.call(print, \"value\"));\n      }\n      return concat(parts);\n    }\n    case \"ClassMethod\":\n    case \"ObjectMethod\":\n    case \"ClassPrivateMethod\":\n    case \"TSDeclareMethod\":\n      return printMethod(path, options, print);\n    case \"PrivateName\":\n      return concat([\"#\", path.call(print, \"id\")]);\n    case \"Decorator\":\n      return concat([\"@\", path.call(print, \"expression\")]);\n    case \"TupleExpression\":\n      parts.push(\"#\");\n    case \"ArrayExpression\":\n    case \"ArrayPattern\": {\n      const elems = n.elements;\n      const len = elems.length;\n      const printed = path.map(print, \"elements\");\n      const joined = fromString(\", \").join(printed);\n      const oneLine = joined.getLineLength(1) <= options.wrapColumn;\n      if (oneLine) {\n        if (options.arrayBracketSpacing) {\n          parts.push(\"[ \");\n        } else {\n          parts.push(\"[\");\n        }\n      } else {\n        parts.push(\"[\\n\");\n      }\n      path.each(function(elemPath) {\n        const i = elemPath.getName();\n        const elem = elemPath.getValue();\n        if (!elem) {\n          parts.push(\",\");\n        } else {\n          let lines = printed[i];\n          if (oneLine) {\n            if (i > 0)\n              parts.push(\" \");\n          } else {\n            lines = lines.indent(options.tabWidth);\n          }\n          parts.push(lines);\n          if (i < len - 1 || !oneLine && isTrailingCommaEnabled(options, \"arrays\"))\n            parts.push(\",\");\n          if (!oneLine)\n            parts.push(\"\\n\");\n        }\n      }, \"elements\");\n      if (oneLine && options.arrayBracketSpacing) {\n        parts.push(\" ]\");\n      } else {\n        parts.push(\"]\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      return concat(parts);\n    }\n    case \"SequenceExpression\":\n      return fromString(\", \").join(path.map(print, \"expressions\"));\n    case \"ThisExpression\":\n      return fromString(\"this\");\n    case \"Super\":\n      return fromString(\"super\");\n    case \"NullLiteral\":\n      return fromString(\"null\");\n    case \"RegExpLiteral\":\n      return fromString(\n        getPossibleRaw(n) || `/${n.pattern}/${n.flags || \"\"}`,\n        options\n      );\n    case \"BigIntLiteral\":\n      return fromString(getPossibleRaw(n) || n.value + \"n\", options);\n    case \"NumericLiteral\":\n      return fromString(getPossibleRaw(n) || n.value, options);\n    case \"DecimalLiteral\":\n      return fromString(getPossibleRaw(n) || n.value + \"m\", options);\n    case \"StringLiteral\":\n      return fromString(nodeStr(n.value, options));\n    case \"BooleanLiteral\":\n    case \"Literal\":\n      return fromString(\n        getPossibleRaw(n) || (typeof n.value === \"string\" ? nodeStr(n.value, options) : n.value),\n        options\n      );\n    case \"Directive\":\n      return path.call(print, \"value\");\n    case \"DirectiveLiteral\":\n      return fromString(\n        getPossibleRaw(n) || nodeStr(n.value, options),\n        options\n      );\n    case \"InterpreterDirective\":\n      return fromString(`#!${n.value}\n`, options);\n    case \"ModuleSpecifier\":\n      if (n.local) {\n        throw new Error(\"The ESTree ModuleSpecifier type should be abstract\");\n      }\n      return fromString(nodeStr(n.value, options), options);\n    case \"UnaryExpression\":\n      parts.push(n.operator);\n      if (/[a-z]$/.test(n.operator))\n        parts.push(\" \");\n      parts.push(path.call(print, \"argument\"));\n      return concat(parts);\n    case \"UpdateExpression\":\n      parts.push(path.call(print, \"argument\"), n.operator);\n      if (n.prefix)\n        parts.reverse();\n      return concat(parts);\n    case \"ConditionalExpression\":\n      return concat([\n        path.call(print, \"test\"),\n        \" ? \",\n        path.call(print, \"consequent\"),\n        \" : \",\n        path.call(print, \"alternate\")\n      ]);\n    case \"NewExpression\": {\n      parts.push(\"new \", path.call(print, \"callee\"));\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (n.typeArguments) {\n        parts.push(path.call(print, \"typeArguments\"));\n      }\n      const args = n.arguments;\n      if (args) {\n        parts.push(printArgumentsList(path, options, print));\n      }\n      return concat(parts);\n    }\n    case \"VariableDeclaration\": {\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      parts.push(n.kind, \" \");\n      let maxLen = 0;\n      const printed = path.map(function(childPath) {\n        const lines = print(childPath);\n        maxLen = Math.max(lines.length, maxLen);\n        return lines;\n      }, \"declarations\");\n      if (maxLen === 1) {\n        parts.push(fromString(\", \").join(printed));\n      } else if (printed.length > 1) {\n        parts.push(\n          fromString(\",\\n\").join(printed).indentTail(n.kind.length + 1)\n        );\n      } else {\n        parts.push(printed[0]);\n      }\n      const parentNode = path.getParentNode();\n      if (!namedTypes.ForStatement.check(parentNode) && !namedTypes.ForInStatement.check(parentNode) && !(namedTypes.ForOfStatement && namedTypes.ForOfStatement.check(parentNode)) && !(namedTypes.ForAwaitStatement && namedTypes.ForAwaitStatement.check(parentNode))) {\n        parts.push(\";\");\n      }\n      return concat(parts);\n    }\n    case \"VariableDeclarator\":\n      return n.init ? fromString(\" = \").join([\n        path.call(print, \"id\"),\n        path.call(print, \"init\")\n      ]) : path.call(print, \"id\");\n    case \"WithStatement\":\n      return concat([\n        \"with (\",\n        path.call(print, \"object\"),\n        \") \",\n        path.call(print, \"body\")\n      ]);\n    case \"IfStatement\": {\n      const con = adjustClause(path.call(print, \"consequent\"), options);\n      parts.push(\"if (\", path.call(print, \"test\"), \")\", con);\n      if (n.alternate)\n        parts.push(\n          endsWithBrace(con) ? \" else\" : \"\\nelse\",\n          adjustClause(path.call(print, \"alternate\"), options)\n        );\n      return concat(parts);\n    }\n    case \"ForStatement\": {\n      const init = path.call(print, \"init\");\n      const sep = init.length > 1 ? \";\\n\" : \"; \";\n      const forParen = \"for (\";\n      const indented = fromString(sep).join([init, path.call(print, \"test\"), path.call(print, \"update\")]).indentTail(forParen.length);\n      const head = concat([forParen, indented, \")\"]);\n      let clause = adjustClause(path.call(print, \"body\"), options);\n      parts.push(head);\n      if (head.length > 1) {\n        parts.push(\"\\n\");\n        clause = clause.trimLeft();\n      }\n      parts.push(clause);\n      return concat(parts);\n    }\n    case \"WhileStatement\":\n      return concat([\n        \"while (\",\n        path.call(print, \"test\"),\n        \")\",\n        adjustClause(path.call(print, \"body\"), options)\n      ]);\n    case \"ForInStatement\":\n      return concat([\n        n.each ? \"for each (\" : \"for (\",\n        path.call(print, \"left\"),\n        \" in \",\n        path.call(print, \"right\"),\n        \")\",\n        adjustClause(path.call(print, \"body\"), options)\n      ]);\n    case \"ForOfStatement\":\n    case \"ForAwaitStatement\":\n      parts.push(\"for \");\n      if (n.await || n.type === \"ForAwaitStatement\") {\n        parts.push(\"await \");\n      }\n      parts.push(\n        \"(\",\n        path.call(print, \"left\"),\n        \" of \",\n        path.call(print, \"right\"),\n        \")\",\n        adjustClause(path.call(print, \"body\"), options)\n      );\n      return concat(parts);\n    case \"DoWhileStatement\": {\n      const doBody = concat([\n        \"do\",\n        adjustClause(path.call(print, \"body\"), options)\n      ]);\n      parts.push(doBody);\n      if (endsWithBrace(doBody))\n        parts.push(\" while\");\n      else\n        parts.push(\"\\nwhile\");\n      parts.push(\" (\", path.call(print, \"test\"), \");\");\n      return concat(parts);\n    }\n    case \"DoExpression\": {\n      const statements = path.call(\n        (bodyPath) => printStatementSequence(bodyPath, options, print),\n        \"body\"\n      );\n      return concat([\"do {\\n\", statements.indent(options.tabWidth), \"\\n}\"]);\n    }\n    case \"BreakStatement\":\n      parts.push(\"break\");\n      if (n.label)\n        parts.push(\" \", path.call(print, \"label\"));\n      parts.push(\";\");\n      return concat(parts);\n    case \"ContinueStatement\":\n      parts.push(\"continue\");\n      if (n.label)\n        parts.push(\" \", path.call(print, \"label\"));\n      parts.push(\";\");\n      return concat(parts);\n    case \"LabeledStatement\":\n      return concat([\n        path.call(print, \"label\"),\n        \":\\n\",\n        path.call(print, \"body\")\n      ]);\n    case \"TryStatement\":\n      parts.push(\"try \", path.call(print, \"block\"));\n      if (n.handler) {\n        parts.push(\" \", path.call(print, \"handler\"));\n      } else if (n.handlers) {\n        path.each(function(handlerPath) {\n          parts.push(\" \", print(handlerPath));\n        }, \"handlers\");\n      }\n      if (n.finalizer) {\n        parts.push(\" finally \", path.call(print, \"finalizer\"));\n      }\n      return concat(parts);\n    case \"CatchClause\":\n      parts.push(\"catch \");\n      if (n.param) {\n        parts.push(\"(\", path.call(print, \"param\"));\n      }\n      if (n.guard) {\n        parts.push(\" if \", path.call(print, \"guard\"));\n      }\n      if (n.param) {\n        parts.push(\") \");\n      }\n      parts.push(path.call(print, \"body\"));\n      return concat(parts);\n    case \"ThrowStatement\":\n      return concat([\"throw \", path.call(print, \"argument\"), \";\"]);\n    case \"SwitchStatement\":\n      return concat([\n        \"switch (\",\n        path.call(print, \"discriminant\"),\n        \") {\\n\",\n        fromString(\"\\n\").join(path.map(print, \"cases\")),\n        \"\\n}\"\n      ]);\n    case \"SwitchCase\":\n      if (n.test)\n        parts.push(\"case \", path.call(print, \"test\"), \":\");\n      else\n        parts.push(\"default:\");\n      if (n.consequent.length > 0) {\n        parts.push(\n          \"\\n\",\n          path.call(\n            (consequentPath) => printStatementSequence(consequentPath, options, print),\n            \"consequent\"\n          ).indent(options.tabWidth)\n        );\n      }\n      return concat(parts);\n    case \"DebuggerStatement\":\n      return fromString(\"debugger;\");\n    case \"JSXAttribute\":\n      parts.push(path.call(print, \"name\"));\n      if (n.value)\n        parts.push(\"=\", path.call(print, \"value\"));\n      return concat(parts);\n    case \"JSXIdentifier\":\n      return fromString(n.name, options);\n    case \"JSXNamespacedName\":\n      return fromString(\":\").join([\n        path.call(print, \"namespace\"),\n        path.call(print, \"name\")\n      ]);\n    case \"JSXMemberExpression\":\n      return fromString(\".\").join([\n        path.call(print, \"object\"),\n        path.call(print, \"property\")\n      ]);\n    case \"JSXSpreadAttribute\":\n      return concat([\"{...\", path.call(print, \"argument\"), \"}\"]);\n    case \"JSXSpreadChild\":\n      return concat([\"{...\", path.call(print, \"expression\"), \"}\"]);\n    case \"JSXExpressionContainer\":\n      return concat([\"{\", path.call(print, \"expression\"), \"}\"]);\n    case \"JSXElement\":\n    case \"JSXFragment\": {\n      const openingPropName = \"opening\" + (n.type === \"JSXElement\" ? \"Element\" : \"Fragment\");\n      const closingPropName = \"closing\" + (n.type === \"JSXElement\" ? \"Element\" : \"Fragment\");\n      const openingLines = path.call(print, openingPropName);\n      if (n[openingPropName].selfClosing) {\n        return openingLines;\n      }\n      const childLines = concat(\n        path.map(function(childPath) {\n          const child = childPath.getValue();\n          if (namedTypes.Literal.check(child) && typeof child.value === \"string\") {\n            if (/\\S/.test(child.value)) {\n              return child.value.replace(/^\\s+|\\s+$/g, \"\");\n            } else if (/\\n/.test(child.value)) {\n              return \"\\n\";\n            }\n          }\n          return print(childPath);\n        }, \"children\")\n      ).indentTail(options.tabWidth);\n      const closingLines = path.call(print, closingPropName);\n      return concat([openingLines, childLines, closingLines]);\n    }\n    case \"JSXOpeningElement\": {\n      parts.push(\"<\", path.call(print, \"name\"));\n      const attrParts = [];\n      path.each(function(attrPath) {\n        attrParts.push(\" \", print(attrPath));\n      }, \"attributes\");\n      let attrLines = concat(attrParts);\n      const needLineWrap = attrLines.length > 1 || attrLines.getLineLength(1) > options.wrapColumn;\n      if (needLineWrap) {\n        attrParts.forEach(function(part, i) {\n          if (part === \" \") {\n            attrParts[i] = \"\\n\";\n          }\n        });\n        attrLines = concat(attrParts).indentTail(options.tabWidth);\n      }\n      parts.push(attrLines, n.selfClosing ? \" />\" : \">\");\n      return concat(parts);\n    }\n    case \"JSXClosingElement\":\n      return concat([\"</\", path.call(print, \"name\"), \">\"]);\n    case \"JSXOpeningFragment\":\n      return fromString(\"<>\");\n    case \"JSXClosingFragment\":\n      return fromString(\"</>\");\n    case \"JSXText\":\n      return fromString(n.value, options);\n    case \"JSXEmptyExpression\":\n      return fromString(\"\");\n    case \"TypeAnnotatedIdentifier\":\n      return concat([\n        path.call(print, \"annotation\"),\n        \" \",\n        path.call(print, \"identifier\")\n      ]);\n    case \"ClassBody\":\n      if (n.body.length === 0) {\n        return fromString(\"{}\");\n      }\n      return concat([\n        \"{\\n\",\n        path.call(\n          (bodyPath) => printStatementSequence(bodyPath, options, print),\n          \"body\"\n        ).indent(options.tabWidth),\n        \"\\n}\"\n      ]);\n    case \"ClassPropertyDefinition\":\n      parts.push(\"static \", path.call(print, \"definition\"));\n      if (!namedTypes.MethodDefinition.check(n.definition))\n        parts.push(\";\");\n      return concat(parts);\n    case \"ClassProperty\": {\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      const access = n.accessibility || n.access;\n      if (typeof access === \"string\") {\n        parts.push(access, \" \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.abstract) {\n        parts.push(\"abstract \");\n      }\n      if (n.readonly) {\n        parts.push(\"readonly \");\n      }\n      let key = path.call(print, \"key\");\n      if (n.computed) {\n        key = concat([\"[\", key, \"]\"]);\n      }\n      if (n.variance) {\n        key = concat([printVariance(path, print), key]);\n      }\n      parts.push(key);\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (n.definite) {\n        parts.push(\"!\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\" = \", path.call(print, \"value\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    }\n    case \"ClassPrivateProperty\":\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      parts.push(path.call(print, \"key\"));\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\" = \", path.call(print, \"value\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    case \"ClassAccessorProperty\": {\n      parts.push(\n        ...printClassMemberModifiers(n),\n        \"accessor \"\n      );\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(path.call(print, \"key\"));\n      }\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (n.definite) {\n        parts.push(\"!\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\" = \", path.call(print, \"value\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    }\n    case \"ClassDeclaration\":\n    case \"ClassExpression\":\n    case \"DeclareClass\":\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      if (n.abstract) {\n        parts.push(\"abstract \");\n      }\n      parts.push(\"class\");\n      if (n.id) {\n        parts.push(\" \", path.call(print, \"id\"));\n      }\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (n.superClass) {\n        parts.push(\n          \" extends \",\n          path.call(print, \"superClass\"),\n          path.call(print, \"superTypeParameters\")\n        );\n      }\n      if (n.extends && n.extends.length > 0) {\n        parts.push(\n          \" extends \",\n          fromString(\", \").join(path.map(print, \"extends\"))\n        );\n      }\n      if (n[\"implements\"] && n[\"implements\"].length > 0) {\n        parts.push(\n          \" implements \",\n          fromString(\", \").join(path.map(print, \"implements\"))\n        );\n      }\n      parts.push(\" \", path.call(print, \"body\"));\n      if (n.type === \"DeclareClass\") {\n        return printFlowDeclaration(path, parts);\n      } else {\n        return concat(parts);\n      }\n    case \"TemplateElement\":\n      return fromString(n.value.raw, options).lockIndentTail();\n    case \"TemplateLiteral\": {\n      const expressions = path.map(print, \"expressions\");\n      parts.push(\"`\");\n      path.each(function(childPath) {\n        const i = childPath.getName();\n        parts.push(print(childPath));\n        if (i < expressions.length) {\n          parts.push(\"${\", expressions[i], \"}\");\n        }\n      }, \"quasis\");\n      parts.push(\"`\");\n      return concat(parts).lockIndentTail();\n    }\n    case \"TaggedTemplateExpression\":\n      return concat([path.call(print, \"tag\"), path.call(print, \"quasi\")]);\n    case \"Node\":\n    case \"Printable\":\n    case \"SourceLocation\":\n    case \"Position\":\n    case \"Statement\":\n    case \"Function\":\n    case \"Pattern\":\n    case \"Expression\":\n    case \"Declaration\":\n    case \"Specifier\":\n    case \"NamedSpecifier\":\n    case \"Comment\":\n    case \"Flow\":\n    case \"FlowType\":\n    case \"FlowPredicate\":\n    case \"MemberTypeAnnotation\":\n    case \"Type\":\n    case \"TSHasOptionalTypeParameterInstantiation\":\n    case \"TSHasOptionalTypeParameters\":\n    case \"TSHasOptionalTypeAnnotation\":\n    case \"ChainElement\":\n      throw new Error(\"unprintable type: \" + JSON.stringify(n.type));\n    case \"CommentBlock\":\n    case \"Block\":\n      return concat([\"/*\", fromString(n.value, options), \"*/\"]);\n    case \"CommentLine\":\n    case \"Line\":\n      return concat([\"//\", fromString(n.value, options)]);\n    case \"TypeAnnotation\":\n      if (n.typeAnnotation) {\n        if (n.typeAnnotation.type !== \"FunctionTypeAnnotation\") {\n          parts.push(\": \");\n        }\n        parts.push(path.call(print, \"typeAnnotation\"));\n        return concat(parts);\n      }\n      return fromString(\"\");\n    case \"ExistentialTypeParam\":\n    case \"ExistsTypeAnnotation\":\n      return fromString(\"*\", options);\n    case \"EmptyTypeAnnotation\":\n      return fromString(\"empty\", options);\n    case \"AnyTypeAnnotation\":\n      return fromString(\"any\", options);\n    case \"MixedTypeAnnotation\":\n      return fromString(\"mixed\", options);\n    case \"ArrayTypeAnnotation\":\n      return concat([path.call(print, \"elementType\"), \"[]\"]);\n    case \"TupleTypeAnnotation\": {\n      const printed = path.map(print, \"types\");\n      const joined = fromString(\", \").join(printed);\n      const oneLine = joined.getLineLength(1) <= options.wrapColumn;\n      if (oneLine) {\n        if (options.arrayBracketSpacing) {\n          parts.push(\"[ \");\n        } else {\n          parts.push(\"[\");\n        }\n      } else {\n        parts.push(\"[\\n\");\n      }\n      path.each(function(elemPath) {\n        const i = elemPath.getName();\n        const elem = elemPath.getValue();\n        if (!elem) {\n          parts.push(\",\");\n        } else {\n          let lines = printed[i];\n          if (oneLine) {\n            if (i > 0)\n              parts.push(\" \");\n          } else {\n            lines = lines.indent(options.tabWidth);\n          }\n          parts.push(lines);\n          if (i < n.types.length - 1 || !oneLine && isTrailingCommaEnabled(options, \"arrays\"))\n            parts.push(\",\");\n          if (!oneLine)\n            parts.push(\"\\n\");\n        }\n      }, \"types\");\n      if (oneLine && options.arrayBracketSpacing) {\n        parts.push(\" ]\");\n      } else {\n        parts.push(\"]\");\n      }\n      return concat(parts);\n    }\n    case \"BooleanTypeAnnotation\":\n      return fromString(\"boolean\", options);\n    case \"BooleanLiteralTypeAnnotation\":\n      return fromString(\"\" + n.value, options);\n    case \"InterfaceTypeAnnotation\":\n      parts.push(\"interface\");\n      if (n.extends && n.extends.length > 0) {\n        parts.push(\n          \" extends \",\n          fromString(\", \").join(path.map(print, \"extends\"))\n        );\n      }\n      parts.push(\" \", path.call(print, \"body\"));\n      return concat(parts);\n    case \"DeclareFunction\":\n      return printFlowDeclaration(path, [\n        \"function \",\n        path.call(print, \"id\"),\n        \";\"\n      ]);\n    case \"DeclareModule\":\n      return printFlowDeclaration(path, [\n        \"module \",\n        path.call(print, \"id\"),\n        \" \",\n        path.call(print, \"body\")\n      ]);\n    case \"DeclareModuleExports\":\n      return printFlowDeclaration(path, [\n        \"module.exports\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"DeclareVariable\":\n      return printFlowDeclaration(path, [\"var \", path.call(print, \"id\"), \";\"]);\n    case \"DeclareExportDeclaration\":\n    case \"DeclareExportAllDeclaration\":\n      return concat([\"declare \", printExportDeclaration(path, options, print)]);\n    case \"EnumDeclaration\":\n      return concat([\n        \"enum \",\n        path.call(print, \"id\"),\n        path.call(print, \"body\")\n      ]);\n    case \"EnumBooleanBody\":\n    case \"EnumNumberBody\":\n    case \"EnumStringBody\":\n    case \"EnumSymbolBody\": {\n      if (n.type === \"EnumSymbolBody\" || n.explicitType) {\n        parts.push(\n          \" of \",\n          // EnumBooleanBody => boolean, etc.\n          n.type.slice(4, -4).toLowerCase()\n        );\n      }\n      parts.push(\n        \" {\\n\",\n        fromString(\"\\n\").join(path.map(print, \"members\")).indent(options.tabWidth),\n        \"\\n}\"\n      );\n      return concat(parts);\n    }\n    case \"EnumDefaultedMember\":\n      return concat([path.call(print, \"id\"), \",\"]);\n    case \"EnumBooleanMember\":\n    case \"EnumNumberMember\":\n    case \"EnumStringMember\":\n      return concat([\n        path.call(print, \"id\"),\n        \" = \",\n        path.call(print, \"init\"),\n        \",\"\n      ]);\n    case \"InferredPredicate\":\n      return fromString(\"%checks\", options);\n    case \"DeclaredPredicate\":\n      return concat([\"%checks(\", path.call(print, \"value\"), \")\"]);\n    case \"FunctionTypeAnnotation\": {\n      const parent = path.getParentNode(0);\n      const isArrowFunctionTypeAnnotation = !(namedTypes.ObjectTypeCallProperty.check(parent) || namedTypes.ObjectTypeInternalSlot.check(parent) && parent.method || namedTypes.DeclareFunction.check(path.getParentNode(2)));\n      const needsColon = isArrowFunctionTypeAnnotation && !namedTypes.FunctionTypeParam.check(parent) && !namedTypes.TypeAlias.check(parent);\n      if (needsColon) {\n        parts.push(\": \");\n      }\n      const hasTypeParameters = !!n.typeParameters;\n      const needsParens = hasTypeParameters || n.params.length !== 1 || n.params[0].name;\n      parts.push(\n        hasTypeParameters ? path.call(print, \"typeParameters\") : \"\",\n        needsParens ? \"(\" : \"\",\n        printFunctionParams(path, options, print),\n        needsParens ? \")\" : \"\"\n      );\n      if (n.returnType) {\n        parts.push(\n          isArrowFunctionTypeAnnotation ? \" => \" : \": \",\n          path.call(print, \"returnType\")\n        );\n      }\n      return concat(parts);\n    }\n    case \"FunctionTypeParam\": {\n      const name = path.call(print, \"name\");\n      parts.push(name);\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (name.infos[0].line) {\n        parts.push(\": \");\n      }\n      parts.push(path.call(print, \"typeAnnotation\"));\n      return concat(parts);\n    }\n    case \"GenericTypeAnnotation\":\n      return concat([\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"DeclareInterface\":\n      parts.push(\"declare \");\n    case \"InterfaceDeclaration\":\n    case \"TSInterfaceDeclaration\":\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      parts.push(\n        \"interface \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" \"\n      );\n      if (n[\"extends\"] && n[\"extends\"].length > 0) {\n        parts.push(\n          \"extends \",\n          fromString(\", \").join(path.map(print, \"extends\")),\n          \" \"\n        );\n      }\n      if (n.body) {\n        parts.push(path.call(print, \"body\"));\n      }\n      return concat(parts);\n    case \"ClassImplements\":\n    case \"InterfaceExtends\":\n      return concat([\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"IntersectionTypeAnnotation\":\n      return fromString(\" & \").join(path.map(print, \"types\"));\n    case \"NullableTypeAnnotation\":\n      return concat([\"?\", path.call(print, \"typeAnnotation\")]);\n    case \"NullLiteralTypeAnnotation\":\n      return fromString(\"null\", options);\n    case \"ThisTypeAnnotation\":\n      return fromString(\"this\", options);\n    case \"NumberTypeAnnotation\":\n      return fromString(\"number\", options);\n    case \"ObjectTypeCallProperty\":\n      return path.call(print, \"value\");\n    case \"ObjectTypeIndexer\":\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      parts.push(printVariance(path, print), \"[\");\n      if (n.id) {\n        parts.push(path.call(print, \"id\"), \": \");\n      }\n      parts.push(path.call(print, \"key\"), \"]: \", path.call(print, \"value\"));\n      return concat(parts);\n    case \"ObjectTypeProperty\":\n      return concat([\n        printVariance(path, print),\n        path.call(print, \"key\"),\n        n.optional ? \"?\" : \"\",\n        \": \",\n        path.call(print, \"value\")\n      ]);\n    case \"ObjectTypeInternalSlot\":\n      return concat([\n        n.static ? \"static \" : \"\",\n        \"[[\",\n        path.call(print, \"id\"),\n        \"]]\",\n        n.optional ? \"?\" : \"\",\n        n.value.type !== \"FunctionTypeAnnotation\" ? \": \" : \"\",\n        path.call(print, \"value\")\n      ]);\n    case \"QualifiedTypeIdentifier\":\n      return concat([\n        path.call(print, \"qualification\"),\n        \".\",\n        path.call(print, \"id\")\n      ]);\n    case \"StringLiteralTypeAnnotation\":\n      return fromString(nodeStr(n.value, options), options);\n    case \"NumberLiteralTypeAnnotation\":\n    case \"NumericLiteralTypeAnnotation\":\n      return fromString(JSON.stringify(n.value), options);\n    case \"BigIntLiteralTypeAnnotation\":\n      return fromString(n.raw, options);\n    case \"StringTypeAnnotation\":\n      return fromString(\"string\", options);\n    case \"DeclareTypeAlias\":\n      parts.push(\"declare \");\n    case \"TypeAlias\":\n      return concat([\n        \"type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" = \",\n        path.call(print, \"right\"),\n        \";\"\n      ]);\n    case \"DeclareOpaqueType\":\n      parts.push(\"declare \");\n    case \"OpaqueType\":\n      parts.push(\n        \"opaque type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      );\n      if (n[\"supertype\"]) {\n        parts.push(\": \", path.call(print, \"supertype\"));\n      }\n      if (n[\"impltype\"]) {\n        parts.push(\" = \", path.call(print, \"impltype\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    case \"TypeCastExpression\":\n      return concat([\n        \"(\",\n        path.call(print, \"expression\"),\n        path.call(print, \"typeAnnotation\"),\n        \")\"\n      ]);\n    case \"TypeParameterDeclaration\":\n    case \"TypeParameterInstantiation\":\n      return concat([\n        \"<\",\n        fromString(\", \").join(path.map(print, \"params\")),\n        \">\"\n      ]);\n    case \"Variance\":\n      if (n.kind === \"plus\") {\n        return fromString(\"+\");\n      }\n      if (n.kind === \"minus\") {\n        return fromString(\"-\");\n      }\n      return fromString(\"\");\n    case \"TypeParameter\":\n      if (n.variance) {\n        parts.push(printVariance(path, print));\n      }\n      parts.push(path.call(print, \"name\"));\n      if (n.bound) {\n        parts.push(path.call(print, \"bound\"));\n      }\n      if (n[\"default\"]) {\n        parts.push(\"=\", path.call(print, \"default\"));\n      }\n      return concat(parts);\n    case \"TypeofTypeAnnotation\":\n      return concat([\n        fromString(\"typeof \", options),\n        path.call(print, \"argument\")\n      ]);\n    case \"IndexedAccessType\":\n    case \"OptionalIndexedAccessType\":\n      return concat([\n        path.call(print, \"objectType\"),\n        n.optional ? \"?.\" : \"\",\n        \"[\",\n        path.call(print, \"indexType\"),\n        \"]\"\n      ]);\n    case \"UnionTypeAnnotation\":\n      return fromString(\" | \").join(path.map(print, \"types\"));\n    case \"VoidTypeAnnotation\":\n      return fromString(\"void\", options);\n    case \"NullTypeAnnotation\":\n      return fromString(\"null\", options);\n    case \"SymbolTypeAnnotation\":\n      return fromString(\"symbol\", options);\n    case \"BigIntTypeAnnotation\":\n      return fromString(\"bigint\", options);\n    case \"TSType\":\n      throw new Error(\"unprintable type: \" + JSON.stringify(n.type));\n    case \"TSNumberKeyword\":\n      return fromString(\"number\", options);\n    case \"TSBigIntKeyword\":\n      return fromString(\"bigint\", options);\n    case \"TSObjectKeyword\":\n      return fromString(\"object\", options);\n    case \"TSBooleanKeyword\":\n      return fromString(\"boolean\", options);\n    case \"TSStringKeyword\":\n      return fromString(\"string\", options);\n    case \"TSSymbolKeyword\":\n      return fromString(\"symbol\", options);\n    case \"TSAnyKeyword\":\n      return fromString(\"any\", options);\n    case \"TSVoidKeyword\":\n      return fromString(\"void\", options);\n    case \"TSIntrinsicKeyword\":\n      return fromString(\"intrinsic\", options);\n    case \"TSThisType\":\n      return fromString(\"this\", options);\n    case \"TSNullKeyword\":\n      return fromString(\"null\", options);\n    case \"TSUndefinedKeyword\":\n      return fromString(\"undefined\", options);\n    case \"TSUnknownKeyword\":\n      return fromString(\"unknown\", options);\n    case \"TSNeverKeyword\":\n      return fromString(\"never\", options);\n    case \"TSArrayType\":\n      return concat([path.call(print, \"elementType\"), \"[]\"]);\n    case \"TSLiteralType\":\n      return path.call(print, \"literal\");\n    case \"TSUnionType\":\n      return fromString(\" | \").join(path.map(print, \"types\"));\n    case \"TSIntersectionType\":\n      return fromString(\" & \").join(path.map(print, \"types\"));\n    case \"TSConditionalType\":\n      parts.push(\n        path.call(print, \"checkType\"),\n        \" extends \",\n        path.call(print, \"extendsType\"),\n        \" ? \",\n        path.call(print, \"trueType\"),\n        \" : \",\n        path.call(print, \"falseType\")\n      );\n      return concat(parts);\n    case \"TSInferType\":\n      parts.push(\"infer \", path.call(print, \"typeParameter\"));\n      return concat(parts);\n    case \"TSParenthesizedType\":\n      return concat([\"(\", path.call(print, \"typeAnnotation\"), \")\"]);\n    case \"TSFunctionType\":\n      return concat([\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \") => \",\n        path.call(print, \"typeAnnotation\", \"typeAnnotation\")\n      ]);\n    case \"TSConstructorType\":\n      return concat([\n        \"new \",\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \") => \",\n        path.call(print, \"typeAnnotation\", \"typeAnnotation\")\n      ]);\n    case \"TSMappedType\": {\n      parts.push(\n        n.readonly ? \"readonly \" : \"\",\n        \"[\",\n        path.call(print, \"typeParameter\"),\n        \"]\",\n        n.optional ? \"?\" : \"\"\n      );\n      if (n.typeAnnotation) {\n        parts.push(\": \", path.call(print, \"typeAnnotation\"), \";\");\n      }\n      return concat([\"{\\n\", concat(parts).indent(options.tabWidth), \"\\n}\"]);\n    }\n    case \"TSTupleType\":\n      return concat([\n        \"[\",\n        fromString(\", \").join(path.map(print, \"elementTypes\")),\n        \"]\"\n      ]);\n    case \"TSNamedTupleMember\":\n      parts.push(path.call(print, \"label\"));\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      parts.push(\": \", path.call(print, \"elementType\"));\n      return concat(parts);\n    case \"TSRestType\":\n      return concat([\"...\", path.call(print, \"typeAnnotation\")]);\n    case \"TSOptionalType\":\n      return concat([path.call(print, \"typeAnnotation\"), \"?\"]);\n    case \"TSIndexedAccessType\":\n      return concat([\n        path.call(print, \"objectType\"),\n        \"[\",\n        path.call(print, \"indexType\"),\n        \"]\"\n      ]);\n    case \"TSTypeOperator\":\n      return concat([\n        path.call(print, \"operator\"),\n        \" \",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSTypeLiteral\": {\n      const members = fromString(\"\\n\").join(\n        path.map(print, \"members\").map((member) => {\n          if (lastNonSpaceCharacter(member) !== \";\") {\n            return member.concat(\";\");\n          }\n          return member;\n        })\n      );\n      if (members.isEmpty()) {\n        return fromString(\"{}\", options);\n      }\n      parts.push(\"{\\n\", members.indent(options.tabWidth), \"\\n}\");\n      return concat(parts);\n    }\n    case \"TSEnumMember\":\n      parts.push(path.call(print, \"id\"));\n      if (n.initializer) {\n        parts.push(\" = \", path.call(print, \"initializer\"));\n      }\n      return concat(parts);\n    case \"TSTypeQuery\":\n      return concat([\"typeof \", path.call(print, \"exprName\")]);\n    case \"TSParameterProperty\":\n      if (n.accessibility) {\n        parts.push(n.accessibility, \" \");\n      }\n      if (n.export) {\n        parts.push(\"export \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.readonly) {\n        parts.push(\"readonly \");\n      }\n      parts.push(path.call(print, \"parameter\"));\n      return concat(parts);\n    case \"TSTypeReference\":\n      return concat([\n        path.call(print, \"typeName\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"TSQualifiedName\":\n      return concat([path.call(print, \"left\"), \".\", path.call(print, \"right\")]);\n    case \"TSAsExpression\":\n    case \"TSSatisfiesExpression\": {\n      const expression = path.call(print, \"expression\");\n      parts.push(\n        expression,\n        n.type === \"TSSatisfiesExpression\" ? \" satisfies \" : \" as \",\n        path.call(print, \"typeAnnotation\")\n      );\n      return concat(parts);\n    }\n    case \"TSTypeCastExpression\":\n      return concat([\n        path.call(print, \"expression\"),\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSNonNullExpression\":\n      return concat([path.call(print, \"expression\"), \"!\"]);\n    case \"TSTypeAnnotation\":\n      return concat([\": \", path.call(print, \"typeAnnotation\")]);\n    case \"TSIndexSignature\":\n      return concat([\n        n.readonly ? \"readonly \" : \"\",\n        \"[\",\n        path.map(print, \"parameters\"),\n        \"]\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSPropertySignature\":\n      parts.push(printVariance(path, print), n.readonly ? \"readonly \" : \"\");\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(path.call(print, \"key\"));\n      }\n      parts.push(n.optional ? \"?\" : \"\", path.call(print, \"typeAnnotation\"));\n      return concat(parts);\n    case \"TSMethodSignature\":\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(path.call(print, \"key\"));\n      }\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      parts.push(\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"typeAnnotation\")\n      );\n      return concat(parts);\n    case \"TSTypePredicate\":\n      if (n.asserts) {\n        parts.push(\"asserts \");\n      }\n      parts.push(path.call(print, \"parameterName\"));\n      if (n.typeAnnotation) {\n        parts.push(\n          \" is \",\n          path.call(print, \"typeAnnotation\", \"typeAnnotation\")\n        );\n      }\n      return concat(parts);\n    case \"TSCallSignatureDeclaration\":\n      return concat([\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSConstructSignatureDeclaration\":\n      if (n.typeParameters) {\n        parts.push(\"new\", path.call(print, \"typeParameters\"));\n      } else {\n        parts.push(\"new \");\n      }\n      parts.push(\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"typeAnnotation\")\n      );\n      return concat(parts);\n    case \"TSTypeAliasDeclaration\":\n      return concat([\n        n.declare ? \"declare \" : \"\",\n        \"type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" = \",\n        path.call(print, \"typeAnnotation\"),\n        \";\"\n      ]);\n    case \"TSTypeParameter\": {\n      parts.push(path.call(print, \"name\"));\n      const parent = path.getParentNode(0);\n      const isInMappedType = namedTypes.TSMappedType.check(parent);\n      if (n.constraint) {\n        parts.push(\n          isInMappedType ? \" in \" : \" extends \",\n          path.call(print, \"constraint\")\n        );\n      }\n      if (n[\"default\"]) {\n        parts.push(\" = \", path.call(print, \"default\"));\n      }\n      return concat(parts);\n    }\n    case \"TSTypeAssertion\": {\n      parts.push(\n        \"<\",\n        path.call(print, \"typeAnnotation\"),\n        \"> \",\n        path.call(print, \"expression\")\n      );\n      return concat(parts);\n    }\n    case \"TSTypeParameterDeclaration\":\n    case \"TSTypeParameterInstantiation\":\n      return concat([\n        \"<\",\n        fromString(\", \").join(path.map(print, \"params\")),\n        \">\"\n      ]);\n    case \"TSEnumDeclaration\": {\n      parts.push(\n        n.declare ? \"declare \" : \"\",\n        n.const ? \"const \" : \"\",\n        \"enum \",\n        path.call(print, \"id\")\n      );\n      const memberLines = fromString(\",\\n\").join(path.map(print, \"members\"));\n      if (memberLines.isEmpty()) {\n        parts.push(\" {}\");\n      } else {\n        parts.push(\" {\\n\", memberLines.indent(options.tabWidth), \"\\n}\");\n      }\n      return concat(parts);\n    }\n    case \"TSExpressionWithTypeArguments\":\n      return concat([\n        path.call(print, \"expression\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"TSInterfaceBody\": {\n      const lines = fromString(\"\\n\").join(\n        path.map(print, \"body\").map((element) => {\n          if (lastNonSpaceCharacter(element) !== \";\") {\n            return element.concat(\";\");\n          }\n          return element;\n        })\n      );\n      if (lines.isEmpty()) {\n        return fromString(\"{}\", options);\n      }\n      return concat([\"{\\n\", lines.indent(options.tabWidth), \"\\n}\"]);\n    }\n    case \"TSImportType\":\n      parts.push(\"import(\", path.call(print, \"argument\"), \")\");\n      if (n.qualifier) {\n        parts.push(\".\", path.call(print, \"qualifier\"));\n      }\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      return concat(parts);\n    case \"TSImportEqualsDeclaration\":\n      if (n.isExport) {\n        parts.push(\"export \");\n      }\n      parts.push(\n        \"import \",\n        path.call(print, \"id\"),\n        \" = \",\n        path.call(print, \"moduleReference\")\n      );\n      return maybeAddSemicolon(concat(parts));\n    case \"TSExternalModuleReference\":\n      return concat([\"require(\", path.call(print, \"expression\"), \")\"]);\n    case \"TSModuleDeclaration\": {\n      const parent = path.getParentNode();\n      if (parent.type === \"TSModuleDeclaration\") {\n        parts.push(\".\");\n      } else {\n        if (n.declare) {\n          parts.push(\"declare \");\n        }\n        if (!n.global) {\n          const isExternal = n.id.type === \"StringLiteral\" || n.id.type === \"Literal\" && typeof n.id.value === \"string\";\n          if (isExternal) {\n            parts.push(\"module \");\n          } else if (n.loc && n.loc.lines && n.id.loc) {\n            const prefix = n.loc.lines.sliceString(n.loc.start, n.id.loc.start);\n            if (prefix.indexOf(\"module\") >= 0) {\n              parts.push(\"module \");\n            } else {\n              parts.push(\"namespace \");\n            }\n          } else {\n            parts.push(\"namespace \");\n          }\n        }\n      }\n      parts.push(path.call(print, \"id\"));\n      if (n.body) {\n        parts.push(\" \");\n        parts.push(path.call(print, \"body\"));\n      }\n      return concat(parts);\n    }\n    case \"TSModuleBlock\": {\n      const naked = path.call(\n        (bodyPath) => printStatementSequence(bodyPath, options, print),\n        \"body\"\n      );\n      if (naked.isEmpty()) {\n        parts.push(\"{}\");\n      } else {\n        parts.push(\"{\\n\", naked.indent(options.tabWidth), \"\\n}\");\n      }\n      return concat(parts);\n    }\n    case \"TSInstantiationExpression\": {\n      parts.push(\n        path.call(print, \"expression\"),\n        path.call(print, \"typeParameters\")\n      );\n      return concat(parts);\n    }\n    case \"V8IntrinsicIdentifier\":\n      return concat([\"%\", path.call(print, \"name\")]);\n    case \"TopicReference\":\n      return fromString(\"#\");\n    case \"ClassHeritage\":\n    case \"ComprehensionBlock\":\n    case \"ComprehensionExpression\":\n    case \"Glob\":\n    case \"GeneratorExpression\":\n    case \"LetStatement\":\n    case \"LetExpression\":\n    case \"GraphExpression\":\n    case \"GraphIndexExpression\":\n    case \"XMLDefaultDeclaration\":\n    case \"XMLAnyName\":\n    case \"XMLQualifiedIdentifier\":\n    case \"XMLFunctionQualifiedIdentifier\":\n    case \"XMLAttributeSelector\":\n    case \"XMLFilterExpression\":\n    case \"XML\":\n    case \"XMLElement\":\n    case \"XMLList\":\n    case \"XMLEscape\":\n    case \"XMLText\":\n    case \"XMLStartTag\":\n    case \"XMLEndTag\":\n    case \"XMLPointTag\":\n    case \"XMLName\":\n    case \"XMLAttribute\":\n    case \"XMLCdata\":\n    case \"XMLComment\":\n    case \"XMLProcessingInstruction\":\n    default:\n      debugger;\n      throw new Error(\"unknown type: \" + JSON.stringify(n.type));\n  }\n}\nfunction printDecorators(path, printPath) {\n  const parts = [];\n  const node = path.getValue();\n  if (node.decorators && node.decorators.length > 0 && // If the parent node is an export declaration, it will be\n  // responsible for printing node.decorators.\n  !getParentExportDeclaration(path)) {\n    path.each(function(decoratorPath) {\n      parts.push(printPath(decoratorPath), \"\\n\");\n    }, \"decorators\");\n  } else if (isExportDeclaration(node) && node.declaration && node.declaration.decorators) {\n    path.each(\n      function(decoratorPath) {\n        parts.push(printPath(decoratorPath), \"\\n\");\n      },\n      \"declaration\",\n      \"decorators\"\n    );\n  }\n  return concat(parts);\n}\nfunction printStatementSequence(path, options, print) {\n  const filtered = [];\n  path.each(function(stmtPath) {\n    const stmt = stmtPath.getValue();\n    if (!stmt) {\n      return;\n    }\n    if (stmt.type === \"EmptyStatement\" && !(stmt.comments && stmt.comments.length > 0)) {\n      return;\n    }\n    if (namedTypes.Comment.check(stmt)) ; else if (namedTypes.Statement.check(stmt)) ; else {\n      isString.assert(stmt);\n    }\n    filtered.push({\n      node: stmt,\n      printed: print(stmtPath)\n    });\n  });\n  let prevTrailingSpace = null;\n  const len = filtered.length;\n  const parts = [];\n  filtered.forEach(function(info, i) {\n    const printed = info.printed;\n    const stmt = info.node;\n    const multiLine = printed.length > 1;\n    const notFirst = i > 0;\n    const notLast = i < len - 1;\n    let leadingSpace;\n    let trailingSpace;\n    const lines = stmt && stmt.loc && stmt.loc.lines;\n    const trueLoc = lines && options.reuseWhitespace && getTrueLoc(stmt, lines);\n    if (notFirst) {\n      if (trueLoc) {\n        const beforeStart = lines.skipSpaces(trueLoc.start, true);\n        const beforeStartLine = beforeStart ? beforeStart.line : 1;\n        const leadingGap = trueLoc.start.line - beforeStartLine;\n        leadingSpace = Array(leadingGap + 1).join(\"\\n\");\n      } else {\n        leadingSpace = multiLine ? \"\\n\\n\" : \"\\n\";\n      }\n    } else {\n      leadingSpace = \"\";\n    }\n    if (notLast) {\n      if (trueLoc) {\n        const afterEnd = lines.skipSpaces(trueLoc.end);\n        const afterEndLine = afterEnd ? afterEnd.line : lines.length;\n        const trailingGap = afterEndLine - trueLoc.end.line;\n        trailingSpace = Array(trailingGap + 1).join(\"\\n\");\n      } else {\n        trailingSpace = multiLine ? \"\\n\\n\" : \"\\n\";\n      }\n    } else {\n      trailingSpace = \"\";\n    }\n    parts.push(maxSpace(prevTrailingSpace, leadingSpace), printed);\n    if (notLast) {\n      prevTrailingSpace = trailingSpace;\n    } else if (trailingSpace) {\n      parts.push(trailingSpace);\n    }\n  });\n  return concat(parts);\n}\nfunction maxSpace(s1, s2) {\n  if (!s1 && !s2) {\n    return fromString(\"\");\n  }\n  if (!s1) {\n    return fromString(s2);\n  }\n  if (!s2) {\n    return fromString(s1);\n  }\n  const spaceLines1 = fromString(s1);\n  const spaceLines2 = fromString(s2);\n  if (spaceLines2.length > spaceLines1.length) {\n    return spaceLines2;\n  }\n  return spaceLines1;\n}\nfunction printClassMemberModifiers(node) {\n  const parts = [];\n  if (node.declare) {\n    parts.push(\"declare \");\n  }\n  const access = node.accessibility || node.access;\n  if (typeof access === \"string\") {\n    parts.push(access, \" \");\n  }\n  if (node.static) {\n    parts.push(\"static \");\n  }\n  if (node.override) {\n    parts.push(\"override \");\n  }\n  if (node.abstract) {\n    parts.push(\"abstract \");\n  }\n  if (node.readonly) {\n    parts.push(\"readonly \");\n  }\n  return parts;\n}\nfunction printMethod(path, options, print) {\n  const node = path.getNode();\n  const kind = node.kind;\n  const parts = [];\n  let nodeValue = node.value;\n  if (!namedTypes.FunctionExpression.check(nodeValue)) {\n    nodeValue = node;\n  }\n  parts.push(...printClassMemberModifiers(node));\n  if (nodeValue.async) {\n    parts.push(\"async \");\n  }\n  if (nodeValue.generator) {\n    parts.push(\"*\");\n  }\n  if (kind === \"get\" || kind === \"set\") {\n    parts.push(kind, \" \");\n  }\n  let key = path.call(print, \"key\");\n  if (node.computed) {\n    key = concat([\"[\", key, \"]\"]);\n  }\n  parts.push(key);\n  if (node.optional) {\n    parts.push(\"?\");\n  }\n  if (node === nodeValue) {\n    parts.push(\n      path.call(print, \"typeParameters\"),\n      \"(\",\n      printFunctionParams(path, options, print),\n      \")\",\n      path.call(print, \"returnType\")\n    );\n    if (node.body) {\n      parts.push(\" \", path.call(print, \"body\"));\n    } else {\n      parts.push(\";\");\n    }\n  } else {\n    parts.push(\n      path.call(print, \"value\", \"typeParameters\"),\n      \"(\",\n      path.call(\n        (valuePath) => printFunctionParams(valuePath, options, print),\n        \"value\"\n      ),\n      \")\",\n      path.call(print, \"value\", \"returnType\")\n    );\n    if (nodeValue.body) {\n      parts.push(\" \", path.call(print, \"value\", \"body\"));\n    } else {\n      parts.push(\";\");\n    }\n  }\n  return concat(parts);\n}\nfunction printArgumentsList(path, options, print) {\n  const printed = path.map(print, \"arguments\");\n  const trailingComma = isTrailingCommaEnabled(options, \"parameters\");\n  let joined = fromString(\", \").join(printed);\n  if (joined.getLineLength(1) > options.wrapColumn) {\n    joined = fromString(\",\\n\").join(printed);\n    return concat([\n      \"(\\n\",\n      joined.indent(options.tabWidth),\n      trailingComma ? \",\\n)\" : \"\\n)\"\n    ]);\n  }\n  return concat([\"(\", joined, \")\"]);\n}\nfunction printFunctionParams(path, options, print) {\n  const fun = path.getValue();\n  let params;\n  let printed = [];\n  if (fun.params) {\n    params = fun.params;\n    printed = path.map(print, \"params\");\n  } else if (fun.parameters) {\n    params = fun.parameters;\n    printed = path.map(print, \"parameters\");\n  }\n  if (fun.defaults) {\n    path.each(function(defExprPath) {\n      const i = defExprPath.getName();\n      const p = printed[i];\n      if (p && defExprPath.getValue()) {\n        printed[i] = concat([p, \" = \", print(defExprPath)]);\n      }\n    }, \"defaults\");\n  }\n  if (fun.rest) {\n    printed.push(concat([\"...\", path.call(print, \"rest\")]));\n  }\n  let joined = fromString(\", \").join(printed);\n  if (joined.length > 1 || joined.getLineLength(1) > options.wrapColumn) {\n    joined = fromString(\",\\n\").join(printed);\n    if (isTrailingCommaEnabled(options, \"parameters\") && !fun.rest && params[params.length - 1].type !== \"RestElement\") {\n      joined = concat([joined, \",\\n\"]);\n    } else {\n      joined = concat([joined, \"\\n\"]);\n    }\n    return concat([\"\\n\", joined.indent(options.tabWidth)]);\n  }\n  return joined;\n}\nfunction maybePrintImportAssertions(path, options, print) {\n  const n = path.getValue();\n  if (n.assertions && n.assertions.length > 0) {\n    const parts = [\" assert {\"];\n    const printed = path.map(print, \"assertions\");\n    const flat = fromString(\", \").join(printed);\n    if (flat.length > 1 || flat.getLineLength(1) > options.wrapColumn) {\n      parts.push(\n        \"\\n\",\n        fromString(\",\\n\").join(printed).indent(options.tabWidth),\n        \"\\n}\"\n      );\n    } else {\n      parts.push(\" \", flat, \" }\");\n    }\n    return concat(parts);\n  }\n  return fromString(\"\");\n}\nfunction printExportDeclaration(path, options, print) {\n  const decl = path.getValue();\n  const parts = [\"export \"];\n  if (decl.exportKind && decl.exportKind === \"type\") {\n    if (!decl.declaration) {\n      parts.push(\"type \");\n    }\n  }\n  const shouldPrintSpaces = options.objectCurlySpacing;\n  namedTypes.Declaration.assert(decl);\n  if (decl[\"default\"] || decl.type === \"ExportDefaultDeclaration\") {\n    parts.push(\"default \");\n  }\n  if (decl.declaration) {\n    parts.push(path.call(print, \"declaration\"));\n  } else if (decl.specifiers) {\n    if (decl.specifiers.length === 1 && decl.specifiers[0].type === \"ExportBatchSpecifier\") {\n      parts.push(\"*\");\n    } else if (decl.specifiers.length === 0) {\n      parts.push(\"{}\");\n    } else if (decl.specifiers[0].type === \"ExportDefaultSpecifier\") {\n      const unbracedSpecifiers = [];\n      const bracedSpecifiers = [];\n      path.each(function(specifierPath) {\n        const spec = specifierPath.getValue();\n        if (spec.type === \"ExportDefaultSpecifier\") {\n          unbracedSpecifiers.push(print(specifierPath));\n        } else {\n          bracedSpecifiers.push(print(specifierPath));\n        }\n      }, \"specifiers\");\n      unbracedSpecifiers.forEach((lines2, i) => {\n        if (i > 0) {\n          parts.push(\", \");\n        }\n        parts.push(lines2);\n      });\n      if (bracedSpecifiers.length > 0) {\n        let lines2 = fromString(\", \").join(bracedSpecifiers);\n        if (lines2.getLineLength(1) > options.wrapColumn) {\n          lines2 = concat([\n            fromString(\",\\n\").join(bracedSpecifiers).indent(options.tabWidth),\n            \",\"\n          ]);\n        }\n        if (unbracedSpecifiers.length > 0) {\n          parts.push(\", \");\n        }\n        if (lines2.length > 1) {\n          parts.push(\"{\\n\", lines2, \"\\n}\");\n        } else if (options.objectCurlySpacing) {\n          parts.push(\"{ \", lines2, \" }\");\n        } else {\n          parts.push(\"{\", lines2, \"}\");\n        }\n      }\n    } else {\n      parts.push(\n        shouldPrintSpaces ? \"{ \" : \"{\",\n        fromString(\", \").join(path.map(print, \"specifiers\")),\n        shouldPrintSpaces ? \" }\" : \"}\"\n      );\n    }\n    if (decl.source) {\n      parts.push(\n        \" from \",\n        path.call(print, \"source\"),\n        maybePrintImportAssertions(path, options, print)\n      );\n    }\n  }\n  let lines = concat(parts);\n  if (lastNonSpaceCharacter(lines) !== \";\" && !(decl.declaration && (decl.declaration.type === \"FunctionDeclaration\" || decl.declaration.type === \"ClassDeclaration\" || decl.declaration.type === \"TSModuleDeclaration\" || decl.declaration.type === \"TSInterfaceDeclaration\" || decl.declaration.type === \"TSEnumDeclaration\"))) {\n    lines = concat([lines, \";\"]);\n  }\n  return lines;\n}\nfunction printFlowDeclaration(path, parts) {\n  const parentExportDecl = getParentExportDeclaration(path);\n  if (parentExportDecl) ; else {\n    parts.unshift(\"declare \");\n  }\n  return concat(parts);\n}\nfunction printVariance(path, print) {\n  return path.call(function(variancePath) {\n    const value = variancePath.getValue();\n    if (value) {\n      if (value === \"plus\") {\n        return fromString(\"+\");\n      }\n      if (value === \"minus\") {\n        return fromString(\"-\");\n      }\n      return print(variancePath);\n    }\n    return fromString(\"\");\n  }, \"variance\");\n}\nfunction adjustClause(clause, options) {\n  if (clause.length > 1)\n    return concat([\" \", clause]);\n  return concat([\"\\n\", maybeAddSemicolon(clause).indent(options.tabWidth)]);\n}\nfunction lastNonSpaceCharacter(lines) {\n  const pos = lines.lastPos();\n  do {\n    const ch = lines.charAt(pos);\n    if (/\\S/.test(ch))\n      return ch;\n  } while (lines.prevPos(pos));\n}\nfunction endsWithBrace(lines) {\n  return lastNonSpaceCharacter(lines) === \"}\";\n}\nfunction swapQuotes(str) {\n  return str.replace(/['\"]/g, (m) => m === '\"' ? \"'\" : '\"');\n}\nfunction getPossibleRaw(node) {\n  const value = getFieldValue(node, \"value\");\n  const extra = getFieldValue(node, \"extra\");\n  if (extra && typeof extra.raw === \"string\" && value == extra.rawValue) {\n    return extra.raw;\n  }\n  if (node.type === \"Literal\") {\n    const raw = node.raw;\n    if (typeof raw === \"string\" && value == raw) {\n      return raw;\n    }\n  }\n}\nfunction jsSafeStringify(str) {\n  return JSON.stringify(str).replace(/[\\u2028\\u2029]/g, function(m) {\n    return \"\\\\u\" + m.charCodeAt(0).toString(16);\n  });\n}\nfunction nodeStr(str, options) {\n  isString.assert(str);\n  switch (options.quote) {\n    case \"auto\": {\n      const double = jsSafeStringify(str);\n      const single = swapQuotes(jsSafeStringify(swapQuotes(str)));\n      return double.length > single.length ? single : double;\n    }\n    case \"single\":\n      return swapQuotes(jsSafeStringify(swapQuotes(str)));\n    case \"double\":\n    default:\n      return jsSafeStringify(str);\n  }\n}\nfunction maybeAddSemicolon(lines) {\n  const eoc = lastNonSpaceCharacter(lines);\n  if (!eoc || \"\\n};\".indexOf(eoc) < 0)\n    return concat([lines, \";\"]);\n  return lines;\n}\n\nfunction print(node, options) {\n  return new Printer(options).print(node);\n}\n\nlet _babelParser;\nfunction getBabelParser() {\n  if (_babelParser) {\n    return _babelParser;\n  }\n  const babelOptions = _getBabelOptions();\n  _babelParser = {\n    parse(source, options) {\n      return babelParser.parse(source, {\n        ...babelOptions,\n        ...options\n      });\n    }\n  };\n  return _babelParser;\n}\nfunction _getBabelOptions() {\n  return {\n    sourceType: \"module\",\n    strictMode: false,\n    allowImportExportEverywhere: true,\n    allowReturnOutsideFunction: true,\n    startLine: 1,\n    tokens: true,\n    plugins: [\n      \"asyncGenerators\",\n      \"bigInt\",\n      \"classPrivateMethods\",\n      \"classPrivateProperties\",\n      \"classProperties\",\n      \"classStaticBlock\",\n      \"decimal\",\n      \"decorators-legacy\",\n      \"doExpressions\",\n      \"dynamicImport\",\n      \"exportDefaultFrom\",\n      \"exportExtensions\",\n      \"exportNamespaceFrom\",\n      \"functionBind\",\n      \"functionSent\",\n      \"importAssertions\",\n      \"importMeta\",\n      \"nullishCoalescingOperator\",\n      \"numericSeparator\",\n      \"objectRestSpread\",\n      \"optionalCatchBinding\",\n      \"optionalChaining\",\n      [\n        \"pipelineOperator\",\n        {\n          proposal: \"minimal\"\n        }\n      ],\n      [\n        \"recordAndTuple\",\n        {\n          syntaxType: \"hash\"\n        }\n      ],\n      \"throwExpressions\",\n      \"topLevelAwait\",\n      \"v8intrinsic\",\n      \"jsx\",\n      \"typescript\"\n    ]\n  };\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass MagicastError extends Error {\n  constructor(message, options) {\n    super(\"\");\n    __publicField(this, \"rawMessage\");\n    __publicField(this, \"options\");\n    this.name = \"MagicastError\";\n    this.rawMessage = message;\n    this.options = options;\n    if (options?.ast && options?.code && options.ast.loc) {\n      const { line, column } = options.ast.loc.start;\n      const lines = options.code.split(\"\\n\");\n      const start = Math.max(0, line - 3);\n      const end = Math.min(lines.length, line + 3);\n      const codeFrame = lines.slice(start, end).map((lineCode, i) => {\n        const number = (start + i + 1).toString().padStart(3, \" \");\n        lineCode = `${number} | ${lineCode}`;\n        if (start + i === line - 1) {\n          lineCode += `\n${\" \".repeat(6 + column)}^`;\n        }\n        return lineCode;\n      });\n      message += `\n\n${codeFrame.join(\"\\n\")}\n`;\n    }\n    this.message = message;\n  }\n}\n\nconst LITERALS_AST = /* @__PURE__ */ new Set([\n  \"Literal\",\n  \"StringLiteral\",\n  \"NumericLiteral\",\n  \"BooleanLiteral\",\n  \"NullLiteral\",\n  \"RegExpLiteral\",\n  \"BigIntLiteral\"\n]);\nconst LITERALS_TYPEOF = /* @__PURE__ */ new Set([\n  \"string\",\n  \"number\",\n  \"boolean\",\n  \"bigint\",\n  \"symbol\",\n  \"undefined\"\n]);\nconst b$4 = builders$1;\nfunction isValidPropName(name) {\n  return /^[$A-Z_a-z][\\w$]*$/.test(name);\n}\nconst PROXY_KEY = \"__magicast_proxy\";\nfunction literalToAst(value, seen = /* @__PURE__ */ new Set()) {\n  if (value === void 0) {\n    return b$4.identifier(\"undefined\");\n  }\n  if (value === null) {\n    return b$4.literal(null);\n  }\n  if (LITERALS_TYPEOF.has(typeof value)) {\n    return b$4.literal(value);\n  }\n  if (seen.has(value)) {\n    throw new MagicastError(\"Can not serialize circular reference\");\n  }\n  seen.add(value);\n  if (value[PROXY_KEY]) {\n    return value.$ast;\n  }\n  if (value instanceof RegExp) {\n    const regex = b$4.regExpLiteral(value.source, value.flags);\n    delete regex.extra.raw;\n    return regex;\n  }\n  if (value instanceof Set) {\n    return b$4.newExpression(b$4.identifier(\"Set\"), [\n      b$4.arrayExpression([...value].map((n) => literalToAst(n, seen)))\n    ]);\n  }\n  if (value instanceof Date) {\n    return b$4.newExpression(b$4.identifier(\"Date\"), [\n      b$4.literal(value.toISOString())\n    ]);\n  }\n  if (value instanceof Map) {\n    return b$4.newExpression(b$4.identifier(\"Map\"), [\n      b$4.arrayExpression(\n        [...value].map(([key, value2]) => {\n          return b$4.arrayExpression([\n            literalToAst(key, seen),\n            literalToAst(value2, seen)\n          ]);\n        })\n      )\n    ]);\n  }\n  if (Array.isArray(value)) {\n    return b$4.arrayExpression(\n      value.map((n) => literalToAst(n, seen))\n    );\n  }\n  if (typeof value === \"object\") {\n    return b$4.objectExpression(\n      Object.entries(value).map(([key, value2]) => {\n        return b$4.property(\n          \"init\",\n          /^[$A-Z_a-z][\\w$]*$/g.test(key) ? b$4.identifier(key) : b$4.literal(key),\n          literalToAst(value2, seen)\n        );\n      })\n    );\n  }\n  return b$4.literal(value);\n}\nfunction makeProxyUtils(node, extend = {}) {\n  const obj = extend;\n  obj[PROXY_KEY] = true;\n  obj.$ast = node;\n  obj.$type || (obj.$type = \"object\");\n  return obj;\n}\nconst propertyDescriptor = {\n  enumerable: true,\n  configurable: true\n};\nfunction createProxy(node, extend, handler) {\n  const utils = makeProxyUtils(node, extend);\n  return new Proxy(\n    {},\n    {\n      ownKeys() {\n        return Object.keys(utils).filter(\n          (i) => i !== PROXY_KEY && !i.startsWith(\"$\")\n        );\n      },\n      getOwnPropertyDescriptor() {\n        return propertyDescriptor;\n      },\n      has(_target, key) {\n        if (key in utils) {\n          return true;\n        }\n        return false;\n      },\n      ...handler,\n      get(target, key, receiver) {\n        if (key in utils) {\n          return utils[key];\n        }\n        if (handler.get) {\n          return handler.get(target, key, receiver);\n        }\n      },\n      set(target, key, value, receiver) {\n        if (key in utils) {\n          utils[key] = value;\n          return true;\n        }\n        if (handler.set) {\n          return handler.set(target, key, value, receiver);\n        }\n        return false;\n      }\n    }\n  );\n}\n\nconst b$3 = builders$1;\nconst _importProxyCache = /* @__PURE__ */ new WeakMap();\nfunction creatImportProxy(node, specifier, root) {\n  if (_importProxyCache.has(specifier)) {\n    return _importProxyCache.get(specifier);\n  }\n  const proxy = createProxy(\n    specifier,\n    {\n      get $declaration() {\n        return node;\n      },\n      get imported() {\n        if (specifier.type === \"ImportDefaultSpecifier\") {\n          return \"default\";\n        }\n        if (specifier.type === \"ImportNamespaceSpecifier\") {\n          return \"*\";\n        }\n        if (specifier.imported.type === \"Identifier\") {\n          return specifier.imported.name;\n        }\n        return specifier.imported.value;\n      },\n      set imported(value) {\n        if (specifier.type !== \"ImportSpecifier\") {\n          throw new MagicastError(\n            \"Changing import name is not yet implemented\"\n          );\n        }\n        if (specifier.imported.type === \"Identifier\") {\n          specifier.imported.name = value;\n        } else {\n          specifier.imported.value = value;\n        }\n      },\n      get local() {\n        return specifier.local.name;\n      },\n      set local(value) {\n        specifier.local.name = value;\n      },\n      get from() {\n        return node.source.value;\n      },\n      set from(value) {\n        if (value === node.source.value) {\n          return;\n        }\n        node.specifiers = node.specifiers.filter((s) => s !== specifier);\n        if (node.specifiers.length === 0) {\n          root.body = root.body.filter((s) => s !== node);\n        }\n        const declaration = root.body.find(\n          (i) => i.type === \"ImportDeclaration\" && i.source.value === value\n        );\n        if (declaration) {\n          declaration.specifiers.push(specifier);\n        } else {\n          root.body.unshift(\n            b$3.importDeclaration(\n              [specifier],\n              b$3.stringLiteral(value)\n            )\n          );\n        }\n      },\n      toJSON() {\n        return {\n          imported: this.imported,\n          local: this.local,\n          from: this.from\n        };\n      }\n    },\n    {\n      ownKeys() {\n        return [\"imported\", \"local\", \"from\", \"toJSON\"];\n      }\n    }\n  );\n  _importProxyCache.set(specifier, proxy);\n  return proxy;\n}\nfunction createImportsProxy(root, mod) {\n  const getAllImports = () => {\n    const imports = [];\n    for (const n of root.body) {\n      if (n.type === \"ImportDeclaration\") {\n        for (const specifier of n.specifiers) {\n          imports.push(creatImportProxy(n, specifier, root));\n        }\n      }\n    }\n    return imports;\n  };\n  const updateImport = (key, value, order) => {\n    const imports = getAllImports();\n    const item = imports.find((i) => i.local === key);\n    const local = value.local || key;\n    if (item) {\n      item.imported = value.imported;\n      item.local = local;\n      item.from = value.from;\n      return true;\n    }\n    const specifier = value.imported === \"default\" ? b$3.importDefaultSpecifier(b$3.identifier(local)) : value.imported === \"*\" ? b$3.importNamespaceSpecifier(b$3.identifier(local)) : b$3.importSpecifier(\n      b$3.identifier(value.imported),\n      b$3.identifier(local)\n    );\n    const declaration = imports.find(\n      (i) => i.from === value.from\n    )?.$declaration;\n    if (declaration) {\n      declaration.specifiers.push(specifier);\n    } else if (order === \"prepend\" || imports.length === 0) {\n      root.body.unshift(\n        b$3.importDeclaration([specifier], b$3.stringLiteral(value.from))\n      );\n    } else {\n      const lastImport = imports.at(-1).$declaration;\n      const lastImportIndex = root.body.indexOf(lastImport);\n      root.body.splice(\n        lastImportIndex + 1,\n        0,\n        b$3.importDeclaration([specifier], b$3.stringLiteral(value.from))\n      );\n    }\n    return true;\n  };\n  const removeImport = (key) => {\n    const item = getAllImports().find((i) => i.local === key);\n    if (!item) {\n      return false;\n    }\n    const node = item.$declaration;\n    const specifier = item.$ast;\n    node.specifiers = node.specifiers.filter((s) => s !== specifier);\n    if (node.specifiers.length === 0) {\n      root.body = root.body.filter((n) => n !== node);\n    }\n    return true;\n  };\n  const proxy = createProxy(\n    root,\n    {\n      $type: \"imports\",\n      $add(item) {\n        updateImport(item.local || item.imported, item, \"prepend\");\n      },\n      $prepend(item) {\n        updateImport(item.local || item.imported, item, \"prepend\");\n      },\n      $append(item) {\n        updateImport(item.local || item.imported, item, \"append\");\n      },\n      get $items() {\n        return getAllImports();\n      },\n      toJSON() {\n        return getAllImports().reduce((acc, i) => {\n          acc[i.local] = i;\n          return acc;\n        }, {});\n      }\n    },\n    {\n      get(_, prop) {\n        return getAllImports().find((i) => i.local === prop);\n      },\n      set(_, prop, value) {\n        return updateImport(prop, value, \"prepend\");\n      },\n      deleteProperty(_, prop) {\n        return removeImport(prop);\n      },\n      ownKeys() {\n        return getAllImports().map((i) => i.local);\n      },\n      has(_, prop) {\n        return getAllImports().some((i) => i.local === prop);\n      }\n    }\n  );\n  return proxy;\n}\n\nfunction proxifyArrayElements(node, elements, mod) {\n  const getItem = (key) => {\n    return elements[key];\n  };\n  const replaceItem = (key, value) => {\n    elements[key] = value;\n  };\n  return createProxy(\n    node,\n    {\n      $type: \"array\",\n      push(value) {\n        elements.push(literalToAst(value));\n      },\n      pop() {\n        return proxify(elements.pop(), mod);\n      },\n      unshift(value) {\n        elements.unshift(literalToAst(value));\n      },\n      shift() {\n        return proxify(elements.shift(), mod);\n      },\n      splice(start, deleteCount, ...items) {\n        const deleted = elements.splice(\n          start,\n          deleteCount,\n          ...items.map((n) => literalToAst(n))\n        );\n        return deleted.map((n) => proxify(n, mod));\n      },\n      find(predicate) {\n        return elements.map((n) => proxify(n, mod)).find(predicate);\n      },\n      findIndex(predicate) {\n        return elements.map((n) => proxify(n, mod)).findIndex(predicate);\n      },\n      includes(value) {\n        return elements.map((n) => proxify(n, mod)).includes(value);\n      },\n      toJSON() {\n        return elements.map((n) => proxify(n, mod));\n      }\n    },\n    {\n      get(_, key) {\n        if (key === \"length\") {\n          return elements.length;\n        }\n        if (key === Symbol.iterator) {\n          return function* () {\n            for (const item of elements) {\n              yield proxify(item, mod);\n            }\n          };\n        }\n        if (typeof key === \"symbol\") {\n          return;\n        }\n        const index = +key;\n        if (Number.isNaN(index)) {\n          return;\n        }\n        const prop = getItem(index);\n        if (prop) {\n          return proxify(prop, mod);\n        }\n      },\n      set(_, key, value) {\n        if (typeof key === \"symbol\") {\n          return false;\n        }\n        const index = +key;\n        if (Number.isNaN(index)) {\n          return false;\n        }\n        replaceItem(index, literalToAst(value));\n        return true;\n      },\n      deleteProperty(_, key) {\n        if (typeof key === \"symbol\") {\n          return false;\n        }\n        const index = +key;\n        if (Number.isNaN(index)) {\n          return false;\n        }\n        elements[index] = literalToAst(void 0);\n        return true;\n      },\n      ownKeys() {\n        return [\"length\", ...elements.map((_, i) => i.toString())];\n      }\n    }\n  );\n}\nfunction proxifyArray(node, mod) {\n  if (!(\"elements\" in node)) {\n    return void 0;\n  }\n  return proxifyArrayElements(node, node.elements, mod);\n}\n\nfunction proxifyFunctionCall(node, mod) {\n  if (node.type !== \"CallExpression\") {\n    throw new MagicastError(\"Not a function call\");\n  }\n  function stringifyExpression(node2) {\n    if (node2.type === \"Identifier\") {\n      return node2.name;\n    }\n    if (node2.type === \"MemberExpression\") {\n      return `${stringifyExpression(node2.object)}.${stringifyExpression(\n        node2.property\n      )}`;\n    }\n    throw new MagicastError(\"Not implemented\");\n  }\n  const argumentsProxy = proxifyArrayElements(node, node.arguments, mod);\n  return createProxy(\n    node,\n    {\n      $type: \"function-call\",\n      $callee: stringifyExpression(node.callee),\n      $args: argumentsProxy\n    },\n    {}\n  );\n}\n\nfunction proxifyArrowFunctionExpression(node, mod) {\n  if (node.type !== \"ArrowFunctionExpression\") {\n    throw new MagicastError(\"Not an arrow function expression\");\n  }\n  const parametersProxy = proxifyArrayElements(node, node.params, mod);\n  return createProxy(\n    node,\n    {\n      $type: \"arrow-function-expression\",\n      $params: parametersProxy,\n      $body: proxify(node.body, mod)\n    },\n    {}\n  );\n}\n\nconst b$2 = builders$1;\nfunction proxifyObject(node, mod) {\n  if (!(\"properties\" in node)) {\n    return void 0;\n  }\n  const getProp = (key) => {\n    for (const prop of node.properties) {\n      if (\"key\" in prop && \"name\" in prop.key && prop.key.name === key) {\n        return prop.value;\n      }\n      if (prop.type === \"ObjectProperty\" && (prop.key.type === \"StringLiteral\" || prop.key.type === \"NumericLiteral\" || prop.key.type === \"BooleanLiteral\") && prop.key.value.toString() === key) {\n        return prop.value.value ?? prop.value;\n      }\n    }\n  };\n  const getPropName = (prop, throwError = false) => {\n    if (\"key\" in prop && \"name\" in prop.key) {\n      return prop.key.name;\n    }\n    if (prop.type === \"ObjectProperty\" && (prop.key.type === \"StringLiteral\" || prop.key.type === \"NumericLiteral\" || prop.key.type === \"BooleanLiteral\")) {\n      return prop.key.value.toString();\n    }\n    if (throwError) {\n      throw new MagicastError(`Casting \"${prop.type}\" is not supported`, {\n        ast: prop,\n        code: mod?.$code\n      });\n    }\n  };\n  const replaceOrAddProp = (key, value) => {\n    const prop = node.properties.find(\n      (prop2) => getPropName(prop2) === key\n    );\n    if (prop) {\n      prop.value = value;\n    } else if (isValidPropName(key)) {\n      node.properties.push({\n        type: \"Property\",\n        key: {\n          type: \"Identifier\",\n          name: key\n        },\n        value\n      });\n    } else {\n      node.properties.push({\n        type: \"ObjectProperty\",\n        key: b$2.stringLiteral(key),\n        value\n      });\n    }\n  };\n  return createProxy(\n    node,\n    {\n      $type: \"object\",\n      toJSON() {\n        return node.properties.reduce((acc, prop) => {\n          if (\"key\" in prop && \"name\" in prop.key) {\n            acc[prop.key.name] = proxify(prop.value, mod);\n          }\n          return acc;\n        }, {});\n      }\n    },\n    {\n      get(_, key) {\n        const prop = getProp(key);\n        if (prop) {\n          return proxify(prop, mod);\n        }\n      },\n      set(_, key, value) {\n        if (typeof key !== \"string\") {\n          key = String(key);\n        }\n        replaceOrAddProp(key, literalToAst(value));\n        return true;\n      },\n      deleteProperty(_, key) {\n        if (typeof key !== \"string\") {\n          key = String(key);\n        }\n        const index = node.properties.findIndex(\n          (prop) => \"key\" in prop && \"name\" in prop.key && prop.key.name === key\n        );\n        if (index !== -1) {\n          node.properties.splice(index, 1);\n        }\n        return true;\n      },\n      ownKeys() {\n        return node.properties.map((prop) => getPropName(prop, true)).filter(Boolean);\n      }\n    }\n  );\n}\n\nfunction proxifyNewExpression(node, mod) {\n  if (node.type !== \"NewExpression\") {\n    throw new MagicastError(\"Not a new expression\");\n  }\n  function stringifyExpression(node2) {\n    if (node2.type === \"Identifier\") {\n      return node2.name;\n    }\n    if (node2.type === \"MemberExpression\") {\n      return `${stringifyExpression(node2.object)}.${stringifyExpression(\n        node2.property\n      )}`;\n    }\n    throw new MagicastError(\"Not implemented\");\n  }\n  const argumentsProxy = proxifyArrayElements(node, node.arguments, mod);\n  return createProxy(\n    node,\n    {\n      $type: \"new-expression\",\n      $callee: stringifyExpression(node.callee),\n      $args: argumentsProxy\n    },\n    {}\n  );\n}\n\nfunction proxifyIdentifier(node) {\n  if (node.type !== \"Identifier\") {\n    throw new MagicastError(\"Not an identifier\");\n  }\n  return createProxy(\n    node,\n    {\n      $type: \"identifier\",\n      $name: node.name\n    },\n    {}\n  );\n}\n\nfunction proxifyLogicalExpression(node) {\n  if (node.type !== \"LogicalExpression\") {\n    throw new MagicastError(\"Not a logical expression\");\n  }\n  return createProxy(\n    node,\n    {\n      $type: \"logicalExpression\"\n    },\n    {}\n  );\n}\n\nfunction proxifyMemberExpression(node) {\n  if (node.type !== \"MemberExpression\") {\n    throw new MagicastError(\"Not a member expression\");\n  }\n  return createProxy(\n    node,\n    {\n      $type: \"memberExpression\"\n    },\n    {}\n  );\n}\n\nconst _cache = /* @__PURE__ */ new WeakMap();\nfunction proxify(node, mod) {\n  if (LITERALS_TYPEOF.has(typeof node)) {\n    return node;\n  }\n  if (LITERALS_AST.has(node.type)) {\n    return node.value;\n  }\n  if (_cache.has(node)) {\n    return _cache.get(node);\n  }\n  let proxy;\n  switch (node.type) {\n    case \"ObjectExpression\": {\n      proxy = proxifyObject(node, mod);\n      break;\n    }\n    case \"ArrayExpression\": {\n      proxy = proxifyArray(node, mod);\n      break;\n    }\n    case \"CallExpression\": {\n      proxy = proxifyFunctionCall(node, mod);\n      break;\n    }\n    case \"ArrowFunctionExpression\": {\n      proxy = proxifyArrowFunctionExpression(node, mod);\n      break;\n    }\n    case \"NewExpression\": {\n      proxy = proxifyNewExpression(node, mod);\n      break;\n    }\n    case \"Identifier\": {\n      proxy = proxifyIdentifier(node);\n      break;\n    }\n    case \"LogicalExpression\": {\n      proxy = proxifyLogicalExpression(node);\n      break;\n    }\n    case \"MemberExpression\": {\n      proxy = proxifyMemberExpression(node);\n      break;\n    }\n    case \"TSAsExpression\":\n    case \"TSSatisfiesExpression\": {\n      proxy = proxify(node.expression, mod);\n      break;\n    }\n    default: {\n      throw new MagicastError(`Casting \"${node.type}\" is not supported`, {\n        ast: node,\n        code: mod?.$code\n      });\n    }\n  }\n  _cache.set(node, proxy);\n  return proxy;\n}\n\nconst b$1 = builders$1;\nfunction createExportsProxy(root, mod) {\n  const findExport = (key) => {\n    const type = key === \"default\" ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\";\n    for (const n of root.body) {\n      if (n.type === type) {\n        if (key === \"default\") {\n          return n.declaration;\n        }\n        if (n.declaration && \"declarations\" in n.declaration) {\n          const dec = n.declaration.declarations[0];\n          if (\"name\" in dec.id && dec.id.name === key) {\n            return dec.init;\n          }\n        }\n      }\n    }\n  };\n  const updateOrAddExport = (key, value) => {\n    const type = key === \"default\" ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\";\n    const node = literalToAst(value);\n    for (const n of root.body) {\n      if (n.type === type) {\n        if (key === \"default\") {\n          n.declaration = node;\n          return;\n        }\n        if (n.declaration && \"declarations\" in n.declaration) {\n          const dec = n.declaration.declarations[0];\n          if (\"name\" in dec.id && dec.id.name === key) {\n            dec.init = node;\n            return;\n          }\n        }\n      }\n    }\n    root.body.push(\n      key === \"default\" ? b$1.exportDefaultDeclaration(node) : b$1.exportNamedDeclaration(\n        b$1.variableDeclaration(\"const\", [\n          b$1.variableDeclarator(b$1.identifier(key), node)\n        ])\n      )\n    );\n  };\n  return createProxy(\n    root,\n    {\n      $type: \"exports\"\n    },\n    {\n      get(_, prop) {\n        const node = findExport(prop);\n        if (node) {\n          return proxify(node, mod);\n        }\n      },\n      set(_, prop, value) {\n        updateOrAddExport(prop, value);\n        return true;\n      },\n      ownKeys() {\n        return root.body.flatMap((i) => {\n          if (i.type === \"ExportDefaultDeclaration\") {\n            return [\"default\"];\n          }\n          if (i.type === \"ExportNamedDeclaration\" && i.declaration && \"declarations\" in i.declaration) {\n            return i.declaration.declarations.map(\n              (d) => \"name\" in d.id ? d.id.name : \"\"\n            );\n          }\n          return [];\n        }).filter(Boolean);\n      },\n      deleteProperty(_, prop) {\n        const type = prop === \"default\" ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\";\n        for (let i = 0; i < root.body.length; i++) {\n          const n = root.body[i];\n          if (n.type === type) {\n            if (prop === \"default\") {\n              root.body.splice(i, 1);\n              return true;\n            }\n            if (n.declaration && \"declarations\" in n.declaration) {\n              const dec = n.declaration.declarations[0];\n              if (\"name\" in dec.id && dec.id.name === prop) {\n                root.body.splice(i, 1);\n                return true;\n              }\n            }\n          }\n        }\n        return false;\n      }\n    }\n  );\n}\n\nfunction proxifyModule(ast, code) {\n  const root = ast.program;\n  if (root.type !== \"Program\") {\n    throw new MagicastError(`Cannot proxify ${ast.type} as module`);\n  }\n  const util = {\n    $code: code,\n    $type: \"module\"\n  };\n  const mod = createProxy(root, util, {\n    ownKeys() {\n      return [\"imports\", \"exports\", \"generate\"];\n    }\n  });\n  util.exports = createExportsProxy(root, mod);\n  util.imports = createImportsProxy(root);\n  util.generate = (options) => generateCode(mod, options);\n  return mod;\n}\n\nfunction detectCodeFormat(code, userStyles = {}) {\n  const detect = {\n    wrapColumn: userStyles.wrapColumn === void 0,\n    indent: userStyles.tabWidth === void 0 || userStyles.useTabs === void 0,\n    quote: userStyles.quote === void 0,\n    arrowParens: userStyles.arrowParensAlways === void 0,\n    trailingComma: userStyles.trailingComma === void 0\n  };\n  let codeIndent = 2;\n  let tabUsages = 0;\n  let semiUsages = 0;\n  let maxLineLength = 0;\n  let multiLineTrailingCommaUsages = 0;\n  const syntaxDetectRegex = /(?<doubleQuote>\"[^\"]+\")|(?<singleQuote>'[^']+')|(?<singleParam>\\([^),]+\\)\\s*=>)|(?<trailingComma>,\\s*[\\]}])/g;\n  const syntaxUsages = {\n    doubleQuote: 0,\n    singleQuote: 0,\n    singleParam: 0,\n    trailingComma: 0\n  };\n  const lines = (code || \"\").split(\"\\n\");\n  let previousLineTrailing = false;\n  for (const line of lines) {\n    const trimmitedLine = line.trim();\n    if (trimmitedLine.length === 0) {\n      continue;\n    }\n    if (detect.wrapColumn && line.length > maxLineLength) {\n      maxLineLength = line.length;\n    }\n    if (detect.indent) {\n      const lineIndent = line.match(/^\\s+/)?.[0] || \"\";\n      if (lineIndent.length > 0) {\n        if (lineIndent.length > 0 && lineIndent.length < codeIndent) {\n          codeIndent = lineIndent.length;\n        }\n        if (lineIndent[0] === \"\t\") {\n          tabUsages++;\n        } else if (lineIndent.length > 0) {\n          tabUsages--;\n        }\n      }\n    }\n    if (trimmitedLine.at(-1) === \";\") {\n      semiUsages++;\n    } else if (trimmitedLine.length > 0) {\n      semiUsages--;\n    }\n    if (detect.quote || detect.arrowParens) {\n      const matches = trimmitedLine.matchAll(syntaxDetectRegex);\n      for (const match of matches) {\n        if (!match.groups) {\n          continue;\n        }\n        for (const key in syntaxUsages) {\n          if (match.groups[key]) {\n            syntaxUsages[key]++;\n          }\n        }\n      }\n    }\n    if (detect.trailingComma) {\n      if (line.startsWith(\"}\") || line.startsWith(\"]\")) {\n        if (previousLineTrailing) {\n          multiLineTrailingCommaUsages++;\n        } else {\n          multiLineTrailingCommaUsages--;\n        }\n      }\n      previousLineTrailing = trimmitedLine.endsWith(\",\");\n    }\n  }\n  return {\n    wrapColumn: maxLineLength,\n    useTabs: tabUsages > 0,\n    tabWidth: codeIndent,\n    quote: syntaxUsages.singleQuote > syntaxUsages.doubleQuote ? \"single\" : \"double\",\n    arrowParensAlways: syntaxUsages.singleParam > 0,\n    trailingComma: multiLineTrailingCommaUsages > 0 || syntaxUsages.trailingComma > 0,\n    useSemi: semiUsages > 0,\n    arrayBracketSpacing: void 0,\n    // TODO\n    objectCurlySpacing: void 0,\n    // TODO\n    ...userStyles\n  };\n}\n\nfunction parseModule(code, options) {\n  const node = parse(code, {\n    parser: options?.parser || getBabelParser(),\n    ...options\n  });\n  return proxifyModule(node, code);\n}\nfunction parseExpression(code, options) {\n  const root = parse(\"(\" + code + \")\", {\n    parser: options?.parser || getBabelParser(),\n    ...options\n  });\n  let body = root.program.body[0];\n  if (body.type === \"ExpressionStatement\") {\n    body = body.expression;\n  }\n  if (body.extra?.parenthesized) {\n    body.extra.parenthesized = false;\n  }\n  const mod = {\n    $ast: root,\n    $code: \" \" + code + \" \",\n    $type: \"module\"\n  };\n  return proxify(body, mod);\n}\nfunction generateCode(node, options = {}) {\n  const ast = node.$ast || node;\n  const formatOptions = options.format === false || !(\"$code\" in node) ? {} : detectCodeFormat(node.$code, options.format);\n  const { code, map } = print(ast, {\n    ...options,\n    ...formatOptions\n  });\n  return { code, map };\n}\nasync function loadFile(filename, options = {}) {\n  const contents = await promises.readFile(filename, \"utf8\");\n  options.sourceFileName = options.sourceFileName ?? filename;\n  return parseModule(contents, options);\n}\nasync function writeFile(node, filename, options) {\n  const ast = \"$ast\" in node ? node.$ast : node;\n  const { code, map } = generateCode(ast, options);\n  await promises.writeFile(filename, code);\n  if (map) {\n    await promises.writeFile(filename + \".map\", map);\n  }\n}\n\nconst b = builders$1;\nconst builders = {\n  /**\n   * Create a function call node.\n   */\n  functionCall(callee, ...args) {\n    const node = b.callExpression(\n      b.identifier(callee),\n      args.map((i) => literalToAst(i))\n    );\n    return proxifyFunctionCall(node);\n  },\n  /**\n   * Create a new expression node.\n   */\n  newExpression(callee, ...args) {\n    const node = b.newExpression(\n      b.identifier(callee),\n      args.map((i) => literalToAst(i))\n    );\n    return proxifyNewExpression(node);\n  },\n  /**\n   * Create a proxified version of a literal value.\n   */\n  literal(value) {\n    return literalToAst(value);\n  },\n  /**\n   * Parse a raw expression and return a proxified version of it.\n   *\n   * ```ts\n   * const obj = builders.raw(\"{ foo: 1 }\");\n   * console.log(obj.foo); // 1\n   * ```\n   */\n  raw(code) {\n    return parseExpression(code);\n  }\n};\n\nexport { MagicastError, builders, detectCodeFormat, generateCode, loadFile, parseExpression, parseModule, writeFile };\n", "import type { DevToolsSys, FileChangeCallback, FileChangeInfo } from \"../types\";\nimport { ConnectionTracker } from \"../types/connection-tracker\";\nimport {\n  access,\n  mkdir,\n  readdir,\n  readFile,\n  stat,\n  unlink,\n  writeFile,\n} from \"node:fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport {\n  existsSync,\n  readdirSync,\n  readFileSync,\n  statSync,\n  unlinkSync,\n} from \"node:fs\";\nimport { homedir, hostname } from \"node:os\";\nimport path from \"node:path\";\nimport type { Options as PrettierOptions } from \"prettier\";\nimport ts from \"typescript\";\nimport launchEditor from \"launch-editor\";\nimport { detectFrameworks } from \"../core/detect-frameworks\";\nimport { spawnSync } from \"node:child_process\";\nimport * as magicast from \"magicast\";\nimport * as Sentry from \"@sentry/node\";\nimport { pkgVersion } from \"../cli/version\";\nimport prettier from \"prettier\";\n\ninterface DevToolsNodeSysOptions {\n  cwd: string;\n  skipValidate?: boolean;\n  ignoreMissingConfig?: boolean;\n}\n\nasync function readdirRecursive(\n  dir: string,\n  skipFolders: Set<string>,\n): Promise<string[]> {\n  const entries = await readdir(dir, { withFileTypes: true });\n  const files: string[] = [];\n\n  for (const entry of entries) {\n    const fullPath = path.join(dir, entry.name);\n\n    if (entry.isDirectory()) {\n      if (!skipFolders.has(entry.name)) {\n        try {\n          const subFiles = await readdirRecursive(fullPath, skipFolders);\n          files.push(...subFiles);\n        } catch (error: any) {\n          Sentry.captureException(error, {\n            tags: {\n              errorType: \"filesystem_permission\",\n              component: \"readdirRecursive\",\n            },\n            extra: {\n              directory: fullPath,\n              errorCode: error.code,\n            },\n          });\n        }\n      }\n    } else {\n      files.push(fullPath);\n    }\n  }\n\n  return files;\n}\n\nexport async function createDevToolsNodeSys(\n  opts: DevToolsNodeSysOptions,\n): Promise<DevToolsSys> {\n  const onChangeCallbacks = new Set<FileChangeCallback>();\n\n  const debug = (...args: any[]) => {\n    if (process.env.DEBUG) {\n      const d = new Date();\n      const ts = `${String(d.getMinutes()).padStart(2, \"0\")}:${String(\n        d.getSeconds(),\n      ).padStart(2, \"0\")}.${String(d.getMilliseconds()).padStart(3, \"0\")}`;\n      // eslint-disable-next-line no-console\n      console.debug(ts, `[builder-dev-tools]`, ...args);\n    }\n  };\n\n  const hash = async (str: string) => {\n    const hash = createHash(\"md5\");\n    hash.update(str);\n    return hash.digest(\"hex\");\n  };\n  const rootDir = path.normalize(path.resolve(process.cwd(), opts.cwd));\n  const repoRootDir = findPackageJsonDir(path.normalize(opts.cwd)) ?? rootDir;\n  const appRootDir = findAppRootDir(path.normalize(opts.cwd)) ?? repoRootDir;\n\n  const nodeFs: DevToolsSys = {\n    ...path,\n    getCwdDir: () => rootDir,\n    getRepoRootDir: () => repoRootDir,\n    getAppRootDir: () => appRootDir,\n    cwd: () => process.cwd(),\n    exists: async (p) => {\n      try {\n        await access(p);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    },\n    magicast,\n    existsSync: (p) => {\n      // TODO: This is causing error for react vite, need to investigate\n      // validatePath(opts, p);\n      return existsSync(p);\n    },\n    readdir: async (p, absolutePaths) => {\n      const items = await readdir(p);\n      if (absolutePaths) {\n        return items.map((i) => path.join(p, i));\n      }\n      return items;\n    },\n    readdirRecursive: async (p, skipFolders) => {\n      return readdirRecursive(p, new Set(skipFolders));\n    },\n    readdirSync: (p) => {\n      return readdirSync(p);\n    },\n    readFile: async (p) => {\n      try {\n        const content = await readFile(p, \"utf-8\");\n        return content;\n      } catch (e: any) {\n        if (e.code === \"ENOENT\") {\n          return null;\n        }\n        debug(e, p);\n        throw e;\n      }\n    },\n    readFileSync(p) {\n      try {\n        return readFileSync(p, \"utf-8\");\n      } catch (e: any) {\n        if (e.code === \"ENOENT\") {\n          return null;\n        }\n        debug(e, p);\n        throw e;\n      }\n    },\n    readFileSyncBuffer(p) {\n      try {\n        return new Uint8Array(\n          readFileSync(p, {\n            encoding: null,\n          }),\n        );\n      } catch (e: any) {\n        if (e.code === \"ENOENT\") {\n          return null;\n        }\n        debug(e, p);\n        throw e;\n      }\n    },\n    spawnSync,\n    stat: async (p) => {\n      const s = await stat(p);\n      return s;\n    },\n    statSync: (p) => {\n      const s = statSync(p);\n      return s;\n    },\n    unlinkSync: (p) => {\n      unlinkSync(p);\n    },\n    unlink: async (p) => {\n      await unlink(p);\n    },\n    writeFile: async (p, contents) => {\n      p = path.normalize(p);\n      const fileInfo: FileChangeInfo = {\n        path: p,\n        basename: path.basename(p),\n        dirname: path.dirname(p),\n        extname: path.extname(p),\n      };\n\n      await mkdir(path.dirname(p), { recursive: true });\n      await writeFile(p, contents);\n\n      for (const onChangeCallback of onChangeCallbacks) {\n        await onChangeCallback(fileInfo);\n      }\n    },\n    hash,\n    getDeviceId: () => hash(`${hostname()}:${homedir()}`),\n    formatCode: async (filePath, code) => {\n      let userOpts: PrettierOptions | null = null;\n      try {\n        userOpts = await prettier.resolveConfig(filePath);\n      } catch (e) {\n        //\n      }\n\n      try {\n        return prettier.format(code, {\n          ...userOpts,\n          filepath: filePath,\n        });\n      } catch (e) {\n        // possible the prettier internal parser throws an error\n        // in that case, just return the original code\n      }\n      return code;\n    },\n    on: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.add(callback);\n      }\n    },\n    off: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.delete(callback);\n      }\n    },\n    debug,\n    launchEditor: async (file) => {\n      return new Promise((resolve) => {\n        try {\n          let filePath = file.filePath;\n          if (typeof file.line === \"number\") {\n            filePath += `:${file.line}`;\n            if (typeof file.column === \"number\") {\n              filePath += `:${file.column}`;\n            }\n          }\n\n          launchEditor(filePath, \"code\", (pathFile, e) => {\n            const err = new Error(`Failed to launch editor for ${e}`);\n            resolve({\n              success: false,\n              message: err.message,\n            });\n          });\n          setTimeout(() => {\n            resolve({\n              success: true,\n            });\n          }, 100);\n        } catch (e) {\n          resolve({\n            success: false,\n            message: \"Failed to launch editor\",\n          });\n        }\n      });\n    },\n    platform: () => {\n      return { runtime: \"node\", os: process.platform };\n    },\n    getRepoInfo: async (githubWorkingDirectory?: string) => {\n      const rootDir = path.normalize(githubWorkingDirectory ?? opts.cwd);\n      return {\n        hasGit: hasGit(rootDir),\n        remoteUrl: getGitRemoteURL(rootDir),\n        defaultBranch: getGitRepoDefaultBranchName(rootDir),\n        commit: getGitCommit(rootDir),\n        currentBranch: getCurrentBranchName(rootDir),\n      };\n    },\n    getFrameworks: () => [],\n    ts,\n    Sentry,\n    connectionTracker: null as any, // Properly initialized below\n    version: pkgVersion,\n    sdkVersion: null,\n    ignoreMissingConfig: opts.ignoreMissingConfig,\n    kind: null,\n  };\n\n  nodeFs.connectionTracker = new ConnectionTracker(nodeFs);\n\n  const frameworks = await detectFrameworks(nodeFs);\n  nodeFs.getFrameworks = () => frameworks;\n\n  return nodeFs;\n}\n\nfunction getConfigPath() {\n  const homeDirPath = homedir();\n  return path.join(homeDirPath, \".config\", \"builder\", \"dev-tools.json\");\n}\n\nexport function configHasProperty(contents: Record<string, any>, key: string) {\n  return typeof contents === \"object\" && contents != null && key in contents;\n}\n\nexport async function readConfigFile() {\n  const configPath = getConfigPath();\n  try {\n    const contents = await readFile(configPath, \"utf-8\");\n    if (typeof contents === \"string\") {\n      return JSON.parse(contents);\n    }\n  } catch (e: any) {\n    if (e.code === \"ENOENT\") {\n      return null;\n    }\n  }\n  return null;\n}\n\nexport async function writeConfigFile(contents: Record<string, any>) {\n  const configPath = getConfigPath();\n  contents = typeof contents === \"object\" && contents != null ? contents : {};\n\n  await mkdir(path.dirname(configPath), { recursive: true });\n  await writeFile(configPath, JSON.stringify(contents ?? {}, null, 2));\n}\n\nexport function getGitRemoteURL(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"config\", \"--get\", \"remote.origin.url\"], {\n      cwd: repoPath,\n    });\n    const output = spawn.stdout;\n    return (output || \"\").toString().trim();\n  } catch (error) {\n    Sentry.captureException(\n      new Error(\"Error getting git remote URL:\", { cause: error }),\n    );\n    return \"\";\n  }\n}\n\n/**\n * Find the default branch name (master or main) for the git repository\n */\nfunction getGitRepoDefaultBranchName(repoPath: string) {\n  const DEFAULT_BRANCH_NAME = \"master\";\n\n  try {\n    // Get all git branches\n    const gitBranchResult = spawnSync(\"git\", [\"branch\", \"-r\"], {\n      cwd: repoPath,\n    });\n\n    if (!gitBranchResult.stdout) {\n      return DEFAULT_BRANCH_NAME;\n    }\n\n    const branches = gitBranchResult.stdout\n      .toString()\n      .trim()\n      .split(\"\\n\")\n      .map((s) => s.trim());\n\n    // Check if origin/main exists, otherwise assume master\n    if (branches.includes(\"origin/main\")) {\n      return \"main\";\n    } else {\n      return DEFAULT_BRANCH_NAME;\n    }\n  } catch (error: any) {\n    Sentry.captureException(\n      new Error(\"Error getting git default branch name:\", {\n        cause: error,\n      }),\n    );\n    return DEFAULT_BRANCH_NAME;\n  }\n}\n\nfunction hasGit(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"rev-parse\", \"--is-inside-work-tree\"], {\n      cwd: repoPath,\n    });\n    const output = (spawn.stdout || \"\").toString().trim();\n    return output === \"true\";\n  } catch (error) {\n    Sentry.captureException(\n      new Error(\"Error getting git commit:\", { cause: error }),\n    );\n    return false;\n  }\n}\n\nfunction getGitCommit(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"rev-parse\", \"HEAD\"], {\n      cwd: repoPath,\n    });\n    const output = spawn.stdout;\n    return (output || \"\").toString().trim();\n  } catch (error) {\n    Sentry.captureException(\n      new Error(\"Error getting git commit:\", { cause: error }),\n    );\n    return \"\";\n  }\n}\n\nfunction getCurrentBranchName(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"branch\", \"--show-current\"], {\n      cwd: repoPath,\n    });\n    const output = spawn.stdout;\n    return (output || \"\").toString().trim();\n  } catch (error) {\n    Sentry.captureException(\n      new Error(\"Error getting current branch name:\", { cause: error }),\n    );\n    return \"\";\n  }\n}\n\nexport function findPackageJsonDir(dir: string) {\n  const fsRoot = path.resolve(\"/\");\n\n  for (let i = 0; i < 20; i++) {\n    const pkgJsonPath = path.join(dir, \"package.json\");\n    const content = existsSync(pkgJsonPath);\n    if (content) {\n      return dir;\n    }\n\n    if (dir === fsRoot) {\n      break;\n    }\n    dir = path.dirname(dir);\n  }\n\n  return null;\n}\n\nexport function findAppRootDir(dir: string) {\n  const fsRoot = path.resolve(\"/\");\n\n  for (let i = 0; i < 20; i++) {\n    // Builder config .json\n    if (existsSync(path.join(dir, \"builder.config.json\"))) {\n      return dir;\n    }\n    // Fusion config .json\n    if (existsSync(path.join(dir, \"fusion.config.json\"))) {\n      return dir;\n    }\n    // Package root\n    if (existsSync(path.join(dir, \"package.json\"))) {\n      return dir;\n    }\n    // Remix root .js\n    if (existsSync(path.join(dir, \"remix.config.js\"))) {\n      return dir;\n    }\n    // Remix root .js\n    if (existsSync(path.join(dir, \"remix.config.mjs\"))) {\n      return dir;\n    }\n    // Remix root .ts\n    if (existsSync(path.join(dir, \"remix.config.ts\"))) {\n      return dir;\n    }\n    // Vite root .js\n    if (existsSync(path.join(dir, \"vite.config.js\"))) {\n      return dir;\n    }\n    // Vite root .ts\n    if (existsSync(path.join(dir, \"vite.config.ts\"))) {\n      return dir;\n    }\n    // Vite root .mjs\n    if (existsSync(path.join(dir, \"vite.config.mjs\"))) {\n      return dir;\n    }\n    // Next root .js\n    if (existsSync(path.join(dir, \"next.config.js\"))) {\n      return dir;\n    }\n    // Next root .ts\n    if (existsSync(path.join(dir, \"next.config.ts\"))) {\n      return dir;\n    }\n    // Angular root\n    if (existsSync(path.join(dir, \"angular.json\"))) {\n      return dir;\n    }\n    // Monorepo root\n    if (existsSync(path.join(dir, \"project.json\"))) {\n      return dir;\n    }\n    // TsConfig root\n    if (existsSync(path.join(dir, \"tsconfig.json\"))) {\n      return dir;\n    }\n    if (dir === fsRoot) {\n      break;\n    }\n    dir = path.dirname(dir);\n  }\n\n  return null;\n}\n", "import validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  //\n  // Note to future-self: No, you can't remove the `toLowerCase()` call.\n  // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n  return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset);\n  // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n  return uuid;\n}\nexport default stringify;", "import crypto from 'node:crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n  if (poolPtr > rnds8Pool.length - 16) {\n    crypto.randomFillSync(rnds8Pool);\n    poolPtr = 0;\n  }\n  return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}", "import crypto from 'node:crypto';\nexport default {\n  randomUUID: crypto.randomUUID\n};", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    offset = offset || 0;\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n    return buf;\n  }\n  return unsafeStringify(rnds);\n}\nexport default v4;", "export { default as MAX } from './max.js';\nexport { default as NIL } from './nil.js';\nexport { default as parse } from './parse.js';\nexport { default as stringify } from './stringify.js';\nexport { default as v1 } from './v1.js';\nexport { default as v1ToV6 } from './v1ToV6.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as v6 } from './v6.js';\nexport { default as v6ToV1 } from './v6ToV1.js';\nexport { default as v7 } from './v7.js';\nexport { default as validate } from './validate.js';\nexport { default as version } from './version.js';", "import { log } from \"@clack/prompts\";\n\n/**\n * Use this when you want to throw an error and NOT have the error logged to the\n * user when reporting to sentry\n */\nexport class PrivateError extends Error {}\n\n/**\n * Standardized network error class with structured properties for better diagnostics\n */\nexport class NetworkError extends PrivateError {\n  constructor({\n    type,\n    cause,\n    message,\n    suggestions = [],\n    hostname,\n    port,\n    statusCode,\n    errorCode,\n  }: {\n    type: NetworkErrorType;\n    cause?: Error;\n    message: string;\n    suggestions?: string[];\n    hostname?: string;\n    port?: number;\n    statusCode?: number;\n    errorCode?: string;\n  }) {\n    super(message, { cause });\n    this.name = \"NetworkError\";\n    this.type = type;\n    this.suggestions = suggestions;\n    this.hostname = hostname;\n    this.port = port;\n    this.statusCode = statusCode;\n    this.errorCode = errorCode;\n  }\n\n  readonly type: NetworkErrorType;\n  readonly suggestions: string[];\n  readonly hostname?: string;\n  readonly port?: number;\n  readonly statusCode?: number;\n  readonly errorCode?: string;\n}\n\nexport type NetworkErrorType =\n  | \"connection_refused\"\n  | \"connection_timeout\"\n  | \"dns_not_found\"\n  | \"ssl_error\"\n  | \"server_error\"\n  | \"unknown\";\n\nexport function convertNodeErrorToNetworkError(\n  error: Error & { code?: string },\n  hostname: string,\n  port?: number,\n): NetworkError {\n  const errorCode = error.code;\n\n  switch (errorCode) {\n    case \"ECONNREFUSED\":\n      return new NetworkError({\n        type: \"connection_refused\",\n        cause: error,\n        message: `Connection refused to ${hostname}${port ? `:${port}` : \"\"}. The server may be down or unreachable.`,\n        suggestions: [\n          \"Check your internet connection\",\n          \"Try again in a few minutes - the service may be temporarily unavailable\",\n          \"Contact support if the issue persists\",\n        ],\n        hostname,\n        port,\n        errorCode: \"ECONNREFUSED\",\n      });\n    case \"ETIMEDOUT\":\n      return new NetworkError({\n        type: \"connection_timeout\",\n        cause: error,\n        message: `Connection timed out to ${hostname}${port ? `:${port}` : \"\"}. The request took too long to complete.`,\n        suggestions: [\n          \"Check your internet connection speed\",\n          \"Try again in a few minutes\",\n          \"Contact support if the issue persists\",\n        ],\n        hostname,\n        port,\n        errorCode: \"ETIMEDOUT\",\n      });\n    case \"ENOTFOUND\":\n      return new NetworkError({\n        type: \"dns_not_found\",\n        cause: error,\n        message: `Cannot resolve ${hostname}. The server address could not be found.`,\n        suggestions: [\n          \"Check your internet connection\",\n          \"Try again in a few minutes\",\n          \"Contact support if the issue persists\",\n        ],\n        hostname,\n        errorCode: \"ENOTFOUND\",\n      });\n    default:\n      return new NetworkError({\n        type: \"unknown\",\n        cause: error,\n        message: `Network error connecting to ${hostname}: ${error.message}`,\n        suggestions: [\n          \"Check your internet connection\",\n          \"Try again in a few minutes\",\n          \"Contact support if the issue persists\",\n        ],\n        hostname,\n        port,\n      });\n  }\n}\n\nexport function displayNetworkError(error: NetworkError) {\n  log.error(\"\uD83D\uDD34 Network Error Details:\");\n  log.error(error.message);\n\n  if (error.suggestions.length > 0) {\n    log.info(\"\uD83D\uDCA1 Troubleshooting suggestions:\");\n    error.suggestions.forEach((suggestion, index) => {\n      log.info(`   ${index + 1}. ${suggestion}`);\n    });\n  }\n\n  if (error.hostname) {\n    log.info(\n      `\uD83D\uDCCD Target: ${error.hostname}${error.port ? `:${error.port}` : \"\"}`,\n    );\n  }\n\n  if (error.statusCode) {\n    log.info(`\uD83D\uDCCA HTTP Status: ${error.statusCode}`);\n  }\n\n  if (error.errorCode) {\n    log.info(`\uD83D\uDD27 Error Code: ${error.errorCode}`);\n  }\n  console.log(\"\\n\");\n}\n", "import * as Amplitude from \"@amplitude/analytics-node\";\nimport * as Sentry from \"@sentry/node\";\nimport { version } from \"../package.json\";\nimport {\n  configHasProperty,\n  readConfigFile,\n  writeConfigFile,\n} from \"../node/node-sys\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport os from \"node:os\";\nimport { red } from \"picocolors\";\nimport { PrivateError } from \"../common/errors\";\n\nexport async function initTracking(verbose: boolean) {\n  // ID used to group Amplitude events together\n  // always a chance of collision but unlikely and not the end of the world\n  // if we went duplicate events to the same session\n  const trackingEnabled =\n    SENTRY_ENABLED === \"true\" && process.env.NODE_ENV !== \"test\";\n  let deviceId = await getDeviceId();\n  let userId = await getUserId();\n\n  Amplitude.init(trackingEnabled ? \"2532be1b0436a18cb938b21fc7fa9faf\" : \"\", {\n    logLevel: Amplitude.Types.LogLevel.None,\n    flushIntervalMillis: 500,\n  });\n\n  const identifyObj = new Amplitude.Identify();\n  await Amplitude.identify(identifyObj, {\n    device_id: deviceId,\n    user_id: userId,\n    platform: os.type(),\n    os_name: process.platform,\n    os_version: os.release(),\n  }).promise;\n\n  Sentry.init({\n    dsn: \"https://3252dddc08dbb5bf406dc33bf3c13633@o117565.ingest.us.sentry.io/4505630794448896\",\n    tracesSampleRate: 0,\n    release: version,\n    environment: process.env.NODE_ENV,\n    enabled: trackingEnabled,\n    registerEsmLoaderHooks: false,\n    normalizeDepth: 5,\n    maxValueLength: 1500,\n    integrations: [\n      Sentry.nativeNodeFetchIntegration(),\n      Sentry.httpIntegration(),\n      Sentry.extraErrorDataIntegration(),\n    ],\n    beforeSend: (event, hint) => {\n      const originalError = hint.originalException ?? hint.syntheticException;\n      if (\n        !(originalError instanceof PrivateError) &&\n        (verbose || event.level !== \"warning\")\n      ) {\n        console.error(red(`ERROR ID: ${event.event_id}`), originalError);\n      }\n      return event;\n    },\n    tracePropagationTargets: [],\n  });\n\n  Sentry.setUser({\n    username: process.env.USER || process.env.USERNAME || \"unknown\",\n  });\n  return Sentry;\n}\n\nexport async function track(eventName: string, options: Record<string, any>) {\n  let defaultProps: Record<string, any> = {\n    ...options,\n    app: \"dev-tools-cli\",\n    package: \"cli\",\n  };\n\n  const userId = await getUserId();\n  const deviceId = await getDeviceId();\n\n  return await Amplitude.track(eventName, defaultProps, {\n    user_id: userId,\n    device_id: deviceId,\n  }).promise;\n}\n\nlet userId: string | undefined = undefined;\nlet deviceId: string | undefined = undefined;\n\nexport async function setUserId(id: string) {\n  userId = id;\n  const devToolsConfig = await readConfigFile();\n  await writeConfigFile({ ...devToolsConfig, userId: id });\n}\n\nasync function getUserId(): Promise<string> {\n  if (userId) {\n    return userId!;\n  }\n  const devToolsConfig = await readConfigFile();\n  let uniqueTrackingId;\n  if (configHasProperty(devToolsConfig, \"userId\")) {\n    uniqueTrackingId = devToolsConfig.userId;\n  }\n  userId = uniqueTrackingId;\n  return uniqueTrackingId;\n}\n\nasync function getDeviceId(): Promise<string> {\n  if (deviceId) {\n    return deviceId!;\n  }\n  const devToolsConfig = await readConfigFile();\n  let uniqueTrackingId = uuidv4();\n  if (configHasProperty(devToolsConfig, \"deviceId\")) {\n    uniqueTrackingId = devToolsConfig.deviceId;\n  } else {\n    await writeConfigFile({ ...devToolsConfig, deviceId: uniqueTrackingId });\n  }\n  deviceId = uniqueTrackingId;\n  return uniqueTrackingId;\n}\n\ndeclare const SENTRY_ENABLED: string;\n", "{\n  \"name\": \"ai-services-monorepo\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"workspaces\": {\n    \"packages\": [\n      \"packages/dev-tools\",\n      \"packages/create-builderio\",\n      \"packages/builderio\",\n      \"packages/ai-utils\",\n      \"packages/webpack-plugin-jsx-loc\",\n      \"packages/vite-plugin-jsx-loc\",\n      \"packages/jsx-loc-internals\",\n      \"packages/nextjs-plugin-jsx-loc\",\n      \"packages/builder-my-site\",\n      \"packages/kube-cron-jobs\"\n    ]\n  },\n  \"scripts\": {\n    \"cli\": \"tsx scripts/projects/cli.ts\",\n    \"tsx\": \"tsx --tsconfig ./packages/service/tsconfig.json --import ./scripts/loader-register.mjs\",\n    \"export-app-project-mapping\": \"npm run tsx scripts/export-app-project-mapping.ts\",\n    \"export-enterprise-orgs\": \"npm run tsx scripts/export-enterprise-orgs.ts\",\n    \"process-fusion-starters\": \"npm run tsx scripts/process-fusion-starters.ts\",\n    \"analyze-project-export\": \"npm run tsx scripts/analyze-project-export.ts\",\n    \"process-project-branches\": \"npm run tsx scripts/process-project-branches.ts\",\n    \"update-volume-ids\": \"npm run tsx packages/service/projects/scripts/update-volume-ids.ts\",\n    \"fmt\": \"prettier --write .\",\n    \"fmt.check\": \"prettier --check .\",\n    \"tsc\": \"tsc --build\",\n    \"tsc.watch\": \"tsc --watch\",\n    \"test\": \"NODE_OPTIONS=--max-old-space-size=8192 vitest --run --project !dev-tools-e2e\",\n    \"test.watch\": \"NODE_OPTIONS=--max-old-space-size=8192 vitest\",\n    \"test.update\": \"NODE_OPTIONS=--max-old-space-size=8192 vitest --run -u\",\n    \"pre-pr\": \"concurrently \\\"npm run tsc\\\" \\\"npm run test\\\" \\\"npm run fmt\\\"\",\n    \"changeset\": \"changeset\",\n    \"ci:release:build\": \"npm run tsc && npm run build.devtools && npm run build.jsx-loc-internals && npm run build.webpack-plugin-jsx-loc && npm run build.vite-plugin-jsx-loc && npm run build.nextjs-plugin-jsx-loc\",\n    \"ci:release\": \"npm run ci:release:build && npm run ci:release-prep:devtools && npm run ci:release-prep:ai-utils && changeset publish\",\n    \"---------------AI UTILS-----------------\": \"noop\",\n    \"release.ai-utils\": \"npm run tsc && cp packages/ai-utils/package.json dist/ai-utils/package.json && cd dist/ai-utils && npm publish --access public\",\n    \"ci:release-prep:ai-utils\": \"echo \\\"ai-utils\\\" | tr ' ' '\\n' | xargs -I {} sh -c 'echo \\\"moving: {}...\\\" && rm -rf ./packages/{} && mkdir -p ./packages/{} && mv ./dist/{}/* ./packages/{} && echo \\\"moved {}.\\\"'\",\n    \"---------------DEVTOOLS-----------------\": \"noop\",\n    \"dev.devtools\": \"tsx scripts/build-cli.ts --watch\",\n    \"build.devtools\": \"tsx scripts/build-cli.ts --prod\",\n    \"link.devtools\": \"npm run build.devtools && cd dist/dev-tools && npm link && cd ../.. && npm run dev.devtools\",\n    \"test.devtools\": \"vitest --project dev-tools --run\",\n    \"test.devtools.watch\": \"vitest --project dev-tools\",\n    \"test.devtools.e2e\": \"cd packages/dev-tools/_tests_ && vitest --project dev-tools-e2e --run\",\n    \"ci:release-prep:devtools\": \"echo \\\"dev-tools create-builderio builderio\\\" | tr ' ' '\\n' | xargs -I {} sh -c 'echo \\\"moving: {}...\\\" && rm -rf ./packages/{} && mkdir -p ./packages/{} && mv ./dist/{}/* ./packages/{} && echo \\\"moved {}.\\\"'\",\n    \"release-dev.devtools\": \"npm run tsc && tsx scripts/build-cli.ts --dev-release && cd dist/dev-tools && npm publish --tag dev --access public\",\n    \"release-nightly.devtools\": \"npm run tsc && tsx scripts/build-cli.ts --dev-release && cd dist/dev-tools && npm publish --tag nightly --access public\",\n    \"release-custom-tag.devtools\": \"npm run tsc && tsx scripts/build-cli.ts --dev-release && cd dist/dev-tools && npm publish --tag $NPM_RELEASE_TAG --access public\",\n    \"release-sami.devtools\": \"NPM_RELEASE_TAG=sami npm run release-custom-tag.devtools\",\n    \"-------------FIGMA PLUGIN---------------\": \"noop\",\n    \"dev.figma\": \"concurrently \\\"npm run dev.figma:code\\\" \\\"npm run dev.figma:ui\\\"\",\n    \"dev.figma:code\": \"vite build --watch --config packages/figma-plugin/vite.config.code.ts --mode development\",\n    \"dev.figma:ui\": \"vite build --watch --config packages/figma-plugin/vite.config.ts --mode development\",\n    \"build.figma\": \"rm -rf dist && npm run build.figma:code && npm run build.figma:ui\",\n    \"build.figma:code\": \"vite build --config packages/figma-plugin/vite.config.code.ts\",\n    \"build.figma:ui\": \"vite build --config packages/figma-plugin/vite.config.ts\",\n    \"ci:release.figma\": \"npm run build.figma && cd packages/figma-plugin && npx figcd release\",\n    \"version.figma\": \"tsx packages/figma-plugin/plugin/scripts/version-store.ts\",\n    \"test.figma\": \"vitest --project figma-plugin --run\",\n    \"---------------AIR APP-----------------\": \"noop\",\n    \"dev.air-app\": \"cd packages/air-app && NODE_OPTIONS=--max-old-space-size=8192 vite --mode ssr\",\n    \"dev.air-app.debug\": \"cd packages/air-app && node --inspect ./node_modules/vite/bin/vite.js --mode ssr --force\",\n    \"build.air-app\": \"npm run build.air-app.client && npm run build.air-app.server\",\n    \"build.air-app.client\": \"cd packages/air-app && vite build\",\n    \"build.air-app.server\": \"cd packages/air-app && vite build -c adapters/express/vite.config.ts\",\n    \"serve.air-app\": \"node dist/air-app/build/entry.express\",\n    \"docker.air-app\": \"npm run docker.air-app.build && npm run docker.air-app.run\",\n    \"docker.air-app.build\": \"docker build . -f Dockerfile.air-app --progress=plain -t air-app --platform linux/amd64 && npm run docker.air-app.run\",\n    \"docker.air-app.run\": \"docker run --env-file .env -it --init -p '3000:3000' --rm air-app\",\n    \"--------AI SERVICES INTERNAL APP-------\": \"noop\",\n    \"dev.ai-services\": \"cd packages/ai-services-app && vite\",\n    \"build.deps\": \"npm run build.jsx-loc-internals && npm run build.webpack-plugin-jsx-loc && npm run build.vite-plugin-jsx-loc\",\n    \"build.ai-services\": \"npm run build.deps && npm run tsc && cd packages/ai-services-app && vite build\",\n    \"build.editor-app\": \"cd packages/editor-app && vite build\",\n    \"docker.ai-services\": \"npm run docker.ai-services.build && npm run docker.ai-services.run\",\n    \"docker.ai-services.build\": \"docker build . -f Dockerfile.ai-services-app -t ai-services-app --progress=plain\",\n    \"docker.ai-services.run\": \"docker run --env-file .env -it --init -p '3000:3000' --rm ai-services-app\",\n    \"---------------DOCS-------------------\": \"noop\",\n    \"dev.docs\": \"cd packages/docs && astro dev\",\n    \"build.docs\": \"cd packages/docs && npx playwright install --with-deps chromium && astro build\",\n    \"docker.docs\": \"npm run docker.docs.build && npm run docker.docs.run\",\n    \"docker.docs.build\": \"docker build . -f Dockerfile.ai-docs -t ai-docs --progress=plain\",\n    \"docker.docs.run\": \"docker run --env-file .env -it --init -p '3000:3000' --rm ai-docs\",\n    \"--------------FUSION STARTER--------------\": \"noop\",\n    \"docker.fusion-starter\": \"docker build . -f Dockerfile.fusion-starter -t builderio/fusion --progress=plain\",\n    \"docker.fusion-base\": \"docker build . -f Dockerfile.fusion-base -t builderio/fusion-base --progress=plain\",\n    \"docker.fusion-base-beefy\": \"docker build . -f Dockerfile.fusion-base-beefy -t builderio/fusion-base:beefy --progress=plain\",\n    \"--------------BUILDER MY SITE--------------\": \"noop\",\n    \"dev.builder-my-site\": \"cd packages/builder-my-site && vite\",\n    \"build.builder-my-site\": \"cd packages/builder-my-site && vite build\",\n    \"test.builder-my-site\": \"cd packages/builder-my-site && vitest --run\",\n    \"------------JSX-LOC-INTERNALS-------------\": \"noop\",\n    \"build.jsx-loc-internals\": \"cd packages/jsx-loc-internals && tsup src/index.ts --format cjs,esm --dts\",\n    \"dev.jsx-loc-internals\": \"cd packages/jsx-loc-internals && tsup src/index.ts --format cjs,esm --dts --watch\",\n    \"test.jsx-loc-internals\": \"vitest --project jsx-loc-internals --run\",\n    \"------------WEBPACK-PLUGIN-------------\": \"noop\",\n    \"build.webpack-plugin-jsx-loc\": \"npm run build.jsx-loc-internals && cd packages/webpack-plugin-jsx-loc && tsup\",\n    \"dev.webpack-plugin-jsx-loc\": \"cd packages/webpack-plugin-jsx-loc && tsup --watch\",\n    \"test.webpack-plugin-jsx-loc\": \"vitest --project webpack-plugin-jsx-loc --run\",\n    \"------------VITE-PLUGIN-JSX-LOC-------------\": \"noop\",\n    \"build.vite-plugin-jsx-loc\": \"npm run build.jsx-loc-internals && cd packages/vite-plugin-jsx-loc && tsup src/index.ts --format cjs,esm --dts\",\n    \"dev.vite-plugin-jsx-loc\": \"cd packages/vite-plugin-jsx-loc && tsup src/index.ts --format cjs,esm --dts --watch\",\n    \"test.vite-plugin-jsx-loc\": \"vitest --project vite-plugin-jsx-loc --run\",\n    \"------------NEXTJS-PLUGIN-JSX-LOC-------------\": \"noop\",\n    \"build.nextjs-plugin-jsx-loc\": \"npm run build.jsx-loc-internals && cd packages/nextjs-plugin-jsx-loc && tsup\",\n    \"dev.nextjs-plugin-jsx-loc\": \"cd packages/nextjs-plugin-jsx-loc && tsup --watch\",\n    \"clean.nextjs-plugin-jsx-loc\": \"cd packages/nextjs-plugin-jsx-loc && rimraf dist\",\n    \"test.nextjs-plugin-jsx-loc\": \"vitest --project nextjs-plugin-jsx-loc --run\",\n    \"test.nextjs-plugin-jsx-loc.watch\": \"vitest --project nextjs-plugin-jsx-loc --watch\",\n    \"---------------SERVICE-----------------\": \"noop\",\n    \"dev.service\": \"npm run service\",\n    \"service\": \"npm run tsx -- --inspect --watch --env-file=.env packages/service/main.ts\",\n    \"test.service\": \"vitest --project service --run\",\n    \"build.service\": \"tsx scripts/build-service.ts\",\n    \"copy.native.builds\": \"cp -r packages/vcp-common/native-builds dist/service/ && cp -r packages/ml-air dist/\",\n    \"serve.service\": \"cd dist/service && node --env-file=../../.env index.mjs\",\n    \"test.service.e2e\": \"tsx scripts/e2e-service-test.ts\",\n    \"update-base-image\": \"docker build -f BaseImage.Dockerfile -t air-layout-base --platform linux/amd64 . && docker tag air-layout-base:latest us-central1-docker.pkg.dev/builder-3b0a2/cloud-run-source-deploy/air-layout-base:latest && docker push us-central1-docker.pkg.dev/builder-3b0a2/cloud-run-source-deploy/air-layout-base:latest\",\n    \"update-base-image-qa\": \"docker build -f BaseImage.Dockerfile -t air-layout-base --platform linux/amd64 . && docker tag air-layout-base:latest us-central1-docker.pkg.dev/builder-io-qa/cloud-run-source-deploy/air-layout-base:latest && docker push us-central1-docker.pkg.dev/builder-io-qa/cloud-run-source-deploy/air-layout-base:latest\",\n    \"docker.chrome\": \"docker run --rm -it -p 9102:9102 us.gcr.io/zenika-hub/alpine-chrome chromium-browser --headless --disable-gpu --disable-software-rasterizer --disable-dev-shm-usage --no-sandbox --remote-debugging-address=0.0.0.0 --remote-debugging-port=9102\",\n    \"docker.service\": \"npm run docker.service.build && npm run docker.service.run\",\n    \"docker.service.build\": \"docker build . -f Dockerfile.local -t new-air-server\",\n    \"docker.service.run\": \"docker run --env-file .env -it --init -p '8080:8080' --rm new-air-server\",\n    \"---------------KUBE-CRON-JOBS-----------------\": \"noop\",\n    \"docker.pvc-cleaner-cron-job\": \"docker build . -f Dockerfile.pvc-snapshot-cleaner -t pvc-cleaner-cron-job --progress=plain\",\n    \"docker.pvc-cleaner-cron-job.run\": \"docker run --env-file .env -it --init -p '8080:8080' --rm pvc-cleaner-cron-job\",\n    \"---------------EDITOR AI-----------------\": \"noop\",\n    \"dev.editor-app\": \"cd packages/editor-app && vite\",\n    \"test.unit.genai\": \"vitest --project service genai/tests\",\n    \"storybook.editor-app\": \"cd packages/editor-app && storybook dev -p 6006\",\n    \"---------------MIGRATION-----------------\": \"noop\",\n    \"migrate:interactive\": \"tsx migrations/migrate-interactive.ts\"\n  },\n  \"type\": \"module\",\n  \"engines\": {\n    \"node\": \">=22.0.0\"\n  },\n  \"devDependencies\": {\n    \"@amplitude/analytics-browser\": \"^1.13.4\",\n    \"@amplitude/analytics-node\": \"^1.3.8\",\n    \"@angular/compiler\": \"19.2.2\",\n    \"@anthropic-ai/bedrock-sdk\": \"0.25.0\",\n    \"@anthropic-ai/sdk\": \"0.67.0\",\n    \"@anthropic-ai/vertex-sdk\": \"0.14.0\",\n    \"@astrojs/starlight\": \"^0.36.0\",\n    \"@babel/core\": \"^7.26.10\",\n    \"@babel/generator\": \"7.25.6\",\n    \"@babel/parser\": \"7.25.6\",\n    \"@babel/plugin-proposal-decorators\": \"^7.25.9\",\n    \"@babel/preset-react\": \"^7.26.3\",\n    \"@babel/preset-typescript\": \"^7.27.0\",\n    \"@babel/traverse\": \"7.25.6\",\n    \"@babel/types\": \"7.25.6\",\n    \"@builder.io/mitosis\": \"^0.12.0\",\n    \"@builder.io/qwik\": \"1.8.0\",\n    \"@builder.io/qwik-city\": \"1.8.0\",\n    \"@builder.io/sdk\": \"3.0.1\",\n    \"@builder.io/sdk-qwik\": \"0.16.1\",\n    \"@builder.io/sdk-react\": \"^4.0.0\",\n    \"@changesets/cli\": \"2.29.7\",\n    \"@chromatic-com/storybook\": \"^3.2.4\",\n    \"@clack/prompts\": \"0.10.1\",\n    \"@emotion/react\": \"^11.14.0\",\n    \"@emotion/styled\": \"^11.14.0\",\n    \"@figma/plugin-typings\": \"1.97.0\",\n    \"@google-cloud/bigquery\": \"7.9.1\",\n    \"@google-cloud/logging\": \"11.2.0\",\n    \"@google-cloud/storage\": \"^7.16.0\",\n    \"@google/events\": \"5.4.0\",\n    \"@google/genai\": \"^1.12.0\",\n    \"@kubernetes/client-node\": \"^0.20.0\",\n    \"@launchdarkly/node-server-sdk\": \"^9.7.2\",\n    \"@lvce-editor/ripgrep\": \"1.6.0\",\n    \"@modelcontextprotocol/sdk\": \"1.19.1\",\n    \"@monaco-editor/react\": \"4.7.0-rc.0\",\n    \"@mui/icons-material\": \"^6.4.8\",\n    \"@mui/material\": \"^6.4.8\",\n    \"@mui/styles\": \"^6.4.8\",\n    \"@netlify/edge-functions\": \"2.8.1\",\n    \"@octokit/webhooks\": \"^14.0.2\",\n    \"@opentelemetry/api\": \"1.9.0\",\n    \"@opentelemetry/context-async-hooks\": \"1.30.1\",\n    \"@opentelemetry/core\": \"1.30.1\",\n    \"@opentelemetry/exporter-prometheus\": \"0.57.1\",\n    \"@opentelemetry/exporter-trace-otlp-http\": \"0.57.1\",\n    \"@opentelemetry/instrumentation\": \"0.57.1\",\n    \"@opentelemetry/instrumentation-dns\": \"0.43.1\",\n    \"@opentelemetry/instrumentation-express\": \"0.47.1\",\n    \"@opentelemetry/instrumentation-grpc\": \"0.56.0\",\n    \"@opentelemetry/instrumentation-http\": \"0.57.1\",\n    \"@opentelemetry/instrumentation-net\": \"0.43.1\",\n    \"@opentelemetry/instrumentation-redis\": \"0.46.1\",\n    \"@opentelemetry/resource-detector-container\": \"0.6.1\",\n    \"@opentelemetry/resource-detector-gcp\": \"0.33.1\",\n    \"@opentelemetry/resources\": \"1.30.1\",\n    \"@opentelemetry/sdk-metrics\": \"1.30.1\",\n    \"@opentelemetry/sdk-node\": \"0.57.1\",\n    \"@opentelemetry/sdk-trace-base\": \"1.30.1\",\n    \"@opentelemetry/sdk-trace-node\": \"1.30.1\",\n    \"@opentelemetry/semantic-conventions\": \"1.30.0\",\n    \"@playwright/test\": \"1.55.0\",\n    \"@radix-ui/react-accordion\": \"^1.2.2\",\n    \"@radix-ui/react-alert-dialog\": \"^1.1.4\",\n    \"@radix-ui/react-aspect-ratio\": \"^1.1.1\",\n    \"@radix-ui/react-avatar\": \"^1.1.2\",\n    \"@radix-ui/react-checkbox\": \"^1.1.3\",\n    \"@radix-ui/react-collapsible\": \"^1.1.2\",\n    \"@radix-ui/react-context-menu\": \"^2.2.4\",\n    \"@radix-ui/react-dialog\": \"^1.1.4\",\n    \"@radix-ui/react-dropdown-menu\": \"^2.1.4\",\n    \"@radix-ui/react-hover-card\": \"^1.1.1\",\n    \"@radix-ui/react-icons\": \"^1.2.2\",\n    \"@radix-ui/react-label\": \"2.1.1\",\n    \"@radix-ui/react-menubar\": \"^1.1.4\",\n    \"@radix-ui/react-navigation-menu\": \"^1.2.3\",\n    \"@radix-ui/react-popover\": \"^1.1.7\",\n    \"@radix-ui/react-progress\": \"^1.1.0\",\n    \"@radix-ui/react-radio-group\": \"^1.2.2\",\n    \"@radix-ui/react-scroll-area\": \"^1.2.2\",\n    \"@radix-ui/react-select\": \"^2.1.4\",\n    \"@radix-ui/react-separator\": \"^1.1.1\",\n    \"@radix-ui/react-slider\": \"^1.2.2\",\n    \"@radix-ui/react-slot\": \"^1.1.1\",\n    \"@radix-ui/react-switch\": \"^1.1.2\",\n    \"@radix-ui/react-tabs\": \"^1.1.2\",\n    \"@radix-ui/react-toast\": \"^1.2.1\",\n    \"@radix-ui/react-toggle\": \"^1.1.0\",\n    \"@radix-ui/react-toggle-group\": \"^1.1.1\",\n    \"@radix-ui/react-tooltip\": \"^1.1.6\",\n    \"@sentry/esbuild-plugin\": \"3.4.0\",\n    \"@sentry/node\": \"9.16.0\",\n    \"@sentry/opentelemetry\": \"9.16.0\",\n    \"@sentry/react\": \"9.16.0\",\n    \"@sentry/vite-plugin\": \"3.4.0\",\n    \"@sesamecare-oss/redlock\": \"^1.4.0\",\n    \"@slack/bolt\": \"^3.17.0\",\n    \"@slack/web-api\": \"7.6.0\",\n    \"@storybook/addon-essentials\": \"^8.5.5\",\n    \"@storybook/addon-interactions\": \"^8.5.5\",\n    \"@storybook/addon-links\": \"^8.5.5\",\n    \"@storybook/addon-onboarding\": \"^8.5.5\",\n    \"@storybook/blocks\": \"^8.5.5\",\n    \"@storybook/react\": \"^8.5.5\",\n    \"@storybook/react-vite\": \"^8.5.5\",\n    \"@storybook/test\": \"^8.5.5\",\n    \"@supabase/supabase-js\": \"2.44.4\",\n    \"@tabler/icons-react\": \"3.31.0\",\n    \"@tailwindcss/vite\": \"4.0.0\",\n    \"@turbopuffer/turbopuffer\": \"0.5.11\",\n    \"@types/babel__generator\": \"7.6.8\",\n    \"@types/babel__traverse\": \"7.20.6\",\n    \"@types/cheerio\": \"^0.22.35\",\n    \"@types/compression\": \"1.7.2\",\n    \"@types/cookie-parser\": \"^1.4.8\",\n    \"@types/cross-spawn\": \"^6.0.6\",\n    \"@types/density-clustering\": \"1.3.3\",\n    \"@types/diff\": \"5.2.1\",\n    \"@types/esbuild-plugin-ignore\": \"^1.1.0\",\n    \"@types/express\": \"4.17.19\",\n    \"@types/jsdom\": \"^21.1.7\",\n    \"@types/lodash.merge\": \"^4.6.9\",\n    \"@types/micromatch\": \"^4.0.9\",\n    \"@types/nearest-color\": \"0.4.1\",\n    \"@types/node\": \"22.5.2\",\n    \"@types/prompts\": \"2.4.9\",\n    \"@types/react\": \"19.0.4\",\n    \"@types/react-dom\": \"19.0.2\",\n    \"@types/react-syntax-highlighter\": \"15.5.13\",\n    \"@types/tinycolor2\": \"1.4.4\",\n    \"@types/turndown\": \"^5.0.4\",\n    \"@types/uuid\": \"10.0.0\",\n    \"@types/webpack-sources\": \"^3.2.3\",\n    \"@types/which-pm-runs\": \"^1.0.2\",\n    \"@typescript/native-preview\": \"^7.0.0-dev.20251008.1\",\n    \"@vitejs/plugin-react\": \"4.3.4\",\n    \"@vitest/coverage-v8\": \"^3.0.5\",\n    \"@vitest/ui\": \"3.0.5\",\n    \"@xstate/graph\": \"^3.0.4\",\n    \"astro\": \"^5.12.2\",\n    \"autoprefixer\": \"^10.4.19\",\n    \"aws-sdk\": \"2.1692.0\",\n    \"babel-loader\": \"^10.0.0\",\n    \"botbuilder\": \"^4.22.1\",\n    \"cheerio\": \"1.0.0\",\n    \"chokidar\": \"^4.0.1\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"cloudevents\": \"8.0.2\",\n    \"clsx\": \"2.1.1\",\n    \"commander\": \"12.1.0\",\n    \"compress-json\": \"^3.1.1\",\n    \"compression\": \"1.7.4\",\n    \"concurrently\": \"^9.1.2\",\n    \"cors\": \"^2.8.5\",\n    \"cross-spawn\": \"^7.0.6\",\n    \"css-to-tailwindcss\": \"1.0.5\",\n    \"csv-stringify\": \"6.5.0\",\n    \"daisyui\": \"^5.0.0-beta.2\",\n    \"date-fns\": \"^4.1.0\",\n    \"dedent\": \"1.5.3\",\n    \"density-clustering\": \"1.3.0\",\n    \"diff\": \"5.2.0\",\n    \"dotenv\": \"16.3.2\",\n    \"emphasize\": \"^7.0.0\",\n    \"encoding\": \"^0.1.13\",\n    \"esbuild\": \"^0.25.9\",\n    \"esbuild-plugin-ignore\": \"^1.1.1\",\n    \"execa\": \"9.5.1\",\n    \"express\": \"4.21.2\",\n    \"fast-folder-size\": \"2.2.0\",\n    \"fast-json-stable-stringify\": \"^2.1.0\",\n    \"fastest-levenshtein\": \"^1.0.16\",\n    \"figcd\": \"0.0.16\",\n    \"file-type\": \"^12.4.2\",\n    \"firebase-admin\": \"13.4.0\",\n    \"framer-motion\": \"^12.7.4\",\n    \"fuse.js\": \"7.1.0\",\n    \"globby\": \"^14.1.0\",\n    \"google-auth-library\": \"9.15.1\",\n    \"htm\": \"^3.1.1\",\n    \"http-proxy\": \"^1.18.1\",\n    \"http-proxy-middleware\": \"^2.0.6\",\n    \"ignore\": \"^6.0.2\",\n    \"indent-string\": \"5.0.0\",\n    \"ioredis\": \"5.4.1\",\n    \"jose\": \"5.9.6\",\n    \"jsonrepair\": \"^3.12.0\",\n    \"launch-editor\": \"^2.11.1\",\n    \"launchdarkly-js-client-sdk\": \"^3.5.0\",\n    \"lightningcss\": \"^1.29.1\",\n    \"lodash.merge\": \"^4.6.2\",\n    \"lucide-react\": \"0.469.0\",\n    \"minimatch\": \"^10.0.3\",\n    \"mobx\": \"^6.13.7\",\n    \"mobx-react\": \"^9.2.0\",\n    \"mri\": \"^1.2.0\",\n    \"msw\": \"2.6.0\",\n    \"nearest-color\": \"0.4.4\",\n    \"neotraverse\": \"0.6.15\",\n    \"node-fetch\": \"^3.3.2\",\n    \"nodemon\": \"^3.0.2\",\n    \"open\": \"^10.1.0\",\n    \"openai\": \"5.12.1\",\n    \"otus\": \"1.0.0\",\n    \"partial-json\": \"^0.1.7\",\n    \"path-to-regexp\": \"8.2.0\",\n    \"playwright\": \"^1.55.0\",\n    \"postcss\": \"8.4.40\",\n    \"prettier\": \"3.3.3\",\n    \"prompts\": \"^2.4.2\",\n    \"puppeteer\": \"24.1.1\",\n    \"puppeteer-cluster\": \"0.24.0\",\n    \"react\": \"19.0.0\",\n    \"react-day-picker\": \"^9.5.0\",\n    \"react-dom\": \"19.0.0\",\n    \"react-hook-form\": \"^7.54.2\",\n    \"react-intl\": \"^7.1.11\",\n    \"react-markdown\": \"9.0.3\",\n    \"react-resizable-panels\": \"^2.1.7\",\n    \"react-router\": \"7.1.1\",\n    \"react-syntax-highlighter\": \"15.6.1\",\n    \"react-textarea-autosize\": \"8.5.6\",\n    \"rehype-mermaid\": \"^3.0.0\",\n    \"remark-gfm\": \"4.0.0\",\n    \"remark-math\": \"6.0.0\",\n    \"sha1-uint8array\": \"0.10.7\",\n    \"sharp\": \"0.33.5\",\n    \"sonner\": \"1.7.1\",\n    \"storybook\": \"^8.5.5\",\n    \"tailwind-merge\": \"^3.0.1\",\n    \"tailwindcss\": \"^4.0.7\",\n    \"tinycolor2\": \"1.6.0\",\n    \"tree-kill\": \"^1.2.2\",\n    \"tree-sitter\": \"0.21.1\",\n    \"tree-sitter-typescript\": \"0.23.2\",\n    \"tsup\": \"^8.0.2\",\n    \"tsx\": \"4.19.3\",\n    \"typescript\": \"^5.6.0\",\n    \"undici\": \"^5.14.0\",\n    \"uuid\": \"10.0.0\",\n    \"vaul\": \"^1.1.2\",\n    \"vite\": \"^6.2.2\",\n    \"vite-plugin-singlefile\": \"^2.2.0\",\n    \"vite-tsconfig-paths\": \"^4.3.2\",\n    \"vitest\": \"3.0.5\",\n    \"webpack\": \"^5.98.0\",\n    \"webpack-sources\": \"^3.2.3\",\n    \"which-pm-runs\": \"^1.1.0\",\n    \"wrap-ansi\": \"^9.0.0\",\n    \"ws\": \"^8.18.3\",\n    \"xstate\": \"^5.19.4\",\n    \"zod\": \"^3.25.76\",\n    \"zx\": \"^8.4.1\"\n  }\n}\n", "import type { CodeGenErrorCodes } from \"$/ai-utils\";\n\nconst MAX_SIZE = 50000;\n\nexport function normalizeRelativePath(path: string) {\n  path = path.replace(/\\\\/g, \"/\");\n  if (path.startsWith(\"/\")) {\n    return path.slice(1);\n  }\n  if (path.startsWith(\"./\")) {\n    return path.slice(2);\n  }\n  return path;\n}\n\nexport function formatFileContent(\n  content: string,\n  offset: number,\n  limit: number,\n  includeLineNumbers: boolean,\n) {\n  const lines = content.split(\"\\n\");\n  // Apply offset and limit\n  const startLine = Math.max(0, offset);\n  const endLine = Math.min(lines.length, startLine + limit);\n  const selectedLines = lines.slice(startLine, endLine);\n\n  // Format with line numbers (cat -n format, starting at 1)\n  if (includeLineNumbers) {\n    const formattedLines = selectedLines.map((line, index) => {\n      const lineNumber = startLine + index + 1;\n      // Truncate lines longer than 1500 characters\n      const truncatedLine =\n        line.length > 1500 ? line.substring(0, 1500) + \"...\" : line;\n      return `${lineNumber.toString().padStart(6)}:${truncatedLine}`;\n    });\n\n    const result = formattedLines.join(\"\\n\");\n    return result;\n  }\n  return selectedLines\n    .map((line) =>\n      line.length > 1500 ? line.substring(0, 1500) + \"...\" : line,\n    )\n    .join(\"\\n\");\n}\nexport function getViewFileRange(\n  filePath: string,\n  content: string,\n  viewRange?: [number, number],\n) {\n  if (viewRange) {\n    if (!Array.isArray(viewRange) || viewRange.length !== 2) {\n      throw new Error(\n        `The provided viewRange must be an array of 2 numbers, like [1, 100], instead it was \\`${JSON.stringify(viewRange)}\\``,\n      );\n    }\n    const lines = content.split(\"\\n\");\n    const start = Math.max(1, viewRange[0] ?? 0) - 1;\n    const end = viewRange[1] ? Math.max(1, viewRange[1] ?? 0) - 1 : undefined;\n    if (start > lines.length) {\n      throw new Error(\n        `The file ${filePath} only contains up to ${lines.length} lines. However, the provided viewRange was \\`[${viewRange[0]}, ${viewRange[1]}]\\``,\n      );\n    }\n    return lines.slice(start, end).join(\"\\n\");\n  }\n  if (content.length > MAX_SIZE && !viewRange) {\n    const lines = content.split(\"\\n\");\n    throw new Error(\n      `The file content of ${filePath} is too large to view (${lines.length} lines).\nProvide a viewRange to view a specific part of the file.\nThe \"grep_search\" tool can be used to find the relevant part lines of a file.`,\n    );\n  }\n  return content;\n}\n\nexport function isCompletionId(id: string) {\n  return id.startsWith(\"cgen-\");\n}\n\nexport function filterWorkingDirectory<T extends string | undefined>(\n  output: T,\n  workingDirectory: string | undefined,\n): T {\n  if (output == null) {\n    return undefined as T;\n  }\n  if (!workingDirectory) {\n    return output;\n  }\n  return output.replace(new RegExp(`\\\\B${workingDirectory}/\\\\b`, \"g\"), \"\") as T;\n}\n\nexport function filterSecrets(input: string, secrets: string[]): string {\n  if (!input || !secrets || secrets.length === 0) {\n    return input;\n  }\n\n  let filtered = input;\n  for (const secret of secrets) {\n    if (secret && secret.trim()) {\n      // Escape special regex characters and replace all occurrences\n      const escapedSecret = secret.replace(/[.*+?^${}()|[\\]\\\\]/gi, \"\\\\$&\");\n      filtered = filtered.replace(new RegExp(escapedSecret, \"g\"), \"******\");\n    }\n  }\n\n  return filtered;\n}\n\nexport class CodeGenError extends Error {\n  readonly code: CodeGenErrorCodes;\n\n  constructor(\n    message: string,\n    code: CodeGenErrorCodes,\n    options?: { cause?: Error },\n  ) {\n    super(message, options);\n    this.name = \"CodeGenError\";\n    this.code = code;\n  }\n}\n", "import { fetch as fetchPolyfill } from \"undici\";\nimport { version as pkgVersion } from \"../../../package.json\";\nimport process from \"node:process\";\nimport * as Sentry from \"@sentry/node\";\nimport { NetworkError, convertNodeErrorToNetworkError } from \"../common/errors\";\nimport { CodeGenError } from \"$/vcp-common/codegen\";\n\nexport const safeFetch: typeof globalThis.fetch = async (\n  input: RequestInfo | URL,\n  init?: RequestInit,\n) => {\n  const fetchFn: typeof globalThis.fetch =\n    \"fetch\" in globalThis ? globalThis.fetch : (fetchPolyfill as any);\n\n  const url =\n    typeof input === \"string\"\n      ? input\n      : input instanceof URL\n        ? input.toString()\n        : input.url;\n\n  const urlObj = new URL(url);\n  const hostname = urlObj.hostname;\n  const port = urlObj.port ? parseInt(urlObj.port) : undefined;\n\n  try {\n    const traceData = Sentry.getTraceData();\n    const response = await fetchFn(input, {\n      ...init,\n      headers: {\n        ...init?.headers,\n        ...getUserAgent(),\n        ...traceData,\n      },\n    });\n    if (!response.ok) {\n      if (response.status === 402) {\n        const body = await response.json();\n        const code = body.code ?? \"credits-limit-daily\";\n        const message =\n          body.message ??\n          \"You've reached the DAY AI credits limit for your current plan.\";\n        throw new CodeGenError(message, code);\n      } else if (response.status === 429) {\n        const body = await response.json();\n        const code = body.code ?? \"credits-limit-other\";\n        const message =\n          body.message ?? \"Rate limit exceeded. Please try again later.\";\n        throw new CodeGenError(message, code);\n      }\n      if (response.status >= 500) {\n        let errorMessage: string | undefined;\n        try {\n          const errorText = await response.text();\n          if (errorText) {\n            try {\n              const errorJson = JSON.parse(errorText);\n              errorMessage = errorJson.message || errorJson.error || errorText;\n            } catch {\n              errorMessage = errorText;\n            }\n          }\n        } catch {}\n        throw new NetworkError({\n          type: \"server_error\",\n          cause: errorMessage ? new Error(errorMessage) : undefined,\n          message: `Server error from ${hostname} (HTTP ${response.status}). The server encountered an internal error.`,\n          suggestions: [\n            \"Try again in a few minutes - this may be a temporary issue\",\n            \"Contact support if the problem persists\",\n          ],\n          hostname,\n          statusCode: response.status,\n        });\n      }\n    }\n    return response;\n  } catch (error: unknown) {\n    if (\n      error instanceof NetworkError ||\n      error instanceof CodeGenError ||\n      (error instanceof Error && error.name === \"AbortError\")\n    ) {\n      throw error;\n    }\n\n    if (error instanceof Error) {\n      if (error.name === \"TypeError\" && error.cause instanceof Error) {\n        const causeError = error.cause as Error & { code?: string };\n        if (causeError.code) {\n          throw convertNodeErrorToNetworkError(causeError, hostname, port);\n        }\n      }\n\n      const nodeError = error as Error & { code?: string };\n      if (nodeError.code) {\n        throw convertNodeErrorToNetworkError(error, hostname, port);\n      }\n\n      if (\n        error.message?.includes(\"SSL\") ||\n        error.message?.includes(\"TLS\") ||\n        error.message?.includes(\"certificate\") ||\n        error.message?.includes(\"CERT\")\n      ) {\n        throw new NetworkError({\n          type: \"ssl_error\",\n          cause: error,\n          message: `SSL/TLS error connecting to ${hostname}. The connection could not be secured.`,\n          suggestions: [\n            \"Check your internet connection\",\n            \"Try again in a few minutes\",\n            \"Contact support@builder.io if the issue persists\",\n          ],\n          hostname,\n        });\n      }\n    }\n\n    const method = init?.method || \"GET\";\n    const errorMessage = error instanceof Error ? error.message : String(error);\n\n    throw new NetworkError({\n      type: \"unknown\",\n      cause: error instanceof Error ? error : new Error(String(error)),\n      message: `Network error for ${method} ${urlObj.toString()}: ${errorMessage}`,\n      suggestions: [\n        \"Check your internet connection\",\n        \"Try again in a few minutes\",\n        \"Contact support if the issue persists\",\n      ],\n      hostname,\n      port,\n    });\n  }\n};\n\nfunction getUserAgent() {\n  // Map Node.js platform names to User-Agent friendly names\n  const platformMap: Record<string, string> = {\n    darwin: \"Macintosh\",\n    win32: \"Windows NT\",\n    linux: \"Linux\",\n    android: \"Android\",\n    ios: \"iPhone\",\n  };\n\n  const platform = platformMap[process.platform] || \"Unknown\";\n  const osDetails = process.platform === \"win32\" ? \"10.0\" : \"\";\n\n  return {\n    \"User-Agent\": `Mozilla/5.0 (${platform}${\n      osDetails ? \"; \" + osDetails : \"\"\n    }) builder-cli/${pkgVersion}`,\n    \"Sec-Ch-Ua-Platform\": platform,\n  };\n}\n", "import type { FigmaComponentInfo, RawFigmaJson } from \"../ai-utils/src/mapping\";\n\nimport type { FigmaComponentInput } from \"../ai-utils/src/mapping\";\n\nconst REMOVE_EMOJI = /[^\\x00-\\x7F]/g;\n\nexport type SceneNodeJSON = JSONify<SceneNode>;\n\nexport type JSONify<T> = {\n  [key in keyof T]: T[key] extends ReadonlyArray<SceneNode>\n    ? SceneNodeJSON[]\n    : T[key] extends Function\n      ? never\n      : T[key];\n};\n\nexport function getFigmaComponentName(name: string | undefined) {\n  if (!name) return \"\";\n\n  /**\n   * Remove the unique ID from the end of a Figma prop.\n   * \"Node 3#123:123\" becomes \"Node 3\".\n   */\n  const idIndex = name.lastIndexOf(\"#\");\n  name = idIndex > -1 ? name.slice(0, idIndex) : name;\n\n  name = name.normalize(\"NFD\").replace(REMOVE_EMOJI, \"\");\n\n  // Handle special case for numbers at start followed by underscore\n  const numberUnderscoreMatch = name.match(/^(\\d+)(_[^_].*)/);\n  if (numberUnderscoreMatch) {\n    name = name.slice(numberUnderscoreMatch[1].length);\n  }\n\n  // Remove invalid start characters (numbers and special chars including underscore)\n  name = name.replace(/^[^a-zA-Z]+/, \"\");\n\n  // Do not match digits to preserve numbers that are part of the prop name.\n  name = name.replace(/[\\W]/g, \" \");\n  name = name.trim();\n  name = camelize(name);\n  // capitalize first letter\n  name = name.charAt(0).toUpperCase() + name.slice(1);\n  return name;\n}\n\nexport function printTreeJSX(\n  node: JSONify<SceneNode>,\n  nameMap: (key: string) => string,\n  resolveComponentName: (id: string | undefined) => string,\n  level = -1,\n): string {\n  const spaces = \"  \".repeat(Math.max(level + 1, 0));\n\n  let output = \"\";\n  const type = node.type;\n  let shouldWalk =\n    type === \"GROUP\" || type === \"FRAME\" || (level < 0 && \"children\" in node);\n  let instance = \"\";\n  const emit = level >= 0;\n  if (emit) {\n    let props = \"\";\n    if (node.type === \"INSTANCE\") {\n      if (\n        node.componentPropertyReferences &&\n        node.componentPropertyReferences.mainComponent\n      ) {\n        output += `${spaces}{figma[${JSON.stringify(\n          nameMap(node.componentPropertyReferences.mainComponent),\n        )}]}\\n`;\n        return output;\n      } else {\n        let cmpName = resolveComponentName((node as any)?.componentId);\n        if (cmpName) {\n          instance = getFigmaComponentName(cmpName);\n          shouldWalk = true;\n        }\n      }\n    }\n    if (instance === \"\") {\n      // if ('layoutMode' in node && node.layoutMode === 'HORIZONTAL') {\n      //   instance = 'hframe';\n      // } else if ('layoutMode' in node && node.layoutMode === 'VERTICAL') {\n      //   instance = 'vframe';\n      // } else {\n      // }\n      instance = node.type;\n    }\n    if (node.type !== \"TEXT\" || !node.autoRename) {\n      props += ` name=${JSON.stringify(node.name)}`;\n    }\n    if (\n      node.componentPropertyReferences &&\n      node.componentPropertyReferences.visible\n    ) {\n      props += ` visible={figma[${JSON.stringify(nameMap(node.componentPropertyReferences.visible))}]}`;\n    }\n    output += `${spaces}<${instance}${props}`;\n  }\n  if (node.type === \"TEXT\") {\n    if (emit) {\n      output += `>\\n`;\n    }\n    if (\n      node.componentPropertyReferences &&\n      node.componentPropertyReferences.characters\n    ) {\n      output += `${spaces}  {figma[${JSON.stringify(nameMap(node.componentPropertyReferences.characters))}]}\\n`;\n    } else {\n      output += `${spaces}  ${node.characters}\\n`;\n    }\n    if (emit) {\n      output += `${spaces}</${instance}>\\n`;\n    }\n  } else if (shouldWalk && \"children\" in node && node.children.length > 0) {\n    if (emit) {\n      output += `>\\n`;\n    }\n    let index = 0;\n    for (const child of node.children) {\n      output += printTreeJSX(child, nameMap, resolveComponentName, level + 1);\n      index++;\n    }\n    if (emit) {\n      output += `${spaces}</${instance}>\\n`;\n    }\n  } else if (emit) {\n    output += `/>\\n`;\n  }\n  return output;\n}\n\nexport function getFigmaPropsInterface(node: FigmaComponentInfo) {\n  return node.inputs\n    .map(\n      (input) =>\n        `  ${getPropertyAccessor(input.name)}?: ${getTypeFromFigmatInput(\n          input,\n        )};${input.ref ? ` // when \"${input.ref}\" is true` : \"\"}`,\n    )\n    .join(\"\\n\");\n}\n\nexport const getTypeFromFigmatInput = (input: FigmaComponentInput): string => {\n  if (input.type === \"reference\") {\n    return \"ReactNode\";\n  }\n  if (input.type === \"file\") {\n    return \"string\";\n  }\n  if (input.type === \"richText\") {\n    return \"string\";\n  }\n  return input.type;\n};\n\n/**\n * Convert figma json to a FigmaComponentInfo object.\n * Resolves inputs and attaches metadata.\n *\n * @param rawJson - Raw JSON for a component set node or component node.\n * @param figmaKeyOrId - The instance id if this is an instance of a component.\n */\nexport function processRawFigmaJson(\n  rawJson: RawFigmaJson | undefined,\n  figmaKeyOrId?: string,\n) {\n  const mainComponent = (rawJson?.document ?? rawJson?.documents[0]) as\n    | JSONify<ComponentSetNode>\n    | JSONify<ComponentNode>\n    | undefined;\n  if (!mainComponent) {\n    throw new Error(\"No document found\");\n  }\n  const { inputs, nameMap } =\n    getInputsSlotsFromComponentPropertyDefinitions(mainComponent);\n\n  const resolveComponentName = (id: string | undefined) => {\n    if (!id) {\n      return null;\n    }\n    const cmpSet = rawJson?.componentSets?.[id];\n    if (cmpSet) {\n      return cmpSet.name;\n    }\n    const cmp = rawJson?.components?.[id];\n    if (cmp) {\n      if (cmp.componentSetId) {\n        return resolveComponentName(cmp.componentSetId);\n      }\n    }\n    return cmp.name;\n  };\n  const figmaNodeInfo: FigmaComponentInfo = {\n    type: mainComponent.type,\n    name: mainComponent.name,\n\n    jsx:\n      mainComponent.type === \"COMPONENT_SET\" &&\n      mainComponent.children.length > 0\n        ? printTreeJSX(mainComponent.children[0], nameMap, resolveComponentName)\n        : printTreeJSX(mainComponent, nameMap, resolveComponentName),\n\n    inputs: inputs,\n    key: mainComponent.key,\n    description: mainComponent.description,\n    documentationLinks:\n      mainComponent.documentationLinks?.map((a) => a.uri) || [],\n    instanceId: figmaKeyOrId?.includes(\":\") ? figmaKeyOrId : mainComponent.id,\n    documentName: \"\",\n    tree: \"\",\n  };\n  return figmaNodeInfo;\n}\n\nexport function getMainComponentPropName(propId: string) {\n  if (typeof propId === \"string\") {\n    // Name#12:3234\n    return propId\n      .replace(/#\\d+:\\d+$/, \"\")\n      .replace(REMOVE_EMOJI, \"\")\n      .trim();\n  }\n  return \"\";\n}\n\nfunction computeInputNames(ids: string[]) {\n  const nameMap = new Map<string, string>();\n  const nameSetted = new Map<string, string>();\n  ids.forEach((id) => {\n    const n = getMainComponentPropName(id);\n    if (nameSetted.has(n)) {\n      if (nameMap.has(id)) {\n        nameMap.set(nameSetted.get(n)!, nameSetted.get(n)!);\n        nameMap.delete(n);\n      }\n      nameMap.set(id, id);\n    } else {\n      nameMap.set(id, n);\n      nameSetted.set(n, id);\n    }\n  });\n  return (key: string) => {\n    const value = nameMap.get(key) ?? getMainComponentPropName(key);\n    if (!value) {\n      throw new Error(\"No value for key \" + key);\n    }\n    return value;\n  };\n}\n\nexport function findAllWithCriteria(\n  rootNode: SceneNodeJSON,\n  predicate: (node: SceneNodeJSON) => boolean,\n) {\n  const results: SceneNodeJSON[] = [];\n  const queue: SceneNodeJSON[] = [rootNode];\n  while (queue.length > 0) {\n    const node = queue.shift();\n    if (node) {\n      if (predicate(node)) {\n        results.push(node);\n      }\n      if (\"children\" in node) {\n        queue.push(...node.children);\n      }\n    }\n  }\n  return results;\n}\n\nexport function getInputsSlotsFromComponentPropertyDefinitions(\n  mainComponent: JSONify<ComponentSetNode | ComponentNode>,\n) {\n  const inputs: FigmaComponentInput[] = [];\n  let cmpPropDefinitions: ComponentPropertyDefinitions = {};\n  try {\n    cmpPropDefinitions = mainComponent.componentPropertyDefinitions || {};\n  } catch (e) {\n    // TODO: Show a nice warning in UI for users\n    console.error(\"Invalid Component Property Definitions\", e);\n  }\n\n  const components =\n    mainComponent.type === \"COMPONENT_SET\"\n      ? (mainComponent.children as ComponentNode[])\n      : [mainComponent];\n\n  const groups = new Map();\n  const instances: JSONify<InstanceNode | TextNode>[] = [];\n  const ids = Object.keys(cmpPropDefinitions);\n  const nameMap = computeInputNames(ids);\n\n  for (const component of components) {\n    const instancesOriginal = findAllWithCriteria(\n      component as JSONify<ComponentNode>,\n      (node) => {\n        return node.type === \"INSTANCE\" || node.type === \"TEXT\";\n      },\n    ) as JSONify<InstanceNode | TextNode>[];\n    for (const instance of instancesOriginal) {\n      instances.push(instance);\n      const refs = instance.componentPropertyReferences;\n      if (refs) {\n        if (refs.visible) {\n          if (refs.characters) {\n            groups.set(refs.characters, nameMap(refs.visible));\n          }\n          if (refs.mainComponent) {\n            groups.set(refs.mainComponent, nameMap(refs.visible));\n          }\n        }\n      }\n    }\n  }\n\n  for (const id of ids) {\n    const cmpPropDefinition = cmpPropDefinitions[id];\n\n    switch (cmpPropDefinition.type) {\n      case \"TEXT\": {\n        // text component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: cmpPropDefinition.defaultValue,\n          type: \"string\",\n          baseType: \"text\",\n          isDefault: true,\n          ref: groups.get(id),\n        });\n        break;\n      }\n\n      case \"BOOLEAN\": {\n        // boolean component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: !!cmpPropDefinition.defaultValue,\n          baseType: \"boolean\",\n          isDefault: true,\n          type: \"boolean\",\n        });\n        break;\n      }\n\n      case \"VARIANT\": {\n        // variant component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: cmpPropDefinition.defaultValue,\n          type:\n            cmpPropDefinition.variantOptions\n              ?.map((a) => `'${a}'`)\n              .join(\" | \") ?? \"string\",\n          baseType: \"variant\",\n          variantOptions: cmpPropDefinition.variantOptions ?? [],\n          isDefault: true,\n          ref: groups.get(id),\n        });\n        break;\n      }\n\n      case \"INSTANCE_SWAP\": {\n        // instance swap component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: String(cmpPropDefinition.defaultValue),\n          type: \"React.ReactNode\",\n          baseType: \"slot\",\n          isDefault: true,\n          ref: groups.get(id),\n        });\n        break;\n      }\n    }\n  }\n\n  return { inputs, nameMap };\n}\n\nexport function getFigmaPropName(name: string) {\n  name = getFigmaComponentName(name);\n  name = name.charAt(0).toLowerCase() + name.slice(1);\n  if (name === \"state\") {\n    name = \"stateInput\";\n  }\n  return name;\n}\n\nexport function camelize(str: string) {\n  return str\n    .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word, index) {\n      return index === 0 ? word.toLowerCase() : word.toUpperCase();\n    })\n    .replace(/\\s+/g, \"\");\n}\n\nexport const getPropertyAccessor = (name: string) => {\n  if (/^[a-zA-Z_\\$]\\w*$/.test(name)) {\n    return name;\n  }\n  return JSON.stringify(name);\n};\n\nexport function getFigmaComponentInputsSlots(\n  node: SceneNodeJSON,\n  mainComponent?: JSONify<ComponentNode | ComponentSetNode>,\n) {\n  const inputs: FigmaComponentInput[] = [];\n\n  try {\n    if (node.type === \"INSTANCE\") {\n      return getInputsSlotsFromComponentProperties(\n        node.componentProperties,\n        mainComponent,\n      );\n    }\n\n    if (node.type === \"COMPONENT\") {\n      // Can only get component property definitions of a component set or non-variant component\n\n      if (node.variantProperties) {\n        // this is a variant component that has a parent component set\n        // get the component property definitions from the parent component set\n\n        // variantProperties:  {\n        //   \"style\": \"primary\",\n        //   \"size\": \"large\",\n        //   \"type\": \"enabled\"\n        // }\n\n        const ids = Object.keys(node.variantProperties);\n        const nameMap = computeInputNames(ids);\n\n        for (const variantPropId in node.variantProperties) {\n          // value from a component's component property definition is from the variant properties\n          const variantProp = node.variantProperties[variantPropId];\n          inputs.push({\n            id: variantPropId,\n            name: nameMap(variantPropId),\n            value: variantProp,\n            type: \"string\",\n            isDefault: false,\n            baseType: \"variant\",\n          });\n        }\n        return inputs;\n      }\n\n      // this is a non-variant component\n      // get the component property definitions from this component\n      return getInputsSlotsFromComponentPropertyDefinitions(node).inputs;\n    }\n\n    if (node.type === \"COMPONENT_SET\") {\n      // this is a component set\n      // get the component property definitions from this component\n      return getInputsSlotsFromComponentPropertyDefinitions(node).inputs;\n    }\n  } catch (e) {\n    console.error(\"getFigmaComponenInputs\", e);\n  }\n\n  return inputs.sort((a, b) => {\n    return a.name.localeCompare(b.name);\n  });\n}\n\nexport function getInputsSlotsFromComponentProperties(\n  componentProperties: ComponentProperties,\n  mainComponent?: JSONify<ComponentNode | ComponentSetNode>,\n) {\n  const inputs: FigmaComponentInput[] = [];\n\n  componentProperties = componentProperties || {};\n  const ids = Object.keys(componentProperties);\n  const nameMap = computeInputNames(ids);\n\n  for (const id of ids) {\n    let defaultValue: any;\n    try {\n      defaultValue =\n        mainComponent?.componentPropertyDefinitions[id]?.defaultValue;\n    } catch (e) {}\n    const instanceProp = componentProperties[id];\n\n    switch (instanceProp.type) {\n      case \"TEXT\": {\n        // text component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          // value from a component's component property definition is the default value\n          value: instanceProp.value,\n          baseType: \"text\",\n          isDefault: instanceProp.value === defaultValue,\n          type: \"string\",\n        });\n        break;\n      }\n\n      case \"BOOLEAN\": {\n        // boolean component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: !!instanceProp.value,\n          baseType: \"boolean\",\n          isDefault: instanceProp.value === defaultValue,\n          type: \"boolean\",\n        });\n        break;\n      }\n\n      case \"VARIANT\": {\n        // variant component property\n        const name = nameMap(id);\n        const variantOptions = mainComponent\n          ? mainComponent.componentPropertyDefinitions![id]?.variantOptions\n          : undefined;\n        inputs.push({\n          id,\n          name,\n          value: instanceProp.value,\n          baseType: \"variant\",\n          variantOptions: variantOptions ?? [],\n          isDefault: instanceProp.value === defaultValue,\n          type:\n            (variantOptions\n              ? variantOptions.map((a) => `'${a}'`).join(\" | \")\n              : undefined) ?? \"string\",\n        });\n        break;\n      }\n\n      case \"INSTANCE_SWAP\": {\n        // instance swap component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: String(instanceProp.value),\n          isDefault: instanceProp.value === defaultValue,\n          type: \"React.ReactNode\",\n          baseType: \"slot\",\n        });\n        break;\n      }\n    }\n  }\n  return inputs;\n}\n", "import { cancel, log } from \"@clack/prompts\";\nimport { safeFetch } from \"./fetch\";\nimport { exit } from \"./exit\";\nimport * as Sentry from \"@sentry/node\";\nimport { apiAirV2Host } from \"./constants\";\nimport {\n  getCredentials,\n  type Credentials,\n  type FigmaAuth,\n} from \"./credentials\";\nimport type { DevToolsSys } from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport type { FigmaBuilderLink, FigmaComponentInfo } from \"$/ai-utils\";\nimport { processRawFigmaJson } from \"$/vcp-common/figma-component\";\n\ntype FigmaAPIOpts = {\n  auth: {\n    access_token: string;\n    oauth: boolean;\n  };\n  params?: Record<string, any>;\n};\n\nexport const parseFigmaURL = (str: string) => {\n  try {\n    // Clean up escaped characters in the URL\n    const cleanUrl = str\n      .replace(/\\\\\\(/g, \"(\")\n      .replace(/\\\\\\)/g, \")\")\n      .replace(/\\\\\\=/g, \"=\")\n      .replace(/\\\\\\?/g, \"?\")\n      .replace(/\\\\\\&/g, \"&\");\n\n    const url = new URL(cleanUrl);\n\n    // Accept any Figma URL that has a file/design ID\n    if (!url.hostname.includes(\"figma.com\")) {\n      console.log(\"\\n\u274C Not a Figma URL - hostname check failed\");\n      return null;\n    }\n\n    const nodeId = url.searchParams.get(\"node-id\")?.replaceAll(\"-\", \":\");\n    // Match both file/{key} and design/{key} patterns\n    const fileID = url.pathname.split(\"/\")[2];\n\n    if (nodeId && fileID) {\n      return { fileID, nodeId };\n    }\n\n    return null;\n  } catch (error) {\n    return null;\n  }\n};\n\nconst baseFigmaAPI = \"https://api.figma.com/v1/\";\nexport const figmaApi = async <T = any>(\n  sys: DevToolsSys,\n  args: CLIArgs,\n  path: string,\n  { auth, params }: FigmaAPIOpts,\n): Promise<T> => {\n  const url = new URL(`${baseFigmaAPI}${path}`),\n    headers: Record<string, string> = {};\n  if (auth.oauth) {\n    headers.Authorization = `Bearer ${auth.access_token}`;\n  } else {\n    headers[\"X-FIGMA-TOKEN\"] = auth.access_token;\n  }\n\n  if (params) {\n    for (const key in params) {\n      if (params[key] != null) {\n        url.searchParams.set(key, params[key].toString());\n      }\n    }\n  }\n\n  const res = await safeFetch(url, {\n    headers,\n  });\n  if (!res.ok) {\n    if (res.status === 401) {\n      log.error(\n        \"Seems like figma auth is expired or it's invalid, let's try to\",\n      );\n      const credentials = await getCredentials(sys, args, {\n        force: true,\n        requireFigmaAuth: \"always\",\n      });\n      return figmaApi(sys, args, path, {\n        auth: credentials.figmaAuth!,\n        params,\n      });\n    }\n    throw new Error(`Figma REST ${res.statusText}: ${await res.text()}`);\n  }\n  return res.json();\n};\n\nexport const getFigmaNodeData = async (\n  sys: DevToolsSys,\n  args: CLIArgs,\n  auth: {\n    access_token: string;\n    oauth: boolean;\n  },\n  fileId: string,\n  nodeIds: string,\n  depth?: number,\n) => {\n  // curl -H 'X-FIGMA-TOKEN: <personal access token>' 'https://api.figma.com/v1/files/:file_key/nodes?ids=1:34'\n  const data = await figmaApi(sys, args, `files/${fileId}/nodes`, {\n    auth,\n    params: {\n      ids: nodeIds,\n      depth,\n    },\n  });\n\n  return data.nodes;\n};\n\nconst componentKeyRegex = /^[a-f0-9]{40}$/;\n\nexport async function getImportDataFromToken(\n  credentials: Credentials,\n  token: string,\n  verbose: boolean,\n): Promise<(readonly [string, FigmaComponentInfo])[]> {\n  const json = JSON.stringify({\n    token,\n  });\n  const url = new URL(`${apiAirV2Host}/mappings/figma-components/get`);\n  if (credentials.builderPublicKey) {\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n  }\n  if (credentials.userId) {\n    url.searchParams.set(\"userId\", credentials.userId);\n  }\n\n  const headers: Record<string, string> = {\n    \"Content-Type\": \"application/json\",\n  };\n  if (credentials.builderPrivateKey) {\n    headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n  }\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    body: json,\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey!}`,\n    },\n  });\n  if (!res.ok) {\n    throw new Error(\"Failed to generate completion:\\n\" + (await res.text()));\n  }\n  const responseJson = await res.json();\n  if (!Array.isArray(responseJson.figmaComponents)) {\n    throw new Error(\"Invalid response from Figma API\");\n  }\n  return responseJson.figmaComponents.map((a: any) => [\"\", a] as const);\n}\n\nexport function needsFigmaAuth(urls: string[]) {\n  return urls.some((url) => !!parseFigmaURL(url));\n}\n\nexport async function getFigmaNodeDataFromURLs(\n  sys: DevToolsSys,\n  args: CLIArgs,\n  figmaAuth:\n    | {\n        access_token: string;\n        oauth: boolean;\n      }\n    | undefined,\n  builderAuth: {\n    privateKey: string;\n    spaceId: string;\n  },\n  urls: string[],\n): Promise<(readonly [string, FigmaComponentInfo])[]> {\n  const importData = await Promise.all(\n    urls.map(async (url) => {\n      let fileId, nodeId;\n      if (url.match(componentKeyRegex)) {\n        try {\n          if (figmaAuth) {\n            let figmaRestApiData;\n            try {\n              // Fall back to Figma components API, requires that the component be published and that the user has access to it\n              figmaRestApiData = await figmaApi(\n                sys,\n                args,\n                `components/${url}`,\n                {\n                  auth: figmaAuth,\n                },\n              );\n              fileId = figmaRestApiData.meta.file_key;\n              nodeId = figmaRestApiData.meta.node_id;\n            } catch (e) {\n              log.warning(`Failed to fetch component from Figma API.`);\n            }\n          }\n        } catch (e) {\n          Sentry.captureException(e);\n          throw e;\n        }\n      }\n\n      if (!fileId || !nodeId) {\n        // Parse figma link URL\n        // TODO: Return all components in selection\n        const parsedFile = parseFigmaURL(url);\n        if (!parsedFile) {\n          cancel(\n            \"Invalid Figma URL, use Cmd+L while selecting a figma component to get a link to selection.\\n   \" +\n              \"Or make sure the command is copied correctly from the Figma plugin and the same builder space is being used.\",\n          );\n          return await exit(1);\n        }\n        if (parsedFile) {\n          ({ fileID: fileId, nodeId } = parsedFile);\n        }\n      }\n\n      if (!figmaAuth) {\n        return [];\n      }\n\n      // Figma link or published component fileId and nodeId\n      const figmaRestApiData = await getFigmaNodeData(\n        sys,\n        args,\n        figmaAuth,\n        fileId,\n        nodeId,\n      );\n\n      const info = await getComponentInfo(figmaRestApiData[nodeId], nodeId);\n      if (info) {\n        return [[url, info]] as const;\n      }\n      return [];\n    }),\n  );\n\n  return importData.flat().filter(nonNull);\n}\n\nasync function getComponentInfo(\n  figmaRestApiData: any,\n  nodeId: string,\n): Promise<FigmaComponentInfo | undefined> {\n  const nodeDocument = figmaRestApiData.document;\n  if (\n    nodeDocument.type !== \"COMPONENT\" &&\n    nodeDocument.type !== \"COMPONENT_SET\"\n  ) {\n    let message = `Seems like the pasted URL points to a ${nodeDocument.type} node, not a COMPONENT or COMPONENT_SET.`;\n    if (nodeDocument.type === \"INSTANCE\") {\n      message += `\\nDouble click and select \"Go to main component\", then copy the URL to the figma COMPONENT`;\n    }\n    cancel(message);\n    return await exit(1);\n  }\n\n  const componentKey =\n    figmaRestApiData.components[nodeId]?.key ??\n    figmaRestApiData.componentSets[nodeId]?.key;\n  if (!componentKey) {\n    cancel(\"Pasted URL does not correspond to a component or component set\");\n    return await exit(1);\n  }\n  figmaRestApiData.document.key = componentKey;\n\n  return processRawFigmaJson(figmaRestApiData, nodeId);\n}\n\nexport async function inPlaceResolveFigmaURLs(\n  sys: DevToolsSys,\n  args: CLIArgs,\n  figmaAuth: FigmaAuth,\n  figmaBuilderLinks: FigmaBuilderLink[],\n  figmaLinksToResolve: string[],\n) {\n  if (figmaLinksToResolve.length > 0) {\n    const resolvedFigmaKeys = await resolveFigmaUrls(\n      sys,\n      args,\n      figmaAuth,\n      figmaLinksToResolve,\n    );\n    for (const l of figmaBuilderLinks) {\n      if (l.figmaUrl && !l.figmaKey) {\n        const resolvedKey = resolvedFigmaKeys[l.figmaUrl];\n        if (resolvedKey) {\n          l.figmaKey = resolvedKey;\n        }\n      }\n    }\n  }\n}\n\nconst resolveFigmaUrls = async (\n  sys: DevToolsSys,\n  args: CLIArgs,\n  figmaAuth: FigmaAuth | undefined,\n  figmaUrls: string[],\n) => {\n  if (!figmaAuth) {\n    return {};\n  }\n  const files = new Map<string, string[]>();\n  const mappedLinks: Record<string, string | undefined> = {};\n\n  figmaUrls.forEach((url) => {\n    const parsedFile = parseFigmaURL(url);\n    if (!parsedFile) {\n      sys.Sentry?.captureException(\n        new Error(\n          \"Invalid Figma URL, use Cmd+L while selecting a figma component to get a link to selection\",\n        ),\n        {\n          extra: {\n            figmaUrl: url,\n          },\n          level: \"warning\",\n        },\n      );\n      return;\n    }\n    let ids = files.get(parsedFile.fileID);\n    if (!ids) {\n      ids = [];\n      files.set(parsedFile.fileID, ids);\n    }\n    if (!ids.includes(parsedFile.nodeId)) {\n      ids.push(parsedFile.nodeId);\n    }\n    mappedLinks[url] = `${parsedFile.fileID}/${parsedFile.nodeId}`;\n  });\n\n  await Promise.all(\n    Array.from(files.entries()).map(async ([fileID, nodeIds]) => {\n      const nodes = await getFigmaNodeData(\n        sys,\n        args,\n        figmaAuth,\n        fileID,\n        nodeIds.join(\",\"),\n        0,\n      );\n      for (const nodeId of nodeIds) {\n        const nodeData = nodes[nodeId];\n        const componentKey =\n          nodeData.components[nodeId]?.key ??\n          nodeData.componentSets[nodeId]?.key;\n        if (!componentKey) {\n          sys.Sentry?.withScope((scope) => {\n            scope.addAttachment({\n              data: JSON.stringify(nodes, null, 2),\n              filename: `${fileID}.json`,\n            });\n            sys.Sentry?.captureException(\n              new Error(`Cannot resolve figma component key for NodeID`),\n              {\n                extra: {\n                  nodeId,\n                  fileID,\n                },\n                level: \"warning\",\n              },\n            );\n          });\n        }\n        const key = `${fileID}/${nodeId}`;\n        for (const url of figmaUrls) {\n          if (mappedLinks[url] === key) {\n            mappedLinks[url] = componentKey;\n          }\n        }\n      }\n    }),\n  );\n  return mappedLinks;\n};\n\nfunction nonNull<T>(value: T | null | undefined): value is T {\n  return value != null;\n}\n", "import {on, once} from 'node:events';\nimport {PassThrough as PassThroughStream} from 'node:stream';\nimport {finished} from 'node:stream/promises';\n\nexport default function mergeStreams(streams) {\n\tif (!Array.isArray(streams)) {\n\t\tthrow new TypeError(`Expected an array, got \\`${typeof streams}\\`.`);\n\t}\n\n\tfor (const stream of streams) {\n\t\tvalidateStream(stream);\n\t}\n\n\tconst objectMode = streams.some(({readableObjectMode}) => readableObjectMode);\n\tconst highWaterMark = getHighWaterMark(streams, objectMode);\n\tconst passThroughStream = new MergedStream({\n\t\tobjectMode,\n\t\twritableHighWaterMark: highWaterMark,\n\t\treadableHighWaterMark: highWaterMark,\n\t});\n\n\tfor (const stream of streams) {\n\t\tpassThroughStream.add(stream);\n\t}\n\n\tif (streams.length === 0) {\n\t\tendStream(passThroughStream);\n\t}\n\n\treturn passThroughStream;\n}\n\nconst getHighWaterMark = (streams, objectMode) => {\n\tif (streams.length === 0) {\n\t\t// @todo Use `node:stream` `getDefaultHighWaterMark(objectMode)` in next major release\n\t\treturn 16_384;\n\t}\n\n\tconst highWaterMarks = streams\n\t\t.filter(({readableObjectMode}) => readableObjectMode === objectMode)\n\t\t.map(({readableHighWaterMark}) => readableHighWaterMark);\n\treturn Math.max(...highWaterMarks);\n};\n\nclass MergedStream extends PassThroughStream {\n\t#streams = new Set([]);\n\t#ended = new Set([]);\n\t#aborted = new Set([]);\n\t#onFinished;\n\n\tadd(stream) {\n\t\tvalidateStream(stream);\n\n\t\tif (this.#streams.has(stream)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#streams.add(stream);\n\n\t\tthis.#onFinished ??= onMergedStreamFinished(this, this.#streams);\n\t\tendWhenStreamsDone({\n\t\t\tpassThroughStream: this,\n\t\t\tstream,\n\t\t\tstreams: this.#streams,\n\t\t\tended: this.#ended,\n\t\t\taborted: this.#aborted,\n\t\t\tonFinished: this.#onFinished,\n\t\t});\n\n\t\tstream.pipe(this, {end: false});\n\t}\n\n\tremove(stream) {\n\t\tvalidateStream(stream);\n\n\t\tif (!this.#streams.has(stream)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tstream.unpipe(this);\n\t\treturn true;\n\t}\n}\n\nconst onMergedStreamFinished = async (passThroughStream, streams) => {\n\tupdateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_COUNT);\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tawait Promise.race([\n\t\t\tonMergedStreamEnd(passThroughStream, controller),\n\t\t\tonInputStreamsUnpipe(passThroughStream, streams, controller),\n\t\t]);\n\t} finally {\n\t\tcontroller.abort();\n\t\tupdateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_COUNT);\n\t}\n};\n\nconst onMergedStreamEnd = async (passThroughStream, {signal}) => {\n\tawait finished(passThroughStream, {signal, cleanup: true});\n};\n\nconst onInputStreamsUnpipe = async (passThroughStream, streams, {signal}) => {\n\tfor await (const [unpipedStream] of on(passThroughStream, 'unpipe', {signal})) {\n\t\tif (streams.has(unpipedStream)) {\n\t\t\tunpipedStream.emit(unpipeEvent);\n\t\t}\n\t}\n};\n\nconst validateStream = stream => {\n\tif (typeof stream?.pipe !== 'function') {\n\t\tthrow new TypeError(`Expected a readable stream, got: \\`${typeof stream}\\`.`);\n\t}\n};\n\nconst endWhenStreamsDone = async ({passThroughStream, stream, streams, ended, aborted, onFinished}) => {\n\tupdateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_PER_STREAM);\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tawait Promise.race([\n\t\t\tafterMergedStreamFinished(onFinished, stream),\n\t\t\tonInputStreamEnd({passThroughStream, stream, streams, ended, aborted, controller}),\n\t\t\tonInputStreamUnpipe({stream, streams, ended, aborted, controller}),\n\t\t]);\n\t} finally {\n\t\tcontroller.abort();\n\t\tupdateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_PER_STREAM);\n\t}\n\n\tif (streams.size === ended.size + aborted.size) {\n\t\tif (ended.size === 0 && aborted.size > 0) {\n\t\t\tabortStream(passThroughStream);\n\t\t} else {\n\t\t\tendStream(passThroughStream);\n\t\t}\n\t}\n};\n\n// This is the error thrown by `finished()` on `stream.destroy()`\nconst isAbortError = error => error?.code === 'ERR_STREAM_PREMATURE_CLOSE';\n\nconst afterMergedStreamFinished = async (onFinished, stream) => {\n\ttry {\n\t\tawait onFinished;\n\t\tabortStream(stream);\n\t} catch (error) {\n\t\tif (isAbortError(error)) {\n\t\t\tabortStream(stream);\n\t\t} else {\n\t\t\terrorStream(stream, error);\n\t\t}\n\t}\n};\n\nconst onInputStreamEnd = async ({passThroughStream, stream, streams, ended, aborted, controller: {signal}}) => {\n\ttry {\n\t\tawait finished(stream, {signal, cleanup: true, readable: true, writable: false});\n\t\tif (streams.has(stream)) {\n\t\t\tended.add(stream);\n\t\t}\n\t} catch (error) {\n\t\tif (signal.aborted || !streams.has(stream)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isAbortError(error)) {\n\t\t\taborted.add(stream);\n\t\t} else {\n\t\t\terrorStream(passThroughStream, error);\n\t\t}\n\t}\n};\n\nconst onInputStreamUnpipe = async ({stream, streams, ended, aborted, controller: {signal}}) => {\n\tawait once(stream, unpipeEvent, {signal});\n\tstreams.delete(stream);\n\tended.delete(stream);\n\taborted.delete(stream);\n};\n\nconst unpipeEvent = Symbol('unpipe');\n\nconst endStream = stream => {\n\tif (stream.writable) {\n\t\tstream.end();\n\t}\n};\n\nconst abortStream = stream => {\n\tif (stream.readable || stream.writable) {\n\t\tstream.destroy();\n\t}\n};\n\n// `stream.destroy(error)` crashes the process with `uncaughtException` if no `error` event listener exists on `stream`.\n// We take care of error handling on user behalf, so we do not want this to happen.\nconst errorStream = (stream, error) => {\n\tif (!stream.destroyed) {\n\t\tstream.once('error', noop);\n\t\tstream.destroy(error);\n\t}\n};\n\nconst noop = () => {};\n\nconst updateMaxListeners = (passThroughStream, increment) => {\n\tconst maxListeners = passThroughStream.getMaxListeners();\n\tif (maxListeners !== 0 && maxListeners !== Number.POSITIVE_INFINITY) {\n\t\tpassThroughStream.setMaxListeners(maxListeners + increment);\n\t}\n};\n\n// Number of times `passThroughStream.on()` is called regardless of streams:\n//  - once due to `finished(passThroughStream)`\n//  - once due to `on(passThroughStream)`\nconst PASSTHROUGH_LISTENERS_COUNT = 2;\n\n// Number of times `passThroughStream.on()` is called per stream:\n//  - once due to `stream.pipe(passThroughStream)`\nconst PASSTHROUGH_LISTENERS_PER_STREAM = 1;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n    return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n    const result = [[]];\n    let groupIndex = 0;\n    for (const item of items) {\n        if (predicate(item)) {\n            groupIndex++;\n            result[groupIndex] = [];\n        }\n        else {\n            result[groupIndex].push(item);\n        }\n    }\n    return result;\n}\nexports.splitWhen = splitWhen;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n    return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}[], !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()[\\]{}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@[\\]{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n    return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n    return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n    // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n    // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n    if (entry.charAt(0) === '.') {\n        const secondCharactery = entry.charAt(1);\n        if (secondCharactery === '/' || secondCharactery === '\\\\') {\n            return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n        }\n    }\n    return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n    return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n    return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n    return escapeWindowsPath(filepath)\n        .replace(DOS_DEVICE_PATH_RE, '//$1')\n        .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n    return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n", "/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  var match;\n  while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n    if (match[2]) return true;\n    str = str.slice(match.index + match[0].length);\n  }\n\n  return false;\n};\n", "/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  var pipeIndex = -2;\n  var closeSquareIndex = -2;\n  var closeCurlyIndex = -2;\n  var closeParenIndex = -2;\n  var backSlashIndex = -2;\n  while (index < str.length) {\n    if (str[index] === '*') {\n      return true;\n    }\n\n    if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n      return true;\n    }\n\n    if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n      if (closeSquareIndex < index) {\n        closeSquareIndex = str.indexOf(']', index);\n      }\n      if (closeSquareIndex > index) {\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n      closeCurlyIndex = str.indexOf('}', index);\n      if (closeCurlyIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n      closeParenIndex = str.indexOf(')', index);\n      if (closeParenIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n      if (pipeIndex < index) {\n        pipeIndex = str.indexOf('|', index);\n      }\n      if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n        closeParenIndex = str.indexOf(')', pipeIndex);\n        if (closeParenIndex > pipeIndex) {\n          backSlashIndex = str.indexOf('\\\\', pipeIndex);\n          if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n            return true;\n          }\n        }\n      }\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nvar relaxedCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  while (index < str.length) {\n    if (/[*?{}()[\\]]/.test(str[index])) {\n      return true;\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  if (isExtglob(str)) {\n    return true;\n  }\n\n  var check = strictCheck;\n\n  // optionally relax check\n  if (options && options.strict === false) {\n    check = relaxedCheck;\n  }\n\n  return check(str);\n};\n", "'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n  var options = Object.assign({ flipBackslashes: true }, opts);\n\n  // flip windows path separators\n  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n    str = str.replace(backslash, slash);\n  }\n\n  // special case for strings ending in enclosure containing path separator\n  if (enclosure.test(str)) {\n    str += slash;\n  }\n\n  // preserves full path in case of trailing path separator\n  str += 'a';\n\n  // remove path parts that are globby\n  do {\n    str = pathPosixDirname(str);\n  } while (isGlob(str) || globby.test(str));\n\n  // remove escape chars and return result\n  return str.replace(escaped, '$1');\n};\n", "'use strict';\n\nexports.isInteger = num => {\n  if (typeof num === 'number') {\n    return Number.isInteger(num);\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isInteger(Number(num));\n  }\n  return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n  if (limit === false) return false;\n  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n  return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n  const node = block.nodes[n];\n  if (!node) return;\n\n  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n    if (node.escaped !== true) {\n      node.value = '\\\\' + node.value;\n      node.escaped = true;\n    }\n  }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n  if (node.type !== 'brace') return false;\n  if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n    node.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n  if (block.type !== 'brace') return false;\n  if (block.invalid === true || block.dollar) return true;\n  if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n    block.invalid = true;\n    return true;\n  }\n  if (block.open !== true || block.close !== true) {\n    block.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n  if (node.type === 'open' || node.type === 'close') {\n    return true;\n  }\n  return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n  if (node.type === 'text') acc.push(node.value);\n  if (node.type === 'range') node.type = 'text';\n  return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n  const result = [];\n\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      const ele = arr[i];\n\n      if (Array.isArray(ele)) {\n        flat(ele);\n        continue;\n      }\n\n      if (ele !== undefined) {\n        result.push(ele);\n      }\n    }\n    return result;\n  };\n\n  flat(args);\n  return result;\n};\n", "'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  const stringify = (node, parent = {}) => {\n    const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let output = '';\n\n    if (node.value) {\n      if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n        return '\\\\' + node.value;\n      }\n      return node.value;\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += stringify(child);\n      }\n    }\n    return output;\n  };\n\n  return stringify(ast);\n};\n\n", "/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n  if (typeof num === 'number') {\n    return num - num === 0;\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n  }\n  return false;\n};\n", "/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n  if (isNumber(min) === false) {\n    throw new TypeError('toRegexRange: expected the first argument to be a number');\n  }\n\n  if (max === void 0 || min === max) {\n    return String(min);\n  }\n\n  if (isNumber(max) === false) {\n    throw new TypeError('toRegexRange: expected the second argument to be a number.');\n  }\n\n  let opts = { relaxZeros: true, ...options };\n  if (typeof opts.strictZeros === 'boolean') {\n    opts.relaxZeros = opts.strictZeros === false;\n  }\n\n  let relax = String(opts.relaxZeros);\n  let shorthand = String(opts.shorthand);\n  let capture = String(opts.capture);\n  let wrap = String(opts.wrap);\n  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n    return toRegexRange.cache[cacheKey].result;\n  }\n\n  let a = Math.min(min, max);\n  let b = Math.max(min, max);\n\n  if (Math.abs(a - b) === 1) {\n    let result = min + '|' + max;\n    if (opts.capture) {\n      return `(${result})`;\n    }\n    if (opts.wrap === false) {\n      return result;\n    }\n    return `(?:${result})`;\n  }\n\n  let isPadded = hasPadding(min) || hasPadding(max);\n  let state = { min, max, a, b };\n  let positives = [];\n  let negatives = [];\n\n  if (isPadded) {\n    state.isPadded = isPadded;\n    state.maxLen = String(state.max).length;\n  }\n\n  if (a < 0) {\n    let newMin = b < 0 ? Math.abs(b) : 1;\n    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n    a = state.a = 0;\n  }\n\n  if (b >= 0) {\n    positives = splitToPatterns(a, b, state, opts);\n  }\n\n  state.negatives = negatives;\n  state.positives = positives;\n  state.result = collatePatterns(negatives, positives, opts);\n\n  if (opts.capture === true) {\n    state.result = `(${state.result})`;\n  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n    state.result = `(?:${state.result})`;\n  }\n\n  toRegexRange.cache[cacheKey] = state;\n  return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n  let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n  let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n  let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n  return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n  let nines = 1;\n  let zeros = 1;\n\n  let stop = countNines(min, nines);\n  let stops = new Set([max]);\n\n  while (min <= stop && stop <= max) {\n    stops.add(stop);\n    nines += 1;\n    stop = countNines(min, nines);\n  }\n\n  stop = countZeros(max + 1, zeros) - 1;\n\n  while (min < stop && stop <= max) {\n    stops.add(stop);\n    zeros += 1;\n    stop = countZeros(max + 1, zeros) - 1;\n  }\n\n  stops = [...stops];\n  stops.sort(compare);\n  return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n  if (start === stop) {\n    return { pattern: start, count: [], digits: 0 };\n  }\n\n  let zipped = zip(start, stop);\n  let digits = zipped.length;\n  let pattern = '';\n  let count = 0;\n\n  for (let i = 0; i < digits; i++) {\n    let [startDigit, stopDigit] = zipped[i];\n\n    if (startDigit === stopDigit) {\n      pattern += startDigit;\n\n    } else if (startDigit !== '0' || stopDigit !== '9') {\n      pattern += toCharacterClass(startDigit, stopDigit, options);\n\n    } else {\n      count++;\n    }\n  }\n\n  if (count) {\n    pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n  }\n\n  return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n  let ranges = splitToRanges(min, max);\n  let tokens = [];\n  let start = min;\n  let prev;\n\n  for (let i = 0; i < ranges.length; i++) {\n    let max = ranges[i];\n    let obj = rangeToPattern(String(start), String(max), options);\n    let zeros = '';\n\n    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n      if (prev.count.length > 1) {\n        prev.count.pop();\n      }\n\n      prev.count.push(obj.count[0]);\n      prev.string = prev.pattern + toQuantifier(prev.count);\n      start = max + 1;\n      continue;\n    }\n\n    if (tok.isPadded) {\n      zeros = padZeros(max, tok, options);\n    }\n\n    obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n    tokens.push(obj);\n    start = max + 1;\n    prev = obj;\n  }\n\n  return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n  let result = [];\n\n  for (let ele of arr) {\n    let { string } = ele;\n\n    // only push if _both_ are negative...\n    if (!intersection && !contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n\n    // or _both_ are positive\n    if (intersection && contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n  }\n  return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n  let arr = [];\n  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n  return arr;\n}\n\nfunction compare(a, b) {\n  return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n  return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n  return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n  return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n  let [start = 0, stop = ''] = digits;\n  if (stop || start > 1) {\n    return `{${start + (stop ? ',' + stop : '')}}`;\n  }\n  return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n  return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n  if (!tok.isPadded) {\n    return value;\n  }\n\n  let diff = Math.abs(tok.maxLen - String(value).length);\n  let relax = options.relaxZeros !== false;\n\n  switch (diff) {\n    case 0:\n      return '';\n    case 1:\n      return relax ? '0?' : '0';\n    case 2:\n      return relax ? '0{0,2}' : '00';\n    default: {\n      return relax ? `0{0,${diff}}` : `0{${diff}}`;\n    }\n  }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n", "/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n  return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n  return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n  let value = `${input}`;\n  let index = -1;\n  if (value[0] === '-') value = value.slice(1);\n  if (value === '0') return false;\n  while (value[++index] === '0');\n  return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n  if (typeof start === 'string' || typeof end === 'string') {\n    return true;\n  }\n  return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n  if (maxLength > 0) {\n    let dash = input[0] === '-' ? '-' : '';\n    if (dash) input = input.slice(1);\n    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n  }\n  if (toNumber === false) {\n    return String(input);\n  }\n  return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n  let negative = input[0] === '-' ? '-' : '';\n  if (negative) {\n    input = input.slice(1);\n    maxLength--;\n  }\n  while (input.length < maxLength) input = '0' + input;\n  return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n  let prefix = options.capture ? '' : '?:';\n  let positives = '';\n  let negatives = '';\n  let result;\n\n  if (parts.positives.length) {\n    positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n  }\n\n  if (positives && negatives) {\n    result = `${positives}|${negatives}`;\n  } else {\n    result = positives || negatives;\n  }\n\n  if (options.wrap) {\n    return `(${prefix}${result})`;\n  }\n\n  return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n  if (isNumbers) {\n    return toRegexRange(a, b, { wrap: false, ...options });\n  }\n\n  let start = String.fromCharCode(a);\n  if (a === b) return start;\n\n  let stop = String.fromCharCode(b);\n  return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n  if (Array.isArray(start)) {\n    let wrap = options.wrap === true;\n    let prefix = options.capture ? '' : '?:';\n    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n  }\n  return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n  return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n  if (options.strictRanges === true) throw rangeError([start, end]);\n  return [];\n};\n\nconst invalidStep = (step, options) => {\n  if (options.strictRanges === true) {\n    throw new TypeError(`Expected step \"${step}\" to be a number`);\n  }\n  return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n  let a = Number(start);\n  let b = Number(end);\n\n  if (!Number.isInteger(a) || !Number.isInteger(b)) {\n    if (options.strictRanges === true) throw rangeError([start, end]);\n    return [];\n  }\n\n  // fix negative zero\n  if (a === 0) a = 0;\n  if (b === 0) b = 0;\n\n  let descending = a > b;\n  let startString = String(start);\n  let endString = String(end);\n  let stepString = String(step);\n  step = Math.max(Math.abs(step), 1);\n\n  let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n  let toNumber = padded === false && stringify(start, end, options) === false;\n  let format = options.transform || transform(toNumber);\n\n  if (options.toRegex && step === 1) {\n    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n  }\n\n  let parts = { negatives: [], positives: [] };\n  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    if (options.toRegex === true && step > 1) {\n      push(a);\n    } else {\n      range.push(pad(format(a, index), maxLen, toNumber));\n    }\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return step > 1\n      ? toSequence(parts, options, maxLen)\n      : toRegex(range, null, { wrap: false, ...options });\n  }\n\n  return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n  if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n    return invalidRange(start, end, options);\n  }\n\n  let format = options.transform || (val => String.fromCharCode(val));\n  let a = `${start}`.charCodeAt(0);\n  let b = `${end}`.charCodeAt(0);\n\n  let descending = a > b;\n  let min = Math.min(a, b);\n  let max = Math.max(a, b);\n\n  if (options.toRegex && step === 1) {\n    return toRange(min, max, false, options);\n  }\n\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    range.push(format(a, index));\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return toRegex(range, null, { wrap: false, options });\n  }\n\n  return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n  if (end == null && isValidValue(start)) {\n    return [start];\n  }\n\n  if (!isValidValue(start) || !isValidValue(end)) {\n    return invalidRange(start, end, options);\n  }\n\n  if (typeof step === 'function') {\n    return fill(start, end, 1, { transform: step });\n  }\n\n  if (isObject(step)) {\n    return fill(start, end, 0, step);\n  }\n\n  let opts = { ...options };\n  if (opts.capture === true) opts.wrap = true;\n  step = step || opts.step || 1;\n\n  if (!isNumber(step)) {\n    if (step != null && !isObject(step)) return invalidStep(step, opts);\n    return fill(start, end, 1, step);\n  }\n\n  if (isNumber(start) && isNumber(end)) {\n    return fillNumbers(start, end, step, opts);\n  }\n\n  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n", "'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n  const walk = (node, parent = {}) => {\n    const invalidBlock = utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    const invalid = invalidBlock === true || invalidNode === true;\n    const prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n\n    if (node.isClose === true) {\n      console.log('node.isClose', prefix, node.value);\n      return prefix + node.value;\n    }\n\n    if (node.type === 'open') {\n      return invalid ? prefix + node.value : '(';\n    }\n\n    if (node.type === 'close') {\n      return invalid ? prefix + node.value : ')';\n    }\n\n    if (node.type === 'comma') {\n      return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n      const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n      if (range.length !== 0) {\n        return args.length > 1 && range.length > 1 ? `(${range})` : range;\n      }\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += walk(child, node);\n      }\n    }\n\n    return output;\n  };\n\n  return walk(ast);\n};\n\nmodule.exports = compile;\n", "'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n  const result = [];\n\n  queue = [].concat(queue);\n  stash = [].concat(stash);\n\n  if (!stash.length) return queue;\n  if (!queue.length) {\n    return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n  }\n\n  for (const item of queue) {\n    if (Array.isArray(item)) {\n      for (const value of item) {\n        result.push(append(value, stash, enclose));\n      }\n    } else {\n      for (let ele of stash) {\n        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n        result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n      }\n    }\n  }\n  return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n  const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n  const walk = (node, parent = {}) => {\n    node.queue = [];\n\n    let p = parent;\n    let q = parent.queue;\n\n    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n      p = p.parent;\n      q = p.queue;\n    }\n\n    if (node.invalid || node.dollar) {\n      q.push(append(q.pop(), stringify(node, options)));\n      return;\n    }\n\n    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n      q.push(append(q.pop(), ['{}']));\n      return;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n\n      if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n      }\n\n      let range = fill(...args, options);\n      if (range.length === 0) {\n        range = stringify(node, options);\n      }\n\n      q.push(append(q.pop(), range));\n      node.nodes = [];\n      return;\n    }\n\n    const enclose = utils.encloseBrace(node);\n    let queue = node.queue;\n    let block = node;\n\n    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n      block = block.parent;\n      queue = block.queue;\n    }\n\n    for (let i = 0; i < node.nodes.length; i++) {\n      const child = node.nodes[i];\n\n      if (child.type === 'comma' && node.type === 'brace') {\n        if (i === 1) queue.push('');\n        queue.push('');\n        continue;\n      }\n\n      if (child.type === 'close') {\n        q.push(append(q.pop(), queue, enclose));\n        continue;\n      }\n\n      if (child.value && child.type !== 'open') {\n        queue.push(append(queue.pop(), child.value));\n        continue;\n      }\n\n      if (child.nodes) {\n        walk(child, node);\n      }\n    }\n\n    return queue;\n  };\n\n  return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n", "'use strict';\n\nmodule.exports = {\n  MAX_LENGTH: 10000,\n\n  // Digits\n  CHAR_0: '0', /* 0 */\n  CHAR_9: '9', /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 'A', /* A */\n  CHAR_LOWERCASE_A: 'a', /* a */\n  CHAR_UPPERCASE_Z: 'Z', /* Z */\n  CHAR_LOWERCASE_Z: 'z', /* z */\n\n  CHAR_LEFT_PARENTHESES: '(', /* ( */\n  CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n  CHAR_ASTERISK: '*', /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: '&', /* & */\n  CHAR_AT: '@', /* @ */\n  CHAR_BACKSLASH: '\\\\', /* \\ */\n  CHAR_BACKTICK: '`', /* ` */\n  CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n  CHAR_COLON: ':', /* : */\n  CHAR_COMMA: ',', /* , */\n  CHAR_DOLLAR: '$', /* . */\n  CHAR_DOT: '.', /* . */\n  CHAR_DOUBLE_QUOTE: '\"', /* \" */\n  CHAR_EQUAL: '=', /* = */\n  CHAR_EXCLAMATION_MARK: '!', /* ! */\n  CHAR_FORM_FEED: '\\f', /* \\f */\n  CHAR_FORWARD_SLASH: '/', /* / */\n  CHAR_HASH: '#', /* # */\n  CHAR_HYPHEN_MINUS: '-', /* - */\n  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n  CHAR_LEFT_CURLY_BRACE: '{', /* { */\n  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n  CHAR_LINE_FEED: '\\n', /* \\n */\n  CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n  CHAR_PERCENT: '%', /* % */\n  CHAR_PLUS: '+', /* + */\n  CHAR_QUESTION_MARK: '?', /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n  CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n  CHAR_SEMICOLON: ';', /* ; */\n  CHAR_SINGLE_QUOTE: '\\'', /* ' */\n  CHAR_SPACE: ' ', /*   */\n  CHAR_TAB: '\\t', /* \\t */\n  CHAR_UNDERSCORE: '_', /* _ */\n  CHAR_VERTICAL_LINE: '|', /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n", "'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  CHAR_BACKSLASH, /* \\ */\n  CHAR_BACKTICK, /* ` */\n  CHAR_COMMA, /* , */\n  CHAR_DOT, /* . */\n  CHAR_LEFT_PARENTHESES, /* ( */\n  CHAR_RIGHT_PARENTHESES, /* ) */\n  CHAR_LEFT_CURLY_BRACE, /* { */\n  CHAR_RIGHT_CURLY_BRACE, /* } */\n  CHAR_LEFT_SQUARE_BRACKET, /* [ */\n  CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n  CHAR_DOUBLE_QUOTE, /* \" */\n  CHAR_SINGLE_QUOTE, /* ' */\n  CHAR_NO_BREAK_SPACE,\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  const opts = options || {};\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  if (input.length > max) {\n    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n  }\n\n  const ast = { type: 'root', input, nodes: [] };\n  const stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  const length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\n\n  /**\n   * Helpers\n   */\n\n  const advance = () => input[index++];\n  const push = node => {\n    if (node.type === 'text' && prev.type === 'dot') {\n      prev.type = 'text';\n    }\n\n    if (prev && prev.type === 'text' && node.type === 'text') {\n      prev.value += node.value;\n      return;\n    }\n\n    block.nodes.push(node);\n    node.parent = block;\n    node.prev = prev;\n    prev = node;\n    return node;\n  };\n\n  push({ type: 'bos' });\n\n  while (index < length) {\n    block = stack[stack.length - 1];\n    value = advance();\n\n    /**\n     * Invalid chars\n     */\n\n    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n      continue;\n    }\n\n    /**\n     * Escaped chars\n     */\n\n    if (value === CHAR_BACKSLASH) {\n      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n      continue;\n    }\n\n    /**\n     * Right square bracket (literal): ']'\n     */\n\n    if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n      push({ type: 'text', value: '\\\\' + value });\n      continue;\n    }\n\n    /**\n     * Left square bracket: '['\n     */\n\n    if (value === CHAR_LEFT_SQUARE_BRACKET) {\n      brackets++;\n\n      let next;\n\n      while (index < length && (next = advance())) {\n        value += next;\n\n        if (next === CHAR_LEFT_SQUARE_BRACKET) {\n          brackets++;\n          continue;\n        }\n\n        if (next === CHAR_BACKSLASH) {\n          value += advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          brackets--;\n\n          if (brackets === 0) {\n            break;\n          }\n        }\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === CHAR_LEFT_PARENTHESES) {\n      block = push({ type: 'paren', nodes: [] });\n      stack.push(block);\n      push({ type: 'text', value });\n      continue;\n    }\n\n    if (value === CHAR_RIGHT_PARENTHESES) {\n      if (block.type !== 'paren') {\n        push({ type: 'text', value });\n        continue;\n      }\n      block = stack.pop();\n      push({ type: 'text', value });\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Quotes: '|\"|`\n     */\n\n    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n      const open = value;\n      let next;\n\n      if (options.keepQuotes !== true) {\n        value = '';\n      }\n\n      while (index < length && (next = advance())) {\n        if (next === CHAR_BACKSLASH) {\n          value += next + advance();\n          continue;\n        }\n\n        if (next === open) {\n          if (options.keepQuotes === true) value += next;\n          break;\n        }\n\n        value += next;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Left curly brace: '{'\n     */\n\n    if (value === CHAR_LEFT_CURLY_BRACE) {\n      depth++;\n\n      const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      const brace = {\n        type: 'brace',\n        open: true,\n        close: false,\n        dollar,\n        depth,\n        commas: 0,\n        ranges: 0,\n        nodes: []\n      };\n\n      block = push(brace);\n      stack.push(block);\n      push({ type: 'open', value });\n      continue;\n    }\n\n    /**\n     * Right curly brace: '}'\n     */\n\n    if (value === CHAR_RIGHT_CURLY_BRACE) {\n      if (block.type !== 'brace') {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      const type = 'close';\n      block = stack.pop();\n      block.close = true;\n\n      push({ type, value });\n      depth--;\n\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Comma: ','\n     */\n\n    if (value === CHAR_COMMA && depth > 0) {\n      if (block.ranges > 0) {\n        block.ranges = 0;\n        const open = block.nodes.shift();\n        block.nodes = [open, { type: 'text', value: stringify(block) }];\n      }\n\n      push({ type: 'comma', value });\n      block.commas++;\n      continue;\n    }\n\n    /**\n     * Dot: '.'\n     */\n\n    if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n      const siblings = block.nodes;\n\n      if (depth === 0 || siblings.length === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      if (prev.type === 'dot') {\n        block.range = [];\n        prev.value += value;\n        prev.type = 'range';\n\n        if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n          block.invalid = true;\n          block.ranges = 0;\n          prev.type = 'text';\n          continue;\n        }\n\n        block.ranges++;\n        block.args = [];\n        continue;\n      }\n\n      if (prev.type === 'range') {\n        siblings.pop();\n\n        const before = siblings[siblings.length - 1];\n        before.value += prev.value + value;\n        prev = before;\n        block.ranges--;\n        continue;\n      }\n\n      push({ type: 'dot', value });\n      continue;\n    }\n\n    /**\n     * Text\n     */\n\n    push({ type: 'text', value });\n  }\n\n  // Mark imbalanced braces and brackets as invalid\n  do {\n    block = stack.pop();\n\n    if (block.type !== 'root') {\n      block.nodes.forEach(node => {\n        if (!node.nodes) {\n          if (node.type === 'open') node.isOpen = true;\n          if (node.type === 'close') node.isClose = true;\n          if (!node.nodes) node.type = 'text';\n          node.invalid = true;\n        }\n      });\n\n      // get the location of the block on parent.nodes (block's siblings)\n      const parent = stack[stack.length - 1];\n      const index = parent.nodes.indexOf(block);\n      // replace the (invalid) block with it's nodes\n      parent.nodes.splice(index, 1, ...block.nodes);\n    }\n  } while (stack.length > 0);\n\n  push({ type: 'eos' });\n  return ast;\n};\n\nmodule.exports = parse;\n", "'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n  let output = [];\n\n  if (Array.isArray(input)) {\n    for (const pattern of input) {\n      const result = braces.create(pattern, options);\n      if (Array.isArray(result)) {\n        output.push(...result);\n      } else {\n        output.push(result);\n      }\n    }\n  } else {\n    output = [].concat(braces.create(input, options));\n  }\n\n  if (options && options.expand === true && options.nodupes === true) {\n    output = [...new Set(output)];\n  }\n  return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n  if (typeof input === 'string') {\n    return stringify(braces.parse(input, options), options);\n  }\n  return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n  return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n\n  let result = expand(input, options);\n\n  // filter out empty strings if specified\n  if (options.noempty === true) {\n    result = result.filter(Boolean);\n  }\n\n  // filter out duplicates if specified\n  if (options.nodupes === true) {\n    result = [...new Set(result)];\n  }\n\n  return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n  if (input === '' || input.length < 3) {\n    return [input];\n  }\n\n  return options.expand !== true\n    ? braces.compile(input, options)\n    : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n", "'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  SEP: path.sep,\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n", "'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.supportsLookbehinds = () => {\n  const segs = process.version.slice(1).split('.').map(Number);\n  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n    return true;\n  }\n  return false;\n};\n\nexports.isWindows = options => {\n  if (options && typeof options.windows === 'boolean') {\n    return options.windows;\n  }\n  return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n", "'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n", "'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(win32);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.value += tok.value;\n      prev.output = (prev.output || '') + tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if (next === '<' && !utils.supportsLookbehinds()) {\n          throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n        }\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(win32);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n", "'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = utils.isWindows(options);\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n", "'use strict';\n\nmodule.exports = require('./lib/picomatch');\n", "'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n  const index = v.indexOf('{');\n  return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n  patterns = [].concat(patterns);\n  list = [].concat(list);\n\n  let omit = new Set();\n  let keep = new Set();\n  let items = new Set();\n  let negatives = 0;\n\n  let onResult = state => {\n    items.add(state.output);\n    if (options && options.onResult) {\n      options.onResult(state);\n    }\n  };\n\n  for (let i = 0; i < patterns.length; i++) {\n    let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n    let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n    if (negated) negatives++;\n\n    for (let item of list) {\n      let matched = isMatch(item, true);\n\n      let match = negated ? !matched.isMatch : matched.isMatch;\n      if (!match) continue;\n\n      if (negated) {\n        omit.add(matched.output);\n      } else {\n        omit.delete(matched.output);\n        keep.add(matched.output);\n      }\n    }\n  }\n\n  let result = negatives === patterns.length ? [...items] : [...keep];\n  let matches = result.filter(item => !omit.has(item));\n\n  if (options && matches.length === 0) {\n    if (options.failglob === true) {\n      throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n    }\n\n    if (options.nonull === true || options.nullglob === true) {\n      return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n    }\n  }\n\n  return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n  patterns = [].concat(patterns).map(String);\n  let result = new Set();\n  let items = [];\n\n  let onResult = state => {\n    if (options.onResult) options.onResult(state);\n    items.push(state.output);\n  };\n\n  let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n  for (let item of items) {\n    if (!matches.has(item)) {\n      result.add(item);\n    }\n  }\n  return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  if (Array.isArray(pattern)) {\n    return pattern.some(p => micromatch.contains(str, p, options));\n  }\n\n  if (typeof pattern === 'string') {\n    if (isEmptyString(str) || isEmptyString(pattern)) {\n      return false;\n    }\n\n    if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n      return true;\n    }\n  }\n\n  return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('Expected the first argument to be an object');\n  }\n  let keys = micromatch(Object.keys(obj), patterns, options);\n  let res = {};\n  for (let key of keys) res[key] = obj[key];\n  return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (items.some(item => isMatch(item))) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (!items.every(item => isMatch(item))) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n  let posix = utils.isWindows(options);\n  let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n  let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n  if (match) {\n    return match.slice(1).map(v => v === void 0 ? '' : v);\n  }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n  let res = [];\n  for (let pattern of [].concat(patterns || [])) {\n    for (let str of braces(String(pattern), options)) {\n      res.push(picomatch.parse(str, options));\n    }\n  }\n  return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n    return [pattern];\n  }\n  return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n    return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n    /**\n     * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n     * An empty string cannot be a dynamic pattern.\n     * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n     */\n    if (pattern === '') {\n        return false;\n    }\n    /**\n     * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n     * filepath directly (without read directory).\n     */\n    if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n        return true;\n    }\n    if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n        return true;\n    }\n    return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n    const openingBraceIndex = pattern.indexOf('{');\n    if (openingBraceIndex === -1) {\n        return false;\n    }\n    const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n    if (closingBraceIndex === -1) {\n        return false;\n    }\n    const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n    return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n    return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n    return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n    return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n    return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n    return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n    return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n    return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n    return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n    return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n    return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n    return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n    return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n    const basename = path.basename(pattern);\n    return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n    return patterns.reduce((collection, pattern) => {\n        return collection.concat(expandBraceExpansion(pattern));\n    }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n    const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });\n    /**\n     * Sort the patterns by length so that the same depth patterns are processed side by side.\n     * `a/{b,}/{c,}/*` \u2013 `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n     */\n    patterns.sort((a, b) => a.length - b.length);\n    /**\n     * Micromatch can return an empty string in the case of patterns like `{a,}`.\n     */\n    return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n    let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n    /**\n     * The scan method returns an empty array in some cases.\n     * See micromatch/picomatch#58 for more details.\n     */\n    if (parts.length === 0) {\n        parts = [pattern];\n    }\n    /**\n     * The scan method does not return an empty part for the pattern with a forward slash.\n     * This is another part of micromatch/picomatch#58.\n     */\n    if (parts[0].startsWith('/')) {\n        parts[0] = parts[0].slice(1);\n        parts.unshift('');\n    }\n    return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n    return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n    return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n    return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n    return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\nfunction partitionAbsoluteAndRelative(patterns) {\n    const absolute = [];\n    const relative = [];\n    for (const pattern of patterns) {\n        if (isAbsolute(pattern)) {\n            absolute.push(pattern);\n        }\n        else {\n            relative.push(pattern);\n        }\n    }\n    return [absolute, relative];\n}\nexports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;\nfunction isAbsolute(pattern) {\n    return path.isAbsolute(pattern);\n}\nexports.isAbsolute = isAbsolute;\n", "'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n  const streamsQueue = []\n  const args = slice.call(arguments)\n  let merging = false\n  let options = args[args.length - 1]\n\n  if (options && !Array.isArray(options) && options.pipe == null) {\n    args.pop()\n  } else {\n    options = {}\n  }\n\n  const doEnd = options.end !== false\n  const doPipeError = options.pipeError === true\n  if (options.objectMode == null) {\n    options.objectMode = true\n  }\n  if (options.highWaterMark == null) {\n    options.highWaterMark = 64 * 1024\n  }\n  const mergedStream = PassThrough(options)\n\n  function addStream () {\n    for (let i = 0, len = arguments.length; i < len; i++) {\n      streamsQueue.push(pauseStreams(arguments[i], options))\n    }\n    mergeStream()\n    return this\n  }\n\n  function mergeStream () {\n    if (merging) {\n      return\n    }\n    merging = true\n\n    let streams = streamsQueue.shift()\n    if (!streams) {\n      process.nextTick(endStream)\n      return\n    }\n    if (!Array.isArray(streams)) {\n      streams = [streams]\n    }\n\n    let pipesCount = streams.length + 1\n\n    function next () {\n      if (--pipesCount > 0) {\n        return\n      }\n      merging = false\n      mergeStream()\n    }\n\n    function pipe (stream) {\n      function onend () {\n        stream.removeListener('merge2UnpipeEnd', onend)\n        stream.removeListener('end', onend)\n        if (doPipeError) {\n          stream.removeListener('error', onerror)\n        }\n        next()\n      }\n      function onerror (err) {\n        mergedStream.emit('error', err)\n      }\n      // skip ended stream\n      if (stream._readableState.endEmitted) {\n        return next()\n      }\n\n      stream.on('merge2UnpipeEnd', onend)\n      stream.on('end', onend)\n\n      if (doPipeError) {\n        stream.on('error', onerror)\n      }\n\n      stream.pipe(mergedStream, { end: false })\n      // compatible for old stream\n      stream.resume()\n    }\n\n    for (let i = 0; i < streams.length; i++) {\n      pipe(streams[i])\n    }\n\n    next()\n  }\n\n  function endStream () {\n    merging = false\n    // emit 'queueDrain' when all streams merged.\n    mergedStream.emit('queueDrain')\n    if (doEnd) {\n      mergedStream.end()\n    }\n  }\n\n  mergedStream.setMaxListeners(0)\n  mergedStream.add = addStream\n  mergedStream.on('unpipe', function (stream) {\n    stream.emit('merge2UnpipeEnd')\n  })\n\n  if (args.length) {\n    addStream.apply(null, args)\n  }\n  return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n  if (!Array.isArray(streams)) {\n    // Backwards-compat with old-style streams\n    if (!streams._readableState && streams.pipe) {\n      streams = streams.pipe(PassThrough(options))\n    }\n    if (!streams._readableState || !streams.pause || !streams.pipe) {\n      throw new Error('Only readable stream can be merged.')\n    }\n    streams.pause()\n  } else {\n    for (let i = 0, len = streams.length; i < len; i++) {\n      streams[i] = pauseStreams(streams[i], options)\n    }\n  }\n  return streams\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n    const mergedStream = merge2(streams);\n    streams.forEach((stream) => {\n        stream.once('error', (error) => mergedStream.emit('error', error));\n    });\n    mergedStream.once('close', () => propagateCloseEventToSources(streams));\n    mergedStream.once('end', () => propagateCloseEventToSources(streams));\n    return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n    streams.forEach((stream) => stream.emit('close'));\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n    return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n    return input === '';\n}\nexports.isEmpty = isEmpty;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n    const patterns = processPatterns(input, settings);\n    const ignore = processPatterns(settings.ignore, settings);\n    const positivePatterns = getPositivePatterns(patterns);\n    const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n    const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n    const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n    const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n    const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n    return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n    let patterns = input;\n    /**\n     * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n     * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n     *\n     * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n     * in matching in the case of a large set of patterns after expansion.\n     */\n    if (settings.braceExpansion) {\n        patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n    }\n    /**\n     * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n     * at any nesting level.\n     *\n     * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n     * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n     * in the application. Only on the input.\n     */\n    if (settings.baseNameMatch) {\n        patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n    }\n    /**\n     * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n     */\n    return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n    const tasks = [];\n    const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n    const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n    const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n    const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n    tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n    /*\n     * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n     * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n     */\n    if ('.' in insideCurrentDirectoryGroup) {\n        tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n    }\n    else {\n        tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n    }\n    return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n    return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n    const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n    const positive = negative.map(utils.pattern.convertToPositivePattern);\n    return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n    const group = {};\n    return patterns.reduce((collection, pattern) => {\n        const base = utils.pattern.getBaseDirectory(pattern);\n        if (base in collection) {\n            collection[base].push(pattern);\n        }\n        else {\n            collection[base] = [pattern];\n        }\n        return collection;\n    }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n    return Object.keys(positive).map((base) => {\n        return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n    });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n    return {\n        dynamic,\n        positive,\n        negative,\n        base,\n        patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n    };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n    settings.fs.lstat(path, (lstatError, lstat) => {\n        if (lstatError !== null) {\n            callFailureCallback(callback, lstatError);\n            return;\n        }\n        if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n            callSuccessCallback(callback, lstat);\n            return;\n        }\n        settings.fs.stat(path, (statError, stat) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    callFailureCallback(callback, statError);\n                    return;\n                }\n                callSuccessCallback(callback, lstat);\n                return;\n            }\n            if (settings.markSymbolicLink) {\n                stat.isSymbolicLink = () => true;\n            }\n            callSuccessCallback(callback, stat);\n        });\n    });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n    const lstat = settings.fs.lstatSync(path);\n    if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n        return lstat;\n    }\n    try {\n        const stat = settings.fs.statSync(path);\n        if (settings.markSymbolicLink) {\n            stat.isSymbolicLink = () => true;\n        }\n        return stat;\n    }\n    catch (error) {\n        if (!settings.throwErrorOnBrokenSymbolicLink) {\n            return lstat;\n        }\n        throw error;\n    }\n}\nexports.read = read;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n", "/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n  ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n  // reuse resolved promise, and allocate it lazily\n  : cb => (promise || (promise = Promise.resolve()))\n    .then(cb)\n    .catch(err => setTimeout(() => { throw err }, 0))\n", "/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n  let results, pending, keys\n  let isSync = true\n\n  if (Array.isArray(tasks)) {\n    results = []\n    pending = tasks.length\n  } else {\n    keys = Object.keys(tasks)\n    results = {}\n    pending = keys.length\n  }\n\n  function done (err) {\n    function end () {\n      if (cb) cb(err, results)\n      cb = null\n    }\n    if (isSync) queueMicrotask(end)\n    else end()\n  }\n\n  function each (i, err, result) {\n    results[i] = result\n    if (--pending === 0 || err) {\n      done(err)\n    }\n  }\n\n  if (!pending) {\n    // empty\n    done(null)\n  } else if (keys) {\n    // object\n    keys.forEach(function (key) {\n      tasks[key](function (err, result) { each(key, err, result) })\n    })\n  } else {\n    // array\n    tasks.forEach(function (task, i) {\n      task(function (err, result) { each(i, err, result) })\n    })\n  }\n\n  isSync = false\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n    throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        readdirWithFileTypes(directory, settings, callback);\n        return;\n    }\n    readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n    settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const entries = dirents.map((dirent) => ({\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        }));\n        if (!settings.followSymbolicLinks) {\n            callSuccessCallback(callback, entries);\n            return;\n        }\n        const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n        rpl(tasks, (rplError, rplEntries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, rplEntries);\n        });\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n    return (done) => {\n        if (!entry.dirent.isSymbolicLink()) {\n            done(null, entry);\n            return;\n        }\n        settings.fs.stat(entry.path, (statError, stats) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    done(statError);\n                    return;\n                }\n                done(null, entry);\n                return;\n            }\n            entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            done(null, entry);\n        });\n    };\n}\nfunction readdir(directory, settings, callback) {\n    settings.fs.readdir(directory, (readdirError, names) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const tasks = names.map((name) => {\n            const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n            return (done) => {\n                fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n                    if (error !== null) {\n                        done(error);\n                        return;\n                    }\n                    const entry = {\n                        name,\n                        path,\n                        dirent: utils.fs.createDirentFromStats(name, stats)\n                    };\n                    if (settings.stats) {\n                        entry.stats = stats;\n                    }\n                    done(null, entry);\n                });\n            };\n        });\n        rpl(tasks, (rplError, entries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, entries);\n        });\n    });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        return readdirWithFileTypes(directory, settings);\n    }\n    return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n    const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n    return dirents.map((dirent) => {\n        const entry = {\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        };\n        if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n            try {\n                const stats = settings.fs.statSync(entry.path);\n                entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            }\n            catch (error) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    throw error;\n                }\n            }\n        }\n        return entry;\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n    const names = settings.fs.readdirSync(directory);\n    return names.map((name) => {\n        const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n        const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n        const entry = {\n            name,\n            path: entryPath,\n            dirent: utils.fs.createDirentFromStats(name, stats)\n        };\n        if (settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    });\n}\nexports.readdir = readdir;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.stats = this._getValue(this._options.stats, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n        this.fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this.followSymbolicLinks,\n            fs: this.fs,\n            throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n", "'use strict'\n\nfunction reusify (Constructor) {\n  var head = new Constructor()\n  var tail = head\n\n  function get () {\n    var current = head\n\n    if (current.next) {\n      head = current.next\n    } else {\n      head = new Constructor()\n      tail = head\n    }\n\n    current.next = null\n\n    return current\n  }\n\n  function release (obj) {\n    tail.next = obj\n    tail = obj\n  }\n\n  return {\n    get: get,\n    release: release\n  }\n}\n\nmodule.exports = reusify\n", "'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  if (!(_concurrency >= 1)) {\n    throw new Error('fastqueue concurrency must be equal to or greater than 1')\n  }\n\n  var cache = reusify(Task)\n  var queueHead = null\n  var queueTail = null\n  var _running = 0\n  var errorHandler = null\n\n  var self = {\n    push: push,\n    drain: noop,\n    saturated: noop,\n    pause: pause,\n    paused: false,\n\n    get concurrency () {\n      return _concurrency\n    },\n    set concurrency (value) {\n      if (!(value >= 1)) {\n        throw new Error('fastqueue concurrency must be equal to or greater than 1')\n      }\n      _concurrency = value\n\n      if (self.paused) return\n      for (; queueHead && _running < _concurrency;) {\n        _running++\n        release()\n      }\n    },\n\n    running: running,\n    resume: resume,\n    idle: idle,\n    length: length,\n    getQueue: getQueue,\n    unshift: unshift,\n    empty: noop,\n    kill: kill,\n    killAndDrain: killAndDrain,\n    error: error\n  }\n\n  return self\n\n  function running () {\n    return _running\n  }\n\n  function pause () {\n    self.paused = true\n  }\n\n  function length () {\n    var current = queueHead\n    var counter = 0\n\n    while (current) {\n      current = current.next\n      counter++\n    }\n\n    return counter\n  }\n\n  function getQueue () {\n    var current = queueHead\n    var tasks = []\n\n    while (current) {\n      tasks.push(current.value)\n      current = current.next\n    }\n\n    return tasks\n  }\n\n  function resume () {\n    if (!self.paused) return\n    self.paused = false\n    if (queueHead === null) {\n      _running++\n      release()\n      return\n    }\n    for (; queueHead && _running < _concurrency;) {\n      _running++\n      release()\n    }\n  }\n\n  function idle () {\n    return _running === 0 && self.length() === 0\n  }\n\n  function push (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueTail) {\n        queueTail.next = current\n        queueTail = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function unshift (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueHead) {\n        current.next = queueHead\n        queueHead = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function release (holder) {\n    if (holder) {\n      cache.release(holder)\n    }\n    var next = queueHead\n    if (next && _running <= _concurrency) {\n      if (!self.paused) {\n        if (queueTail === queueHead) {\n          queueTail = null\n        }\n        queueHead = next.next\n        next.next = null\n        worker.call(context, next.value, next.worked)\n        if (queueTail === null) {\n          self.empty()\n        }\n      } else {\n        _running--\n      }\n    } else if (--_running === 0) {\n      self.drain()\n    }\n  }\n\n  function kill () {\n    queueHead = null\n    queueTail = null\n    self.drain = noop\n  }\n\n  function killAndDrain () {\n    queueHead = null\n    queueTail = null\n    self.drain()\n    self.drain = noop\n  }\n\n  function error (handler) {\n    errorHandler = handler\n  }\n}\n\nfunction noop () {}\n\nfunction Task () {\n  this.value = null\n  this.callback = noop\n  this.next = null\n  this.release = noop\n  this.context = null\n  this.errorHandler = null\n\n  var self = this\n\n  this.worked = function worked (err, result) {\n    var callback = self.callback\n    var errorHandler = self.errorHandler\n    var val = self.value\n    self.value = null\n    self.callback = noop\n    if (self.errorHandler) {\n      errorHandler(err, val)\n    }\n    callback.call(self.context, err, result)\n    self.release(self)\n  }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  function asyncWrapper (arg, cb) {\n    worker.call(this, arg)\n      .then(function (res) {\n        cb(null, res)\n      }, cb)\n  }\n\n  var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n  var pushCb = queue.push\n  var unshiftCb = queue.unshift\n\n  queue.push = push\n  queue.unshift = unshift\n  queue.drained = drained\n\n  return queue\n\n  function push (value) {\n    var p = new Promise(function (resolve, reject) {\n      pushCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function unshift (value) {\n    var p = new Promise(function (resolve, reject) {\n      unshiftCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function drained () {\n    var p = new Promise(function (resolve) {\n      process.nextTick(function () {\n        if (queue.idle()) {\n          resolve()\n        } else {\n          var previousDrain = queue.drain\n          queue.drain = function () {\n            if (typeof previousDrain === 'function') previousDrain()\n            resolve()\n            queue.drain = previousDrain\n          }\n        }\n      })\n    })\n\n    return p\n  }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n    if (settings.errorFilter === null) {\n        return true;\n    }\n    return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n    return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n    return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n    if (a === '') {\n        return b;\n    }\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n    }\n}\nexports.default = Reader;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n    constructor(_root, _settings) {\n        super(_root, _settings);\n        this._settings = _settings;\n        this._scandir = fsScandir.scandir;\n        this._emitter = new events_1.EventEmitter();\n        this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        this._queue.drain = () => {\n            if (!this._isFatalError) {\n                this._emitter.emit('end');\n            }\n        };\n    }\n    read() {\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        setImmediate(() => {\n            this._pushToQueue(this._root, this._settings.basePath);\n        });\n        return this._emitter;\n    }\n    get isDestroyed() {\n        return this._isDestroyed;\n    }\n    destroy() {\n        if (this._isDestroyed) {\n            throw new Error('The reader is already destroyed');\n        }\n        this._isDestroyed = true;\n        this._queue.killAndDrain();\n    }\n    onEntry(callback) {\n        this._emitter.on('entry', callback);\n    }\n    onError(callback) {\n        this._emitter.once('error', callback);\n    }\n    onEnd(callback) {\n        this._emitter.once('end', callback);\n    }\n    _pushToQueue(directory, base) {\n        const queueItem = { directory, base };\n        this._queue.push(queueItem, (error) => {\n            if (error !== null) {\n                this._handleError(error);\n            }\n        });\n    }\n    _worker(item, done) {\n        this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n            if (error !== null) {\n                done(error, undefined);\n                return;\n            }\n            for (const entry of entries) {\n                this._handleEntry(entry, item.base);\n            }\n            done(null, undefined);\n        });\n    }\n    _handleError(error) {\n        if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n            return;\n        }\n        this._isFatalError = true;\n        this._isDestroyed = true;\n        this._emitter.emit('error', error);\n    }\n    _handleEntry(entry, base) {\n        if (this._isDestroyed || this._isFatalError) {\n            return;\n        }\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._emitEntry(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _emitEntry(entry) {\n        this._emitter.emit('entry', entry);\n    }\n}\nexports.default = AsyncReader;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._storage = [];\n    }\n    read(callback) {\n        this._reader.onError((error) => {\n            callFailureCallback(callback, error);\n        });\n        this._reader.onEntry((entry) => {\n            this._storage.push(entry);\n        });\n        this._reader.onEnd(() => {\n            callSuccessCallback(callback, this._storage);\n        });\n        this._reader.read();\n    }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n    callback(null, entries);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._stream = new stream_1.Readable({\n            objectMode: true,\n            read: () => { },\n            destroy: () => {\n                if (!this._reader.isDestroyed) {\n                    this._reader.destroy();\n                }\n            }\n        });\n    }\n    read() {\n        this._reader.onError((error) => {\n            this._stream.emit('error', error);\n        });\n        this._reader.onEntry((entry) => {\n            this._stream.push(entry);\n        });\n        this._reader.onEnd(() => {\n            this._stream.push(null);\n        });\n        this._reader.read();\n        return this._stream;\n    }\n}\nexports.default = StreamProvider;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._scandir = fsScandir.scandirSync;\n        this._storage = [];\n        this._queue = new Set();\n    }\n    read() {\n        this._pushToQueue(this._root, this._settings.basePath);\n        this._handleQueue();\n        return this._storage;\n    }\n    _pushToQueue(directory, base) {\n        this._queue.add({ directory, base });\n    }\n    _handleQueue() {\n        for (const item of this._queue.values()) {\n            this._handleDirectory(item.directory, item.base);\n        }\n    }\n    _handleDirectory(directory, base) {\n        try {\n            const entries = this._scandir(directory, this._settings.fsScandirSettings);\n            for (const entry of entries) {\n                this._handleEntry(entry, base);\n            }\n        }\n        catch (error) {\n            this._handleError(error);\n        }\n    }\n    _handleError(error) {\n        if (!common.isFatalError(this._settings, error)) {\n            return;\n        }\n        throw error;\n    }\n    _handleEntry(entry, base) {\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._pushToStorage(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _pushToStorage(entry) {\n        this._storage.push(entry);\n    }\n}\nexports.default = SyncReader;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new sync_1.default(this._root, this._settings);\n    }\n    read() {\n        return this._reader.read();\n    }\n}\nexports.default = SyncProvider;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.basePath = this._getValue(this._options.basePath, undefined);\n        this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n        this.deepFilter = this._getValue(this._options.deepFilter, null);\n        this.entryFilter = this._getValue(this._options.entryFilter, null);\n        this.errorFilter = this._getValue(this._options.errorFilter, null);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.fsScandirSettings = new fsScandir.Settings({\n            followSymbolicLinks: this._options.followSymbolicLinks,\n            fs: this._options.fs,\n            pathSegmentSeparator: this._options.pathSegmentSeparator,\n            stats: this._options.stats,\n            throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n        return;\n    }\n    new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new sync_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new stream_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n    constructor(_settings) {\n        this._settings = _settings;\n        this._fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n        });\n    }\n    _getFullEntryPath(filepath) {\n        return path.resolve(this._settings.cwd, filepath);\n    }\n    _makeEntry(stats, pattern) {\n        const entry = {\n            name: pattern,\n            path: pattern,\n            dirent: utils.fs.createDirentFromStats(pattern, stats)\n        };\n        if (this._settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    }\n    _isFatalError(error) {\n        return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n    }\n}\nexports.default = Reader;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkStream = fsWalk.walkStream;\n        this._stat = fsStat.stat;\n    }\n    dynamic(root, options) {\n        return this._walkStream(root, options);\n    }\n    static(patterns, options) {\n        const filepaths = patterns.map(this._getFullEntryPath, this);\n        const stream = new stream_1.PassThrough({ objectMode: true });\n        stream._write = (index, _enc, done) => {\n            return this._getEntry(filepaths[index], patterns[index], options)\n                .then((entry) => {\n                if (entry !== null && options.entryFilter(entry)) {\n                    stream.push(entry);\n                }\n                if (index === filepaths.length - 1) {\n                    stream.end();\n                }\n                done();\n            })\n                .catch(done);\n        };\n        for (let i = 0; i < filepaths.length; i++) {\n            stream.write(i);\n        }\n        return stream;\n    }\n    _getEntry(filepath, pattern, options) {\n        return this._getStat(filepath)\n            .then((stats) => this._makeEntry(stats, pattern))\n            .catch((error) => {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        });\n    }\n    _getStat(filepath) {\n        return new Promise((resolve, reject) => {\n            this._stat(filepath, this._fsStatSettings, (error, stats) => {\n                return error === null ? resolve(stats) : reject(error);\n            });\n        });\n    }\n}\nexports.default = ReaderStream;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkAsync = fsWalk.walk;\n        this._readerStream = new stream_1.default(this._settings);\n    }\n    dynamic(root, options) {\n        return new Promise((resolve, reject) => {\n            this._walkAsync(root, options, (error, entries) => {\n                if (error === null) {\n                    resolve(entries);\n                }\n                else {\n                    reject(error);\n                }\n            });\n        });\n    }\n    async static(patterns, options) {\n        const entries = [];\n        const stream = this._readerStream.static(patterns, options);\n        // After #235, replace it with an asynchronous iterator.\n        return new Promise((resolve, reject) => {\n            stream.once('error', reject);\n            stream.on('data', (entry) => entries.push(entry));\n            stream.once('end', () => resolve(entries));\n        });\n    }\n}\nexports.default = ReaderAsync;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n    constructor(_patterns, _settings, _micromatchOptions) {\n        this._patterns = _patterns;\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this._storage = [];\n        this._fillStorage();\n    }\n    _fillStorage() {\n        for (const pattern of this._patterns) {\n            const segments = this._getPatternSegments(pattern);\n            const sections = this._splitSegmentsIntoSections(segments);\n            this._storage.push({\n                complete: sections.length <= 1,\n                pattern,\n                segments,\n                sections\n            });\n        }\n    }\n    _getPatternSegments(pattern) {\n        const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n        return parts.map((part) => {\n            const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n            if (!dynamic) {\n                return {\n                    dynamic: false,\n                    pattern: part\n                };\n            }\n            return {\n                dynamic: true,\n                pattern: part,\n                patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n            };\n        });\n    }\n    _splitSegmentsIntoSections(segments) {\n        return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n    }\n}\nexports.default = Matcher;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n    match(filepath) {\n        const parts = filepath.split('/');\n        const levels = parts.length;\n        const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n        for (const pattern of patterns) {\n            const section = pattern.sections[0];\n            /**\n             * In this case, the pattern has a globstar and we must read all directories unconditionally,\n             * but only if the level has reached the end of the first group.\n             *\n             * fixtures/{a,b}/**\n             *  ^ true/false  ^ always true\n            */\n            if (!pattern.complete && levels > section.length) {\n                return true;\n            }\n            const match = parts.every((part, index) => {\n                const segment = pattern.segments[index];\n                if (segment.dynamic && segment.patternRe.test(part)) {\n                    return true;\n                }\n                if (!segment.dynamic && segment.pattern === part) {\n                    return true;\n                }\n                return false;\n            });\n            if (match) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\nexports.default = PartialMatcher;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n    }\n    getFilter(basePath, positive, negative) {\n        const matcher = this._getMatcher(positive);\n        const negativeRe = this._getNegativePatternsRe(negative);\n        return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n    }\n    _getMatcher(patterns) {\n        return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n    }\n    _getNegativePatternsRe(patterns) {\n        const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n        return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n    }\n    _filter(basePath, entry, matcher, negativeRe) {\n        if (this._isSkippedByDeep(basePath, entry.path)) {\n            return false;\n        }\n        if (this._isSkippedSymbolicLink(entry)) {\n            return false;\n        }\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n            return false;\n        }\n        return this._isSkippedByNegativePatterns(filepath, negativeRe);\n    }\n    _isSkippedByDeep(basePath, entryPath) {\n        /**\n         * Avoid unnecessary depth calculations when it doesn't matter.\n         */\n        if (this._settings.deep === Infinity) {\n            return false;\n        }\n        return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n    }\n    _getEntryLevel(basePath, entryPath) {\n        const entryPathDepth = entryPath.split('/').length;\n        if (basePath === '') {\n            return entryPathDepth;\n        }\n        const basePathDepth = basePath.split('/').length;\n        return entryPathDepth - basePathDepth;\n    }\n    _isSkippedSymbolicLink(entry) {\n        return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n    }\n    _isSkippedByPositivePatterns(entryPath, matcher) {\n        return !this._settings.baseNameMatch && !matcher.match(entryPath);\n    }\n    _isSkippedByNegativePatterns(entryPath, patternsRe) {\n        return !utils.pattern.matchAny(entryPath, patternsRe);\n    }\n}\nexports.default = DeepFilter;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this.index = new Map();\n    }\n    getFilter(positive, negative) {\n        const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);\n        const patterns = {\n            positive: {\n                all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)\n            },\n            negative: {\n                absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),\n                relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))\n            }\n        };\n        return (entry) => this._filter(entry, patterns);\n    }\n    _filter(entry, patterns) {\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n            return false;\n        }\n        if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n            return false;\n        }\n        const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());\n        if (this._settings.unique && isMatched) {\n            this._createIndexRecord(filepath);\n        }\n        return isMatched;\n    }\n    _isDuplicateEntry(filepath) {\n        return this.index.has(filepath);\n    }\n    _createIndexRecord(filepath) {\n        this.index.set(filepath, undefined);\n    }\n    _onlyFileFilter(entry) {\n        return this._settings.onlyFiles && !entry.dirent.isFile();\n    }\n    _onlyDirectoryFilter(entry) {\n        return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n    }\n    _isMatchToPatternsSet(filepath, patterns, isDirectory) {\n        const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory);\n        if (!isMatched) {\n            return false;\n        }\n        const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory);\n        if (isMatchedByRelativeNegative) {\n            return false;\n        }\n        const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory);\n        if (isMatchedByAbsoluteNegative) {\n            return false;\n        }\n        return true;\n    }\n    _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory) {\n        if (patternsRe.length === 0) {\n            return false;\n        }\n        const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n        return this._isMatchToPatterns(fullpath, patternsRe, isDirectory);\n    }\n    _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n        if (patternsRe.length === 0) {\n            return false;\n        }\n        // Trying to match files and directories by patterns.\n        const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n        // A pattern with a trailling slash can be used for directory matching.\n        // To apply such pattern, we need to add a tralling slash to the path.\n        if (!isMatched && isDirectory) {\n            return utils.pattern.matchAny(filepath + '/', patternsRe);\n        }\n        return isMatched;\n    }\n}\nexports.default = EntryFilter;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getFilter() {\n        return (error) => this._isNonFatalError(error);\n    }\n    _isNonFatalError(error) {\n        return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n    }\n}\nexports.default = ErrorFilter;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getTransformer() {\n        return (entry) => this._transform(entry);\n    }\n    _transform(entry) {\n        let filepath = entry.path;\n        if (this._settings.absolute) {\n            filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n            filepath = utils.path.unixify(filepath);\n        }\n        if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n            filepath += '/';\n        }\n        if (!this._settings.objectMode) {\n            return filepath;\n        }\n        return Object.assign(Object.assign({}, entry), { path: filepath });\n    }\n}\nexports.default = EntryTransformer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n    constructor(_settings) {\n        this._settings = _settings;\n        this.errorFilter = new error_1.default(this._settings);\n        this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n        this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n        this.entryTransformer = new entry_2.default(this._settings);\n    }\n    _getRootDirectory(task) {\n        return path.resolve(this._settings.cwd, task.base);\n    }\n    _getReaderOptions(task) {\n        const basePath = task.base === '.' ? '' : task.base;\n        return {\n            basePath,\n            pathSegmentSeparator: '/',\n            concurrency: this._settings.concurrency,\n            deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n            entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n            errorFilter: this.errorFilter.getFilter(),\n            followSymbolicLinks: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            stats: this._settings.stats,\n            throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n            transform: this.entryTransformer.getTransformer()\n        };\n    }\n    _getMicromatchOptions() {\n        return {\n            dot: this._settings.dot,\n            matchBase: this._settings.baseNameMatch,\n            nobrace: !this._settings.braceExpansion,\n            nocase: !this._settings.caseSensitiveMatch,\n            noext: !this._settings.extglob,\n            noglobstar: !this._settings.globstar,\n            posix: true,\n            strictSlashes: false\n        };\n    }\n}\nexports.default = Provider;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new async_1.default(this._settings);\n    }\n    async read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = await this.api(root, task, options);\n        return entries.map((entry) => options.transform(entry));\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderAsync;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new stream_2.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const source = this.api(root, task, options);\n        const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n        source\n            .once('error', (error) => destination.emit('error', error))\n            .on('data', (entry) => destination.emit('data', options.transform(entry)))\n            .once('end', () => destination.emit('end'));\n        destination\n            .once('close', () => source.destroy());\n        return destination;\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderStream;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkSync = fsWalk.walkSync;\n        this._statSync = fsStat.statSync;\n    }\n    dynamic(root, options) {\n        return this._walkSync(root, options);\n    }\n    static(patterns, options) {\n        const entries = [];\n        for (const pattern of patterns) {\n            const filepath = this._getFullEntryPath(pattern);\n            const entry = this._getEntry(filepath, pattern, options);\n            if (entry === null || !options.entryFilter(entry)) {\n                continue;\n            }\n            entries.push(entry);\n        }\n        return entries;\n    }\n    _getEntry(filepath, pattern, options) {\n        try {\n            const stats = this._getStat(filepath);\n            return this._makeEntry(stats, pattern);\n        }\n        catch (error) {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        }\n    }\n    _getStat(filepath) {\n        return this._statSync(filepath, this._fsStatSettings);\n    }\n}\nexports.default = ReaderSync;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new sync_1.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = this.api(root, task, options);\n        return entries.map(options.transform);\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderSync;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    lstatSync: fs.lstatSync,\n    stat: fs.stat,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.absolute = this._getValue(this._options.absolute, false);\n        this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n        this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n        this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n        this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n        this.cwd = this._getValue(this._options.cwd, process.cwd());\n        this.deep = this._getValue(this._options.deep, Infinity);\n        this.dot = this._getValue(this._options.dot, false);\n        this.extglob = this._getValue(this._options.extglob, true);\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n        this.fs = this._getFileSystemMethods(this._options.fs);\n        this.globstar = this._getValue(this._options.globstar, true);\n        this.ignore = this._getValue(this._options.ignore, []);\n        this.markDirectories = this._getValue(this._options.markDirectories, false);\n        this.objectMode = this._getValue(this._options.objectMode, false);\n        this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n        this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n        this.stats = this._getValue(this._options.stats, false);\n        this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n        this.unique = this._getValue(this._options.unique, true);\n        if (this.onlyDirectories) {\n            this.onlyFiles = false;\n        }\n        if (this.stats) {\n            this.objectMode = true;\n        }\n        // Remove the cast to the array in the next major (#404).\n        this.ignore = [].concat(this.ignore);\n    }\n    _getValue(option, value) {\n        return option === undefined ? value : option;\n    }\n    _getFileSystemMethods(methods = {}) {\n        return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n    }\n}\nexports.default = Settings;\n", "\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n    assertPatternsInput(source);\n    const works = getWorks(source, async_1.default, options);\n    const result = await Promise.all(works);\n    return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n    FastGlob.glob = FastGlob;\n    FastGlob.globSync = sync;\n    FastGlob.globStream = stream;\n    FastGlob.async = FastGlob;\n    function sync(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, sync_1.default, options);\n        return utils.array.flatten(works);\n    }\n    FastGlob.sync = sync;\n    function stream(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, stream_1.default, options);\n        /**\n         * The stream returned by the provider cannot work with an asynchronous iterator.\n         * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n         * This affects performance (+25%). I don't see best solution right now.\n         */\n        return utils.stream.merge(works);\n    }\n    FastGlob.stream = stream;\n    function generateTasks(source, options) {\n        assertPatternsInput(source);\n        const patterns = [].concat(source);\n        const settings = new settings_1.default(options);\n        return taskManager.generate(patterns, settings);\n    }\n    FastGlob.generateTasks = generateTasks;\n    function isDynamicPattern(source, options) {\n        assertPatternsInput(source);\n        const settings = new settings_1.default(options);\n        return utils.pattern.isDynamicPattern(source, settings);\n    }\n    FastGlob.isDynamicPattern = isDynamicPattern;\n    function escapePath(source) {\n        assertPatternsInput(source);\n        return utils.path.escape(source);\n    }\n    FastGlob.escapePath = escapePath;\n    function convertPathToPattern(source) {\n        assertPatternsInput(source);\n        return utils.path.convertPathToPattern(source);\n    }\n    FastGlob.convertPathToPattern = convertPathToPattern;\n    let posix;\n    (function (posix) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapePosixPath(source);\n        }\n        posix.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertPosixPathToPattern(source);\n        }\n        posix.convertPathToPattern = convertPathToPattern;\n    })(posix = FastGlob.posix || (FastGlob.posix = {}));\n    let win32;\n    (function (win32) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapeWindowsPath(source);\n        }\n        win32.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertWindowsPathToPattern(source);\n        }\n        win32.convertPathToPattern = convertPathToPattern;\n    })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n    const patterns = [].concat(source);\n    const settings = new settings_1.default(options);\n    const tasks = taskManager.generate(patterns, settings);\n    const provider = new _Provider(settings);\n    return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n    const source = [].concat(input);\n    const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n    if (!isValidSource) {\n        throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n    }\n}\nmodule.exports = FastGlob;\n", "import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\n\nasync function isType(fsStatType, statsMethodName, filePath) {\n\tif (typeof filePath !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got ${typeof filePath}`);\n\t}\n\n\ttry {\n\t\tconst stats = await fsPromises[fsStatType](filePath);\n\t\treturn stats[statsMethodName]();\n\t} catch (error) {\n\t\tif (error.code === 'ENOENT') {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nfunction isTypeSync(fsStatType, statsMethodName, filePath) {\n\tif (typeof filePath !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got ${typeof filePath}`);\n\t}\n\n\ttry {\n\t\treturn fs[fsStatType](filePath)[statsMethodName]();\n\t} catch (error) {\n\t\tif (error.code === 'ENOENT') {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nexport const isFile = isType.bind(undefined, 'stat', 'isFile');\nexport const isDirectory = isType.bind(undefined, 'stat', 'isDirectory');\nexport const isSymlink = isType.bind(undefined, 'lstat', 'isSymbolicLink');\nexport const isFileSync = isTypeSync.bind(undefined, 'statSync', 'isFile');\nexport const isDirectorySync = isTypeSync.bind(undefined, 'statSync', 'isDirectory');\nexport const isSymlinkSync = isTypeSync.bind(undefined, 'lstatSync', 'isSymbolicLink');\n", "export async function delay({seconds, milliseconds} = {}) {\n\tlet duration;\n\tif (typeof seconds === 'number') {\n\t\tduration = seconds * 1000;\n\t} else if (typeof milliseconds === 'number') {\n\t\tduration = milliseconds;\n\t} else {\n\t\tthrow new TypeError('Expected an object with either `seconds` or `milliseconds`.');\n\t}\n\n\treturn new Promise(resolve => {\n\t\tsetTimeout(resolve, duration);\n\t});\n}\n", "import {promisify} from 'node:util';\nimport {execFile as execFileCallback, execFileSync as execFileSyncOriginal} from 'node:child_process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nconst execFileOriginal = promisify(execFileCallback);\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport function rootDirectory(pathInput) {\n\treturn path.parse(toPath(pathInput)).root;\n}\n\nexport function traversePathUp(startPath) {\n\treturn {\n\t\t* [Symbol.iterator]() {\n\t\t\tlet currentPath = path.resolve(toPath(startPath));\n\t\t\tlet previousPath;\n\n\t\t\twhile (previousPath !== currentPath) {\n\t\t\t\tyield currentPath;\n\t\t\t\tpreviousPath = currentPath;\n\t\t\t\tcurrentPath = path.resolve(currentPath, '..');\n\t\t\t}\n\t\t},\n\t};\n}\n\nconst TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024;\n\nexport async function execFile(file, arguments_, options = {}) {\n\treturn execFileOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\t...options,\n\t});\n}\n\nexport function execFileSync(file, arguments_ = [], options = {}) {\n\treturn execFileSyncOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\tencoding: 'utf8',\n\t\tstdio: 'pipe',\n\t\t...options,\n\t});\n}\n\nexport * from './default.js';\n", "export default function slash(path) {\n\tconst isExtendedLengthPath = path.startsWith('\\\\\\\\?\\\\');\n\n\tif (isExtendedLengthPath) {\n\t\treturn path;\n\t}\n\n\treturn path.replace(/\\\\/g, '/');\n}\n", "export const isNegativePattern = pattern => pattern[0] === '!';\n", "import process from 'node:process';\nimport fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path from 'node:path';\nimport fastGlob from 'fast-glob';\nimport gitIgnore from 'ignore';\nimport slash from 'slash';\nimport {toPath} from 'unicorn-magic';\nimport {isNegativePattern} from './utilities.js';\n\nconst defaultIgnoredDirectories = [\n\t'**/node_modules',\n\t'**/flow-typed',\n\t'**/coverage',\n\t'**/.git',\n];\nconst ignoreFilesGlobOptions = {\n\tabsolute: true,\n\tdot: true,\n};\n\nexport const GITIGNORE_FILES_PATTERN = '**/.gitignore';\n\nconst applyBaseToPattern = (pattern, base) => isNegativePattern(pattern)\n\t? '!' + path.posix.join(base, pattern.slice(1))\n\t: path.posix.join(base, pattern);\n\nconst parseIgnoreFile = (file, cwd) => {\n\tconst base = slash(path.relative(cwd, path.dirname(file.filePath)));\n\n\treturn file.content\n\t\t.split(/\\r?\\n/)\n\t\t.filter(line => line && !line.startsWith('#'))\n\t\t.map(pattern => applyBaseToPattern(pattern, base));\n};\n\nconst toRelativePath = (fileOrDirectory, cwd) => {\n\tcwd = slash(cwd);\n\tif (path.isAbsolute(fileOrDirectory)) {\n\t\tif (slash(fileOrDirectory).startsWith(cwd)) {\n\t\t\treturn path.relative(cwd, fileOrDirectory);\n\t\t}\n\n\t\tthrow new Error(`Path ${fileOrDirectory} is not in cwd ${cwd}`);\n\t}\n\n\treturn fileOrDirectory;\n};\n\nconst getIsIgnoredPredicate = (files, cwd) => {\n\tconst patterns = files.flatMap(file => parseIgnoreFile(file, cwd));\n\tconst ignores = gitIgnore().add(patterns);\n\n\treturn fileOrDirectory => {\n\t\tfileOrDirectory = toPath(fileOrDirectory);\n\t\tfileOrDirectory = toRelativePath(fileOrDirectory, cwd);\n\t\treturn fileOrDirectory ? ignores.ignores(slash(fileOrDirectory)) : false;\n\t};\n};\n\nconst normalizeOptions = (options = {}) => ({\n\tcwd: toPath(options.cwd) ?? process.cwd(),\n\tsuppressErrors: Boolean(options.suppressErrors),\n\tdeep: typeof options.deep === 'number' ? options.deep : Number.POSITIVE_INFINITY,\n\tignore: [...options.ignore ?? [], ...defaultIgnoredDirectories],\n});\n\nexport const isIgnoredByIgnoreFiles = async (patterns, options) => {\n\tconst {cwd, suppressErrors, deep, ignore} = normalizeOptions(options);\n\n\tconst paths = await fastGlob(patterns, {\n\t\tcwd,\n\t\tsuppressErrors,\n\t\tdeep,\n\t\tignore,\n\t\t...ignoreFilesGlobOptions,\n\t});\n\n\tconst files = await Promise.all(\n\t\tpaths.map(async filePath => ({\n\t\t\tfilePath,\n\t\t\tcontent: await fsPromises.readFile(filePath, 'utf8'),\n\t\t})),\n\t);\n\n\treturn getIsIgnoredPredicate(files, cwd);\n};\n\nexport const isIgnoredByIgnoreFilesSync = (patterns, options) => {\n\tconst {cwd, suppressErrors, deep, ignore} = normalizeOptions(options);\n\n\tconst paths = fastGlob.sync(patterns, {\n\t\tcwd,\n\t\tsuppressErrors,\n\t\tdeep,\n\t\tignore,\n\t\t...ignoreFilesGlobOptions,\n\t});\n\n\tconst files = paths.map(filePath => ({\n\t\tfilePath,\n\t\tcontent: fs.readFileSync(filePath, 'utf8'),\n\t}));\n\n\treturn getIsIgnoredPredicate(files, cwd);\n};\n\nexport const isGitIgnored = options => isIgnoredByIgnoreFiles(GITIGNORE_FILES_PATTERN, options);\nexport const isGitIgnoredSync = options => isIgnoredByIgnoreFilesSync(GITIGNORE_FILES_PATTERN, options);\n", "import process from 'node:process';\nimport fs from 'node:fs';\nimport nodePath from 'node:path';\nimport mergeStreams from '@sindresorhus/merge-streams';\nimport fastGlob from 'fast-glob';\nimport {isDirectory, isDirectorySync} from 'path-type';\nimport {toPath} from 'unicorn-magic';\nimport {\n\tGITIGNORE_FILES_PATTERN,\n\tisIgnoredByIgnoreFiles,\n\tisIgnoredByIgnoreFilesSync,\n} from './ignore.js';\nimport {isNegativePattern} from './utilities.js';\n\nconst assertPatternsInput = patterns => {\n\tif (patterns.some(pattern => typeof pattern !== 'string')) {\n\t\tthrow new TypeError('Patterns must be a string or an array of strings');\n\t}\n};\n\nconst normalizePathForDirectoryGlob = (filePath, cwd) => {\n\tconst path = isNegativePattern(filePath) ? filePath.slice(1) : filePath;\n\treturn nodePath.isAbsolute(path) ? path : nodePath.join(cwd, path);\n};\n\nconst getDirectoryGlob = ({directoryPath, files, extensions}) => {\n\tconst extensionGlob = extensions?.length > 0 ? `.${extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]}` : '';\n\treturn files\n\t\t? files.map(file => nodePath.posix.join(directoryPath, `**/${nodePath.extname(file) ? file : `${file}${extensionGlob}`}`))\n\t\t: [nodePath.posix.join(directoryPath, `**${extensionGlob ? `/*${extensionGlob}` : ''}`)];\n};\n\nconst directoryToGlob = async (directoryPaths, {\n\tcwd = process.cwd(),\n\tfiles,\n\textensions,\n} = {}) => {\n\tconst globs = await Promise.all(directoryPaths.map(async directoryPath =>\n\t\t(await isDirectory(normalizePathForDirectoryGlob(directoryPath, cwd))) ? getDirectoryGlob({directoryPath, files, extensions}) : directoryPath),\n\t);\n\n\treturn globs.flat();\n};\n\nconst directoryToGlobSync = (directoryPaths, {\n\tcwd = process.cwd(),\n\tfiles,\n\textensions,\n} = {}) => directoryPaths.flatMap(directoryPath => isDirectorySync(normalizePathForDirectoryGlob(directoryPath, cwd)) ? getDirectoryGlob({directoryPath, files, extensions}) : directoryPath);\n\nconst toPatternsArray = patterns => {\n\tpatterns = [...new Set([patterns].flat())];\n\tassertPatternsInput(patterns);\n\treturn patterns;\n};\n\nconst checkCwdOption = cwd => {\n\tif (!cwd) {\n\t\treturn;\n\t}\n\n\tlet stat;\n\ttry {\n\t\tstat = fs.statSync(cwd);\n\t} catch {\n\t\treturn;\n\t}\n\n\tif (!stat.isDirectory()) {\n\t\tthrow new Error('The `cwd` option must be a path to a directory');\n\t}\n};\n\nconst normalizeOptions = (options = {}) => {\n\toptions = {\n\t\t...options,\n\t\tignore: options.ignore ?? [],\n\t\texpandDirectories: options.expandDirectories ?? true,\n\t\tcwd: toPath(options.cwd),\n\t};\n\n\tcheckCwdOption(options.cwd);\n\n\treturn options;\n};\n\nconst normalizeArguments = function_ => async (patterns, options) => function_(toPatternsArray(patterns), normalizeOptions(options));\nconst normalizeArgumentsSync = function_ => (patterns, options) => function_(toPatternsArray(patterns), normalizeOptions(options));\n\nconst getIgnoreFilesPatterns = options => {\n\tconst {ignoreFiles, gitignore} = options;\n\n\tconst patterns = ignoreFiles ? toPatternsArray(ignoreFiles) : [];\n\tif (gitignore) {\n\t\tpatterns.push(GITIGNORE_FILES_PATTERN);\n\t}\n\n\treturn patterns;\n};\n\nconst getFilter = async options => {\n\tconst ignoreFilesPatterns = getIgnoreFilesPatterns(options);\n\treturn createFilterFunction(\n\t\tignoreFilesPatterns.length > 0 && await isIgnoredByIgnoreFiles(ignoreFilesPatterns, options),\n\t);\n};\n\nconst getFilterSync = options => {\n\tconst ignoreFilesPatterns = getIgnoreFilesPatterns(options);\n\treturn createFilterFunction(\n\t\tignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, options),\n\t);\n};\n\nconst createFilterFunction = isIgnored => {\n\tconst seen = new Set();\n\n\treturn fastGlobResult => {\n\t\tconst pathKey = nodePath.normalize(fastGlobResult.path ?? fastGlobResult);\n\n\t\tif (seen.has(pathKey) || (isIgnored && isIgnored(pathKey))) {\n\t\t\treturn false;\n\t\t}\n\n\t\tseen.add(pathKey);\n\n\t\treturn true;\n\t};\n};\n\nconst unionFastGlobResults = (results, filter) => results.flat().filter(fastGlobResult => filter(fastGlobResult));\n\nconst convertNegativePatterns = (patterns, options) => {\n\tconst tasks = [];\n\n\twhile (patterns.length > 0) {\n\t\tconst index = patterns.findIndex(pattern => isNegativePattern(pattern));\n\n\t\tif (index === -1) {\n\t\t\ttasks.push({patterns, options});\n\t\t\tbreak;\n\t\t}\n\n\t\tconst ignorePattern = patterns[index].slice(1);\n\n\t\tfor (const task of tasks) {\n\t\t\ttask.options.ignore.push(ignorePattern);\n\t\t}\n\n\t\tif (index !== 0) {\n\t\t\ttasks.push({\n\t\t\t\tpatterns: patterns.slice(0, index),\n\t\t\t\toptions: {\n\t\t\t\t\t...options,\n\t\t\t\t\tignore: [\n\t\t\t\t\t\t...options.ignore,\n\t\t\t\t\t\tignorePattern,\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tpatterns = patterns.slice(index + 1);\n\t}\n\n\treturn tasks;\n};\n\nconst normalizeExpandDirectoriesOption = (options, cwd) => ({\n\t...(cwd ? {cwd} : {}),\n\t...(Array.isArray(options) ? {files: options} : options),\n});\n\nconst generateTasks = async (patterns, options) => {\n\tconst globTasks = convertNegativePatterns(patterns, options);\n\n\tconst {cwd, expandDirectories} = options;\n\n\tif (!expandDirectories) {\n\t\treturn globTasks;\n\t}\n\n\tconst directoryToGlobOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd);\n\n\treturn Promise.all(\n\t\tglobTasks.map(async task => {\n\t\t\tlet {patterns, options} = task;\n\n\t\t\t[\n\t\t\t\tpatterns,\n\t\t\t\toptions.ignore,\n\t\t\t] = await Promise.all([\n\t\t\t\tdirectoryToGlob(patterns, directoryToGlobOptions),\n\t\t\t\tdirectoryToGlob(options.ignore, {cwd}),\n\t\t\t]);\n\n\t\t\treturn {patterns, options};\n\t\t}),\n\t);\n};\n\nconst generateTasksSync = (patterns, options) => {\n\tconst globTasks = convertNegativePatterns(patterns, options);\n\tconst {cwd, expandDirectories} = options;\n\n\tif (!expandDirectories) {\n\t\treturn globTasks;\n\t}\n\n\tconst directoryToGlobSyncOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd);\n\n\treturn globTasks.map(task => {\n\t\tlet {patterns, options} = task;\n\t\tpatterns = directoryToGlobSync(patterns, directoryToGlobSyncOptions);\n\t\toptions.ignore = directoryToGlobSync(options.ignore, {cwd});\n\t\treturn {patterns, options};\n\t});\n};\n\nexport const globby = normalizeArguments(async (patterns, options) => {\n\tconst [\n\t\ttasks,\n\t\tfilter,\n\t] = await Promise.all([\n\t\tgenerateTasks(patterns, options),\n\t\tgetFilter(options),\n\t]);\n\n\tconst results = await Promise.all(tasks.map(task => fastGlob(task.patterns, task.options)));\n\treturn unionFastGlobResults(results, filter);\n});\n\nexport const globbySync = normalizeArgumentsSync((patterns, options) => {\n\tconst tasks = generateTasksSync(patterns, options);\n\tconst filter = getFilterSync(options);\n\tconst results = tasks.map(task => fastGlob.sync(task.patterns, task.options));\n\treturn unionFastGlobResults(results, filter);\n});\n\nexport const globbyStream = normalizeArgumentsSync((patterns, options) => {\n\tconst tasks = generateTasksSync(patterns, options);\n\tconst filter = getFilterSync(options);\n\tconst streams = tasks.map(task => fastGlob.stream(task.patterns, task.options));\n\tconst stream = mergeStreams(streams).filter(fastGlobResult => filter(fastGlobResult));\n\n\t// TODO: Make it return a web stream at some point.\n\t// return Readable.toWeb(stream);\n\n\treturn stream;\n});\n\nexport const isDynamicPattern = normalizeArgumentsSync(\n\t(patterns, options) => patterns.some(pattern => fastGlob.isDynamicPattern(pattern, options)),\n);\n\nexport const generateGlobTasks = normalizeArguments(generateTasks);\nexport const generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);\n\nexport {\n\tisGitIgnored,\n\tisGitIgnoredSync,\n\tisIgnoredByIgnoreFiles,\n\tisIgnoredByIgnoreFilesSync,\n} from './ignore.js';\n\nexport const {convertPathToPattern} = fastGlob;\n", "import { debug } from \"node:console\";\nimport { request as httpRequest } from \"node:http\";\nimport { request as httpsRequest } from \"node:https\";\n\nexport function requestJSON<T>(opts: RequestOptions) {\n  const startTime = Date.now();\n\n  return new Promise<T>((resolve, reject) => {\n    const request = getRequestModule(opts.url);\n    const req = request(\n      {\n        protocol: opts.url.protocol,\n        host: opts.url.host,\n        port: opts.url.port,\n        path: opts.url.pathname + opts.url.search,\n        method: opts.method,\n        headers: opts.headers,\n      },\n      (res) => {\n        let data = \"\";\n        res.on(\"data\", (chunk) => {\n          data += chunk;\n        });\n\n        res.on(\"end\", () => {\n          debug(\n            `${opts.method} ${opts.url.href}, duration: ${\n              Date.now() - startTime\n            }ms`,\n          );\n\n          if (\n            typeof res.statusCode === \"number\" &&\n            res.statusCode >= 200 &&\n            res.statusCode < 300\n          ) {\n            if (\n              typeof res.headers[\"content-type\"] !== \"string\" ||\n              !res.headers[\"content-type\"].includes(\"application/json\")\n            ) {\n              reject(\n                `Response from ${opts.url.href} content-type is ${res.headers[\"content-type\"]}`,\n              );\n            } else {\n              try {\n                resolve(JSON.parse(data));\n              } catch (err) {\n                reject(\n                  `Response from ${opts.url.href} is not valid JSON: ${data}\\n${err}`,\n                );\n              }\n            }\n          } else {\n            reject(\n              `Request to ${opts.url.href} failed with status ${res.statusCode}: ${data}`,\n            );\n          }\n        });\n      },\n    ).on(\"error\", (e) => {\n      reject(`Error fetching ${opts.url.href}, ${e}`);\n    });\n\n    if (opts.body) {\n      req.setHeader(\"Content-Type\", \"application/json\");\n      req.write(opts.body);\n    }\n\n    req.end();\n  });\n}\n\nfunction getRequestModule(url: URL) {\n  if (url.protocol === \"https:\") {\n    return httpsRequest;\n  } else if (url.protocol === \"http:\") {\n    return httpRequest;\n  } else {\n    throw new Error(`Unsupported protocol ${url.protocol}`);\n  }\n}\n\nexport interface RequestOptions {\n  url: URL;\n  headers?: Record<string, string>;\n  method: string;\n  body?: any;\n}\n", "import {\n  type DevToolsSys,\n  type SPACE_KIND_VALUES,\n  SPACE_KIND,\n} from \"../../types\";\nimport { requestJSON } from \"../node-request\";\n\nexport async function hasBuilderContentViaQueryAPI(opts: {\n  publicApiKey: string;\n  privateAuthKey: string;\n  model: string;\n  pageUrl: string;\n}) {\n  const url = new URL(\n    `https://cdn.builder.io/api/v3/query/${opts.publicApiKey}/${opts.model}`,\n  );\n  url.searchParams.set(`omit`, `meta.componentsUsed`);\n  url.searchParams.set(`apiKey`, opts.publicApiKey);\n  url.searchParams.set(`userAttributes.urlPath`, opts.pageUrl);\n  url.searchParams.set(`options.page.model`, `\"${opts.model}\"`);\n  // This is important, without which the CDN level caching kicks in and causes all\n  // kinds of pain and annoyance\n  url.searchParams.set(`cachebust`, `true`);\n\n  const data: any = await requestJSON({\n    url: url,\n    method: \"GET\",\n  });\n\n  return data[opts.model];\n}\n\nexport async function hasBuilderContentUrl(\n  sys: DevToolsSys,\n  opts: {\n    publicApiKey: string;\n    privateAuthKey: string;\n    model: string;\n    pageUrl: string;\n    kind: SPACE_KIND_VALUES;\n  },\n) {\n  // For VCP, we don't want to create content page in builder\n  if (opts.kind === SPACE_KIND.VCP) {\n    return true;\n  }\n  // https://www.builder.io/c/docs/admin-graphql-api\n  const adminUrl = new URL(`https://cdn.builder.io/api/v2/admin`);\n\n  const body = {\n    query: `query {\n      models {\n        id\n        name\n      }\n    }`,\n  };\n\n  sys.debug(`Get model id for model name \"${opts.model}\"`);\n\n  const graphQLRsp: GraphQLResponse = await requestJSON({\n    url: adminUrl,\n    method: \"POST\",\n    headers: {\n      Authorization: `Bearer ${opts.privateAuthKey}`,\n      \"Content-Type\": \"application/json\",\n      Accept: \"application/json\",\n    },\n    body: JSON.stringify(body),\n  });\n\n  const model = graphQLRsp.data.models.find((m) => m.name === opts.model);\n  if (!model) {\n    sys.debug(`No model found for model name \"${opts.model}\"`);\n    return false;\n  }\n\n  sys.debug(`Data query, modelId: \"${model.id}\", urlPath: \"${opts.pageUrl}\"`);\n\n  const dUrl = new URL(`https://cdn.builder.io/api/v3/data`);\n  dUrl.searchParams.set(`limit`, `1`);\n  dUrl.searchParams.set(`cachebust`, `true`);\n  dUrl.searchParams.set(`collection`, `content`);\n  dUrl.searchParams.set(`query.published.$ne`, `archived`);\n  dUrl.searchParams.set(`query.query.$elemMatch.$and[0].property`, `urlPath`);\n  dUrl.searchParams.set(`query.query.$elemMatch.$and[0].operator`, `is`);\n  dUrl.searchParams.set(`query.query.$elemMatch.$and[0].value`, opts.pageUrl);\n  dUrl.searchParams.set(`query.modelId`, model.id);\n  dUrl.searchParams.set(`apiKey`, opts.publicApiKey);\n\n  const data: DataResponse = await requestJSON({\n    url: dUrl,\n    method: \"GET\",\n  });\n\n  sys.debug(`Data results (${data.results.length}): ${dUrl.href}`);\n\n  return data.results.length > 0;\n}\n\nexport async function getBuilderContent(\n  sys: DevToolsSys,\n  opts: {\n    publicApiKey: string;\n    model: string;\n    pageUrl?: string;\n    id?: string;\n  },\n) {\n  const url = new URL(`https://cdn.builder.io/api/v3/content/${opts.model}`);\n  url.searchParams.set(`apiKey`, opts.publicApiKey);\n  url.searchParams.set(`cachebust`, `true`);\n  url.searchParams.set(`cb`, Date.now().toString());\n\n  if (opts.pageUrl) {\n    url.searchParams.set(`url`, opts.pageUrl);\n    sys.debug(\n      `get model: \"${opts.model}\", pageUrl: \"${opts.pageUrl}\":`,\n      url.href,\n    );\n  }\n  if (opts.id) {\n    url.searchParams.set(`query.id`, opts.id);\n    sys.debug(`get model: \"${opts.model}\", id: \"${opts.id}\":`, url.href);\n  }\n\n  const data: { results: any[] } = await requestJSON({\n    url,\n    method: \"GET\",\n  });\n  sys.debug(`get content results: ${data.results.length}`);\n  return data;\n}\n\nexport async function writeBuilderContent(\n  sys: DevToolsSys,\n  opts: {\n    privateAuthKey: string;\n    body: string;\n    model: string;\n  },\n) {\n  const url = new URL(`https://cdn.builder.io/api/v1/write/${opts.model}`);\n\n  sys.debug(`writing \"${opts.model}\" content:`, url.href);\n\n  await requestJSON({\n    url,\n    method: \"POST\",\n    headers: {\n      Authorization: `Bearer ${opts.privateAuthKey}`,\n    },\n    body: opts.body,\n  });\n}\n\ninterface GraphQLResponse {\n  data: {\n    models: { id: string; name: string }[];\n  };\n}\n\ninterface DataResponse {\n  results: any[];\n}\n", "// Builder Devtools Templates\n// https://builder.io/content?model=f93a6a6f6b3942f6a06bb82537d87306\n\nexport const DEFAULT_MODEL_NAME = \"page\";\nexport const TEMPLATE_MODEL_NAME = \"integration-welcome-screens\";\nexport const TEMPLATE_PUBLIC_API_KEY = \"8d9ee72a33344b4b867918b442ebd0af\";\n", "import type { DevToolsSys } from \"../../types\";\nimport { getBuilderContent, writeBuilderContent } from \"./builder-api\";\nimport {\n  DEFAULT_MODEL_NAME,\n  TEMPLATE_MODEL_NAME,\n  TEMPLATE_PUBLIC_API_KEY,\n} from \"./content-ids\";\n\nexport async function createBuilderPage(\n  sys: DevToolsSys,\n  opts: {\n    templateContentId: string;\n    publicApiKey: string;\n    privateAuthKey: string;\n    pathname: string;\n    title: string;\n  },\n) {\n  const data = await getBuilderContent(sys, {\n    model: TEMPLATE_MODEL_NAME,\n    publicApiKey: TEMPLATE_PUBLIC_API_KEY,\n    id: opts.templateContentId,\n  });\n\n  if (\n    !Array.isArray(data?.results) ||\n    data.results.length === 0 ||\n    !data.results[0].data?.blocks\n  ) {\n    throw new Error(\n      `No Builder content found for id ${opts.templateContentId}`,\n    );\n  }\n\n  const blocksString = JSON.stringify(data.results[0].data.blocks);\n\n  const writeContentData = createContentData(\n    opts.publicApiKey,\n    opts.pathname,\n    opts.title,\n    blocksString,\n  );\n\n  await writeBuilderContent(sys, {\n    privateAuthKey: opts.privateAuthKey,\n    model: DEFAULT_MODEL_NAME,\n    body: writeContentData,\n  });\n}\n\nfunction createContentData(\n  apiKey: string,\n  pathname: string,\n  title: string,\n  blocksString: string,\n) {\n  return JSON.stringify({\n    name: title,\n    ownerId: apiKey,\n    published: \"published\",\n    query: [\n      {\n        property: \"urlPath\",\n        value: [pathname],\n        operator: \"is\",\n      },\n    ],\n    data: {\n      title: title,\n      blocksString,\n    },\n  });\n}\n", "import {\n  type DevToolsServerContext,\n  type ConnectedBuilder,\n  type ValidatedBuilder,\n  type SPACE_KIND_VALUES,\n  type ModifiedFile,\n  SPACE_KIND,\n} from \"../types\";\nimport { createBuilderPage } from \"../common/builder/content-generation\";\nimport {\n  // getBuilderContent,\n  hasBuilderContentUrl,\n  hasBuilderContentViaQueryAPI,\n} from \"../common/builder/builder-api\";\nimport { DEFAULT_MODEL_NAME } from \"../common/builder/content-ids\";\n\nexport async function connectBuilder(\n  ctx: DevToolsServerContext,\n  publicApiKey: string,\n  privateAuthKey: string,\n  kind: SPACE_KIND_VALUES,\n) {\n  ctx.debug(`connect builder with public key: ${publicApiKey}`);\n\n  ctx.publicApiKey = publicApiKey;\n\n  // ctx.kind = kind as SPACE_KIND_VALUES | null;\n\n  const closeServerPromise = ctx.closeAppServer();\n\n  const apiKey = await ctx.setPublicApiKey({ publicApiKey });\n  if (apiKey.modifiedType === \"permission-error\") {\n    ctx.debug(`permission error, failed to set public api key`);\n    return {\n      success: false,\n      pathname: \"\",\n    };\n  }\n\n  ctx.debug(`set public key: process.env.${apiKey.envKey}=${publicApiKey}`);\n  process.env[apiKey.envKey] = publicApiKey;\n\n  const frameworkPageOpts = await ctx.builderPageOptions();\n\n  ctx.debug(\n    `builder model: ${DEFAULT_MODEL_NAME}, path: ${frameworkPageOpts.pathname}, template: ${frameworkPageOpts.templateContentId}`,\n  );\n\n  let hasContent = await hasBuilderContentUrl(ctx, {\n    model: DEFAULT_MODEL_NAME,\n    pageUrl: frameworkPageOpts.pathname,\n    publicApiKey,\n    privateAuthKey,\n    kind,\n  });\n\n  if (!hasContent) {\n    await createBuilderPage(ctx, {\n      templateContentId: frameworkPageOpts.templateContentId,\n      pathname: frameworkPageOpts.pathname,\n      title: frameworkPageOpts.title,\n      publicApiKey,\n      privateAuthKey,\n    });\n\n    // If we just created content, wait a few seconds for it to be available\n    // Also, hit the same URL that the Builder SDK calls, but with cachebust\n    // to avoid any CDN level caching issues. Once that is available, it should\n    // generally be safe to proceed. This solves most of the 404 issues on initial\n    // launch\n    let MAX_RETRIES = 5;\n    let retries = 0;\n    while (!hasContent && retries < MAX_RETRIES) {\n      await new Promise((resolve) => setTimeout(resolve, 1000));\n      let content = await hasBuilderContentViaQueryAPI({\n        model: DEFAULT_MODEL_NAME,\n        pageUrl: frameworkPageOpts.pathname,\n        publicApiKey,\n        privateAuthKey,\n      });\n      retries++;\n      if (content && content.length > 0) {\n        hasContent = true;\n      }\n    }\n  }\n\n  await closeServerPromise;\n\n  ctx.debug(`ensure builder setup`);\n\n  let modifiedFiles: ModifiedFile[] = [];\n\n  // For VCP, we need to ensure figma import page is setup\n  if (kind === SPACE_KIND.VCP) {\n    modifiedFiles = await ctx.ensureFigmaImportPage();\n  } else {\n    modifiedFiles = await ctx.ensureBuilderSetup();\n  }\n\n  if (apiKey.modifiedType) {\n    modifiedFiles.push({\n      filePath: apiKey.file,\n      modifiedType: apiKey.modifiedType,\n    });\n  }\n\n  modifiedFiles.forEach((m) => {\n    m.displayFilePath = ctx.relative(ctx.getAppRootDir(), m.filePath);\n  });\n  modifiedFiles.sort((a, b) => a.filePath.localeCompare(b.filePath));\n\n  if (modifiedFiles.length > 0) {\n    ctx.debug(\n      `modified files: ${modifiedFiles\n        .map((m) => m.displayFilePath)\n        .join(\", \")}`,\n    );\n    await ctx.restartAppServer();\n    await new Promise((resolve) => setTimeout(resolve, 500));\n  } else {\n    ctx.debug(`no modified files`);\n  }\n\n  const connectedBuilder: ConnectedBuilder = {\n    success: true,\n    pathname: frameworkPageOpts.localePathname || frameworkPageOpts.pathname,\n    modifiedFiles,\n    platform: ctx.platform(),\n    kind,\n  };\n\n  if (kind === SPACE_KIND.VCP) {\n    connectedBuilder.pathname = \"/\";\n  }\n\n  ctx.debug(`connected builder: ${connectedBuilder.pathname}`);\n\n  return connectedBuilder;\n}\n\nexport async function validateBuilder(ctx: DevToolsServerContext) {\n  const frameworkPageOpts = await ctx.builderPageOptions();\n\n  ctx.debug(\n    `validateBuilder, pathname: ${frameworkPageOpts.pathname}, localePathname: ${frameworkPageOpts.localePathname}, isValid: ${ctx.isValid}`,\n  );\n\n  const result: ValidatedBuilder = {\n    isValid: ctx.isValid,\n    pathname: frameworkPageOpts.localePathname || frameworkPageOpts.pathname,\n    platform: ctx.platform(),\n  };\n\n  if (ctx.isValid) {\n    return result;\n  }\n\n  // get the builder public api key from the .env file\n  const envInfo = await ctx.getPublicApiKey();\n  if (!envInfo.envValue) {\n    ctx.debug(`missing public api key`);\n    return result;\n  }\n\n  ctx.debug(`public api key: ${envInfo.envValue}, ${envInfo.file}`);\n\n  // remember the valid app credentials\n  ctx.publicApiKey = envInfo.envValue;\n\n  // For now, skipping validation of homepage content as it is not needed for the VCP.\n\n  // it's possible that the builder auth is setup, but they still don't have a homepage somehow\n  // double check if this builder account already has a homepage created\n  // const b = await getBuilderContent(ctx, {\n  //   model: DEFAULT_MODEL_NAME,\n  //   publicApiKey: envInfo.envValue,\n  // });\n  // if (b.results.length === 0) {\n  //   ctx.debug(`missing homepage content`);\n  //   // there is no homepage content created yet for the valid public api key\n  //   // we don't have their private key, so let's redirect to the auth flow\n  //   // so we can get their private key and create the homepage for them\n  //   return result;\n  // }\n\n  // awesome, we're all set\n  // the public key is saved correctly in the .env file\n  // and they have a homepage created\n\n  // set isValid to true so we don't have to validate again\n  ctx.debug(`builder connection is valid`);\n  result.isValid = true;\n  ctx.isValid = true;\n\n  return result;\n}\n", "import { transpileFile, transpileModule } from \"../common/typescript\";\nimport { readConfigFile } from \"../node/node-sys\";\nimport type {\n  ApiResponse,\n  ApiRequest,\n  DevToolsServerContext,\n  SPACE_KIND_VALUES,\n  DevToolsSys,\n} from \"../types\";\nimport { connectBuilder, validateBuilder } from \"./builder-connect\";\n\nexport async function handleDevApiRequest(\n  ctx: DevToolsServerContext,\n  apiReq: ApiRequest,\n): Promise<ApiResponse> {\n  const result: ApiResponse = {\n    type: apiReq.type,\n  };\n\n  switch (apiReq.type) {\n    case \"getCache\": {\n      result.data = await ctx.getCache();\n      break;\n    }\n    case \"setCache\": {\n      await ctx.setCache(apiReq.data);\n      break;\n    }\n    case \"connectBuilder\": {\n      result.data = await connectBuilder(\n        ctx,\n        apiReq.data.publicApiKey,\n        apiReq.data.privateAuthKey,\n        apiReq.data.kind as SPACE_KIND_VALUES,\n      );\n      break;\n    }\n    case \"enableDevTools\": {\n      result.data = enableDevTools(ctx, apiReq.data.enabled);\n      break;\n    }\n    case \"getRegistry\": {\n      result.data = await ctx.getRegistry(apiReq.data);\n      break;\n    }\n    case \"launchEditor\": {\n      result.data = await ctx.launchEditor(apiReq.data);\n      break;\n    }\n    case \"validateBuilder\": {\n      result.data = await validateBuilder(ctx);\n      break;\n    }\n    case \"loadComponent\": {\n      result.data = await ctx.loadComponent(apiReq.data);\n      break;\n    }\n    case \"getAllProjectFiles\": {\n      if (ctx.getAllProjectFiles) {\n        result.data = await ctx.getAllProjectFiles();\n      } else {\n        result.errors = [\"getAllProjectFiles not implemented\"];\n      }\n      break;\n    }\n    case \"registerComponent\": {\n      result.data = await ctx.registerComponent(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"setComponentInfo\": {\n      result.data = await ctx.setRegisteredComponentInfo(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"setComponentInput\": {\n      result.data = await ctx.setRegisteredComponentInput(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"unregisterComponent\": {\n      result.data = await ctx.unregisterComponent(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"getFrameworks\": {\n      result.data = ctx.getFrameworks();\n      break;\n    }\n    case \"readdir\": {\n      if (!isValidFileRequest(ctx, apiReq.path)) {\n        result.errors = [`Invalid file request: ${apiReq.path}`];\n      } else {\n        result.data = await ctx.readdir(apiReq.path, true);\n      }\n\n      break;\n    }\n    case \"readFile\": {\n      if (!isValidFileRequest(ctx, apiReq.path)) {\n        result.errors = [`Invalid file request: ${apiReq.path}`];\n      } else {\n        result.data = await ctx.readFile(apiReq.path);\n      }\n      break;\n    }\n    case \"writeFile\": {\n      if (!isValidFileRequest(ctx, apiReq.path)) {\n        result.errors = [`Invalid file request: ${apiReq.path}`];\n      } else {\n        await ctx.writeFile(apiReq.path, apiReq.content);\n      }\n      break;\n    }\n    case \"ensureFigmaImportPage\": {\n      result.data = await ctx.ensureFigmaImportPage();\n      break;\n    }\n    case \"transileFile\": {\n      result.data = await transpileFile(ctx, apiReq);\n      break;\n    }\n    case \"transileModule\": {\n      result.data = transpileModule(ctx, apiReq);\n      break;\n    }\n    case \"getPastSyncInfo\": {\n      result.data = await ctx.getPastSyncInfo?.(apiReq.data);\n      break;\n    }\n    case \"resyncSnippet\": {\n      result.data = await ctx.resyncSnippet?.(apiReq.data);\n      break;\n    }\n    case \"localConfig\": {\n      result.data = await readConfigFile();\n      break;\n    }\n    default: {\n      result.errors = [`Unknown request type: ${JSON.stringify(apiReq)}`];\n\n      // exhaustiveness check\n      // this will cause a compile error if we forget to handle a request type\n      const _exhaustiveCheck: never = apiReq;\n      _exhaustiveCheck;\n    }\n  }\n\n  return result;\n}\n\nfunction isValidFileRequest(sys: DevToolsSys, path: string) {\n  if (!path) {\n    return false;\n  }\n\n  if (path.includes(\"..\")) {\n    return false;\n  }\n\n  path = path.replace(/\\\\/g, \"/\");\n\n  const parts = path.split(\"/\");\n  const last = parts[parts.length - 1];\n  if (last.length > 0) {\n    let ext = last.split(\".\").pop();\n    if (ext) {\n      ext = `.${ext}`.toLocaleLowerCase();\n      ext = ext.split(\"?\")[0];\n      if (!EXT_WHITELIST.includes(ext)) {\n        return false;\n      }\n    }\n  }\n  if (!validatePath(sys, path)) {\n    return false;\n  }\n  return false;\n}\n\nfunction validatePath(sys: DevToolsSys, userPath: string) {\n  if (!userPath) {\n    return false;\n  }\n\n  // Normalize and resolve the paths to ensure they are absolute and clean\n  userPath = sys.normalize(sys.resolve(userPath));\n\n  const rootDir = sys.getAppRootDir();\n\n  if (!userPath.startsWith(rootDir) && !userPath.includes(\"node_modules\")) {\n    return false;\n  }\n  return true;\n}\n\nconst EXT_WHITELIST = [\n  \".js\",\n  \".jsx\",\n  \".ts\",\n  \".tsx\",\n  \".json\",\n  \".css\",\n  \".scss\",\n  \".sass\",\n  \".less\",\n  \".html\",\n  \".htm\",\n  \".xml\",\n  \".svg\",\n  \".png\",\n  \".jpg\",\n  \".jpeg\",\n  \".gif\",\n  \".ico\",\n  \".webp\",\n  \".woff\",\n  \".woff2\",\n  \".ttf\",\n  \".eot\",\n  \".mp4\",\n  \".webm\",\n  \".ogg\",\n  \".md\",\n  \".txt\",\n  \".csv\",\n  \".pdf\",\n];\n\nfunction enableDevTools(\n  ctx: DevToolsServerContext,\n  isDevToolsEnabled: boolean,\n) {\n  if (!isDevToolsEnabled && ctx.serverShouldRestart) {\n    // devtools no longer showing\n    // and they've made file changes while it was opened\n    // so we should restart the server now\n    setTimeout(() => {\n      console.log(`\\nRestarting server after Builder Devtools update...\\n`);\n      ctx.restartAppServer();\n    }, 10);\n  }\n\n  ctx.enableAppWatch(!isDevToolsEnabled);\n\n  return {\n    enabled: isDevToolsEnabled,\n    platform: ctx.platform(),\n  };\n}\n", "import type { DevToolsServerContext } from \"../types\";\nimport { getLocalAppId } from \"../common/utils\";\n\nexport async function getClientScript(ctx: DevToolsServerContext) {\n  return updateClientRuntimeVariables(ctx, CLIENT_SCRIPT);\n}\n\nexport async function getConnectedStepHtml(ctx: DevToolsServerContext) {\n  return updateClientRuntimeVariables(ctx, CONNECTED_STEP_HTML);\n}\n\nasync function updateClientRuntimeVariables(\n  ctx: DevToolsServerContext,\n  code: string,\n) {\n  const localAppId = await getLocalAppId(ctx);\n  const frameworks = ctx.getFrameworks();\n  return code\n    .replace(/__LOCAL_APP_ID__/g, localAppId)\n    .replace(/__DEV_TOOLS_URL__/g, ctx.devToolsServerUrl)\n    .replace(/__CLIENT_ID__/g, ctx.getClientId())\n    .replace(/__FRAMEWORK__/g, frameworks.length ? frameworks[0].name : \"\");\n}\n\ndeclare const CLIENT_SCRIPT: string;\n\ndeclare const CONNECTED_STEP_HTML: string;\n", "import type { DevToolsServerContext } from \"../types\";\nimport {\n  BUILDER_AUTH_RETURN_PATH,\n  FRAMEWORK_QS,\n  PLATFORM_QS,\n  NODE_VERSION_QS,\n} from \"../common/constants\";\nimport { platform } from \"node:os\";\n\nexport async function getBuilderAuthConnectUrl(\n  ctx: DevToolsServerContext,\n  previewUrl: string,\n) {\n  const authUrl = new URL(`/cli-auth`, `https://builder.io`);\n  authUrl.searchParams.set(`client_id`, ctx.getClientId());\n\n  authUrl.searchParams.set(`host`, await ctx.getDeviceId());\n  authUrl.searchParams.set(`response_type`, `code`);\n  authUrl.searchParams.set(`cli`, `true`);\n\n  const returnUrl = new URL(BUILDER_AUTH_RETURN_PATH, ctx.devToolsServerUrl);\n  returnUrl.searchParams.set(PLATFORM_QS, platform());\n  returnUrl.searchParams.set(NODE_VERSION_QS, process.versions.node);\n\n  const frameworks = ctx.getFrameworks();\n  if (frameworks.length > 0) {\n    authUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n    returnUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n  }\n\n  authUrl.searchParams.set(`redirect_url`, returnUrl.href);\n  authUrl.searchParams.set(`preview_url`, previewUrl);\n\n  return authUrl.href;\n}\n", "import type { ApiResponse, DevToolsServerContext } from \"../types\";\nimport type {\n  IncomingMessage,\n  OutgoingHttpHeaders,\n  Server,\n  ServerResponse,\n} from \"http\";\nimport {\n  PREVIEW_URL_QS,\n  BUILDER_AUTH_CONNECT_PATH,\n  BUILDER_AUTH_RETURN_PATH,\n  DEV_TOOLS_API_PATH,\n  DEV_TOOLS_CLIENT_SCRIPT_PATH,\n  DEV_TOOLS_SERVER_CLOSE_PATH,\n  DEV_TOOLS_MAPPINGS_PATH,\n} from \"../common/constants\";\nimport { handleDevApiRequest } from \"./dev-tools-api\";\nimport { getClientScript, getConnectedStepHtml } from \"./client-script\";\nimport { getBuilderAuthConnectUrl } from \"./auth\";\nimport { getCredentials } from \"../cli/credentials\";\nimport {\n  findAllMappingFiles,\n  findMappingsFromFiles,\n} from \"../cli/figma-publish\";\nimport { pkgVersion } from \"../cli/version\";\n\nexport async function handleDevRequest(\n  ctx: DevToolsServerContext | null,\n  server: Server,\n  req: IncomingMessage,\n  res: ServerResponse,\n) {\n  try {\n    if (!ctx) {\n      return text(req, res, 400, `Builder context closed`);\n    }\n\n    const url = getNodeHttpUrl(req);\n\n    if (url.pathname === DEV_TOOLS_API_PATH) {\n      if (req.method === \"POST\") {\n        const body = await getRequestBody(req);\n        if (body) {\n          try {\n            const apiResult = await handleDevApiRequest(ctx, JSON.parse(body));\n            return json(req, res, 200, apiResult);\n          } catch (e: any) {\n            ctx.debug(`Dev API Error`, e.stack || e.message || e);\n            const errorResponse: ApiResponse = {\n              errors: [String(e.message || e)],\n            };\n            return json(req, res, 500, errorResponse);\n          }\n        }\n      } else if (req.method === \"OPTIONS\") {\n        const headers: OutgoingHttpHeaders = {\n          \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n          \"Access-Control-Allow-Headers\":\n            \"Content-Type, Cache-Control, X-Builder-Devtools-Version, sentry-trace, baggage\",\n        };\n\n        const reqOrigin = req.headers.origin;\n        if (reqOrigin && reqOrigin !== \"null\") {\n          if (isValidRequestOrigin(new URL(reqOrigin))) {\n            headers[\"Access-Control-Allow-Origin\"] = reqOrigin;\n          }\n        } else {\n          headers[\"Access-Control-Allow-Origin\"] = \"*\";\n        }\n\n        // console.log(\"OPTIONS response\", headers);\n        res.writeHead(200, headers);\n        res.end();\n        return;\n      }\n\n      return text(\n        req,\n        res,\n        405,\n        `${DEV_TOOLS_API_PATH} is an API endpoint used only during development by the Builder.io Devtools client-side script`,\n      );\n    }\n\n    if (url.pathname === DEV_TOOLS_CLIENT_SCRIPT_PATH) {\n      return javascript(req, res, 200, await getClientScript(ctx));\n    }\n\n    if (url.pathname === BUILDER_AUTH_CONNECT_PATH) {\n      const previewUrl = url.searchParams.get(PREVIEW_URL_QS);\n      if (!previewUrl) {\n        return text(req, res, 400, `Missing ${PREVIEW_URL_QS} querystring`);\n      }\n      return redirect(\n        res,\n        302,\n        await getBuilderAuthConnectUrl(ctx, previewUrl),\n      );\n    }\n\n    if (url.pathname === BUILDER_AUTH_RETURN_PATH) {\n      return html(req, res, 200, await getConnectedStepHtml(ctx));\n    }\n\n    if (url.pathname === DEV_TOOLS_MAPPINGS_PATH) {\n      await getCredentials(ctx, { _: [] }, {});\n\n      const mappingFiles = await findAllMappingFiles(ctx);\n\n      const { figmaBuilderLinks, diagnostics } = await findMappingsFromFiles({\n        mappingFiles,\n        sys: ctx,\n      });\n\n      return response(\n        req,\n        res,\n        200,\n        \"application/json\",\n        JSON.stringify(\n          {\n            figmaBuilderLinks,\n            foundErrors: diagnostics.length > 0,\n            diagnostics,\n            version: 2,\n            local: true,\n          },\n          null,\n          2,\n        ),\n      );\n    }\n\n    if (url.pathname === DEV_TOOLS_SERVER_CLOSE_PATH) {\n      ctx.debug(`Close Dev Tools Server Requested: ${url.href}`);\n      setTimeout(() => {\n        try {\n          server.close((err) => {\n            ctx.debug(`Dev Tools Server Closed Error: ${err}`);\n          });\n        } catch (e) {\n          ctx.debug(`Error closing devtools server: ${e}`);\n        }\n      }, 20);\n      return text(req, res, 200, `Closing Dev Tools Server`);\n    }\n\n    return text(req, res, 404, `Not found`);\n  } catch (e: any) {\n    ctx?.Sentry?.captureException(e);\n    return text(req, res, 500, `Dev Server Error: ${e}`);\n  }\n}\n\nfunction json(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  apiRsp: ApiResponse,\n) {\n  response(req, res, status, \"application/json\", JSON.stringify(apiRsp));\n}\n\nfunction javascript(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  body: string,\n) {\n  response(req, res, status, \"application/javascript\", body);\n}\n\nfunction html(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  body: string,\n) {\n  response(req, res, status, \"text/html\", body);\n}\n\nfunction text(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  body: string,\n) {\n  response(req, res, status, \"text/plain\", body);\n}\n\nfunction response(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  contentType:\n    | \"text/plain\"\n    | \"text/html\"\n    | \"application/javascript\"\n    | \"application/json\",\n  body: string,\n) {\n  const headers: OutgoingHttpHeaders = {\n    \"Content-Type\": `${contentType}; charset=utf-8`,\n    \"Cache-Control\": \"no-cache, no-store, must-revalidate\",\n    \"X-Builder-Devtools-Version\": pkgVersion,\n  };\n\n  const reqOrigin = req.headers.origin;\n  if (reqOrigin && reqOrigin !== \"null\") {\n    if (isValidRequestOrigin(new URL(reqOrigin))) {\n      headers[\"Access-Control-Allow-Origin\"] = reqOrigin;\n    }\n  } else {\n    headers[\"Access-Control-Allow-Origin\"] = \"*\";\n  }\n\n  res.writeHead(status, headers);\n  res.end(body);\n}\n\nfunction isValidRequestOrigin(o: URL) {\n  if (o.hostname === \"localhost\") {\n    return true;\n  }\n  if (\n    o.origin === \"https://builder.io\" ||\n    o.origin === \"https://www.builder.io\" ||\n    o.origin.endsWith(\".builder.io\")\n  ) {\n    return true;\n  }\n  if (o.port === \"\") {\n    return false;\n  }\n  if (o.port !== \"80\" && o.port !== \"443\") {\n    return true;\n  }\n  return false;\n}\n\nfunction redirect(\n  response: ServerResponse,\n  status: number,\n  redirectTo: string,\n) {\n  response.writeHead(status, {\n    Location: redirectTo,\n  });\n  response.end();\n}\n\nasync function getRequestBody(request: IncomingMessage) {\n  let body = \"\";\n  for await (const chunk of request as any) {\n    body += chunk;\n  }\n  return body;\n}\n\nfunction getNodeHttpUrl(req: IncomingMessage) {\n  const path = req.url || \"/\";\n  return new URL(path, `http://${req.headers.host}`);\n}\n", "import type { DevToolsServerContext, DevToolsHttpServer } from \"../types\";\nimport { createServer as createHttpServer, request } from \"node:http\";\nimport { handleDevRequest } from \"./request-handler\";\nimport { DEV_TOOLS_SERVER_CLOSE_PATH } from \"../common/constants\";\n\nexport async function createDevToolsHttpServer(\n  ctx: DevToolsServerContext,\n): Promise<DevToolsHttpServer> {\n  if (globalThis.__builderDevToolsServer) {\n    // reuse existing devtools server\n    ctx.debug(`reusing existing devtools server`);\n    globalThis.__builderDevToolsServer.setContext(ctx);\n    return globalThis.__builderDevToolsServer;\n  }\n\n  const port = await setupDevToolsPort(ctx);\n\n  const server = createHttpServer((request, response) => {\n    handleDevRequest(ctx, server, request, response);\n  });\n\n  const shutdownServer = () => {\n    return new Promise<void>((resolve, reject) => {\n      if (server.listening) {\n        ctx.debug(`closing devtools server on port ${port}`);\n        server.close((err) => {\n          ctx = null as any;\n          if (err) {\n            ctx.debug(`error closing devtools server on port ${port}`);\n            reject(err);\n          } else {\n            if (ctx) {\n              ctx.debug(`closed devtools server on port ${port}`);\n            }\n            resolve();\n          }\n        });\n      } else {\n        ctx.debug(`devtools server on port ${port} not listening`);\n        resolve();\n      }\n    });\n  };\n\n  process.once(\"SIGTERM\", shutdownServer);\n  process.once(\"SIGINT\", shutdownServer);\n  if (process.env.CI !== \"true\") {\n    process.stdin.on(\"end\", shutdownServer);\n  }\n\n  globalThis.__builderDevToolsServer = {\n    url: new URL(`http://localhost:${port}`).href,\n    port,\n    setContext: (newCtx) => {\n      ctx.debug(`set devtools context on server ${port}`);\n      ctx = newCtx;\n    },\n    close: async () => {\n      globalThis.__builderDevToolsServer = null;\n      await shutdownServer();\n    },\n  };\n\n  return new Promise((resolve) => {\n    server.listen(port, () => {\n      ctx.debug(`started devtools server on port ${port}`);\n      resolve(globalThis.__builderDevToolsServer!);\n    });\n  });\n}\n\nfunction setupDevToolsPort(ctx: DevToolsServerContext) {\n  return new Promise<number>((resolve) => {\n    const port = ctx.port;\n\n    try {\n      const options = {\n        hostname: \"localhost\",\n        port,\n        path: DEV_TOOLS_SERVER_CLOSE_PATH,\n        method: \"GET\",\n      };\n\n      request(options, (res) => {\n        res.on(\"end\", () => {\n          ctx.debug(`${DEV_TOOLS_SERVER_CLOSE_PATH} - Response ended`);\n          resolve(port);\n        });\n      })\n        .on(\"error\", (error) => {\n          ctx.debug(`${DEV_TOOLS_SERVER_CLOSE_PATH} - No response ${error}`);\n          resolve(port);\n        })\n        .end();\n    } catch (e) {\n      ctx.debug(`${DEV_TOOLS_SERVER_CLOSE_PATH} - Error ${e}`);\n      resolve(port);\n    }\n  });\n}\n\ndeclare const globalThis: {\n  __builderDevToolsServer?: DevToolsHttpServer | null;\n};\n", "import type {\n  DevToolsServer,\n  DevToolsServerContext,\n  DevToolsServerOptions,\n} from \"../types\";\nimport { createDevToolsHttpServer } from \"./dev-tools-http-server\";\nimport { version } from \"./index\";\n\nexport async function createDevToolsServer(opts: DevToolsServerOptions) {\n  const ctx: DevToolsServerContext = {\n    ...opts,\n    devToolsServerUrl: \"\",\n    isValid: false,\n    serverShouldRestart: false,\n    publicApiKey: \"\",\n    port: opts.port || 5273,\n    ignoreMissingConfig: false,\n    getAllProjectFiles: opts.getAllProjectFiles || (() => Promise.resolve([])),\n  };\n\n  const frameworks = opts\n    .getFrameworks()\n    .map((f) => f.name)\n    .join(\", \");\n\n  ctx.debug(`create devtools ${version} [${frameworks}]`);\n\n  const httpServer = await createDevToolsHttpServer(ctx);\n\n  ctx.devToolsServerUrl = httpServer.url;\n  ctx.port = httpServer.port;\n\n  const devToolsServer: DevToolsServer = {\n    getUrl: () => ctx.devToolsServerUrl,\n  };\n\n  return devToolsServer;\n}\n", "import { pkgVersion } from \"../cli/version\";\n\nexport type {\n  ApiRequest,\n  ApiResponse,\n  ApiConnectBuilderRequest,\n  ApiDevToolsEnabledRequest,\n  ApiLocalConfigRequest,\n  ApiGetRegistryRequest,\n  ApiLaunchEditorRequest,\n  ApiRegisterComponentRequest,\n  ApiRegisteredComponentInfoRequest,\n  ApiRegisteredComponentInputRequest,\n  ApiLoadComponentRequest,\n  ApiUnregisterComponentRequest,\n  ApiValidateBuilderRequest,\n  ApiFrameworksRequest,\n  ApiReadFileRequest,\n  ApiWriteFileRequest,\n  ApiReaddirRequest,\n  ComponentRegistry,\n  DevToolsServer,\n  DevToolsServerOptions,\n  Framework,\n  GetRegistryOptions,\n  TranspileDiagnostic,\n  TranspileFileOptions,\n  TranspileModuleOptions,\n  TranspileResult,\n} from \"../types\";\n\nexport { createDevToolsServer } from \"./create-dev-tools-server\";\n\nexport const version = pkgVersion;\n", "import {\n  log,\n  text,\n  isCancel,\n  spinner,\n  confirm,\n  intro,\n  cancel,\n} from \"@clack/prompts\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n  existsSync,\n  mkdirSync,\n  writeFileSync,\n  readFileSync,\n  statSync,\n} from \"node:fs\";\nimport {\n  createDevToolsNodeSys,\n  findAppRootDir,\n  findPackageJsonDir,\n} from \"../../node/node-sys\";\nimport { prettierFormat } from \"../prettier\";\nimport { bold, bgCyan, white, dim } from \"picocolors\";\nimport type {\n  AddCliOptions,\n  FileNode,\n  FolderNode,\n  Snippet,\n  SyncInfo,\n} from \"../../types\";\nimport { exit } from \"../exit\";\nimport { safeFetch } from \"../fetch\";\nimport { pkgVersion } from \"../version\";\n\nexport async function addCommand(\n  opts: AddCliOptions,\n): Promise<SyncInfo | undefined> {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" add \"))) + `  ` + dim(pkgVersion));\n\n  if (!opts.path && !process.stdout.isTTY && process.env.FORCE_TTY !== \"1\") {\n    cancel(\n      \"This command requires a TTY-enabled terminal.\\nIf you are using Windows Git Bash, try a different terminal or wrap the command with winpty.\",\n    );\n    return await exit(1);\n  }\n\n  const id = opts.snippetId;\n  if (!id && !opts.snippet) {\n    cancel(\"SnippetId expected. npx builder.io add <snippetId>\");\n    return await exit(1);\n  }\n\n  const s = spinner();\n  let snippet = opts.snippet || null;\n  if (!snippet && id) {\n    s.start(`Fetching snippet ${id}`);\n    snippet = await fetchSnippet(id);\n    s.stop(`Fetched snippet ${id}`);\n  }\n\n  if (!snippet) {\n    cancel(`No snippet found for id ${id}`);\n    return await exit(1);\n  }\n\n  const cwd = process.cwd();\n  const appRootDir = findAppRootDir(cwd) ?? cwd;\n  if (snippet.files?.length > 0) {\n    const rootPath = suggestRootPath(appRootDir, snippet.framework || \"react\");\n    const pathInput =\n      opts.path ||\n      (await text({\n        message: \"Where should we copy the files?\",\n        initialValue: rootPath,\n        validate(value) {\n          if (value.length === 0) {\n            return `File path is required!`;\n          }\n          if (value[0] !== \".\") return \"Please enter a relative path.\";\n        },\n      }));\n    if (isCancel(pathInput)) {\n      cancel(\"Cancelled sync\");\n      return await exit(0);\n    }\n    const writtenFiles = await writeFiles(\n      appRootDir,\n      snippet,\n      snippet.files,\n      pathInput,\n      false,\n    );\n    log.success(`All files have been written successfully.`);\n    return {\n      snippet,\n      pathInput,\n      writtenFiles,\n      timeStamp: Date.now(),\n    };\n  } else {\n    let { code, suggestedName, framework } = snippet;\n    if (framework) {\n      // new code saved, we started recently saving that\n      suggestedName = await suggestComponentPath(appRootDir, framework, code);\n    }\n    suggestedName ??= `./src/components/MyComponent.jsx`;\n\n    let formatted = addBuilderSignature(\n      snippet,\n      removeCodeDelimiters(snippet.code),\n      snippet.framework,\n    );\n    try {\n      if (snippet.framework === \"html\") {\n        formatted = await prettierFormat(\n          appRootDir,\n          formatted,\n          \"html\",\n          undefined,\n        );\n      } else if (snippet.framework === \"angular\") {\n        formatted = await prettierFormat(\n          appRootDir,\n          formatted,\n          \"angular\",\n          undefined,\n        );\n      } else if (snippet.framework === \"vue\") {\n        formatted = await prettierFormat(\n          appRootDir,\n          formatted,\n          \"vue\",\n          undefined,\n        );\n      } else if (snippet.framework === \"svelte\") {\n        formatted = await prettierFormat(\n          appRootDir,\n          formatted,\n          \"svelte\",\n          undefined,\n        );\n      } else {\n        formatted = await prettierFormat(\n          appRootDir,\n          formatted,\n          \"typescript\",\n          undefined,\n        );\n      }\n    } catch (e) {\n      // ignore crashed prettier\n    }\n\n    let pathInput: string | symbol = opts.path!;\n\n    if (!pathInput) {\n      try {\n        const sys = await createDevToolsNodeSys({\n          cwd: process.cwd(),\n        });\n        const frameworks = sys.getFrameworks();\n\n        if (frameworks.length > 0) {\n          let projectFramework: string;\n\n          if (frameworks.some((f) => f.name.includes(\"qwik\"))) {\n            projectFramework = \"qwik\";\n          } else if (frameworks.some((f) => f.name.includes(\"react\"))) {\n            projectFramework = \"react\";\n          } else {\n            projectFramework = frameworks[0].name;\n          }\n\n          if (snippet.framework && snippet.framework !== projectFramework) {\n            const shouldContinue = await confirm({\n              message: `This snippet is for ${snippet.framework}, but you are using ${projectFramework}. Continue?`,\n              initialValue: false,\n            });\n            if (isCancel(shouldContinue) || !shouldContinue) {\n              console.log(\n                `Please go back to builder and change the output framework to match your project.`,\n              );\n              console.log(); // line break\n              return await exit(0);\n            }\n          }\n        }\n      } catch (e) {\n        // probably in a project that isn't supported by dev tools\n      }\n\n      pathInput = await text({\n        message: \"Where should we copy the code?\",\n        initialValue: suggestedName?.startsWith(\"./\")\n          ? suggestedName\n          : `./${suggestedName}`,\n        validate(value) {\n          if (value.length === 0) {\n            return `File path is required!`;\n          }\n          if (value[0] !== \".\") return \"Please enter a relative path.\";\n        },\n      });\n      if (isCancel(pathInput)) {\n        console.log(``);\n        return await exit(0);\n      }\n    }\n\n    const componentFilePath = resolve(appRootDir, pathInput);\n    log.info(`Writing code to ${componentFilePath}`);\n    mkdirSync(dirname(componentFilePath), { recursive: true });\n    writeFileSync(componentFilePath, formatted);\n  }\n}\n\nexport function fetchSnippet(id: string): Promise<Snippet | null> {\n  return safeFetch(`https://cdn.builder.io/api/v1/snippet/${id}`).then(\n    (res) => {\n      if (res.status === 404) {\n        return null;\n      }\n      return res.json();\n    },\n  );\n}\n\nfunction removeCodeDelimiters(str: string) {\n  return str.replace(/^```jsx\\s?|\\s?```$/g, \"\").trim();\n}\n\nfunction addBuilderSignature(\n  snippet: Snippet,\n  str: string,\n  framework?: string,\n  addSessionLink = false,\n) {\n  if (!framework) {\n    return str;\n  }\n\n  const baseComment = \"This code was generated by Builder.io\";\n  const link = addSessionLink\n    ? `https://builder.io/content/${snippet.contentId}?codeSession=${snippet.sessionKey}&sid=${snippet.id}`\n    : \"\";\n\n  const isHtmlLike = [\"vue\", \"html\", \"svelte\"].includes(\n    framework.toLowerCase(),\n  );\n  const commentLines = [baseComment, link].filter(Boolean);\n\n  const comments = isHtmlLike\n    ? commentLines.map((line) => `<!-- ${line} -->`).join(\"\\n\")\n    : `/**\\n${commentLines.map((line) => ` * ${line}`).join(\"\\n\")}\\n */`;\n\n  return `${comments}\\n${str}`;\n}\n\nasync function suggestComponentPath(\n  appRootDir: string,\n  framework: string,\n  content: string,\n) {\n  let path;\n  const componentName = detectComponentName(content, framework.toLowerCase());\n\n  switch (framework.toLowerCase()) {\n    case \"react\":\n      const isTypescript = await detectTypescript(appRootDir);\n      path = `components/${componentName || \"MyComponent\"}.${\n        isTypescript ? \"tsx\" : \"jsx\"\n      }`;\n      break;\n    case \"angular\":\n      path = `app/components/${componentName || \"my-component\"}.component.ts`;\n      break;\n    case \"vue\":\n      path = `components/${componentName || \"MyComponent\"}.vue`;\n      break;\n    case \"svelte\":\n      path = `components/${componentName || \"MyComponent\"}.svelte`;\n      break;\n    case \"html\":\n      path = `${componentName || \"my-design\"}.html`;\n      break;\n    case \"qwik\":\n      path = `components/${componentName || \"MyComponent\"}.tsx`;\n      break;\n    default:\n      path = `components/${componentName || \"MyComponent\"}.tsx`;\n  }\n\n  path = existsSync(\"./src\") ? `./src/${path}` : `./${path}`;\n\n  return path;\n}\n\nasync function detectTypescript(appRootDir: string) {\n  if (existsSync(join(appRootDir, \"./tsconfig.json\"))) {\n    return true;\n  }\n\n  const packageJsonDir = findPackageJsonDir(appRootDir);\n  if (packageJsonDir) {\n    if (existsSync(join(packageJsonDir, \"./package.json\"))) {\n      const packageJSON = readFileSync(\n        join(packageJsonDir, \"./package.json\"),\n        \"utf-8\",\n      );\n      return packageJSON.includes(\"typescript\");\n    }\n  }\n  return false;\n}\n\nfunction detectComponentName(content: string, framework: string) {\n  const frameworkNaming: Record<string, RegExp> = {\n    vue: /name:\\s*'([^']+)'/,\n    react: /function (\\w+)\\([\\w\\W]+\\)/,\n    qwik: /export const (\\w+) = component\\$/,\n    angular: /selector:\\s*'([^']+)'/,\n  };\n  if (!frameworkNaming[framework]) {\n    return null;\n  }\n  const match = content.match(frameworkNaming[framework]);\n\n  if (framework === \"react\" && !match?.[1]) {\n    // if no match for react, let's try to find a const Component = () => {} declaration\n    const match = content.match(/const (\\w+)[\\w\\W]+=\\s*\\(/);\n    return match?.[1] || null;\n  }\n\n  return match?.[1] || null;\n}\n\nexport async function writeFiles(\n  appRootDir: string,\n  snippet: Snippet,\n  files: Array<FileNode | FolderNode>,\n  rootPath: string,\n  addSessionLink: boolean,\n) {\n  let results: Array<FileNode> = [];\n  for (const item of files) {\n    const itemPath = combinePaths(rootPath, item.path);\n    const fullPath = resolve(appRootDir, itemPath);\n\n    if (\"code\" in item) {\n      const formatted = await formatCode(\n        appRootDir,\n        snippet,\n        item.code,\n        getParserForFile(item.path),\n        addSessionLink,\n      );\n\n      if (!existsSync(fullPath)) {\n        mkdirSync(dirname(fullPath), { recursive: true });\n      }\n\n      writeFileSync(fullPath, formatted);\n      results.push({\n        ...item,\n        path: itemPath,\n        code: formatted,\n        timestamp: statSync(fullPath).mtime.getTime(),\n      });\n      log.info(`Writing file to ${fullPath}`);\n    } else {\n      // It's a FolderNode\n      mkdirSync(fullPath, { recursive: true });\n      results = results.concat(\n        await writeFiles(\n          appRootDir,\n          snippet,\n          item.files,\n          itemPath,\n          addSessionLink,\n        ),\n      );\n    }\n  }\n  return results;\n}\n\nfunction combinePaths(rootPath: string, itemPath: string): string {\n  // Normalize paths by removing leading and trailing slashes\n  const normalizedRoot = rootPath.replace(/^\\.?\\/+|\\/+$/g, \"\");\n  const normalizedItem = itemPath.replace(/^\\.?\\/+|\\/+$/g, \"\");\n\n  // Split the paths into segments\n  const rootSegments = normalizedRoot.split(\"/\").filter(Boolean);\n  const itemSegments = normalizedItem.split(\"/\").filter(Boolean);\n\n  // Find the last common segment\n  let lastCommonIndex = -1;\n  for (let i = 0; i < rootSegments.length; i++) {\n    const index = itemSegments.indexOf(rootSegments[i]);\n    if (index !== -1) {\n      lastCommonIndex = index;\n    }\n  }\n\n  // Combine the paths\n  const resultSegments = [\n    ...rootSegments,\n    ...itemSegments.slice(lastCommonIndex + 1),\n  ];\n\n  return resultSegments.join(\"/\");\n}\n\nfunction getParserForFile(filePath: string): string {\n  const extension = filePath.split(\".\").pop()?.toLowerCase();\n  switch (extension) {\n    case \"html\":\n    case \"svelte\":\n      return \"html\";\n    case \"vue\":\n      return \"vue\";\n    case \"ts\":\n    case \"tsx\":\n    case \"js\":\n    case \"jsx\":\n      return \"typescript\";\n    case \"css\":\n      return \"css\";\n    case \"json\":\n      return \"json\";\n    default:\n      return \"typescript\";\n  }\n}\n\nasync function formatCode(\n  workingDirectory: string,\n  snippet: Snippet,\n  code: string,\n  parser: string,\n  addSessionLink: boolean,\n): Promise<string> {\n  let codeToFormat = code;\n  try {\n    codeToFormat = await prettierFormat(\n      workingDirectory,\n      code,\n      parser,\n      undefined,\n    );\n  } catch (e) {\n    // ignore crashed prettier\n  }\n  return addSessionLink\n    ? addBuilderSignature(snippet, codeToFormat, parser, addSessionLink)\n    : codeToFormat;\n}\n\nexport function suggestRootPath(appRootDir: string, framework: string) {\n  const hasSrcFolder = existsSync(join(appRootDir, \"src\"));\n  const srcPrefix = hasSrcFolder ? \"src/\" : \"\";\n\n  switch (framework.toLowerCase()) {\n    case \"angular\":\n      return `./${srcPrefix}app/components/`;\n    case \"html\":\n      return `./`;\n    default:\n      return `./${srcPrefix}components/`;\n  }\n}\n", "import { dirname, relative, resolve, sep } from \"node:path\";\nimport type {\n  AddCliOptions,\n  DevToolsSys,\n  FileNode,\n  Snippet,\n  SyncInfo,\n} from \"../types\";\nimport {\n  existsSync,\n  readdirSync,\n  readFileSync,\n  rmdirSync,\n  statSync,\n  unlinkSync,\n} from \"node:fs\";\nimport { bgMagenta, bold, dim, white } from \"picocolors\";\nimport { globby } from \"globby\";\nimport { createDevTools } from \"../core\";\nimport { createDevToolsServer } from \"../server\";\nimport {\n  fetchSnippet,\n  suggestRootPath,\n  writeFiles,\n} from \"./builder-add/interface\";\nimport { log, text, isCancel, cancel, intro } from \"@clack/prompts\";\nimport chokidar from \"chokidar\";\nimport ignore from \"ignore\";\nimport { exit } from \"./exit\";\nimport { findAppRootDir } from \"../node/node-sys\";\nimport { pkgVersion } from \"./version\";\n\n// Helper to extract signature info from file content\nexport function extractSignatureInfo(content: string): {\n  contentId?: string;\n  sessionKey?: string;\n  snippetId?: string;\n} {\n  const matches = content.match(\n    /builder\\.io\\/content\\/([^?]+)\\?codeSession=([^&]+)&sid=([^\\s]+)/,\n  );\n  if (!matches) return {};\n  return {\n    contentId: matches[1],\n    sessionKey: matches[2],\n    snippetId: matches[3],\n  };\n}\n\nexport interface GetAllProjectFilesOptions {\n  sys?: DevToolsSys;\n  basePath: string;\n  globPattern?: string | string[];\n  extraIgnorePatterns?: string[];\n  dot?: boolean;\n  deep?: number;\n  gitignore?: boolean;\n}\n\nexport async function getAllProjectFiles({\n  basePath,\n  globPattern = \"**/*\",\n  extraIgnorePatterns,\n  dot,\n  deep = 12,\n  gitignore,\n  sys,\n}: GetAllProjectFilesOptions): Promise<string[]> {\n  const patterns = Array.isArray(globPattern)\n    ? [...globPattern]\n    : [globPattern];\n  const ignore = [...IGNORE_PATTERNS, ...(extraIgnorePatterns || [])];\n\n  /**\n   * Place the general node modules exclusion before any specific node module\n   * package inclusion so that the specific package is included in the file tree\n   * but not all the other packages.\n   */\n  const nodeModulesPattern = patterns.findIndex((p) =>\n    p.includes(\"node_modules\"),\n  );\n\n  if (nodeModulesPattern > -1) {\n    /**\n     * Doing this allows us to ignore all node_modules by default but still allow\n     * globPattern to include specific dependencies in node_modules. This does not\n     * work when using globby's ignore API but does work in the include API.\n     */\n    patterns.splice(nodeModulesPattern, 0, \"!**/node_modules\");\n  } else {\n    /**\n     * If globPattern does not reference node_modules then use the ignore API to ignore\n     * the directory altogether. Using this API makes it impossible to accidentally\n     * include a subset of node modules as opposed to the include API which is more\n     * flexible.\n     */\n    ignore.push(\"**/node_modules\");\n  }\n\n  try {\n    const files = await globby(patterns, {\n      cwd: basePath,\n      ignoreFiles: IGNORE_FILES,\n      ignore,\n      absolute: false,\n      onlyFiles: true,\n      dot,\n      gitignore,\n      suppressErrors: true,\n      deep,\n    });\n    return files;\n  } catch (error: any) {\n    sys?.Sentry?.captureException(error, {\n      tags: {\n        errorType: \"filesystem_permission\",\n        component: \"getAllProjectFiles\",\n      },\n      extra: {\n        basePath,\n        patterns,\n        errorCode: error.code,\n      },\n    });\n\n    // Re-throw other errors\n    throw error;\n  }\n}\n\nexport async function findBuilderFiles(\n  basePath: string,\n  targetContentId: string,\n  targetSessionKey: string,\n): Promise<FileNode[]> {\n  const files = await globby(\"**/*\", {\n    cwd: basePath,\n    ignoreFiles: IGNORE_FILES,\n    ignore: IGNORE_PATTERNS,\n  });\n\n  const builderFiles: FileNode[] = [];\n\n  for (const file of files) {\n    const fullPath = resolve(basePath, file);\n    try {\n      const content = readFileSync(fullPath, \"utf-8\");\n      if (content.includes(\"This code was generated by Builder.io\")) {\n        const sigInfo = extractSignatureInfo(content);\n\n        // Skip if we're looking for specific content/session and this doesn't match\n        if (targetContentId && targetSessionKey) {\n          if (\n            sigInfo.contentId !== targetContentId ||\n            sigInfo.sessionKey !== targetSessionKey\n          ) {\n            continue;\n          }\n        }\n\n        builderFiles.push({\n          path: file,\n          code: removeBuilderSignature(content),\n          name: file.split(\"/\").pop() || \"\",\n          timestamp: statSync(fullPath).mtime.getTime(),\n          snippetId: sigInfo.snippetId,\n        });\n      }\n    } catch (error) {\n      console.error(`Error reading file ${fullPath}:`, error);\n    }\n  }\n\n  return builderFiles;\n}\n\nfunction isMatchingBuilderFile(content: string, snippet: Snippet): boolean {\n  const sigInfo = extractSignatureInfo(content);\n  return (\n    sigInfo.contentId === snippet.contentId &&\n    sigInfo.sessionKey === snippet.sessionKey\n  );\n}\n\nexport function filterNonImportantFiles(files: string[]) {\n  return files.filter((file) => {\n    file = file.toLowerCase();\n    return (\n      !file.endsWith(\".png\") &&\n      !file.endsWith(\".jpg\") &&\n      !file.endsWith(\".jpeg\") &&\n      !file.endsWith(\".gif\") &&\n      !file.endsWith(\".ico\") &&\n      !file.endsWith(\".webp\") &&\n      !file.includes(\".mapper.\")\n    );\n  });\n}\n\nconst IGNORE_FILES = [\".gitignore\", \".builderignore\"];\n\n// SECURITY: These patterns ensure sensitive files are never exposed,\n// even when getDotFiles is enabled. This list should be comprehensive\n// to prevent accidental exposure of credentials, keys, and other secrets.\nconst IGNORE_PATTERNS = [\n  \"**/*.snap\",\n  \"**/*.liquid\",\n  \"**/.git\",\n  \"**/dist\",\n  \"**/*.pyc\",\n  \"**/.DS_Store\",\n  \"**/.vscode\",\n  \"**/__pycache__\",\n  \"**/coverage\",\n  \"**/.next\",\n  \"**/coverage\",\n  \"**/example\",\n  \"**/__snapshots__\",\n  \"**/.gradle\",\n  \"**/xcuserdata\",\n  \"**/.build\",\n  \"**/*.zip\",\n\n  // Private keys and certificates\n  \"**/*.pem\",\n  \"**/*.key\",\n  \"**/*.p12\",\n  \"**/*.pfx\",\n  \"**/*.cer\",\n  \"**/*.crt\",\n  \"**/*.der\",\n  \"**/*.p7b\",\n  \"**/*.p7c\",\n  \"**/*.jks\",\n  \"**/*.keystore\",\n\n  // SSH keys\n  \"**/id_rsa\",\n  \"**/id_rsa.*\",\n  \"**/id_dsa\",\n  \"**/id_dsa.*\",\n  \"**/id_ecdsa\",\n  \"**/id_ecdsa.*\",\n  \"**/id_ed25519\",\n  \"**/id_ed25519.*\",\n  \"**/.ssh/**\",\n  \"**/known_hosts\",\n  \"**/authorized_keys\",\n\n  // Cloud provider credentials\n  \"**/.aws/**\",\n  \"**/credentials\",\n  \"**/.gcp/**\",\n  \"**/.azure/**\",\n  \"**/gcloud/**\",\n  \"**/google-credentials.json\",\n  \"**/gcp-key.json\",\n  \"**/service-account*.json\",\n\n  // API keys and tokens\n  \"**/.pypirc\",\n  \"**/.dockercfg\",\n  \"**/.docker/config.json\",\n  \"**/token.json\",\n  \"**/tokens.json\",\n  \"**/secrets.json\",\n  \"**/secret.json\",\n  \"**/api-keys.json\",\n  \"**/apikeys.json\",\n\n  // Database files and dumps\n  \"**/*.sql\",\n  \"**/*.sqlite\",\n  \"**/*.sqlite3\",\n  \"**/*.db\",\n  \"**/*.dump\",\n  \"**/*.bak\",\n\n  // Password files\n  \"**/passwd\",\n  \"**/password\",\n  \"**/passwords\",\n  \"**/.htpasswd\",\n  \"**/shadow\",\n\n  // Git credentials\n  \"**/.git-credentials\",\n  \"**/.gitconfig\",\n  \"**/.netrc\",\n\n  // Kubernetes secrets\n  \"**/kubeconfig\",\n  \"**/.kube/**\",\n  \"**/k8s-secrets.yaml\",\n  \"**/k8s-secrets.yml\",\n\n  // Terraform state\n  \"**/*.tfstate\",\n  \"**/*.tfstate.*\",\n  \"**/.terraform/**\",\n\n  // Other sensitive files\n  \"**/.history\",\n  \"**/.bash_history\",\n  \"**/.zsh_history\",\n  \"**/wallet.dat\",\n  \"**/.gnupg/**\",\n  \"**/private.xml\",\n  \"**/signing.properties\",\n  \"**/*.ovpn\",\n  \"**/wp-config.php\",\n  \"**/config.inc.php\",\n  \"**/local_settings.py\",\n  \"**/database.yml\",\n  \"**/secrets.yml\",\n  \"**/.tox/**\",\n  \"**/firebase-adminsdk*.json\",\n  \"**/firebaseConfig.json\",\n  \"**/google-services.json\",\n  \"**/GoogleService-Info.plist\",\n];\n\nexport function getIgnorePatterns(basePath: string): (path: string) => boolean {\n  // Default patterns that should always be ignored\n\n  const ig = ignore().add(IGNORE_PATTERNS);\n\n  function tryAddIgnoreFile(path: string) {\n    try {\n      const ignorePath = resolve(basePath, path);\n      if (existsSync(ignorePath)) {\n        const gitignoreContent = readFileSync(ignorePath, \"utf8\");\n        ig.add(gitignoreContent);\n      }\n    } catch (error) {\n      console.debug(`No ${path} found or error reading it:`, error);\n    }\n  }\n  // Try to read .gitignore\n  for (const ignoreFile of IGNORE_FILES) {\n    tryAddIgnoreFile(ignoreFile);\n  }\n\n  return (path: string): boolean => {\n    // ignore package handles forward slashes only\n    const normalizedPath = path.split(sep).join(\"/\");\n    return ig.ignores(normalizedPath);\n  };\n}\nexport function watchDirectory(\n  basePath: string,\n  syncInfo: SyncInfo,\n  onChange: (updatedSyncInfo: SyncInfo) => void,\n) {\n  const ig = getIgnorePatterns(basePath);\n\n  const watcher = chokidar.watch(basePath, {\n    ignored: ig,\n    ignoreInitial: true,\n    awaitWriteFinish: {\n      stabilityThreshold: 500,\n      pollInterval: 600,\n    },\n    ignorePermissionErrors: true,\n    followSymlinks: false,\n    atomic: 600,\n  });\n\n  const handleFileUpdate = async (fullPath: string) => {\n    const relativePath = relative(basePath, fullPath);\n    try {\n      const content = readFileSync(fullPath, \"utf-8\");\n      if (isMatchingBuilderFile(content, syncInfo.snippet)) {\n        const existingFile = syncInfo.writtenFiles.find(\n          (f) => f.path === relativePath,\n        );\n        if (existingFile) {\n          existingFile.code = removeBuilderSignature(content);\n          existingFile.timestamp = Date.now();\n        } else {\n          // New file appeared with matching signature\n          syncInfo.writtenFiles.push({\n            path: relativePath,\n            code: removeBuilderSignature(content),\n            timestamp: Date.now(),\n            name: relativePath.split(\"/\").pop() || \"\",\n          });\n        }\n        syncInfo.timeStamp = Date.now();\n        onChange(syncInfo);\n      }\n    } catch (error) {\n      console.debug(`Error reading file ${fullPath}:`, error);\n    }\n  };\n\n  // Set up event handlers\n  watcher\n    .on(\"add\", async (path) => {\n      log.info(`File added: ${path}`);\n      await handleFileUpdate(path);\n    })\n    .on(\"change\", async (path) => {\n      log.info(`File changed: ${path}`);\n      await handleFileUpdate(path);\n    })\n    .on(\"unlink\", (path) => {\n      log.info(`File deleted: ${path}`);\n      const relativePath = relative(basePath, path);\n      syncInfo.writtenFiles = syncInfo.writtenFiles.filter(\n        (f) => f.path !== relativePath,\n      );\n      syncInfo.timeStamp = Date.now();\n      onChange(syncInfo);\n    })\n    .on(\"unlinkDir\", (path) => {\n      log.info(`Folder deleted: ${path}`);\n      const relativePath = relative(basePath, path);\n      syncInfo.writtenFiles = syncInfo.writtenFiles.filter(\n        (f) => !f.path.startsWith(relativePath),\n      );\n      syncInfo.timeStamp = Date.now();\n      onChange(syncInfo);\n    })\n    .on(\"ready\", () => {\n      console.debug(\"Initial scan complete. Ready for changes.\");\n    })\n    .on(\"error\", (error) => {\n      console.error(`Watcher error: ${error}`);\n    });\n\n  // Handle file moves/renames\n  watcher.on(\"raw\", async (event: string, path, details: any) => {\n    // todo: handle windows\n    if (event === \"rename\") {\n      log.info(`File renamed: ${details?.oldPath} -> ${path}`);\n      const oldPath = details?.oldPath\n        ? relative(basePath, details.oldPath)\n        : undefined;\n      const newPath = path ? relative(basePath, path) : undefined;\n\n      if (oldPath && newPath) {\n        const fileInfo = syncInfo.writtenFiles.find((f) => f.path === oldPath);\n        if (fileInfo) {\n          fileInfo.path = newPath;\n          syncInfo.timeStamp = Date.now();\n          onChange(syncInfo);\n        }\n      }\n    }\n  });\n\n  // Return cleanup function\n  const cleanup = async () => {\n    await watcher.close();\n  };\n\n  process.on(\"SIGINT\", cleanup);\n  process.on(\"SIGTERM\", cleanup);\n\n  return cleanup;\n}\nexport async function setupSyncServer(\n  sys: DevToolsSys,\n  initialSyncInfo?: SyncInfo,\n) {\n  console.log(\"\");\n  intro(bgMagenta(bold(white(\" sync server \"))) + `  ` + dim(pkgVersion));\n\n  sys.debug(\"builder sync server init\");\n  const devTools = await createDevTools(sys);\n  let syncInfo = initialSyncInfo;\n  let cleanupWatcher = () => Promise.resolve();\n\n  if (syncInfo) {\n    setTimeout(() => {\n      cleanupWatcher = watchDirectory(\n        sys.getAppRootDir(),\n        syncInfo!,\n        (updated) => {\n          syncInfo = updated;\n        },\n      );\n    }, 1000);\n  }\n\n  await createDevToolsServer({\n    ...devTools,\n    ensureFigmaImportPage: () => {\n      return Promise.reject(\"Not supported\");\n    },\n    getPastSyncInfo: ({ sessionKey, since }) => {\n      if (!syncInfo || sessionKey !== syncInfo.snippet.sessionKey) {\n        return null;\n      }\n      return {\n        ...syncInfo,\n        hasChanged: syncInfo.timeStamp > since,\n      };\n    },\n    resyncSnippet: async (data) => {\n      await cleanupWatcher(); // Clean up existing watcher\n\n      const newSyncInfo = await syncCommand({\n        path: syncInfo?.pathInput,\n        snippet: data.snippet,\n        cwd: sys.getAppRootDir(),\n      });\n\n      if (newSyncInfo) {\n        syncInfo = newSyncInfo;\n        cleanupWatcher = watchDirectory(\n          sys.getAppRootDir(),\n          syncInfo,\n          (updated) => {\n            syncInfo = updated;\n          },\n        );\n      }\n\n      return syncInfo;\n    },\n\n    getClientId: () => \"builder-sync-cli\",\n\n    closeAppServer: async () => {\n      await cleanupWatcher();\n    },\n\n    restartAppServer: async () => {\n      sys.debug(\"restart server\");\n    },\n\n    enableAppWatch: async (enable) => {\n      return enable;\n    },\n\n    ...sys,\n  });\n}\n\nexport async function syncCommand(\n  opts: AddCliOptions,\n): Promise<SyncInfo | undefined> {\n  const id = opts.snippetId;\n  let snippet = opts.snippet || null;\n\n  if (!snippet && id) {\n    snippet = await fetchSnippet(id);\n  }\n\n  if (!snippet) {\n    cancel(`No snippet found for id ${id}`);\n    return await exit(1);\n  }\n\n  const cwd = process.cwd();\n  const appRootDir = findAppRootDir(cwd) ?? cwd;\n\n  // Check for existing files with same signature\n  const existingFiles = await findBuilderFiles(\n    appRootDir,\n    snippet.contentId,\n    snippet.sessionKey,\n  );\n  const matchingFiles = existingFiles.filter(\n    (f) => f.snippetId === snippet!.id,\n  );\n  log.info(\n    `Found ${matchingFiles.length} matching files for snippet ${snippet.id} in existing files ${existingFiles.length}`,\n  );\n\n  if (matchingFiles.length > 0) {\n    // Found snippet files pre-synced, create syncInfo without writing\n    const latestTimestamp = Math.max(\n      ...matchingFiles.map((f) => f.timestamp || 0),\n    );\n    return {\n      snippet,\n      writtenFiles: matchingFiles,\n      pathInput: findCommonPath(matchingFiles.map((f) => f.path)),\n      timeStamp: latestTimestamp,\n    };\n  }\n\n  const rootPath = suggestRootPath(appRootDir, snippet.framework || \"react\");\n  const pathInput =\n    opts.path ||\n    findCommonPath(existingFiles.map((f) => f.path)) ||\n    (await text({\n      message: \"Where should we copy the files?\",\n      initialValue: rootPath,\n      validate(value) {\n        if (value.length === 0) {\n          return `File path is required!`;\n        }\n        if (value[0] !== \".\") return \"Please enter a relative path.\";\n      },\n    }));\n  if (isCancel(pathInput)) {\n    cancel(\"Cancelled sync\");\n    process.exit(0);\n  }\n\n  // remove older snippet files for in favor of new ones\n  for (const file of existingFiles) {\n    const fullPath = resolve(appRootDir, file.path);\n    try {\n      unlinkSync(fullPath);\n      log.info(`Deleted old file: ${fullPath}`);\n\n      const parentDir = dirname(fullPath);\n      if (readdirSync(parentDir).length === 0) {\n        rmdirSync(parentDir);\n        log.info(`Deleted empty folder: ${parentDir}`);\n      }\n    } catch (error) {\n      log.error(`Error cleaning up file ${fullPath}: ${error}`);\n    }\n  }\n\n  // Write new files and create syncInfo\n  const writtenFiles = await writeFiles(\n    appRootDir,\n    snippet,\n    snippet.files,\n    pathInput,\n    true,\n  );\n  log.success(`All files have been written successfully.`);\n  const latestTimestamp = Math.max(\n    ...writtenFiles.map((f) => f.timestamp || 0),\n  );\n  return {\n    snippet,\n    writtenFiles: writtenFiles.map((f) => ({\n      ...f,\n      code: removeBuilderSignature(f.code),\n    })),\n    pathInput,\n    timeStamp: latestTimestamp || Date.now(),\n  };\n}\n\nfunction removeBuilderSignature(str: string) {\n  if (!str) {\n    return str;\n  }\n\n  // For HTML-style comments\n  const htmlSignatureRegex =\n    /<!--\\s*This code was generated by Builder\\.io\\s*-->\\s*(?:<!--\\s*https:\\/\\/builder\\.io\\/content\\/[a-f0-9]+\\?codeSession=[a-f0-9]+&sid=[a-f0-9]+\\s*-->\\s*)?/;\n\n  // For code-style comments\n  const codeSignatureRegex =\n    /\\/\\*\\*\\s*\\n\\s*\\* This code was generated by Builder\\.io\\s*\\n\\s*\\* https:\\/\\/builder\\.io\\/content\\/[a-f0-9]+\\?codeSession=[a-f0-9]+&sid=[a-f0-9]+\\s*\\n\\s*\\*\\/\\s*/;\n\n  // Try removing HTML-style signature first\n  let cleaned = str\n    .replace(htmlSignatureRegex, \"\")\n    .replace(codeSignatureRegex, \"\");\n  // Remove any leading newlines that might be left over\n  cleaned = cleaned.replace(/^\\n+/, \"\");\n  return cleaned;\n}\n\nfunction findCommonPath(paths: string[]): string {\n  if (paths.length === 0) {\n    return \"\";\n  }\n  if (paths.length === 1) {\n    return `./${paths[0].slice(0, paths[0].lastIndexOf(\"/\") + 1)}`;\n  }\n  // Split paths into segments\n  const segments = paths.map((path) => path.split(\"/\"));\n  const minLength = Math.min(...segments.map((seg) => seg.length));\n  let commonSegments: string[] = [];\n  for (let i = 0; i < minLength; i++) {\n    const segment = segments[0][i];\n    if (segments.every((path) => path[i] === segment)) {\n      commonSegments.push(segment);\n    } else {\n      break;\n    }\n  }\n\n  // Join common segments back into a path\n  return `./${commonSegments.join(\"/\")}`;\n}\n", "import { intro, log, outro } from \"@clack/prompts\";\nimport { bgCyan, bgGreen, bold, cyan, dim, white, yellow } from \"picocolors\";\n\nimport { builderNpxPackage } from \"../common/utils\";\nimport { track } from \"./track\";\nimport { pkgVersion } from \"./version\";\n\nexport function printHelp(subcommand?: string) {\n  track(\"cli help\", { subcommand });\n\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" help \"))) + `  ` + dim(pkgVersion));\n\n  switch (subcommand) {\n    case \"add\":\n    case \"generate\":\n    case \"gen\":\n    case \"g\":\n      intro(\n        `${cyan(\"\u2192\")} ${bold(\"Generate Figma Components\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} figma generate URL [URL ...] `))}\n\nStart the auto-mapping wizard for the Figma Component URLs pasted in.\n\n${yellow(\"Usage:\")}\n  Get the URL by right-clicking on the Figma Component and selecting\n  \"Copy Link\". Be sure to copy the URL from the main component.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--figmaToken\")}     Figma access token for authentication\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--componentName\")}  Name of the component to generate\n  ${cyan(\"--mappingOutput\")}  Output file name for the mapping\n  ${cyan(\"--ci\")}             Run in CI mode without interactive prompts\n  ${cyan(\"--force\")}          Force operation even if there are warnings\n  ${cyan(\"--skipInstallation\")} Skip the package installation step\n  ${cyan(\"--yes\")}            Auto-confirm all prompts`,\n      );\n      break;\n    case \"auth\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Authentication\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} auth `))}\n\nRe-authenticate with Figma and Builder.io.\n\n${yellow(\"Environment Variables:\")}\n  ${cyan(\"BUILDER_PUBLIC_KEY\")}   Your Builder.io public API key\n  ${cyan(\"BUILDER_PRIVATE_KEY\")}  Your Builder.io private API key\n  ${cyan(\"FIGMA_PERSONAL_TOKEN\")} Your Figma personal access token\n\n${yellow(\"Non-Interactive Authentication:\")}\n  Environment variables can be used to skip the interactive authentication process.\n  This is especially useful for CI/CD pipelines or automated workflows.\n\n  Example using environment variables:\n  ${dim('export BUILDER_PRIVATE_KEY=\"your-private-key\"')}\n  ${dim('export FIGMA_PERSONAL_TOKEN=\"your-figma-token\"')}\n  ${dim(`npx ${builderNpxPackage()} figma generate <url> --ci`)}\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--figmaToken\")}     Figma access token for authentication\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\n    \"--force\",\n  )}          Force re-authentication even if already authenticated\n  ${cyan(\"--reset\")}          Clear all stored credentials (logout)\n\n${yellow(\"Learn More:\")}\n  \u2022 Builder.io API keys: https://www.builder.io/c/docs/using-your-api-key#managing-private-keys\n  \u2022 Figma access token: https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens\n  \u2022 CI setup guide: https://www.builder.io/c/docs/integrating-builder-figma\n\n${yellow(\"Subcommands:\")}\n  ${cyan(\"status\")}           Check if you are authenticated and display user/space info\n\n${bgGreen(white(` npx ${builderNpxPackage()} auth status `))}\n\nCheck authentication status and user information.\n\n${yellow(\"Clear Credentials:\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} auth --reset `))}\n\nClear all stored credentials to logout or switch accounts.`,\n      );\n      break;\n\n    case \"publish\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Publish Mappings\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} figma publish `))}\n\nPublish your Figma Mappings to Builder.io.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--ci\")}             Run in CI mode without interactive prompts\n  ${cyan(\"--force\")}          Force publish even if there are warnings\n  ${cyan(\"--verbose\")}        Print output as JSON\n  ${cyan(\"--dryrun\")}         Run without making changes\n  ${cyan(\"--yes\")}            Auto-confirm all prompts\n  ${cyan(\"--clearMappings\")}  Remove all mappings from the space, publishing zero mappings`,\n      );\n      break;\n\n    case \"migrate\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Migrate Mappings\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} figma migrate `))}\n\nMigrate your existing Figma Mappings into the repo as local files.\n\n${yellow(\"Description:\")}\n  Downloads existing Figma Mappings from Builder.io and saves them locally.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--force\")}          Force migration even if there are warnings\n  ${cyan(\"--yes\")}            Auto-confirm all prompts`,\n      );\n      break;\n\n    case \"code\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Code Generation\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} code --url URL `))}\n\nGenerate or modify code based on Figma designs.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--url\")}            URL to start completion from\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--prompt\")}         Prompt text for non-interactive mode\n  ${cyan(\"--workspace\")}      Specify a workspace configuration file for multi-root workspaces\n  ${cyan(\n    \"--mode\",\n  )}           Generation mode - either 'exact' for precise matches or 'creative' for more flexibility\n  ${cyan(\"--cwd\")}            Working directory to run commands from\n  ${cyan(\"--disableMcp\")}     Disable MCP server support\n  ${cyan(\"--privacyMode\")}    Enable privacy mode for codegen (encrypts sensitive data)\n${yellow(\"Configuration Files:\")}\n  ${cyan(\n    \".builderignore\",\n  )}   Add patterns to exclude files from being included in code generation\n  ${cyan(\n    \".builderrules\",\n  )}    Add custom instructions that will be injected into the LLM prompt\n  ${cyan(\n    \".cursorrules\",\n  )}     Cursor's settings are automatically supported for consistent behavior`,\n      );\n      break;\n\n    case \"indexing\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Code Indexing\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} code indexing `))}\n\nIndex your codebase to improve code generation results.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--cwd\")}            Working directory to run commands from`,\n      );\n      break;\n\n    case \"index-repo\":\n    case \"repo-index\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Repository Indexing\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} index-repo `))}\n\nIndex your entire repository to improve code generation results.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--cwd\")}            Working directory to run commands from\n  ${cyan(\"--components\")}     Comma-separated list of specific component names to reindex\n  ${cyan(\"--force\")}          Force reindexing even if no changes detected\n  ${cyan(\"--designSystemName\")} Name of the design system to index\n  ${cyan(\"--designSystemPackage\")} NPM package name to index\n  ${cyan(\"--includeDirectories\")} Comma-separated directories to include in indexing\n\n${yellow(\"Examples:\")}\n  ${cyan(`npx ${builderNpxPackage()} index-repo`)} - Index entire repository\n  ${cyan(`npx ${builderNpxPackage()} index-repo --components \"Button,Input,Card\"`)} - Reindex specific components\n  ${cyan(`npx ${builderNpxPackage()} index-repo --components \"Button\" --force`)} - Force reindex Button component`,\n      );\n      break;\n\n    case \"launch\":\n    case \"fusion\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Fusion Development Server\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} launch -p <port> -c <command> `))}\n\nThis command will:\n1. Run your development server command\n2. Create a proxy server that injects Builder.io scripts into your application on the specified port\n3. Set up an API server to handle Builder.io operations\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"-p, --port\")}    Port number where your application is running\n  ${cyan(\"-c, --command\")} Command to run your development server\n  ${cyan(\"--no-open\")}     Skip automatically opening the browser\n  ${cyan(\"--privacyMode\")} Enable privacy mode for codegen (encrypts sensitive data)\n\n${yellow(\"Example:\")}\n  ${cyan('npx builder.io launch -p 3000 -c \"npm run dev\"')}\n\n${yellow(\"Note:\")}\n  - The proxy runs on port ${cyan(\"48752\")} and the API server on port ${cyan(\n    \"48753\",\n  )}`,\n      );\n      break;\n\n    case \"launch-init\":\n      intro(\n        `${cyan(\"\u2192\")} ${bold(\"Initialize Builder.io Repository\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} init `))}\n\nClone and initialize a repository for use with Builder.io.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--repoFullName\")}    Repository name in format owner/repo\n  ${cyan(\"--branchName\")}      Branch name to clone (required)\n  ${cyan(\"--githubToken\")}     GitHub token for private repositories\n  ${cyan(\"--installCommand\")}  Command to install dependencies (defaults to npm install)`,\n      );\n      break;\n\n    case \"repo-connect\":\n    case \"connect-repo\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Connect Repository to Builder.io\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} connect-repo `))}\n\nConnect your existing git repository to Builder.io Fusion by creating a new project.\n\nThis command will:\n1. Detect your git repository and configuration\n2. Run your project's install command with retry support\n3. Collect and let you select environment variables to include\n4. Gather configuration files (.npmrc, /etc/hosts)\n5. Detect installed tools (node, npm, pnpm, yarn, bun, deno)\n6. Create a new Fusion project with all collected information\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--installCommand\")}  Install command to run (e.g., 'npm install', 'pnpm install')\n  ${cyan(\"--spaceId\")}         Builder.io space ID to use\n  ${cyan(\"--cwd\")}             Working directory to run from\n  ${cyan(\"--dryrun\")}          Run without creating the project (shows configuration only)\n\n${yellow(\"Features:\")}\n  \u2022 Automatic git repository detection\n  \u2022 Monorepo support (detects recommended root path)\n  \u2022 Interactive environment variable selection\n  \u2022 Retry logic for installation failures\n  \u2022 Configuration file collection (.npmrc, hosts)\n  \u2022 Tool version detection for reproducible builds\n\n${yellow(\"Example:\")}\n  ${cyan(`cd /path/to/your/project`)}\n  ${cyan(`npx ${builderNpxPackage()} connect-repo`)}\n  ${cyan(`npx ${builderNpxPackage()} connect-repo --installCommand \"pnpm install\"`)}\n  ${cyan(`npx ${builderNpxPackage()} connect-repo --dryrun`)}\n\n${yellow(\"Note:\")}\n  - Must be run from within a git repository\n  - Creates a new Fusion project with needSetup: true\n  - Environment variables can be selected interactively\n  - Use --dryrun to preview the configuration without creating the project`,\n      );\n      break;\n\n    default:\n      log.info(`${bold(\"Available Commands:\")}\\n`);\n\n      const commands = [\n        {\n          command: \"generate URL [URL ...]\",\n          description: \"Start the auto-mapping wizard for Figma Component URLs\",\n        },\n        {\n          command: \"publish\",\n          description: \"Publish your Figma Mappings to Builder.io\",\n        },\n        {\n          command: \"migrate\",\n          description:\n            \"Migrate existing Figma Mappings into the repo as local files\",\n        },\n        {\n          command: \"auth\",\n          description: \"Authenticate with Builder.io\",\n        },\n        {\n          command: \"auth status\",\n          description: \"Check authentication status and user information\",\n        },\n        {\n          command: \"code\",\n          description: \"Generate or modify code based on Figma designs\",\n        },\n        {\n          command: \"indexing\",\n          description: \"Index your codebase to improve code generation results\",\n        },\n        {\n          command: \"index-repo\",\n          description:\n            \"Index your entire repository to improve code generation results\",\n        },\n        {\n          command: \"code-server\",\n          description:\n            \"Start a development server that provides project file information and code analysis\",\n        },\n        {\n          command: \"launch\",\n          description: \"Launch a development server\",\n        },\n        {\n          command: \"connect-repo\",\n          description: \"Connect your git repository to Builder.io Fusion\",\n        },\n      ];\n\n      commands.forEach(({ command, description }) => {\n        log.info(\n          `${cyan(\"\u2192\")} ${bgGreen(\n            white(` npx ${builderNpxPackage()} figma ${command} `),\n          )}\n   ${dim(description)}\\n`,\n        );\n      });\n\n      log.info(\n        `\\nUse ${cyan(\n          `npx ${builderNpxPackage()} figma help <command>`,\n        )} for detailed help about a command`,\n      );\n  }\n\n  outro(\"bye \uD83D\uDC4B\");\n}\n", "import type {\n  BuilderContent,\n  BuilderElement,\n  Component,\n} from \"@builder.io/sdk\";\nimport type { Message, MessageParam, Attachment } from \"./messages.js\";\nimport type { BuilderModel } from \"./events.js\";\n\nexport type { BuilderContent, BuilderElement, Component };\n\nexport interface CompletionOptions {\n  /**\n   * How this assistant is being used. For example, \"content-editor\"\n   * is used when the assistant is being used in the Builder.io content editor.\n   */\n  assistantType?: string;\n\n  /**\n   * LLM Model identifier to lookup which sdk and model to use.\n   * If not provided the default model will be used.\n   * Note: This is not the Builder.io data model.\n   */\n  modelId?: string;\n\n  /**\n   * The unique LOCAL identifier of the thread to submit the user message to.\n   * This is used to identify the thread with our own id (openai assistant id is different)\n   */\n  id: string;\n\n  /**\n   * The unique OPENAI assistant id of the thread to submit the user message to.\n   * If the assistantThreadId is not provided, a new thread will be created.\n   */\n  assistantThreadId?: string;\n\n  /**\n   * The message history of the conversation, user prompt then assistant response.\n   * The messages are ordered from oldest to newest. The last message in the array\n   * is the message that the user has just sent.\n   */\n  messages: (MessageParam | Message)[];\n\n  /**\n   * Which platform (framework) the the user has choosen to get help with.\n   */\n  platformId?: string;\n\n  /**\n   * The user id of the user sending the message.\n   * This is used to track the user's progress in the conversation.\n   * User id is stored in localStorage for this domain, its not the builder user id.\n   */\n  userId: string;\n\n  /**\n   * The state of the builder editor.\n   */\n  builderState?: BuilderEditorState;\n\n  /**\n   * Additional console logs\n   */\n  debug?: boolean;\n\n  /**\n   * Date.now() timestamp of when the assistant was started.\n   * This is used to calculate the time taken between all events.\n   */\n  startMs?: number;\n  /**\n   * If events should be streamed back throughout the process.\n   *\n   * Setting to `false` will skip any intermediate processing and emitting\n   * events while collecting LLM deltas, but will only emit the final result.\n   *\n   * Defaults to `true`.\n   */\n  stream?: boolean;\n  /**\n   * Provide a system prompt id to lookup a pre-defined system prompt\n   * text sent to the LLM. Must be a pre-defined system prompt id!\n   */\n  systemPromptIds?: {\n    \"content-edit\"?: string;\n  };\n  /**\n   * Option on how this call should handle the conversation thread.\n   *\n   * `persist`:\n   *  - When there is no CompletionOptions `id`, it'll create a new thread id\n   *  - When given an existing `id`, it'll look up the past thread messages and prefix the messages\n   *\n   * `ephemeral`:\n   *  - Creates a new conversation each time, ignoring any existing thread history\n   *  - Will not save the conversation for future use\n   *\n   * Defaults to `persist`\n   */\n  thread?: \"persist\" | \"ephemeral\";\n\n  attachments?: Attachment[];\n}\n\nexport interface BuilderEditorState {\n  /**\n   * The active locale of the builder editor.\n   */\n  activeLocale?: string;\n  /**\n   * The locale of the provided builder content.\n   */\n  contentLocale?: string;\n  /**\n   * Top level Builder content. The data.blocks array contains the BuilderElement.\n   */\n  content?: BuilderContent;\n  /**\n   * Builder custom components.\n   */\n  components?: Component[];\n  /**\n   * Builder design tokens.\n   */\n  designTokens?: Record<string, string>;\n  /**\n   * Builder model. (not the LLM model)\n   */\n  model?: BuilderModel;\n  /**\n   * Other models in the Builder account\n   */\n  otherModels?: BuilderModel[];\n  /**\n   * The URL that the Builder content preview is pointing to.\n   */\n  previewUrl?: string;\n  /**\n   * Selected ids in the builder.\n   */\n  selectedIds?: string[];\n  /**\n   * Builder space id.\n   */\n  spaceId?: string;\n  /**\n   * Builder user id.\n   */\n  userId?: string;\n  /**\n   * Email of the user in the builder.\n   */\n  userEmail?: string;\n  /**\n   * User's jobs\n   */\n  userJobs?: string[];\n  /**\n   * Builder session id.\n   */\n  sessionId?: string;\n  /**\n   * Custom instructions that could be add into the prompt.\n   */\n  customInstructions?: Record<string, string>;\n\n  // A URL to use as design inspiration when generating content\n  styleInspirationURL?: string;\n\n  /**\n   * All targeting attributes of the content.\n   */\n  allTargetingAttributes?: Record<string, any>;\n}\n", "import type { BuilderContent, BuilderElement } from \"@builder.io/sdk\";\nimport type { AssistantMessage, AssistantMessageAction } from \"./messages.js\";\nimport type { AssistantSettings } from \"./settings.js\";\n\nexport type BuilderAssistantEventHandler = (ev: BuilderAssistantEvent) => void;\n\nexport type BuilderAssistantEvent =\n  | AssistantCompletionResultEvent\n  | AssistantErrorEvent\n  | AssistantStreamErrorEvent\n  | AppCloseEvent\n  | AppMessagesClickEvent\n  | AppMessagesGenerationEvent\n  | AppMessageEditCustomInstructionsEvent\n  | AppPromptAbortEvent\n  | AppPromptFocusEvent\n  | AppPromptSubmitEvent\n  | AppReadyEvent\n  | AppSettingsSetEvent\n  | AppThreadNewEvent\n  | AssistantStatsEvent\n  | AssistantThemeEvent\n  | BuilderEditorAuthEvent\n  | BuilderEditorStateEvent\n  | ContentUpdateEvent\n  | ContentApplySnapshotEvent\n  | ModelUndoEvent\n  | ModelRedoEvent\n  | ResultEvent\n  | ThreadCreatedEvent\n  | ThreadMessageCompletedEvent\n  | ThreadMessageCreatedEvent\n  | ThreadMessageDeltaEvent\n  | ThreadMessageFeedbackEvent\n  | ThreadRunStepCreatedEvent\n  | ThreadRunStepDeltaEvent\n  | AppAcceptChangeEvent\n  | AppAcceptRejectEvent\n  | AssistantTrackEvent\n  | AssistantEditorAuthMessage\n  | AppAttachmentTemplateEvent\n  | AppPasteSmartExportEvent\n  | ThreadMessageRetryEvent\n  | AppFigmaImportEvent\n  | AppWebImportEvent\n  | AppMcpServersEvent\n  | AssistantContentInitialEvent\n  | ThreadMessageSummaryEvent\n  | ThreadMessageSummaryCodegenDeltaEvent\n  | ThreadMessageThinkingDeltaEvent\n  | AssistantHeartbeatEvent\n  | ShowUpgradeDialogEvent\n  | AssistantFusionSuggestionEvent\n  | AppNavigateToFusionEvent;\n\nexport interface AssistantCompletionResultEvent {\n  type: \"assistant.result\";\n  data: {\n    content?: BuilderContent;\n    stats?: AssistantStats;\n  };\n  resolveId?: string;\n}\n\nexport interface AssistantError {\n  message: string;\n  status?: number;\n  // any actions associated with the error such as a \"new chat\" button\n  actions?: AssistantMessageAction[];\n}\n\nexport interface AssistantErrorEvent {\n  type: \"assistant.error\";\n  data: AssistantError;\n}\n\nexport interface AssistantStreamErrorEvent {\n  type: \"assistant.stream.error\";\n  data: AssistantError;\n}\n\nexport interface AppFigmaImportEvent {\n  type: \"assistant.app.figmaImport\";\n}\n\nexport interface AppWebImportEvent {\n  type: \"assistant.app.webImport\";\n}\n\nexport interface AppMcpServersEvent {\n  type: \"assistant.app.mcpServers\";\n}\n\nexport interface AppNavigateToFusionEvent {\n  type: \"assistant.app.navigateToFusion\";\n}\n\nexport interface AssistantTrackEvent {\n  type: \"assistant.track\";\n  data: {\n    name: string;\n    properties: Record<string, any>;\n  };\n}\n\nexport interface AssistantThemeEvent {\n  type: \"assistant.app.theme.update\";\n  data: {\n    theme: string;\n  };\n}\n\nexport interface AppCloseEvent {\n  type: \"assistant.app.close\";\n}\n\nexport interface AppMessagesClickEvent {\n  type: \"assistant.app.messages.click\";\n}\n\nexport interface ShowUpgradeDialogEvent {\n  type: \"assistant.app.showUpgradeDialog\";\n}\n\nexport interface AppAcceptChangeEvent {\n  type: \"assistant.app.change.accept\";\n}\nexport interface AppAcceptRejectEvent {\n  type: \"assistant.app.change.reject\";\n}\n\nexport interface AppMessageEditCustomInstructionsEvent {\n  type: \"assistant.app.messages.editCustomInstructions\";\n  data: {\n    hasChatMessages: boolean;\n  };\n}\n\nexport interface AppAttachmentTemplateEvent {\n  type: \"assistant.app.attachment.template\";\n  data: {\n    id: number;\n    name: string;\n  };\n}\n\nexport interface AppPasteSmartExportEvent {\n  type: \"assistant.app.paste.smartExport\";\n  data: {\n    clipboardText: string;\n  };\n}\n\nexport interface AppMessagesGenerationEvent {\n  type: \"assistant.app.messages.generation\";\n  data: {\n    state: GenerationState;\n  };\n}\n\n/**\n * idle: no messages are being generated or queued to be generated\n *\n * queued: messages have been sent to the LLM, but no response has been received yet\n *\n * generating: messages are actively being generated and streaming back to the UI\n */\nexport type GenerationState = \"idle\" | \"queued\" | \"generating\";\n\nexport interface AppPromptAbortEvent {\n  type: \"assistant.app.prompt.abort\";\n}\n\nexport interface AppPromptFocusEvent {\n  type: \"assistant.app.prompt.focus\";\n}\n\nexport interface AppPromptSubmitEvent {\n  type: \"assistant.app.prompt.submit\";\n  data: {\n    prompt: string;\n    attachments: any[];\n  };\n}\n\nexport interface AppReadyEvent {\n  type: \"assistant.app.ready\";\n}\n\nexport interface AppSettingsSetEvent {\n  type: \"assistant.app.settings.set\";\n  data: Partial<AssistantSettings>;\n}\n\nexport interface AppThreadNewEvent {\n  type: \"assistant.app.thread.new\";\n}\n\nexport interface AssistantEditorAuthMessage {\n  type: \"assistant.editor.auth.update\";\n}\n\nexport interface BuilderEditorAuthEvent extends AwaitResultEvent {\n  type: \"assistant.editor.auth\";\n}\n\nexport interface BuilderEditorStateEvent extends AwaitResultEvent {\n  type: \"assistant.editor.state\";\n}\n\nexport interface AwaitResultEvent {\n  resolveId?: string;\n}\n\nexport interface ResultEvent {\n  type: \"assistant.result\";\n  resolveId: string;\n  data: any;\n}\n\nexport interface ContentCreatePatch {\n  parentId: string;\n  insertBeforeId: string;\n  element: BuilderElement;\n}\n\nexport interface ContentApplySnapshot {\n  /**\n   * The id of the BuilderContent to apply the snapshot to\n   */\n  id: string;\n  /**\n   * Each snapshot can be either a full BuilderContent or individual BuilderElements.\n   * Order matters, as the snapshots will be applied in the order they are listed.\n   * The builder app will handle the logic of applying the snapshots in the correct order\n   * and to the right content/elements.\n   */\n  snapshots: (BuilderElement | BuilderContent)[];\n}\n\nexport interface ContentApplySnapshotEvent {\n  type: \"assistant.content.applysnapshot\";\n  data: ContentApplySnapshot;\n}\n\nexport interface ContentUpdateEvent {\n  type: \"assistant.content.update\";\n  data: ContentUpdatePatch[];\n}\n\nexport type ContentUpdatePatch =\n  | ContentTsUpdateComponentPatch\n  | ContentThinkingPatch\n  | ContentCodegenPatch;\n\ninterface ContentPatchBase {\n  id: string;\n  nodeId?: string;\n  builderId?: string;\n  description?: string;\n  value: string;\n  displayValue?: string;\n  ts: number;\n  /**\n   * A change value is considered incomplete until we also parsed it's closing xml tag.\n   */\n  incomplete?: boolean;\n  /**\n   * If there was an error applying the patch, this will contain the error message.\n   */\n  error?: string;\n\n  /**\n   * If `true`, Editor AI attempted to process this patch. It could be that the patch\n   * had invalid syntax or that the LLM made its changes incorrectly. This can be used\n   * to differentiate between a patch that is actively being streamed in, as indicated by\n   * the \"incomplete\" property, and a patch that is has finished streaming and is being\n   * processed.\n   */\n  attemptedProcess?: boolean;\n}\n\nexport interface ContentTsUpdateComponentPatch extends ContentPatchBase {\n  type: \"update_component\";\n}\n\nexport interface ContentThinkingPatch extends ContentPatchBase {\n  type: \"thinking\";\n}\n\nexport interface ContentCodegenPatch extends ContentPatchBase {\n  type: \"codegen-text\";\n}\n\nexport interface AssistantStatsEvent {\n  type: \"assistant.stats\";\n  data: AssistantStats;\n}\n\nexport interface AssistantStats {\n  /**\n   * The unique id of the thread (not the openai threadId)\n   */\n  threadId: string;\n  /**\n   * The unique id of the completion, which is a combination of the user's prompt and assistant's response.\n   */\n  completionId: string;\n  /**\n   * The model id used to generate this completion.\n   */\n  modelId: string;\n  /**\n   * The assistant's response message.\n   */\n  assistantMessage: string;\n  /**\n   * The assistant's summary of what it did. This appears after assistantMessage\n   * as well as any changes it made.\n   */\n  assistantSummary: string;\n  /**\n   * The user's prompt message.\n   */\n  userMessage: string;\n  /**\n   * The index within the thread the assistant message is.\n   * For a first assistant message, the index will be 1 (the user message is index 0).\n   * For a second assistant message, the index will be 3 (the user message is index 2), and so on.\n   */\n  assistantMessageIndex: number;\n  /**\n   * The timestamp (Date.now()) of when the user first submitted their prompt.\n   */\n  userPromptMs: number;\n  /**\n   * The timestamp of the first assistant chunk in the response.\n   */\n  firstChunkMs: number;\n  /**\n   * The timestamp of the last assistant chunk in the response.\n   */\n  lastChunkMs: number;\n  /**\n   * The total number of chunks in the assistant's streamed response.\n   */\n  chunkCount: number;\n  /**\n   * The total number of characters in the generated prompt sent to the LLM.\n   */\n  promptLength: number;\n  /**\n   * The total number of characters in the assistant's response.\n   */\n  completionLength: number;\n  /**\n   * If the user provided custom instructions for the prompt.\n   */\n  hasCustomInstructions: boolean;\n  /**\n   * The deployed version.\n   */\n  version: string;\n  /**\n   * Error message if there was one.\n   */\n  errorMessage?: string;\n  /**\n   * Input tokens\n   */\n  inputTokens?: number;\n  /**\n   * Output tokens\n   */\n  outputTokens?: number;\n  /**\n   * Output tokens\n   */\n  completionCost?: number;\n  /**\n   * Number of streamed snapshots\n   */\n  streamedSnapshots?: number;\n  /**\n   * Number of cached input tokens\n   */\n  cacheInputTokens?: number;\n  /**\n   * Number of cached created tokens\n   */\n  cacheCreatedTokens?: number;\n}\n\nexport interface ModelUndoEvent {\n  type: \"assistant.model.undo\";\n}\n\nexport interface ModelRedoEvent {\n  type: \"assistant.model.redo\";\n}\n\nexport interface BuilderModel {\n  name?: string;\n  friendlyName?: string;\n  description?: string;\n  type?: string;\n  fields?: BuilderModelField[];\n}\n\nexport interface BuilderModelField {\n  name?: string;\n  type?: string;\n  description?: string;\n}\n\nexport interface ThreadMessageFeedbackEvent {\n  type: \"assistant.thread.message.feedback\";\n  data: CompletionResponseFeedback;\n}\n\nexport interface CompletionResponseFeedback {\n  userId: string;\n  builderUserId?: string;\n  builderEmail?: string;\n  responseId?: string;\n  frontendUrl: string | undefined;\n  frontendCommitId: string | undefined;\n  backendDomain?: string;\n  backendCommitId: string | undefined;\n  feedbackText: string;\n  sentiment?: \"positive\" | \"negative\" | \"neutral\";\n  frustration_level?: \"none\" | \"low\" | \"medium\" | \"high\";\n  repeated_attempts?: boolean;\n  confusion_level?: \"none\" | \"low\" | \"medium\" | \"high\";\n  urgency?: \"none\" | \"low\" | \"medium\" | \"high\";\n  satisfaction?: \"none\" | \"low\" | \"medium\" | \"high\";\n}\n\nexport interface ThreadCreatedEvent {\n  type: \"assistant.thread.created\";\n  data: ThreadCreated;\n}\n\nexport interface ThreadCreated {\n  platformId: string;\n  threadId: string;\n  vectorStoreId: string;\n}\n\nexport interface ThreadMessageCreatedEvent {\n  type: \"assistant.thread.message.created\";\n  data: ThreadMessageCreated;\n}\n\nexport interface ThreadMessageCreated {\n  id: string;\n  responseId: string;\n  threadId: string;\n}\n\nexport interface ThreadMessageDeltaEvent {\n  type: \"assistant.thread.message.delta\";\n  data: ThreadMessageDelta;\n}\n\n// use this event to keep a streaming connection alive\nexport interface AssistantHeartbeatEvent {\n  type: \"assistant.heartbeat\";\n}\n\nexport interface ThreadMessageDelta {\n  id: string;\n  text: string;\n}\n\nexport interface ThreadMessageCompletedEvent {\n  type: \"assistant.thread.message.completed\";\n  data: ThreadMessageCompleted;\n}\n\nexport interface ThreadMessageRetryEvent {\n  type: \"assistant.thread.message.retry\";\n}\n\nexport interface ThreadMessageSummaryEvent {\n  type: \"assistant.thread.message.summary.delta\";\n  data: ThreadMessageDelta;\n}\n\nexport interface ThreadMessageSummaryCodegenDeltaEvent {\n  type: \"assistant.thread.message.summary.codegen.delta\";\n  data: {\n    id: string;\n    text: string;\n  };\n}\n\nexport interface ThreadMessageThinkingDeltaEvent {\n  type: \"assistant.thread.message.thinking.delta\";\n  data: {\n    id: string;\n    text: string;\n  };\n}\n\nexport interface ThreadMessageCompleted extends AssistantMessage {\n  platformId: string;\n  threadId: string;\n  commitId?: string;\n}\n\nexport interface ThreadRunStepDeltaEvent {\n  type: \"assistant.thread.run.step.delta\";\n  data: ThreadMessageStepDelta;\n}\n\nexport interface ThreadMessageStepDelta {\n  delta: any;\n}\n\nexport interface ThreadRunStepCreatedEvent {\n  type: \"assistant.thread.run.step.created\";\n}\n\nexport type DeepPartial<T> = T extends object\n  ? {\n      [P in keyof T]?: DeepPartial<T[P]>;\n    }\n  : T;\n\nexport interface AssistantContentInitialEvent {\n  type: \"assistant.content.initial\";\n  data: {\n    code: string;\n  };\n}\n\nexport interface AssistantFusionSuggestionEvent {\n  type: \"assistant.fusion.suggestion\";\n  data: {\n    url: string;\n    message: string;\n  };\n}\n", "import type { ContentUpdatePatch } from \"./events.js\";\n\n/**\n * Message param does not know the id of the message.\n * This is an input message.\n */\nexport type MessageParam =\n  | SystemMessageParam\n  | UserMessageParam\n  | AssistantMessageParam;\n\nexport interface ContentMessageItemText {\n  type: \"text\";\n  text: string;\n  cache?: boolean;\n  citations?: TextCitationParam[] | null;\n  ephemeral?: boolean;\n  thoughtSignature?: string;\n}\n\nexport interface ContentMessageItemImage {\n  type: \"image\";\n  source: ImageBase64Source | ImageUrlSource;\n  cache?: boolean;\n  ephemeral?: boolean;\n}\n\nexport interface ContentMessageItemDocument {\n  type: \"document\";\n  source: DocumentBase64Source | DocumentUrlSource | DocumentTextSource;\n  cache?: boolean;\n  ephemeral?: boolean;\n  title?: string;\n}\n\nexport interface ContentMessageItemVideo {\n  type: \"video\";\n  source: VideoUrlSource;\n  cache?: boolean;\n  ephemeral?: boolean;\n}\n\nexport interface DocumentBase64Source {\n  type: \"base64\";\n  media_type: \"application/pdf\";\n  data: string;\n  original_url?: string;\n}\n\nexport interface DocumentUrlSource {\n  type: \"url\";\n  url: string;\n}\n\nexport interface DocumentTextSource {\n  type: \"text\";\n  media_type: \"text/plain\";\n  data: string;\n}\n\nexport interface ContentMessageItemToolResult {\n  type: \"tool_result\";\n  tool_use_id: string;\n  tool_name?: string;\n  tool_input?: string;\n  title?: string;\n  content: string | (ContentMessageItemText | ContentMessageItemImage)[];\n  is_error?: boolean;\n  cache?: boolean;\n  ephemeral?: boolean;\n}\n\nexport interface ImageBase64Source {\n  type: \"base64\";\n  media_type: \"image/webp\" | \"image/png\" | \"image/jpeg\" | \"image/gif\";\n  data: string;\n  original_url?: string;\n}\n\nexport interface ImageUrlSource {\n  type: \"url\";\n  url: string;\n}\n\nexport interface VideoUrlSource {\n  type: \"url\";\n  url: string;\n  media_type?:\n    | \"video/mp4\"\n    | \"video/mov\"\n    | \"video/mpeg\"\n    | \"video/mpg\"\n    | \"video/avi\"\n    | \"video/wmv\"\n    | \"video/webm\"\n    | \"video/flv\";\n}\n\nexport interface ContentMessageItemThinking {\n  type: \"thinking\";\n  thinking: string;\n  signature: string;\n  source?: \"openai\" | \"gemini\";\n  id?: string;\n}\n\nexport interface ContentMessageItemRedactedThinking {\n  type: \"redacted_thinking\";\n  data: string;\n  source?: \"openai\" | \"gemini\";\n  id?: string;\n}\n\nexport interface ContentMessageItemToolUse {\n  type: \"tool_use\";\n  id: string;\n  provider_id?: string;\n  input: unknown;\n  completion?: string;\n  thoughtSignature?: string;\n  name: string;\n}\n\nexport interface CitationCharLocationParam {\n  cited_text: string;\n\n  document_index: number;\n\n  document_title: string | null;\n\n  end_char_index: number;\n\n  start_char_index: number;\n\n  type: \"char_location\";\n}\n\nexport interface CitationContentBlockLocationParam {\n  cited_text: string;\n\n  document_index: number;\n\n  document_title: string | null;\n\n  end_block_index: number;\n\n  start_block_index: number;\n\n  type: \"content_block_location\";\n}\n\nexport interface CitationPageLocationParam {\n  cited_text: string;\n\n  document_index: number;\n\n  document_title: string | null;\n\n  end_page_number: number;\n\n  start_page_number: number;\n\n  type: \"page_location\";\n}\n\nexport interface CitationWebSearchResultLocationParam {\n  cited_text: string;\n\n  encrypted_index: string;\n\n  title: string | null;\n\n  type: \"web_search_result_location\";\n\n  url: string;\n}\n\nexport type TextCitationParam =\n  | CitationCharLocationParam\n  | CitationPageLocationParam\n  | CitationContentBlockLocationParam\n  | CitationWebSearchResultLocationParam;\n\nexport interface ServerToolUseContent {\n  type: \"web_search_result\";\n  title: string;\n  url: string;\n  page_age: string | null;\n  encrypted_content: string;\n}\n\nexport interface ServerToolUseContentError {\n  error_code:\n    | \"invalid_tool_input\"\n    | \"unavailable\"\n    | \"max_uses_exceeded\"\n    | \"too_many_requests\"\n    | \"query_too_long\";\n\n  type: \"web_search_tool_result_error\";\n}\n\nexport type ServerToolUseContentUnion =\n  | ServerToolUseContent[]\n  | ServerToolUseContentError;\n\nexport interface ContentMessageItemServerToolUse {\n  type: \"server_tool_use\";\n  id: string;\n  name:\n    | \"web_search\"\n    | \"code_execution\"\n    | \"web_fetch\"\n    | \"bash_code_execution\"\n    | \"text_editor_code_execution\";\n  input: unknown;\n  completion?: string;\n  content?: any;\n  cache?: boolean;\n}\n\nexport interface MCPServerURLDefinition {\n  name: string;\n\n  type: \"url\";\n\n  url: string;\n\n  authorization_token?: string | null;\n\n  tool_configuration?: MCPServerToolConfiguration | null;\n\n  token_expires_at?: number | null;\n\n  create_date?: number | null;\n\n  serverId: string;\n\n  disabled: boolean;\n}\n\nexport interface MCPServerToolConfiguration {\n  allowed_tools?: Array<string> | null;\n\n  enabled?: boolean | null;\n}\n\nexport interface ContentMessageItemWebSearchToolResult {\n  content: ServerToolUseContent[] | ServerToolUseContentError;\n  tool_use_id: string;\n  type: \"web_search_tool_result\";\n  cache?: boolean;\n}\n\nexport interface ContentMessageItemMCPToolUse {\n  type: \"mcp_tool_use\";\n  id: string;\n  name: string;\n  input: unknown;\n  server_name: string;\n  cache?: boolean;\n}\n\nexport interface ContentMessageItemContainerUpload {\n  type: \"container_upload\";\n  file_id: string;\n}\n\nexport interface ContentMessageItemMCPToolResult {\n  type: \"mcp_tool_result\";\n  tool_use_id: string;\n  content: string | ContentMessageItemText[];\n  is_error: boolean;\n  cache?: boolean;\n}\n\nexport interface ContentMessageItemCodeExecutionToolResult {\n  type: \"code_execution_tool_result\";\n  tool_use_id: string;\n  content: any;\n  cache?: boolean;\n}\n\nexport type ContentMessageItem =\n  | ContentMessageItemText\n  | ContentMessageItemImage\n  | ContentMessageItemDocument\n  | ContentMessageItemVideo\n  | ContentMessageItemThinking\n  | ContentMessageItemRedactedThinking\n  | ContentMessageItemToolUse\n  | ContentMessageItemToolResult\n  | ContentMessageItemWebSearchToolResult\n  | ContentMessageItemServerToolUse\n  | ContentMessageItemMCPToolUse\n  | ContentMessageItemMCPToolResult\n  | ContentMessageItemContainerUpload\n  | ContentMessageItemCodeExecutionToolResult;\n\nexport type ContentMessage = ContentMessageItem[];\n\nexport interface SystemMessageParam {\n  /**\n   * The contents of the system message.\n   */\n  content: string | ContentMessageItemText[];\n\n  // an id to track messages across a response including multiple retries\n  responseId?: string;\n\n  /**\n   * The role of the messages author, in this case `system`.\n   */\n  role: \"system\";\n\n  id?: string;\n}\n\nexport interface UserMessageParam {\n  /**\n   * The contents of the user message.\n   */\n  content:\n    | string\n    | (\n        | ContentMessageItemText\n        | ContentMessageItemImage\n        | ContentMessageItemDocument\n        | ContentMessageItemVideo\n        | ContentMessageItemToolResult\n      )[];\n\n  // an id to track messages across a response including multiple retries\n  responseId?: string;\n\n  /**\n   * The role of the messages author, in this case `user`.\n   */\n  role: \"user\";\n  id?: string;\n}\n\nexport type AssistantMessageAction = \"new-chat\";\n\nexport interface AssistantMessageParam {\n  /**\n   * The contents of the assistant message.\n   */\n  content: string | ContentMessageItem[];\n  /**\n   * The role of the messages author, in this case `assistant`.\n   */\n  role: \"assistant\";\n\n  // an id to track messages across a response including multiple retries\n  responseId?: string;\n  id?: string;\n  skipDelta?: boolean;\n  /**\n   * A summary of the patches which the assistant has made.\n   * Useful for genai.\n   */\n  patches?: ContentUpdatePatch[];\n  state?: \"error\";\n  /**\n   * Any actions associated with the error such as a \"new chat\" button.\n   * typically used when there is an error.\n   */\n  actions?: AssistantMessageAction[];\n}\n\nexport interface SystemMessage extends SystemMessageParam {\n  id: string;\n}\n\nexport interface UserMessage extends UserMessageParam {\n  id: string;\n}\n\nexport interface AssistantMessage extends AssistantMessageParam {\n  id: string;\n  status?: \"accepted\" | \"rejected\" | \"aborted\";\n  // Optional summary from the LLM that explains why it did\n  summary?: string;\n}\n\nexport interface AssistantActionMessage {\n  /**\n   * The role of the messages author, in this case `assistant`.\n   */\n  role: \"assistant\";\n\n  id: string;\n}\n\n/**\n * Message DOES know the id of the message.\n * This message is after an id has been assigned\n * and is the output message.\n */\nexport type Message = SystemMessage | UserMessage | AssistantMessage;\n\nexport type GeneratingMessage = null | Partial<\n  AssistantActionMessage | AssistantMessage\n>;\n\nexport function getContentText(message: string | ContentMessage) {\n  if (typeof message === \"string\") {\n    return message;\n  }\n  return message\n    .map((item) => (item.type === \"text\" ? item.text : \"\"))\n    .join(\"\");\n}\n\nexport function getContentAttachments(message: string | ContentMessage) {\n  if (typeof message === \"string\") {\n    return [];\n  }\n  return message\n    .filter((item) => item.type === \"image\")\n    .map((item) => item.source);\n}\n\nexport type Attachment =\n  | FileUpload\n  | Template\n  | URL\n  | BuilderContentAttachment\n  | FigmaContentAttachment;\n\nexport interface URL {\n  type: \"url\";\n  value: string;\n}\n\nexport interface FileUpload {\n  type: \"upload\";\n  contentType:\n    | \"image/webp\"\n    | \"image/png\"\n    | \"image/jpeg\"\n    | \"image/gif\"\n    | \"application/pdf\"\n    | \"application/json\"\n    | \"text/plain\";\n  name: string;\n  dataUrl: string;\n  text?: string;\n  size: number;\n  id: string;\n  originalUrl?: string;\n  ephemeral?: boolean;\n}\n\nexport interface Template {\n  type: \"template\";\n  name: string;\n  id: number;\n}\n\nexport interface BuilderContentAttachment {\n  type: \"builder\";\n  html: string;\n}\n\nexport interface FigmaContentAttachment {\n  type: \"figma\";\n  html: string;\n}\n", "export interface AssistantSettings {\n  assistantType?: string;\n  viewId?: string;\n  theme?: \"dark\" | \"light\";\n  allowNoStyleInspiration?: boolean;\n}\n\ninterface IframeSettings extends Partial<AssistantSettings> {\n  local?: boolean;\n  /**\n   * The URL of the assistant.\n   */\n  baseUrl?: string;\n}\n\ntype AssistantSettingsKeys = keyof AssistantSettings;\n\nconst urlParamSettings: AssistantSettingsKeys[] = [\n  \"assistantType\",\n  \"theme\",\n  \"viewId\",\n];\n\nexport function getAssistantUrl(opts: IframeSettings = {}) {\n  const url = new URL(\n    opts.baseUrl ??\n      (opts.local ? \"http://localhost:7242\" : \"https://assistant.builder.io\"),\n  );\n\n  urlParamSettings.forEach((key) => {\n    const value = opts[key];\n    if (typeof value === \"string\" || typeof value === \"boolean\") {\n      url.searchParams.set(key, String(value));\n    }\n  });\n\n  return url.href;\n}\n\nexport function parseAssistantUrlSettings(url: string) {\n  const parsed = new URL(url);\n  const settings: Record<string, string | boolean> = {};\n\n  urlParamSettings.forEach((key) => {\n    const value = parsed.searchParams.get(key);\n    if (value === \"true\" || value === \"false\") {\n      settings[key] = value === \"true\";\n    } else if (value) {\n      settings[key] = value;\n    }\n  });\n\n  return settings as Partial<AssistantSettings>;\n}\n\nexport interface BuilderEditorAuth {\n  spaceId: string;\n  userId: string;\n  authToken: string;\n}\n", "import type { ESMImport } from \"./codegen\";\n\nexport interface RawFigmaJson {\n  documents: any[];\n  document?: any;\n  components?: Record<string, any>;\n  styles?: Record<string, any>;\n  componentSets?: Record<string, any>;\n  schemaVersion?: number;\n}\n\nexport interface UserContext {\n  client: string;\n  clientVersion: string;\n  nodeVersion: string;\n  systemPlatform: string;\n  frameworks: string[];\n  systemEOL: string;\n  systemArch: string;\n  systemShell?: string;\n  inGitRepo?: boolean;\n  [key: string]: string | string[] | boolean | undefined;\n}\n\nexport type ExportType = \"default\" | \"named\";\n\n/**\n * Gets the latest component mappings for a space\n */\nexport interface FigmaMappingsData {\n  id: string;\n  figmaBuilderLinks: FigmaBuilderLink[];\n  framework: string;\n  version?: number;\n  createdDate?: string; // ISO string timestamp or unix timestamp\n  local: boolean;\n  userEmail?: string;\n  remoteUrl?: string;\n}\n\nexport interface FigmaBuilderLink {\n  builderName: string;\n  figmaName: string;\n  figmaKey: string;\n  figmaUrl?: string;\n  inputMapper?: string;\n  originalInputMapper?: string;\n  exportType?: ExportType;\n  importName?: string;\n  importPath?: string;\n  source: string;\n  loc?: string;\n  imports?: ESMImport[];\n  importStrings?: string[];\n}\n\nexport interface FigmaMapperFile {\n  filePath: string;\n  content: string;\n}\n\nexport interface PublishedMapping {\n  figmaBuilderLinks: FigmaBuilderLink[];\n  mapperFiles: FigmaMapperFile[];\n\n  // Meta data\n  remoteUrl?: string;\n  defaultBranch?: string;\n  currentBranch?: string;\n  commit?: string;\n  spaceKind?: string;\n\n  userContext?: UserContext;\n}\n\nexport interface FigmaComponentInfo {\n  documentName: string;\n  key: string;\n  tree?: string;\n  jsx?: string;\n  type: string;\n  name: string;\n  exportJson?: any;\n  inputs: FigmaComponentInput[];\n  description: string;\n  documentationLinks: string[];\n  instanceId: string;\n}\n\nexport interface FigmaComponentInput {\n  id: string;\n  name: string;\n  value?: any;\n  type: string;\n  baseType: \"text\" | \"variant\" | \"boolean\" | \"slot\";\n  variantOptions?: string[];\n  isDefault: boolean;\n  ref?: string;\n}\n", "import type { Attachment, ContentMessageItemToolResult } from \"./messages\";\n\nimport type { BuilderContent } from \"./completion\";\n\nimport type { Options as PrettierOptions } from \"prettier\";\nimport type { UserContext } from \"./mapping\";\nimport type { ForcedBackup, SetupDependency } from \"./projects\";\nimport type { Feature } from \"./features\";\n\n// Define the import type as a union of literal types.\nexport type ImportType = \"named\" | \"default\";\n\n// Define an interface for the import descriptor.\nexport interface ESMImport {\n  importName: string; // e.g. \"Button\"\n  importPath: string; // e.g. \"path\"\n  importType: ImportType; // Either 'named' or 'default'\n}\n\n// Support both structured ESMImport objects and plain strings\nexport type ImportMetadata = ESMImport | string;\n\nexport interface ProjectFile {\n  filePath: string;\n  content?: string;\n  importance?: number;\n  dropReason?: string;\n  wasIncluded?: boolean;\n  virtual?: boolean;\n}\n\nexport interface CustomInstruction {\n  id: string;\n  name: string;\n  content: string;\n  type?: \"always\" | \"agent-mode\";\n  filePath?: string;\n  glob?: string;\n  description?: string;\n}\n\nexport type CodeGenFramework =\n  | \"react\"\n  | \"html\"\n  | \"mitosis\"\n  | \"react-native\"\n  | \"angular\"\n  | \"vue\"\n  | \"svelte\"\n  | \"qwik\"\n  | \"solid\"\n  | \"marko\"\n  | \"swiftui\"\n  | \"jetpack-compose\"\n  | \"flutter\";\n\nexport type CodeGenStyleLibrary =\n  | \"tailwind\"\n  | \"tailwind-precise\"\n  | \"emotion\"\n  | \"styled-components\"\n  | \"styled-jsx\"\n  | \"react-native\"\n  | undefined;\n\nexport type CompletionStopReason =\n  | \"max_tokens\"\n  | \"stop_sequence\"\n  | \"tool_use\"\n  | \"end_turn\"\n  | \"content_filter\"\n  | \"error\"\n  | \"aborted\"\n  | \"pause_turn\"\n  | \"refusal\"\n  | \"model_context_window_exceeded\"\n  | null;\n\nexport interface ViewPathToolInput {\n  file_path: string;\n  view_range?: [number, number];\n  // Quality-v4\n  offset?: number | null;\n  limit?: number | null;\n}\n\nexport interface GlobSearchToolInput {\n  pattern: string;\n}\n\nexport interface GrepSearchToolInput {\n  query: string;\n  include_glob?: string | null;\n  exclude_glob?: string | null;\n}\n\nexport interface GetRuleToolInput {\n  name: string;\n}\n\nexport interface GetStyleInspirationToolInput {\n  url: string;\n}\n\nexport interface GetBuildOutputToolInput {}\nexport interface DevServerControlInput {\n  restart?: boolean | null;\n  get_logs?: boolean | null;\n  set_proxy_port?: number | null;\n  set_dev_command?: string | null;\n  set_and_run_setup_command?: string | null;\n  set_env_variable?: [string, string] | null;\n}\n\nexport interface BashToolInput {\n  command?: string | null;\n  timeout?: number | null;\n  description?: string | null;\n  restart?: boolean | null;\n}\n\nexport interface PowerShellToolInput {\n  command?: string | null;\n  timeout?: number | null;\n  description?: string | null;\n  restart?: boolean | null;\n}\n\nexport interface WebSearchToolInput {\n  query: string;\n}\n\nexport interface WriteFileInput {\n  title: string;\n  file_path: string;\n  content: string;\n}\n\nexport interface SearchReplaceInput {\n  title: string;\n  file_path: string;\n  old_str: string;\n  new_str: string;\n  replace_all?: boolean;\n  apply_with_error?: boolean;\n}\n\nexport interface MultiSearchReplaceInput {\n  title: string;\n  file_path: string;\n  edits: {\n    old_str: string;\n    new_str: string;\n    replace_all?: boolean;\n  }[];\n  apply_with_error?: boolean | null;\n}\n\nexport interface FindMediaToolInput {\n  query: string;\n  type: \"image\" | \"video\";\n  orientation?: \"landscape\" | \"portrait\" | \"square\" | null;\n  hex_color?: string | null;\n}\n\nexport interface MemoryToolInput {\n  memory: string;\n  memory_id?: string | null;\n  when?: string;\n}\n\nexport interface AskUserQuestionToolInput {\n  questions: {\n    question: string;\n    header: string;\n    options: {\n      label: string;\n      description: string;\n    }[];\n    multiSelect?: boolean;\n  }[];\n  answers?: Record<string, string>;\n}\n\nexport interface AgentToolInput {\n  description: string;\n  prompt: string;\n}\n\nexport interface ListDirToolInput {\n  path: string;\n}\n\nexport interface RevertToolInput {\n  checkpoint_id: string;\n}\n\nexport interface TodoReadToolInput {}\n\nexport interface TodoWriteToolInput {\n  mode: \"replace\" | \"patch\";\n  todos: {\n    content: string;\n    status: \"pending\" | \"in_progress\" | \"completed\";\n    id: string;\n  }[];\n}\n\nexport interface BuilderEditToolInput {\n  filePath: string;\n  old_str: string;\n  new_str: string;\n}\n\nexport interface GetScreenshotToolInput {\n  url: string;\n  selector?: string;\n  width?: number;\n  height?: number;\n}\n\nexport interface WebFetchToolInput {\n  url: string;\n  prompt?: string;\n  include_styles?: boolean;\n}\n\nexport interface SetImportantFilesToolInput {\n  important_files: {\n    file_path: string;\n    relevance: \"high\" | \"medium\" | \"low\";\n    offset?: number;\n    limit?: number;\n  }[];\n}\n\nexport interface ExitPlanModeToolInput {\n  plan: string;\n}\n\nexport interface CodeGenToolMap {\n  view_path: ViewPathToolInput;\n  glob_search: GlobSearchToolInput;\n  grep_search: GrepSearchToolInput;\n  get_rule: GetRuleToolInput;\n  get_style_inspiration: GetStyleInspirationToolInput;\n  get_screenshot: GetScreenshotToolInput;\n  dev_server_control: DevServerControlInput;\n  bash: BashToolInput;\n  powershell: PowerShellToolInput;\n  web_search: WebSearchToolInput;\n  write_file: WriteFileInput;\n  search_replace_file: SearchReplaceInput;\n  find_media: FindMediaToolInput;\n\n  // Quality-v4\n  Read: ViewPathToolInput;\n  Write: WriteFileInput;\n  Edit: SearchReplaceInput;\n  ReadRule: GetRuleToolInput;\n  GetStyleInspiration: GetStyleInspirationToolInput;\n  GetScreenshot: GetScreenshotToolInput;\n  MultiEdit: MultiSearchReplaceInput;\n  FindMedia: FindMediaToolInput;\n  Memory: MemoryToolInput;\n  Bash: BashToolInput;\n  PowerShell: PowerShellToolInput;\n  WebSearch: WebSearchToolInput;\n  AskUserQuestion: AskUserQuestionToolInput;\n  Agent: AgentToolInput;\n  Grep: GrepSearchToolInput;\n  Glob: GlobSearchToolInput;\n  DevServerControl: DevServerControlInput;\n  Revert: RevertToolInput;\n\n  TodoRead: TodoReadToolInput;\n  TodoWrite: TodoWriteToolInput;\n  BuilderEdit: BuilderEditToolInput;\n  LS: ListDirToolInput;\n  WebFetch: WebFetchToolInput;\n  SetImportantFiles: SetImportantFilesToolInput;\n  ExitPlanMode: ExitPlanModeToolInput;\n}\n\nexport type CodeGenTools = keyof CodeGenToolMap;\n\nexport type AllCodeGenTools = CodeGenTools | \"web_search\";\n\nexport type SessionMode = \"planning\" | \"normal\";\n\nexport type CodeGenMode =\n  | \"quality\"\n  | \"quality-v3\"\n  | \"quality-v4\"\n  | \"quality-v4-agent\";\n\nexport type BaseCodeGenPosition =\n  | \"fusion\"\n  | \"editor-ai\"\n  | \"repo-indexing\"\n  | \"cli\"\n  | \"create-app-firebase\"\n  | \"create-app-lovable\"\n  | \"builder-code-panel\";\n\nexport type CodeGenPosition =\n  | BaseCodeGenPosition\n  | `${BaseCodeGenPosition}-agent`;\n\nexport interface RepoIndexingConfig {\n  designSystems: string[];\n}\n\nexport interface LocalMCPTools {\n  name: string;\n  description?: string;\n  inputSchema?: any;\n  serverName: string;\n}\n\nexport type CodeGenCategory =\n  | `repair-${string}`\n  | `user-normal`\n  | `user-figma`\n  | `user-pdf`\n  | `user-image`\n  | `background-${string}`\n  | `indexing-${string}`;\nexport interface CodeGenInputOptions {\n  position: string;\n  eventName?: string;\n  sessionId: string;\n\n  codeGenMode?: CodeGenMode;\n  sessionMode?: SessionMode;\n  url?: string;\n  diffActions?: boolean;\n  planningPrompt?: boolean;\n  customInstructions?: CustomInstruction[];\n  userPrompt?: string;\n  ephemeralUserPrompt?: string;\n  uiContextPrompt?: string;\n  displayUserPrompt?: string;\n  files?: ProjectFile[];\n  rerankFiles?: number;\n  toolResults?: ContentMessageItemToolResult[];\n  attachments?: Attachment[];\n  beforeCommit?: string;\n  workingDirectory?: string;\n  encryptKey?: string;\n  modelOverride?: string;\n  redactUserMessages?: boolean;\n  redactLLMMessages?: boolean;\n  environmentVariables?: EnvironmentVariable[];\n  dirtyEnvironmentVariables?: boolean;\n  // Code options\n  builderContent?: BuilderContent;\n  framework?: CodeGenFramework;\n  styleLibrary?: CodeGenStyleLibrary;\n  typescript?: boolean;\n  userContext?: UserContext;\n  aclPolicy?: AclPolicy;\n  repoIndexingConfig?: RepoIndexingConfig;\n  recommendedRoot?: string;\n  enabledTools?: CodeGenTools[];\n  enabledMCPs?: string[];\n  /**\n   * Local MCP tool definitions from stdio servers (CLI-side only)\n   * These tools will be executed on the client side and passed through from the server\n   */\n  localMCPTools?: LocalMCPTools[];\n\n  maxAgentLoops?: number;\n  maxAgentTiming?: number;\n  // Options\n  /**\n   * Maximum output tokens allowed in the LLM response. This will set the maximum\n   * token output for the LLM.\n   */\n  maxTokens?: number;\n  maxPages?: number;\n  autoContinue?: number;\n  isManualContinue?: boolean;\n  llmSuggestions?: boolean;\n  conclusionText?: boolean;\n  mcpServers?: boolean;\n  pingEvents?: boolean;\n  forceCompact?: boolean;\n  hadPagination?: boolean;\n  category?: CodeGenCategory;\n  metadata?: Record<string, any>;\n\n  searchResponse?: any | null;\n\n  // Prettier options\n  prettierConfig?: PrettierOptions;\n\n  // Role\n  role?: \"user\" | \"agent\";\n  user?: UserSource;\n\n  // Context\n  projectId?: string;\n  branchName?: string;\n\n  /** @deprecated */\n  prevId?: string;\n  /** @deprecated */\n  vcpId?: string;\n  /** @deprecated */\n  repair?: boolean;\n}\n\nexport type CodeGenErrorCodes =\n  | \"credits-limit-daily\"\n  | \"credits-limit-monthly\"\n  | \"credits-limit-other\"\n  | \"cli-genetic-error\"\n  | \"git-update-error\"\n  | \"prompt-too-long\"\n  | \"context-too-long\"\n  | \"abrupt-end\"\n  | \"unknown\"\n  | \"failed-recover-state\"\n  | \"ask-to-continue\"\n  | \"bad-initial-url\"\n  | \"invalid-last-message\"\n  | \"corrupted-session\"\n  | \"assertion\"\n  | \"rate-limit\"\n  | \"unknown-design-system\";\n\nexport interface CodegenUsage {\n  total: number;\n  fast: number;\n  quality: number;\n  features: Feature[];\n  limits: {\n    aiGeneration: number;\n    aiGenerationContextWindow: number;\n  };\n}\n\nexport interface PromptSuggestion {\n  type:\n    | \"info\"\n    | \"missing-imports\"\n    | \"lazy-code\"\n    | \"no-file-for-diff\"\n    | \"diff-before-read\"\n    | \"syntax-error\"\n    | \"llm-suggested\"\n    | \"binary-file\"\n    | \"diff-apply\"\n    | \"acl-policy-violation\";\n\n  filePath?: string;\n  line?: number;\n  importance: \"high\" | \"medium\" | \"low\" | \"info\";\n  column?: number;\n  summary: string;\n  prompt: string;\n}\n\nexport interface ActionItem {\n  type:\n    | \"file\"\n    | \"file-drop\"\n    | \"text\"\n    | \"diff\"\n    | \"thinking\"\n    | \"tool\"\n    | \"suggestion\"\n    | \"tool_result\"\n    | \"server_tool_result\";\n  id?: string;\n  content: string;\n  filePath?: string;\n  artifactTitle?: string;\n  actionTitle?: string;\n  synthetic?: boolean;\n  incomplete?: boolean;\n  suggestions?: PromptSuggestion[];\n  errors?: string[];\n}\n\nexport interface RepoInfo {\n  remoteUrl: string;\n  defaultBranch: string;\n  currentBranch: string;\n  commit: string;\n}\n\nexport interface CodebaseSearchOptions {\n  repoInfo?: RepoInfo;\n  query: string;\n  selectedFiles?: string[];\n  sessionId: string;\n  files?: string[];\n  packageJson?: string;\n  limit?: number;\n  includeContent?: boolean;\n}\n\nexport interface CodebaseSearchResponse {\n  id: string;\n  relevantPaths: string[];\n  grepQueries: string[];\n  streamMeta: any;\n  ranked: RankedResult[];\n}\n\nexport interface RankedResult {\n  index: number;\n  filePath: string;\n  startIndex: number;\n  endIndex: number;\n  score: number;\n  id: string;\n  content?: string;\n}\n\nexport interface GenerateCompletionStepThinking {\n  type: \"thinking\";\n}\n\nexport interface FileInfo {\n  filePath: string;\n  size: number;\n  isCustomInstruction: boolean;\n}\n\nexport interface GenerateCompletionStepUserInput {\n  type: \"user-input\";\n  prompt: string;\n  files: FileInfo[];\n}\n\nexport interface GenerateCompletionStepPlanning {\n  type: \"planning\";\n  content: string;\n}\n\nexport interface GenerateCompletionStepUser {\n  type: \"user\";\n  displayPrompt: string | undefined;\n  attachments?: Array<Attachment>;\n  id: string;\n  user: UserSource;\n  role: \"user\" | \"agent\";\n  compacting: boolean;\n}\n\nexport interface GenerateCompletionStepFile {\n  type: \"file\";\n  filePath: string;\n  content: string;\n  title: string;\n  id: string;\n  errors?: string[];\n}\n\nexport interface GenerateCompletionStepDiff {\n  type: \"diff\";\n  filePath: string;\n  content: string;\n  title: string;\n  id: string;\n  errors?: string[];\n}\n\nexport interface GenerateCompletionStepTool {\n  type: \"tool\";\n  name: string;\n  id: string;\n  content: string;\n}\n\nexport interface GenerateCompletionStepToolResult {\n  type: \"tool_result\";\n  result: ContentMessageItemToolResult;\n}\n\nexport interface GenerateCompletionStepText {\n  type: \"text\";\n  content: string;\n}\n\nexport interface GenerateCompletionStepDone {\n  type: \"done\";\n  id: string;\n  applyResults: ApplyActionsResult[];\n  actions: ActionItem[];\n  creditsUsed: number;\n  sessionUsage: number;\n  model: string;\n  usage: CodegenUsage | undefined;\n  url?: string;\n  promptVersion: string;\n  stopReason: CompletionStopReason;\n  hasChanges: boolean;\n}\n\nexport interface GenerateCompletionStepFusionConfigPatch {\n  type: \"fusion-config-patch\";\n  patch: Partial<FusionConfig>;\n}\n\nexport interface GenerateCompletionStepStart {\n  type: \"start\";\n  name: string;\n  id: string | undefined;\n  title: string;\n  content: string;\n  filePath?: string;\n}\n\nexport interface GenerateCompletionStepDelta {\n  type: \"delta\";\n  name: string;\n  delta: string;\n}\n\nexport interface GenerateCompletionStepError {\n  type: \"error\";\n  id?: string;\n  code: CodeGenErrorCodes;\n  stopReason?: \"error\" | \"limit\";\n  metadata?: any;\n  message: string;\n  restoreCredits?: number;\n  usage?: CodegenUsage;\n  contextPrompt?: string;\n}\n\nexport interface GenerateCompletionStepContinue {\n  type: \"continue\";\n  id: string;\n  url: string;\n  autoContinue: boolean;\n}\n\nexport type DevCommandState =\n  | \"running\"\n  | \"stopped\"\n  | \"starting\"\n  | \"failed\"\n  | \"unset\";\n\nexport type SetupCommandState =\n  | \"not-installed\"\n  | \"installing\"\n  | \"installed\"\n  | \"install-failed\"\n  | \"install-aborted\";\n\nexport type HttpServerState =\n  | \"ok-2xx\"\n  | \"error-4xx\"\n  | \"error-5xx\"\n  | \"error-fetch\"\n  | \"stopped\"\n  | \"connecting\";\n\nexport interface CodeGenHealthStatus {\n  devServerState: DevCommandState;\n  setupState: SetupCommandState;\n  httpServerState: HttpServerState;\n  proxyServer: string | undefined;\n  devCommand: string | undefined;\n  setupCommand: string | undefined;\n  hasMergeConflict: boolean;\n  logs: string | undefined;\n  prompt: string;\n  message: string;\n}\n\nexport interface SuggestedActionBase {\n  level: \"info\" | \"warning\" | \"error\";\n  canAutoApply: boolean;\n  actionButtonText: string;\n  message: string;\n  userMessage: GenerateUserMessage;\n}\n\nexport interface SuggestedActionBuildError extends SuggestedActionBase {\n  type: \"build-error\";\n  healthStatus: CodeGenHealthStatus;\n}\n\nexport type SuggestedAction = SuggestedActionBuildError;\n\nexport interface GenerateCompletionStepWaitForInput {\n  type: \"wait-for-input\";\n  state: GenerateCompletionState;\n  suggestion?: SuggestedAction;\n  sessionMode: SessionMode;\n  hasPlanToApply: boolean;\n}\n\nexport type GenerateCompletionStepBuilderAction =\n  | GenerateCompletionStepBuilderActionRefresh\n  | GenerateCompletionStepBuilderActionOpenPath\n  | GenerateCompletionStepBuilderActionMCPConnect;\n\nexport interface GenerateCompletionStepBuilderActionRefresh {\n  type: \"builder-action\";\n  action: \"refresh\";\n  metadata: {};\n}\n\nexport interface GenerateCompletionStepBuilderActionOpenPath {\n  type: \"builder-action\";\n  action: \"open-path\";\n  metadata: {\n    path: string;\n  };\n}\n\nexport interface GenerateCompletionStepBuilderActionMCPConnect {\n  type: \"builder-action\";\n  action: \"mcp-connect\";\n  metadata: {\n    mcpServer: string;\n  };\n}\n\nexport interface GenerateCompletionStepAbort {\n  type: \"user-abort\";\n  hasContinueMessage: boolean;\n}\n\nexport interface GenerateCompletionStepRestore {\n  type: \"restore\";\n  location: \"before\" | \"after\";\n  files: string[];\n  lastCompletionId: string | undefined;\n}\n\nexport type GenerateCompletionState =\n  | \"unknown\"\n  | \"initial-with-url\"\n  | \"initial-without-url\"\n  | \"generating\"\n  | \"success\"\n  | \"abort\"\n  | \"error\"\n  | \"close\"\n  | \"replay\";\n\nexport interface GenerateCompletionStepState {\n  type: \"state\";\n  abortable: boolean;\n  previousState: GenerateCompletionState;\n  newState: GenerateCompletionState;\n}\n\nexport interface GenerateCompletionStepDevServerState {\n  type: \"dev-server\";\n  devServerState: DevCommandState;\n  setupState: SetupCommandState;\n  httpServerState: HttpServerState;\n  devCommand: string | undefined;\n  setupCommand: string | undefined;\n  proxyServer: string | undefined;\n}\n\nexport interface GenerateCompletionStepGit {\n  type: \"git\";\n  isSessionDirty: boolean;\n  hasGeneratingPlaceholder: boolean;\n  remoteBranchExists: boolean;\n  canPush: boolean;\n  canPull: boolean;\n  canSync: boolean;\n  ahead: number;\n  behind: number;\n  commitMode: CommitMode;\n  hasMergeConflict: boolean;\n  currentCommit: string;\n  currentBranch: string;\n  remoteBranch: string;\n}\n\nexport interface GenerateCompletionStepClose {\n  type: \"close\";\n}\n\nexport interface GenerateCompletionStepStdio {\n  type: \"stdio\";\n  id: string;\n  command: string;\n  stream: \"stdout\" | \"stderr\";\n  source: \"run-command\" | \"tool-command\" | \"setup-command\";\n  content: string;\n}\n\nexport interface GenerateCompletionStepBatch {\n  type: \"batch\";\n  steps: GenerateCompletionStep[];\n}\n\nexport interface GenerateCompletionStepSession {\n  type: \"session\";\n  title: string | undefined;\n  beforeCommit: string | undefined;\n  createdUnixTime: number;\n  updatedUnixTime: number;\n  id: string;\n  turns: number;\n  lastCompletionId: string | undefined;\n  sessionMode: SessionMode;\n}\n\nexport interface GenerateCompletionStepServerToolResult {\n  type: \"server_tool_result\";\n  content: any;\n  title: string;\n  id: string;\n}\n\nexport interface GenerateCompletionStepAgent {\n  type: \"agent\";\n  id: string;\n  step: GenerateCompletionStep;\n}\n\nexport interface GenerateCompletionStepToolCallRequest {\n  type: \"tool-call-request\";\n  id: string;\n  name: string;\n  input: any;\n}\n\nexport interface GenerateCompletionStepTerminals {\n  type: \"terminals\";\n  terminals: CodegenApiTerminal[];\n}\n\nexport type GenerateCompletionStep = { timestamp?: number } & (\n  | GenerateCompletionStepPlanning\n  | GenerateCompletionStepStart\n  | GenerateCompletionStepDelta\n  | GenerateCompletionStepUser\n  | GenerateCompletionStepFile\n  | GenerateCompletionStepDiff\n  | GenerateCompletionStepTool\n  | GenerateCompletionStepError\n  | GenerateCompletionStepContinue\n  | GenerateCompletionStepWaitForInput\n  | GenerateCompletionStepAbort\n  | GenerateCompletionStepDone\n  | GenerateCompletionStepUserInput\n  | GenerateCompletionStepText\n  | GenerateCompletionStepRestore\n  | GenerateCompletionStepState\n  | GenerateCompletionStepStdio\n  | GenerateCompletionStepSession\n  | GenerateCompletionStepServerToolResult\n  | GenerateCompletionStepGit\n  | GenerateCompletionStepBuilderAction\n  | GenerateCompletionStepToolResult\n  | GenerateCompletionStepFusionConfigPatch\n  | GenerateCompletionStepToolCallRequest\n  | GenerateCodeEventMCPStatus\n  | GenerateCodeEventMCPAuthRequired\n  | GenerateCompletionStepDevServerState\n  | GenerateCompletionStepAgent\n  | GenerateCompletionStepBatch\n  | GenerateCompletionStepTerminals\n);\n\nexport interface ApplyActionsResult {\n  filePath: string;\n  addedLines: number;\n  removedLines: number;\n  action: \"create\" | \"update\" | \"delete\";\n  content?: string;\n  oldContent?: string;\n}\n\nexport type UserSourcePermission =\n  | \"editCode\"\n  | \"modifyMcpServers\"\n  | \"modifyProjectSettings\"\n  | \"createBranches\"\n  | \"sendPullRequests\"\n  | \"view\";\nexport interface UserSourceBase {\n  role: \"user\" | \"agent\";\n  principals?: string[]; // teams/roles like [\"developer\", \"admin\"]\n  permissions?: UserSourcePermission[];\n}\n\nexport interface UserSourceBuilder extends UserSourceBase {\n  source: \"builder.io\";\n  userId?: string;\n  userName?: string;\n  userEmail?: string;\n  photoURL?: string;\n}\n\nexport interface UserSourceGithub extends UserSourceBase {\n  source: \"github\";\n  userName: string;\n  userEmail?: string;\n  link?: string;\n}\n\nexport interface UserSourceGitlab extends UserSourceBase {\n  source: \"gitlab\";\n  userName: string;\n  link?: string;\n}\n\nexport interface UserSourceAzure extends UserSourceBase {\n  source: \"azure\";\n  userName: string;\n  link?: string;\n}\n\nexport interface UserSourceBitbucket extends UserSourceBase {\n  source: \"bitbucket\";\n  userName: string;\n  link?: string;\n}\n\nexport interface UserSourceAgent extends UserSourceBase {\n  source: \"agent\";\n}\n\nexport type UserSource =\n  | UserSourceBuilder\n  | UserSourceGithub\n  | UserSourceGitlab\n  | UserSourceAzure\n  | UserSourceBitbucket\n  | UserSourceAgent;\n\nexport interface GenerateUserMessage {\n  user?: UserSource;\n  userPrompt: string;\n  uiContextPrompt?: string;\n  ephemeralUserPrompt?: string;\n  displayPrompt?: string;\n  files?: string[];\n  includeBaseFiles?: boolean;\n  skipSearch?: boolean;\n  attachments?: Attachment[];\n  logsCheckpoint?: boolean;\n  dropAbortedPrompt?: boolean;\n  modelOverride?: string;\n  maxCompletions?: number;\n  isManualContinue?: boolean;\n  category?: CodeGenCategory;\n  metadata?: Record<string, any>;\n  autoPush?: \"force-push\" | \"merge-push\" | \"ff-push\" | \"none\";\n  enabledMCPs?: string[];\n  sessionMode?: SessionMode;\n  queue?: boolean;\n  /** @deprecated */\n  repair?: boolean;\n}\n\nexport interface UserInput {\n  userMessage: GenerateUserMessage | undefined;\n  userPrompt: string;\n  attachments: Attachment[];\n  files: ProjectFile[];\n  searchResponse: CodebaseSearchResponse | null;\n  rerankFiles?: number;\n  mostRelevantFile: string | null;\n  toolResults: ContentMessageItemToolResult[];\n  user: UserSource;\n  patchFusionConfig?: Partial<FusionConfig> | undefined;\n  modelOverride?: string;\n  category?: CodeGenCategory;\n  enabledMCPs?: string[];\n  /** @deprecated */\n  repair?: boolean;\n}\n\nexport interface CodegenTurn {\n  state: \"running\" | \"done\" | \"error\";\n  unixTime: number;\n  completionId: string;\n  title: string;\n  nextUrl: string | undefined;\n  user: UserSource;\n  creditsUsed: number;\n  actions: ActionItem[];\n  sentiment: \"positive\" | \"negative\" | \"undo\" | undefined;\n  applyResults: ApplyActionsResult[];\n  userMessage: GenerateUserMessage | undefined;\n  beforeCommit: string | undefined;\n  afterCommit: string | undefined;\n  lastCommit: string | undefined;\n  cachedToolResults?: ContentMessageItemToolResult[];\n  autoContinue: boolean;\n}\n\nexport interface GetSessionTurnsResult {\n  turns: CodegenTurn[];\n  allIds: string[];\n  lastCompletionId: string | undefined;\n  sessionId: string;\n  initialUrl: string | undefined;\n  beforeCommit: string | undefined;\n  title: string | undefined;\n  createdUnixTime: number | undefined;\n  updatedUnixTime: number | undefined;\n  canLoadMore: boolean;\n  sessionMode?: SessionMode;\n}\n\nexport interface CodegenFeedback {\n  id: string;\n  feedbackText?: string;\n  feedbackSentiment?: string;\n  framework?: string;\n  acceptedLines?: number;\n  beforeCommit?: string;\n  afterCommit?: string;\n  linesOfCodeAdded?: number;\n  linesOfCodeRemoved?: number;\n  commitFailed?: boolean;\n  position?: CodeGenPosition;\n}\n\nexport interface CodegenFinalize {\n  sessionId: string;\n  completionId?: string;\n  projectId?: string;\n  branchName?: string;\n  userCompletionId?: string;\n  beforeCommit?: string;\n  afterCommit?: string;\n  lastCommit?: string;\n  commitFailed?: boolean;\n}\n\nexport interface CodegenSetLastCompletion {\n  sessionId: string;\n  lastCompletionId: string | undefined;\n}\n\nexport interface GenerateCodeEventDone {\n  type: \"done\";\n  unixTime: number;\n  stopReason: CompletionStopReason;\n  id: string;\n  actionTitle: string;\n  content?: string;\n  needsPagination: boolean;\n  actions?: ActionItem[];\n  suggestions: PromptSuggestion[];\n  creditsUsed: number;\n  usage?: CodegenUsage;\n  messageIndex: number;\n  sessionUsage: number;\n  nextUrl: string;\n  autoContinue: boolean;\n  model: string;\n  promptVersion: string;\n}\n\nexport interface GenerateCodeEventError {\n  type: \"error\";\n  stopReason: \"error\" | \"limit\";\n  code: CodeGenErrorCodes;\n  id: string;\n  message: string;\n  usage?: CodegenUsage;\n}\nexport interface GenerateCodeEventPagination {\n  type: \"pagination\";\n  pop: number;\n  page: number;\n  id: string;\n}\n\nexport interface GenerateCodeEventContinue {\n  type: \"continue\";\n  id: string;\n  nextUrl: string;\n  autoContinue: boolean;\n}\n\nexport interface GenerateCodeEventDelta {\n  type: \"delta\";\n  content: string;\n}\n\nexport interface GenerateCodeEventPing {\n  type: \"ping\";\n}\n\nexport interface GenerateCodeEventUser {\n  type: \"user\";\n  id: string;\n  displayPrompt: string | undefined;\n  user: UserSource;\n  /** @deprecated */\n  role: \"user\" | \"agent\";\n  compacting: boolean;\n}\n\nexport interface MCPClientStatus {\n  status: \"ok\" | \"error\" | \"disabled\" | \"auth_required\" | \"auth_error\";\n  message?: string;\n  protocol?: \"streamable-http\" | \"sse\" | \"stdio\";\n  connectionDurationMs: number;\n  resolutionDurationMs: number;\n  authorizationUrl?: string; // Present when status is auth_required\n  scopes?: string[]; // Present when status is auth_required\n  isReauth?: boolean; // True if re-authorization is needed (token expired)\n}\n\nexport interface GenerateCodeEventMCPStatus {\n  type: \"mcp-status\";\n  status: Record<string, MCPClientStatus>;\n}\n\nexport interface MCPAuthRequiredServer {\n  serverId: string;\n  name: string;\n  url: string;\n  authorizationUrl: string;\n  scopes: string[];\n  isReauth: boolean;\n}\n\nexport interface GenerateCodeEventMCPAuthRequired {\n  type: \"mcp-auth-required\";\n  servers: Array<MCPAuthRequiredServer>;\n  message: string;\n}\n\nexport type GenerateCodeEvent =\n  | ActionItem\n  | GenerateCodeEventDone\n  | GenerateCodeEventContinue\n  | GenerateCodeEventPagination\n  | GenerateCodeEventDelta\n  | GenerateCodeEventError\n  | GenerateCodeEventPing\n  | GenerateCodeEventMCPStatus\n  | GenerateCodeEventMCPAuthRequired\n  | GenerateCodeEventUser;\n\nexport type CommitMode = \"commits\" | \"draft-prs\" | \"prs\";\n\nexport interface GitBackupDownloadUrlResult {\n  signedUrl: string;\n  filePath: string;\n  expiresAt: string;\n  partial: boolean;\n}\n\nexport interface BranchBackup {\n  projectId: string;\n  ownerId: string;\n  branchName: string;\n  at: number;\n  size: number;\n  gitBranchName: string;\n  initialBranch: string | undefined;\n  initialCommitHash: string | undefined;\n  lastCommitHash: string;\n  partial: boolean;\n  status: \"initiated\" | \"completed\";\n  contentMd5?: string;\n  empty?: boolean;\n  repoUrl: string;\n  version?: \"v1\" | \"v2\";\n  forced: ForcedBackup;\n  commitInRepoVerified?: \"verified\" | \"not-found\" | \"unverified\";\n  metadata?: Record<string, any>;\n}\n\nexport interface CheckBackupDataResultValid {\n  state: \"valid\";\n  outcome: \"valid\";\n  message: string;\n  backup: BranchBackup;\n}\n\nexport interface CheckBackupDataResultForcedBackup {\n  state: \"forced-backup\";\n  outcome: \"forced-offline-full-backup\";\n  message: string;\n  backup: BranchBackup;\n}\n\nexport interface CheckBackupDataResultStale {\n  state: \"stale\";\n  outcome: \"hash-mismatch\";\n  message: string;\n  backup: BranchBackup;\n}\n\nexport interface CheckBackupDataResultInvalid {\n  state: \"invalid\";\n  outcome:\n    | \"no-backup\"\n    | \"error\"\n    | \"not-completed\"\n    | \"no-session-id\"\n    | \"no-last-commit-hash\"\n    | \"no-backup-file\"\n    | \"empty-full-backup\"\n    | \"no-vcpCodeGenEvent\"\n    | \"commits-not-in-repo\"\n    | \"no-after-commit\"\n    | \"no-signed-url\"\n    | \"no-git-branch-name\"\n    | \"repo-url-mismatch\"\n    | \"branch-uninitialized\"\n    | \"unexpected-partial-backup\"\n    | \"unexpected-full-backup\";\n  message: string;\n  backup: BranchBackup | undefined;\n}\n\nexport type CheckBackupDataResult =\n  | CheckBackupDataResultValid\n  | CheckBackupDataResultForcedBackup\n  | CheckBackupDataResultStale\n  | CheckBackupDataResultInvalid;\n\nexport interface BackupMetadata {\n  check:\n    | CheckBackupDataResultValid\n    | CheckBackupDataResultStale\n    | CheckBackupDataResultForcedBackup;\n  downloadUrl: GitBackupDownloadUrlResult | undefined;\n}\n\nexport interface WorkspaceFolder {\n  enableGit?: boolean;\n  path: string;\n  name?: string;\n  originalRepoUrl?: string;\n  repoUrl?: string;\n  repoName?: string;\n  resetGit?: boolean;\n  branchName?: string;\n  backupMetadata?: BackupMetadata;\n  initializationCommand?: string;\n  recommendedRoot?: string;\n}\n\nexport interface WorkspaceConfiguration {\n  agentsMD?: string;\n  folders: WorkspaceFolder[];\n}\n\nexport type Permission = \"read\" | \"write\" | \"list\";\n\n// One ACL rule\nexport interface AclEntry {\n  action: \"allow\" | \"deny\"; // whether this rule allows or denies access\n  resource: string; // what \u2014 supports glob patterns like /files/*.txt\n  permissions: Permission[]; // actions this rule applies to\n  description?: string; // custom message, in deny case, this is the error message. This will override denyDescription on AclPolicy if defined.\n  principals?: string[]; // array of teams/roles this rule applies to (e.g., [\"developer\", \"admin\"])\n}\n\n// A full ACL policy is just a list of rules\nexport interface AclPolicy {\n  secrets?: string[];\n  entries?: AclEntry[];\n  // Default message to use when a resource is denied access\n  denyDescription?: string;\n}\n\n// Outcome of evaluating a request\nexport interface AccessResult {\n  allowed: boolean;\n  message: string;\n}\n\nexport type RemoteMachineConfig = {\n  cpus: number;\n  memory: number;\n  region: string;\n  cpuKind: \"performance\" | \"shared\";\n  volumeSize: number;\n};\n\nexport type MachineConfig =\n  | (RemoteMachineConfig & { environment: \"remote\" })\n  | {\n      cpus: number;\n      memory: number;\n      platform: string;\n      arch: string;\n      environment: \"local\";\n    };\n\nexport interface PrivacyMode {\n  encrypt: boolean;\n  encryptKey?: string;\n\n  /**\n   * If true, the user messages will be redacted from the history.\n   *\n   * @default false\n   */\n  redactUserMessages?: boolean;\n\n  /**\n   * If true, all the text messages from the LLM will be redacted.\n   *\n   * @default false\n   */\n  redactLLMMessages?: boolean;\n\n  /**\n   * If true, the CLI will enable MCP servers during privacy mode.\n   *\n   * @default false\n   */\n  mcpServers?: boolean;\n}\n\nexport type Mode = \"init-and-launch\" | \"backup\" | \"backup-force-full\";\n\nexport interface EnvironmentVariable {\n  key: string;\n  value: string;\n  isSecret: boolean;\n}\n\nexport interface FileOverride {\n  /**\n   * Absolute path where the file should be written in the container.\n   * Example: \"/app/.env\", \"/etc/config/app.conf\"\n   */\n  path: string;\n  /**\n   * Content to write to the file.\n   * Can be plain text or binary content (base64 encoded if needed).\n   */\n  content: string;\n}\n\nexport interface FusionConfig {\n  devCommand?: string;\n  checkCommand?: string;\n  setupCommand?: string;\n  fusionServerPort?: number;\n  lockFile?: {\n    filePath: string;\n    conflictBehavior: \"replace\" | \"exit\" | \"kill\";\n  };\n  miseLocationPath?: string;\n  setupDependencies?: SetupDependency[];\n  projectId?: string;\n  branchName?: string;\n  sessionId?: string;\n  featureBranch?: string;\n  aiBranch?: string;\n  refreshPreview?: boolean;\n  workingDirectory?: string;\n  bashWorkingDirectory?: string;\n  workspace?: WorkspaceConfiguration;\n  authenticateProxy?: boolean;\n  allowedCommands?: string[];\n  autoBackupGit?: boolean;\n  autoShutdown?: boolean;\n  autoShutdownThresholdMinutes?: number;\n  commitMode?: CommitMode;\n  serverUrl?: string;\n  isLocal?: boolean;\n  environmentVariables?: EnvironmentVariable[];\n  /** @deprecated */\n  envVariables?: Record<string, string>;\n  accessControl?: AclPolicy;\n  privacyMode?: PrivacyMode;\n  repoIndexingConfig?: RepoIndexingConfig;\n  machine?: RemoteMachineConfig;\n  _attemptDryRunBackupGit?: boolean;\n  _useNI?: boolean;\n  mode?: Mode;\n  autoDetectDevServer?: boolean;\n  autoDetectDevServerPatterns?: string[];\n  runInPty?: boolean;\n  httpsServerFiles?: {\n    key?: string;\n    cert?: string;\n    ca?: string;\n  };\n  httpsServerOptions?: {\n    key?: string;\n    cert?: string;\n    ca?: string;\n    pfx?: string;\n    passphrase?: string;\n    secureProtocol?: string;\n    secureOptions?: number;\n    ciphers?: string;\n    honorCipherOrder?: boolean;\n    requestCert?: boolean;\n    rejectUnauthorized?: boolean;\n    port?: number;\n  };\n  localHttpsDomain?: string;\n  https?: boolean;\n  nativeApp?: boolean;\n  /**\n   * If true, automatically update /etc/hosts file for non-localhost proxy servers.\n   * This is useful for custom domains like \"development.local\".\n   *\n   * @default false\n   */\n  autoConfigureHosts?: boolean;\n  /**\n   * Array of files to inject into the container during setup.\n   * These files will be written before setupCommand or devCommand is executed.\n   * Useful for configuration files, credentials, or environment-specific overrides.\n   */\n  fileOverrides?: FileOverride[];\n  /**\n   * Local MCP server configurations.\n   * Servers defined here will be merged with servers from mcp.json.\n   * Supports environment variable substitution using ${VAR_NAME} syntax.\n   */\n  mcpServers?: Record<\n    string,\n    {\n      command: string;\n      args?: string[];\n      env?: Record<string, string>;\n      envFile?: string;\n    }\n  >;\n\n  /**\n   * List of built-in tools to disable.\n   */\n  disabledTools?: string[];\n\n  /** @deprecated use devCommand */\n  command?: string;\n}\n\nexport interface FusionConfigInit extends FusionConfig {\n  workspace: {\n    folders: Required<WorkspaceFolder>[];\n  };\n}\n\nexport interface LoadWholeSessionOptions {\n  getAll?: boolean;\n  creditsUsed?: number;\n}\n\nexport interface LoadWholeSessionResult {\n  sessionId: string;\n  title: string | undefined;\n  beforeCommit: string | undefined;\n  createdUnixTime: number;\n  updatedUnixTime: number;\n  addedTurns: number;\n  turns: CodegenTurn[];\n}\n\nexport interface LoadHistoryResult {\n  sessionId: string;\n  title: string | undefined;\n  beforeCommit: string | undefined;\n  createdUnixTime: number;\n  updatedUnixTime: number;\n  turns: CodegenTurn[];\n}\n\nexport type InitStateStep =\n  | \"initial\"\n  | \"init\"\n  | \"validation\"\n  | \"check-directories\"\n  | \"create-directories\"\n  | \"configure-git-repos\"\n  | \"check-existing-git\"\n  | \"update-remote-url\"\n  | \"clone-repo\"\n  | \"apply-partial-backup\"\n  | \"configure-git-user\"\n  | \"stash-changes\"\n  | \"collect-repo-info\"\n  | \"init-success\"\n  | \"init-command\"\n  | \"init-failed\";\n\nexport interface InitStatusLog {\n  id: number;\n  timestamp: string;\n  type: \"status\" | \"log\" | \"error\" | \"complete\";\n  message: string;\n  step?: InitStateStep;\n  error?: string;\n  success?: boolean;\n}\n\nexport interface InitState {\n  isRunning: boolean;\n  isComplete: boolean;\n  success: boolean;\n  currentStep: InitStateStep;\n  error: string | undefined;\n  repos: {\n    repoName: string;\n    enabledGit: boolean;\n    lastCommitHash: string;\n    branch: string;\n  }[];\n}\n\nexport type LaunchServerState =\n  | \"initial\"\n  | \"init-running\"\n  | \"init-complete\"\n  | \"ready\"\n  | \"active-session\"\n  | \"init-error\"\n  | \"session-error\"\n  // TODO: remove this\n  | \"error\"\n  | \"closing\";\n\nexport interface LaunchServerStatus {\n  status: \"ok\";\n  state: LaunchServerState;\n  setupState?: SetupCommandState;\n  devState?: DevCommandState;\n  isFinalState: boolean;\n  httpServerState?: HttpServerState;\n  editorReady: boolean;\n  initState?: InitState;\n  initStatusLogs?: InitStatusLog[];\n  errorMessage?: string;\n  devToolsVersion: string;\n  lastRequestTime: number;\n  startTime: number;\n  machine?: MachineConfig;\n  projectId?: string;\n  detectedServerUrl?: string;\n  _attemptDryRunBackupOutcome?: string;\n  workingDirectory?: string;\n  fusionConfig?: FusionConfig;\n}\n\nexport interface FusionStatus {\n  status: \"ok\";\n  state: LaunchServerState;\n  setupState: SetupCommandState | undefined;\n  devState: DevCommandState | undefined;\n  editorReady: boolean;\n  httpServerState: HttpServerState | undefined;\n  initState: InitState | undefined;\n  errorMessage: string | undefined;\n  devToolsVersion: string;\n  idleTime: number;\n  upTime: number;\n  machine: MachineConfig | undefined;\n  projectId: string | undefined;\n  detectedServerUrl: string | undefined;\n  _attemptDryRunBackupOutcome: string | undefined;\n  workingDirectory: string | undefined;\n}\n\nexport interface FusionMetrics {\n  counters: {\n    key: string;\n    value: number;\n    attributes: Record<string, string>;\n  }[];\n}\n\nexport interface AnalyzeChatSentimentResults {\n  sentiment: \"positive\" | \"neutral\" | \"negative\";\n  frustration_level: \"none\" | \"low\" | \"medium\" | \"high\";\n  repeated_attempts: boolean;\n  confusion_level: \"none\" | \"low\" | \"medium\" | \"high\";\n  urgency: \"none\" | \"low\" | \"medium\" | \"high\";\n  satisfaction: \"none\" | \"low\" | \"medium\" | \"high\";\n}\n\nexport interface PushChangesOptions {\n  actor?: string;\n  refreshRemote?: boolean;\n  pullFirst?: boolean;\n  forcePush?: boolean;\n  updateRepo?: {\n    repoFullName: string;\n    repoUrl: string;\n  };\n}\n\nexport type PushChangesArgs = PushChangesOptions | boolean;\n\nexport type CodegenApiResult = CodegenApiSuccess | CodegenApiFailure;\n\nexport interface CodegenApiSuccess {\n  success: true;\n  message?: string;\n}\n\nexport interface CodegenApiFailure {\n  success: false;\n  message: string;\n  error: Error;\n}\n\nexport interface CodegenApiTerminal {\n  terminalId: string;\n  title: string;\n  cwd: string;\n  createdAt: number;\n  lastWrittenAt: number;\n  createdBy: string;\n  readonly: boolean;\n  builtIn: boolean;\n}\n\nexport interface SetupCommandResult {\n  code: number | null;\n  output: string;\n  capturedEnv?: Record<string, string>;\n}\n\nexport type DevCommandResult =\n  | DevCommandResultSuccess\n  | DevCommandResultFailure;\nexport interface DevCommandResultSuccess {\n  status: \"success\";\n}\n\nexport interface DevCommandResultFailure {\n  status: \"failure\";\n  code: number | null;\n  output: string;\n}\n\nexport interface ConfigureDevOrchestratorUpdates {\n  devCommand: boolean;\n  setupCommand: boolean;\n  proxyServer: boolean;\n  hosts: boolean;\n  env: boolean;\n  setupResult: SetupCommandResult | undefined;\n  devResult: DevCommandResult | undefined;\n}\n\nexport interface ConfigureDevOrchestratorOpts {\n  devCommand?: string | null;\n  setupCommand?: string | null;\n  setupDependencies?: SetupDependency[];\n  proxyPort?: number;\n  proxyServer?: string;\n  env?: Record<string, string | null>;\n  replaceEnvs?: boolean;\n  forceSetupCommand?: boolean;\n  forceDevCommand?: boolean;\n  autoDetectDevServer?: boolean;\n  autoDetectDevServerPatterns?: string[];\n}\n\nexport interface LanguageInfo {\n  color: string;\n  language: string;\n  percentage: string;\n  type: string;\n}\n\nexport interface FrameworkInfo {\n  name: string;\n  confidence: \"high\" | \"medium\" | \"low\";\n  indicators: string[];\n}\n\nexport interface EnvVariableInfo {\n  key: string;\n  placeholderValue?: string;\n  source: string; // file path where the variable was found\n  type: \"npmrc\" | \"env\";\n}\n\nexport interface SetupRequirement {\n  tool: string;\n  version?: string;\n}\n\nexport interface GuessedSettings {\n  id: string;\n  setupCommand: string;\n  devCommand: string;\n  setupDependencies: SetupDependency[];\n  autoDetectDevServer: boolean;\n}\n\nexport interface RepoMetrics {\n  languages: LanguageInfo[];\n  isEmpty: boolean;\n  isMonorepo: boolean;\n  monorepoType?:\n    | \"npm-workspaces\"\n    | \"yarn-workspaces\"\n    | \"pnpm-workspaces\"\n    | \"lerna\"\n    | \"nx\"\n    | \"turborepo\"\n    | \"cargo-workspaces\"\n    | \"other\";\n  frameworks: FrameworkInfo[];\n  setupRequirements: SetupRequirement[];\n  packageManagers: string[];\n  buildTools: string[];\n  environmentVariables?: EnvVariableInfo[];\n  possibleMonorepoRoots?: string[];\n  guessedSettings?: GuessedSettings;\n  errors?: string[];\n}\n", "import type {\n  FileOverride,\n  EnvironmentVariable,\n  LaunchServerState,\n  LaunchServerStatus,\n  BranchBackup,\n} from \"./codegen\";\n\n// Define proper types for IP addresses and machine config\nexport interface ConfigStatus {\n  isReady: boolean;\n  lastUpdated: string;\n  [key: string]: unknown;\n}\n\n// Base interface for all messages (timestamp is added by sendUpdate)\ninterface BaseMessage {\n  timestamp: string;\n}\n\n// Specific state update messages\nexport interface InitializingMessage extends BaseMessage {\n  state: \"initializing\";\n  message: string;\n}\n\nexport interface FetchingGithubTokenMessage extends BaseMessage {\n  state: \"fetchingGithubToken\";\n  message: string;\n}\n\nexport interface FetchingFusionKeyMessage extends BaseMessage {\n  state: \"fetchingFusionKey\";\n  message: string;\n}\n\nexport interface CheckingAppMessage extends BaseMessage {\n  state: \"checkingApp\";\n  message: string;\n}\n\nexport interface CleaningUpAppMessage extends BaseMessage {\n  state: \"cleaningUpApp\";\n  message: string;\n}\n\nexport interface CreatingAppMessage extends BaseMessage {\n  state: \"creatingApp\";\n  message: string;\n}\n\nexport interface CheckingIPMessage extends BaseMessage {\n  state: \"checkingIP\";\n  message: string;\n}\n\nexport interface AllocatingIPMessage extends BaseMessage {\n  state: \"allocatingIP\";\n  message: string;\n}\n\nexport interface CheckingMachineMessage extends BaseMessage {\n  state: \"checkingMachine\";\n  message: string;\n}\n\nexport interface CheckingVolumeMessage extends BaseMessage {\n  state: \"checkingVolume\";\n  message: string;\n}\n\nexport interface ForkingVolumeMessage extends BaseMessage {\n  state: \"forkingVolume\";\n  message: string;\n}\n\nexport interface RetryingWithNewRegionMessage extends BaseMessage {\n  state: \"retryingWithNewRegion\";\n  message: string;\n}\n\nexport interface WaitingBeforePollingMessage extends BaseMessage {\n  state: \"waitingBeforePolling\";\n  message: string;\n}\n\nexport interface PollingMachineStatusMessage extends BaseMessage {\n  state: \"pollingMachineStatus\";\n  message: string;\n}\n\nexport interface WarningStateMessage extends BaseMessage {\n  state: \"warning\";\n  message: string;\n  errors?: string[];\n}\n\nexport interface PingMessage extends BaseMessage {\n  type: \"ping\";\n}\n\n// Plain message (just message, no state or type)\nexport interface PlainMessage extends BaseMessage {\n  message: string;\n}\n\n// Debug messages\nexport interface DebugMessage extends BaseMessage {\n  type: \"debug\";\n  message: string;\n  lockInfo?: any;\n  error?: string; // Some debug messages include error field\n}\n\n// Error messages\nexport interface ErrorMessage extends BaseMessage {\n  type: \"error\";\n  error: string;\n  details?: any;\n  message?: string;\n  code?: string;\n}\n\n// Info messages\nexport interface InfoMessage extends BaseMessage {\n  type: \"info\";\n  message: string;\n}\n\n// Warning messages\nexport interface WarningMessage extends BaseMessage {\n  type: \"warning\";\n  message: string;\n  errors?: string[];\n}\n\n// Machine status updates\nexport interface MachineStatusMessage extends BaseMessage {\n  type: \"machineStatus\";\n  status:\n    | \"unknown\"\n    | \"created\"\n    | \"starting\"\n    | \"started\"\n    | \"stopping\"\n    | \"stopped\"\n    | \"suspending\"\n    | \"suspended\"\n    | \"replacing\"\n    | \"destroying\"\n    | \"destroyed\"\n    | \"not-found\"\n    | \"running\"\n    | \"failed\";\n}\n\n// Logs updates\nexport interface LogsMessage extends BaseMessage {\n  type: \"logs\";\n  logs: string[];\n}\n\n// Config status updates\nexport interface ConfigStatusMessage extends BaseMessage {\n  type: \"configStatus\";\n  configStatus: ConfigStatus;\n}\n\n// Special state updates with additional data\nexport interface AppCreatedMessage extends BaseMessage {\n  state: \"appCreated\";\n  message: string;\n  appName: string;\n}\n\nexport interface MachineCreatedMessage extends BaseMessage {\n  state: \"machineCreated\";\n  message: string;\n  machineId: string;\n}\n\nexport interface IpAllocatedMessage extends BaseMessage {\n  state: \"ipAllocated\";\n  message: string;\n}\n\nexport interface VolumeForkedMessage extends BaseMessage {\n  state: \"volumeForked\";\n  message: string;\n  volumeId: string;\n}\n\nexport interface ReadyMessage extends BaseMessage {\n  state: \"ready\";\n  message: string;\n  url: string;\n  status?: LaunchServerStatus;\n}\n\nexport type MachineState =\n  | \"unknown\"\n  | \"created\"\n  | \"starting\"\n  | \"started\"\n  | \"stopping\"\n  | \"stopped\"\n  | \"suspending\"\n  | \"suspended\"\n  | \"replacing\"\n  | \"destroying\"\n  | \"destroyed\"\n  | \"not-found\"\n  | \"running\"\n  | \"failed\";\n\nexport type FlyVolumeState =\n  | \"unknown\"\n  | \"creating\"\n  | \"created\"\n  | \"extending\"\n  | \"restoring\"\n  | \"enabling_remote_export\"\n  | \"hydrating\"\n  | \"recovering\"\n  | \"scheduling_destroy\"\n  | \"pending_destroy\"\n  | \"failed\";\n\nexport type GitAuthErrorCode =\n  | \"git-auth-failed\"\n  | \"git-auth-failed-root-repo\"\n  | \"git-auth-failed-folder-added-by\"\n  | \"git-auth-failed-folder-created-by\"\n  | \"git-auth-failed-repo-not-found\"\n  | \"git-auth-failed-folder-server-token\"\n  | \"git-auth-failed-root-repo-server-token\"\n  | \"git-auth-failed-ghes-unreachable\";\n\nexport type EnsureContainerErrorCode =\n  | \"FAILED_TO_START_MACHINE_ERROR\"\n  | \"FLY_APP_CHECK_ERROR\"\n  | \"FLY_CAPACITY_ERROR\"\n  | \"FLY_PERMISSIONS_TOKEN_ERROR\"\n  | \"FLY_VOLUME_CREATE_ERROR\"\n  | \"FLY_VOLUME_FORK_ERROR\"\n  | \"FLY_VOLUME_DELETE_RECENTLY_FORKED_ERROR\"\n  | \"FLY_MACHINE_CREATE_ERROR\"\n  | \"FLY_VOLUME_CHECK_ERROR\"\n  | \"FLY_NON_MOUNTABLE_VOLUME_ERROR\"\n  | \"FLY_DEPRECATED_REGION_ERROR\"\n  | \"FLY_VOLUME_NOT_FOUND\"\n  | \"FLY_MACHINE_LIMIT_ERROR\"\n  | \"KUBE_CAPACITY_ERROR\"\n  | \"KUBE_PERMISSIONS_ERROR\"\n  | \"KUBE_POD_LIMIT_ERROR\"\n  | \"KUBE_RESOURCE_QUOTA_ERROR\"\n  | \"KUBE_NAMESPACE_CHECK_ERROR\"\n  | \"KUBE_PVC_CREATE_ERROR\"\n  | \"KUBE_PVC_CHECK_ERROR\"\n  | \"KUBE_POD_CREATE_ERROR\"\n  | \"KUBE_SERVICE_CREATE_ERROR\"\n  | \"KUBE_INGRESS_CREATE_ERROR\"\n  | \"KUBE_POD_FAILED_TO_START_ERROR\"\n  | \"ensure-checking-existing-machines\"\n  | \"found-multiple-failed-machine\"\n  | \"maximun-retries-machine-creation\"\n  | GitAuthErrorCode\n  | \"unknown\"\n  | \"project-bad-state\"\n  | \"project-not-found\"\n  | \"project-branch-not-found\"\n  | \"project-branch-no-session-id\"\n  | \"project-repo-full-name-not-found\"\n  | \"project-org-not-found\"\n  | \"invalid-project-repo-url-already-in-use\"\n  | \"no-available-regions\"\n  | \"invalid-backup-without-volume-id\"\n  | \"missing-app-with-machine-or-volume\"\n  | \"update-branch-info-in-firebase\"\n  | \"update-branch-app-name-in-firebase\"\n  | `machine-status-polling-${MachineState}`\n  | `machine-image-exited-immediately`\n  | `volume-not-found-${FlyVolumeState}`\n  | \"trying-to-remove-used-volume\"\n  | \"timeout\"\n  | \"fatal:zod-validation-error\"\n  | `fatal:${string}`;\n\nexport interface ErrorStateMessage extends BaseMessage {\n  state: \"error\";\n  message: string;\n  error: string;\n  code: EnsureContainerErrorCode;\n  causeError: string;\n}\n\nexport interface CleanupCompletedMessage extends BaseMessage {\n  state: \"cleanupCompleted\";\n  message: string;\n}\n\n/**\n * Messages sent by the container orchestrator.\n */\nexport type ProjectsChunkMessage =\n  | InitializingMessage\n  | FetchingGithubTokenMessage\n  | FetchingFusionKeyMessage\n  | CheckingAppMessage\n  | CleaningUpAppMessage\n  | CreatingAppMessage\n  | CheckingIPMessage\n  | AllocatingIPMessage\n  | CheckingMachineMessage\n  | CheckingVolumeMessage\n  | ForkingVolumeMessage\n  | RetryingWithNewRegionMessage\n  | WaitingBeforePollingMessage\n  | PollingMachineStatusMessage\n  | WarningStateMessage\n  | PingMessage\n  // Type-based messages\n  | DebugMessage\n  | ErrorMessage\n  | InfoMessage\n  | WarningMessage\n  | MachineStatusMessage\n  | LogsMessage\n  | ConfigStatusMessage\n  // Special state messages with extra data\n  | AppCreatedMessage\n  | MachineCreatedMessage\n  | IpAllocatedMessage\n  | VolumeForkedMessage\n  | ReadyMessage\n  | ErrorStateMessage\n  | CleanupCompletedMessage;\n\nexport type GitConfig = {\n  url: string;\n  provider: \"github\" | \"bitbucket\" | \"gitlab\" | \"azure\" | \"unknown\";\n};\n\nexport type GitConfigs = Record<string, GitConfig>;\n\nexport const EXAMPLE_REPOS = [\n  \"steve8708/mui-vite\",\n  \"steve8708/carbon-vite\",\n  \"steve8708/vite-react-shopify-polaris\",\n  \"steve8708/cloudscape-demos\",\n  \"BuilderIO/fusion-angular-tailwind-starter\",\n  \"BuilderIO/fusion-svelte-tailwind-starter\",\n  \"BuilderIO/fusion-vue-tailwind-starter\",\n];\n\nexport const STARTER_REPO = \"BuilderIO/fusion-starter\";\n\nexport const EXAMPLE_OR_STARTER_REPOS = [...EXAMPLE_REPOS, STARTER_REPO];\n\nexport const EXAMPLE_OR_STARTER_REPOS_URLS = EXAMPLE_OR_STARTER_REPOS.map(\n  (repo) => `https://github.com/${repo}`,\n);\n\nexport interface GitBackupUploadUrlResult {\n  signedUrl: string;\n  filePath: string;\n  expiresAt: string;\n}\n\nexport interface GitBackupUploadUrlOptions {\n  projectId: string;\n  branchName: string;\n  size: number;\n  partial: boolean;\n  contentMd5: string;\n}\n\nexport interface GitBackupDownloadUrlOptions {\n  spaceId: string;\n  projectId: string;\n  branchName: string;\n  partial: boolean;\n}\n\nexport type ForcedBackup = \"offline-full\" | \"offline\" | undefined;\n\nexport interface GitBackupRecordOptions {\n  projectId: string;\n  branchName: string;\n  size: number;\n  gitBranchName: string;\n  initialBranch: string;\n  initialCommitHash: string | undefined;\n  lastCommitHash: string;\n  partial: boolean;\n  empty: boolean;\n  status: \"completed\";\n  contentMd5?: string;\n  repoUrl: string;\n  version: \"v1\" | \"v2\";\n  forced: ForcedBackup;\n  metadata?: Record<string, string | string[] | undefined>;\n}\n\nexport interface GitBackupRecordResult {\n  success: boolean;\n}\n\nexport interface CodegenSetLastCommit {\n  projectId: string;\n  branchName: string;\n  lastCommitHash: string;\n  clearSecondaryVolumeId: boolean;\n}\n\nexport interface CodegenRuntimeStatus {\n  projectId: string;\n  branchName: string;\n  lastCommitHash?: string;\n  clearSecondaryVolumeId?: boolean;\n  lastServerState?: LaunchServerState;\n  lastServerVersion?: string;\n}\n\nexport interface BackupGitRepoResultValid {\n  success: true;\n  partial: boolean; // Whether this was a partial backup (only new commits) or full backup\n  repoUrl: string;\n  empty: boolean; // True if no new commits needed backing up\n  lastCommitHash: string;\n  backupRef: string | undefined; // Unique reference to identify this backup\n}\n\nexport interface BackupGitRepoResultInvalid {\n  success: false;\n  reason: \"project_removed\"; // Project was deleted from system but backup process still running\n}\n\nexport type BackupGitRepoResult =\n  | BackupGitRepoResultValid\n  | BackupGitRepoResultInvalid;\n\nexport type ShutdownResponse =\n  | {\n      success: true;\n      message: string;\n      skipped: boolean;\n      reason: string;\n    }\n  | {\n      success: false;\n      message?: string;\n      skipped?: boolean;\n      reason?: string;\n      error?: Error;\n    }\n  | BackupGitRepoResult;\n\nexport type ShutdownResponseSerialized = Omit<ShutdownResponse, \"error\"> & {\n  error?: string;\n};\n\nexport type SetupDependency = SetupMiseDependency | SetupScriptDependency;\nexport interface SetupMiseDependency {\n  key: string;\n  type: \"mise\";\n  tool: string;\n  version?: string;\n}\n\nexport interface SetupScriptDependency {\n  key: string;\n  type: \"script\";\n  name: string;\n  script: string;\n}\n\nexport type FusionExecutionEnvironment =\n  | \"containerized\"\n  | \"container-less\"\n  | \"cloud\";\n\nexport interface PartialBranchData {\n  name?: string;\n  createdBy: string;\n  friendlyName: string;\n  isDefault: boolean;\n  isPublic: boolean;\n  lockedFusionEnvironment: FusionExecutionEnvironment;\n  metadata?: Record<string, unknown>;\n  backup?: BranchBackup;\n  gitAiBranch?: string | null;\n  lastCommitHash?: string | null;\n  lastCommitDate?: number | null;\n  commitMode?: \"commits\" | \"draft-prs\" | \"prs\";\n  useHomeDir?: boolean;\n  checkoutBranch?: string | null;\n  cloneFrom?: {\n    projectId: string;\n    branchName: string;\n  };\n}\nexport interface Branch {\n  lockedFusionEnvironment?: FusionExecutionEnvironment;\n  id?: string;\n  appName?: string | null;\n  prNumber?: number | null;\n  prUrl?: string | null;\n  machineId?: string | null;\n  lastMachineIdRemovedAt?: number | null;\n  volumeId?: string | null;\n  secondaryVolumeId?: string | null;\n  volumeName?: string | null;\n  gitAiBranch?: string | null;\n  lastCommitHash?: string | null;\n  lastCommitDate?: number | null;\n  lastServerState?: LaunchServerState | null;\n  lastServerStateDate?: number | null;\n  lastServerVersion?: string | null;\n  name?: string;\n  createdBy?: string;\n  isPublic?: boolean;\n  isDefault?: boolean;\n  sessionId?: string;\n  createdAt?: number | null;\n  friendlyName?: string;\n  useHomeDir?: boolean;\n  useCloudHomeDir?: boolean;\n  ipv4?: {\n    address: string | null;\n    allocated: boolean | null;\n  } | null;\n  ipv6?: {\n    address: string | null;\n    allocated: boolean | null;\n  } | null;\n  preRecoveryData?: Partial<Branch> & { recoveryDate: Date };\n  backup?: BranchBackup;\n  metadata?: Record<string, unknown>;\n  needsCleanup?: boolean;\n  deleted?: boolean;\n  updatedAt?: string;\n  commitMode?: \"commits\" | \"draft-prs\" | \"prs\";\n  // Kubernetes-specific fields\n  kubePodName?: string | null;\n  kubeNamespace?: string | null;\n  kubePvcName?: string | null;\n  kubeHostname?: string | null;\n  checkoutBranch?: string | null;\n}\n\nexport type CpuKind = \"performance\" | \"shared\";\nexport type MachineAutoStop = \"stop\" | \"off\" | \"suspend\";\nexport interface Project {\n  id: string;\n  name: string;\n  ownerId: string;\n  repoFullName: string | undefined;\n  repoProvider: string;\n  repoProtocol: string | undefined;\n  repoDescription?: string;\n  repoPrivate: boolean;\n  repoUrl: string | undefined;\n  createdDate: string;\n  updatedAt: string;\n  pinned?: boolean;\n  archived?: boolean;\n  createdBy: string;\n  checkRunCounts?: Record<string, number>;\n  repoAddedBy?: string;\n  pipelineCounts?: Record<string, number>;\n  needSetup?: boolean;\n  domains?: string[];\n  settings: {\n    isNativeApp?: boolean;\n    autoDetectDevServer?: boolean;\n    autoDetectDevServerPatterns?: string[];\n    fusionEnvironment?: FusionExecutionEnvironment;\n    devServerPort?: number;\n    devServerUrl?: string;\n    refreshPreview?: boolean;\n    installCommand?: string;\n    gitBranchNamingStrategy?: \"ai-session\" | \"branch-name\" | \"custom\";\n    setupDependencies?: SetupDependency[];\n    gitBranchNamingCustom?: string;\n    devServerCommand?: string;\n    memoryLimit?: 1024 | 2048 | 4096 | 8192 | 16384;\n    cpuKind?: CpuKind;\n    autoStop?: MachineAutoStop;\n    mainBranchName?: string;\n    minMachinesRunning?: number;\n    volumeSize?: 5 | 10 | 12 | 15 | 20;\n    includePath?: string;\n    includePatterns?: string[];\n    environmentVariables?: EnvironmentVariable[];\n    fileOverrides?: FileOverride[];\n    commitMode?: \"commits\" | \"draft-prs\" | \"prs\";\n    dockerImagePath?: string;\n    nodeVersion?: string;\n    designSystems?: string[];\n    useNI?: boolean;\n    folders?: Array<{\n      name: string;\n      remoteUrl: string;\n      mainBranchName?: string;\n      includePath?: string;\n      addedBy?: string;\n      repoProvider?: string;\n      repoProtocol?: string;\n    }>;\n    agentsMD?: string;\n    initializationCommand?: string;\n    repoSubpath?: string;\n    recommendedRoot?: string;\n    https?: boolean;\n    localHttpsDomain?: string;\n    httpsServerKeyPath?: string;\n    httpsServerCertPath?: string;\n    httpsServerCaPath?: string;\n    httpsServerKeyContent?: string;\n    httpsServerCertContent?: string;\n    httpsServerCaContent?: string;\n    httpsServerPfx?: string;\n    httpsServerPassphrase?: string;\n    httpsServerSecureProtocol?: string;\n    httpsServerSecureOptions?: number;\n    httpsServerCiphers?: string;\n    httpsServerHonorCipherOrder?: boolean;\n    httpsServerRequestCert?: boolean;\n    httpsServerRejectUnauthorized?: boolean;\n  };\n  screenshot: string | null;\n  isExample?: boolean;\n  isPublic?: boolean;\n  snapshotVolume?: {\n    volumeId: string;\n    appName: string;\n    createdAt: number;\n  };\n  isFromUserTemplate?: boolean;\n  templateId?: string | null;\n  localPath?: string | null;\n}\n\nexport interface ProjectWithBranches extends Project {\n  branches: Record<string, Branch>;\n}\n\nexport interface OrganizationPrivate {\n  ownerId: string;\n  id: string;\n  installs?: {\n    ids: number[];\n    host: string;\n  }[];\n  createdAt: number;\n  updatedAt: number;\n}\nexport interface CreateProjectOptions {\n  name: string;\n  repoFullName: string;\n  repoProvider: string;\n  repoProtocol?: string;\n  repoDescription?: string;\n  repoPrivate: boolean;\n  repoUrl: string;\n  needSetup: boolean;\n  domains?: string[];\n  settings?: Partial<Project[\"settings\"]>;\n  isPublic?: boolean;\n  isExample?: boolean;\n  templateId?: string;\n}\n", "export type StoreComponentDocsInput =\n  | StoreComponentDocsInputV1\n  | StoreComponentDocsInputV2;\n\n/**\n * @deprecated\n * While some documents may still use this format, new documents should use the\n * latest interface.\n */\ninterface StoreComponentDocsInputV1 {\n  id?: string;\n  ownerId?: string;\n  userId?: string;\n  createdDate?: Date;\n  deprecated?: boolean;\n  description: string;\n  name: string;\n  relatedComponents: string[];\n  relevantFiles: string[];\n  content: string;\n  sessionId: string;\n  designSystemPackage?: string;\n  designSystemVersion?: string;\n  hash?: string;\n  designSystemId?: string;\n}\n\ninterface StoreComponentDocsInputV2 {\n  id?: string;\n  ownerId?: string;\n  userId?: string;\n  createdDate?: Date;\n  deprecated?: boolean;\n  description: string;\n  name: string;\n  relatedComponents: string[];\n  relevantFiles: string[];\n  content: string;\n  sessionId: string;\n  hash?: string;\n  designSystemId?: string;\n  // An approximation of how many tokens this document will consume in LLM context\n  tokens?: number;\n}\n\nexport type DesignSystemScope = \"space\" | \"organization\" | \"global\";\n\nexport interface AddDesignSystemInput {\n  designSystemName: string;\n  designSystemPackage?: string;\n  designSystemVersion?: string;\n  status: string;\n  spaceId: string;\n  rootOrgId: string;\n  scope: DesignSystemScope;\n}\n\nexport interface UpdateDesignSystemInput {\n  id: string;\n  designSystemName?: string;\n  scope?: DesignSystemScope;\n  designSystemPackage?: string;\n  designSystemVersion?: string;\n  status?: \"in-progress\" | \"completed\" | \"failed\";\n}\n\nexport interface DesignSystem {\n  id: string;\n  spaceId: string;\n  rootOrgId: string;\n  createdDate: Date;\n  createdByUserId: string;\n  lastUpdatedDate?: string;\n  lastUpdatedByUserId?: string;\n  designSystemName: string;\n  designSystemVersion?: string;\n  designSystemPackage?: string;\n  status: \"in-progress\" | \"completed\" | \"failed\";\n  scope: DesignSystemScope;\n  deprecated: boolean;\n}\nexport interface DisplayDesignSystem extends DesignSystem {\n  docCount: number;\n}\n", "import type { EnvironmentVariable } from \"./codegen\";\n\nexport interface GithubEnterpriseSetupValue {\n  host: string;\n  clientId: string;\n  clientSecret: string;\n  appId: string;\n  pem: string;\n  secondaryHost?: string;\n  appSlug?: string;\n}\n\nexport interface BitbucketEnterprisePAT {\n  token: string;\n  host: string;\n  botUsername: string;\n}\n\ninterface OrganizationSettings {\n  attribution?: string[];\n  visualEditorAiStyleInspirationURL?: string;\n  techStack?: string[];\n  enableModelValidationHooks?: boolean;\n  enableOrgInsights?: boolean;\n  enableBuilderHosting?: boolean;\n  allowLegacyPlanSubscriptions?: boolean;\n  enforceMaxUsers?: boolean;\n  ssoRestrictedMode?: boolean;\n  isUserPluginIntegrationRequestGranted?: boolean;\n  shopify?: boolean;\n  githubEnterpriseSetupValue?: GithubEnterpriseSetupValue;\n  bitbucketEnterprisePAT?: BitbucketEnterprisePAT;\n  useProxy?: boolean;\n  fusionShareableUrlSuffix?: string;\n  autoDetectDevServerPatterns?: string[];\n  environmentVariables?: EnvironmentVariable[];\n  runInPty?: boolean;\n}\n\ninterface RoleOptions {\n  read?: boolean;\n  viewOnly?: boolean;\n  create?: boolean;\n  publish?: boolean;\n  editCode?: boolean;\n  editDesigns?: boolean;\n  admin?: boolean;\n  editLayouts?: boolean;\n  editLayers?: boolean;\n  editContentPriority?: boolean;\n  editFolders?: boolean;\n  indexDesignSystems?: boolean;\n}\n\ninterface RoleEnvironment {\n  pushAllowedOrgIds?: string[];\n  sync?: boolean;\n  canPushToAllOrgs?: boolean;\n}\n\ninterface RoleLocales {\n  allowedLocalesEditList?: string[];\n  canEditAllLocales?: boolean;\n}\n\nexport interface ProjectRole {\n  options?: {\n    view?: boolean;\n    editCode?: boolean;\n    sendPullRequests?: boolean;\n    createBranches?: boolean;\n    modifyMcpServers?: boolean;\n    modifyProjectSettings?: boolean;\n  };\n}\n\nexport interface Limits {\n  apiCalls: number;\n  storage: number;\n  users: number;\n  customRoles: number;\n\n  /** Pageviews, 1:1 */\n  pageviews: number;\n\n  /** Bandwidth limit, in GB */\n  bandwidth: number;\n\n  metrics: number;\n  entries: number;\n  spaces?: number;\n  maxUsers?: number;\n  minimumUsers?: number;\n  pageviewsOverage?: PageviewsOverage;\n  bandwidthOverage?: BandwidthOverage;\n  usersOverage?: UsersOverage;\n  aiGeneration?: number;\n  aiGenerationContextWindow?: number;\n  aiCredits: number;\n  baseAiCredits?: number;\n  aiCreditsPerSeat: number;\n  codeGenerationsOverage?: CodeGenerationsOverage;\n  aiCreditsOverage?: AiCreditsOverage;\n  environments?: EnvironmentLimits;\n  workflows?: { count: number };\n}\n\nexport interface EnvironmentLimits {\n  count: number;\n}\n\nexport interface UsersOverage {\n  price: number;\n  additionalNumberOfUsers: number;\n  maxAllowedUsers: number;\n  annualPrice?: number;\n}\n\nexport interface PageviewsOverage {\n  price: number;\n  additionalNumberOfPageviews: number;\n  maxAllowedPageviews: number;\n  annualPrice?: number;\n}\n\nexport interface BandwidthOverage {\n  price: number;\n  additionalBandwidth: number;\n  maxAllowedBandwidth: number;\n  annualPrice?: number;\n}\n\nexport interface CodeGenerationsOverage {\n  price: number;\n  additionalNumberOfCodeGenerations: number;\n  maxAllowedCodeGenerations: number;\n  annualPrice: number;\n}\n\nexport interface AiCreditsOverage {\n  price: number;\n  additionalNumberOfAiCredits: number;\n  maxAllowedAiCredits: number;\n  annualPrice: number;\n}\n\nexport type PaymentError =\n  | \"failed\"\n  | \"unpaid\"\n  | \"incomplete\"\n  | \"incomplete_expired\";\n\nexport interface CustomPlan extends SubscriptionInfo {\n  organizationId: string;\n  plan: keyof SubscriptionInfoMap;\n  id: string;\n}\n\nexport interface Coupon extends SubscriptionInfo {\n  for: \"Shopify\" | \"cms\";\n  id: string;\n  plan: keyof SubscriptionInfoMap;\n}\n\nexport interface FeatureMap {\n  abTesting?: boolean;\n  metrics?: boolean;\n  emailWidgets?: boolean;\n  customFonts?: boolean;\n  sso?: boolean;\n  customTargeting?: boolean;\n  basicTargeting?: boolean;\n  advancedAnalytics?: boolean;\n  heatmaps?: boolean;\n  customModels?: boolean;\n  prioritySupport?: boolean;\n  premiumSLA?: boolean;\n  advancedDevTools?: boolean;\n  customRoles?: boolean;\n  customWorkflows?: boolean;\n  // TODO: this should really be in top level SubscriptionOptions instead of in Features\n  userPrice?: number;\n  liveChat?: boolean;\n  noPageviews?: boolean;\n  standardRoles?: boolean;\n  enterpriseRoles?: boolean;\n  scheduling?: boolean;\n  privatePlugins?: boolean;\n  analyticsAPI?: boolean;\n  customDashboards?: boolean;\n  standardSupport?: boolean;\n  premiumSupport?: boolean;\n  visualEditor?: boolean;\n  openSourcePlugins?: boolean;\n  versionControl?: boolean;\n  customComponents?: boolean;\n  visualModels?: boolean;\n  autosave?: boolean;\n  history?: boolean;\n  customDropzones?: boolean;\n  hostedDomains?: boolean;\n  adminRole?: boolean;\n  limitedRoles?: boolean;\n  headlessCMS?: boolean;\n  freeSupport?: boolean;\n  enterpriseContact?: boolean;\n  createAndManageContent?: boolean;\n  whiteLabel?: boolean;\n  templateLibrary?: boolean;\n  importFromFigma?: boolean;\n  integrations?: boolean;\n  sevenDayHistory?: boolean;\n  thirtyDayHistory?: boolean;\n  ninetyDayHistory?: boolean;\n  threeHundredSixtyFiveDayHistory?: boolean;\n  unlimitedActivityHistory?: boolean;\n  environment?: boolean;\n  // maybe separate publish rules from workflows?\n  governance?: boolean;\n  commenting?: boolean;\n  globalCDN?: boolean;\n  imageOptimization?: boolean;\n  assetManager?: boolean;\n  builtinPlugins?: boolean;\n  localization?: boolean;\n  pageHierarchy?: boolean;\n  spaceLevelCustomInstructions?: boolean;\n  allowAiTrainingToggle?: boolean;\n  allowAiVisualEditorToggle?: boolean;\n  localeGrouping?: boolean;\n  componentMapping?: boolean;\n  customInstructions?: boolean;\n  assignedCsmAndCe?: boolean;\n  privateSlackChannel?: boolean;\n  useYourOwnLLM?: boolean;\n  addOnAiCredits?: boolean;\n  vsCodeExtension?: boolean;\n  builderMcpServers?: boolean;\n  customMcpServers?: boolean;\n  localWorkspaces?: boolean;\n  remoteWorkspaces?: boolean;\n  customDockerImages?: boolean;\n  performanceInfrastructure?: boolean;\n  previewPasswordProtection?: boolean;\n  publicPreviews?: boolean;\n}\nexport interface SubscriptionInfo {\n  price?: number;\n  basePlusSeats?: number;\n  doNotDisplayPerUserPricing?: boolean;\n  combinePageviewsAndBandwidth?: boolean;\n  includeFastCodeGenerationForContextWindow?: boolean;\n  annualPrice?: number;\n  annualDiscount?: number;\n  isAnnual?: boolean;\n  name:\n    | \"free\"\n    | \"development\"\n    | \"basic\"\n    | \"growth\"\n    | \"enterprise\"\n    | \"internal\"\n    | \"partner\"\n    | \"poc\"\n    | \"legacy\"\n    | \"pro\";\n  limits: Limits;\n  features: FeatureMap;\n  trialDays?: number;\n  body?: string;\n  order?: number;\n  paymentError?: PaymentError;\n  paymentErrorInfo?: any;\n  paymentRequiresAction?: boolean;\n  hostedInvoiceUrl?: string;\n  defaultSpaceFields?: {\n    subscription: Subscription;\n    subscriptionSettings: SubscriptionInfo;\n  };\n  isShopifyDevelopment?: boolean;\n  blurb?: string;\n  enforceMaxUsers?: boolean;\n  tagline?: string;\n  useLegacyCreditsPlan?: boolean;\n  currentBillingPeriodStart?: number;\n  currentBillingPeriodEnd?: number;\n  upcomingLimits?: {\n    effectiveDate: number;\n    users?: number;\n    bandwidth?: number;\n    pageviews?: number;\n    aiCredits?: number;\n  };\n}\n\nexport type Subscription = keyof SubscriptionInfoMap;\nexport interface SubscriptionInfoMap {\n  free: SubscriptionInfo;\n  business: SubscriptionInfo;\n  professional: SubscriptionInfo;\n  pro: SubscriptionInfo;\n  enterprise: SubscriptionInfo;\n  \"collective:v1:level1\": SubscriptionInfo;\n  \"collective:v1:level2\": SubscriptionInfo;\n  \"collective:v1:level3\": SubscriptionInfo;\n  \"collective:v1:enterprise\": SubscriptionInfo;\n  \"cms:v1:level1\": SubscriptionInfo;\n  \"cms:v1:level2\": SubscriptionInfo;\n  \"cms:v1:level3\": SubscriptionInfo;\n  \"cms:v1:level4\": SubscriptionInfo;\n  \"cms:v1:level5\": SubscriptionInfo;\n  \"cms:v1:enterprise\": SubscriptionInfo;\n  \"cms:v2:level1\": SubscriptionInfo;\n  \"cms:v2:level2\": SubscriptionInfo;\n  \"cms:v2:level3\": SubscriptionInfo;\n  \"cms:v3:level1\": SubscriptionInfo;\n  \"cms:v3:level2\": SubscriptionInfo;\n  \"cms:v3:level3\": SubscriptionInfo;\n  \"cms:v2:enterprise\": SubscriptionInfo;\n  \"cms:v2:enterprise-internal\": SubscriptionInfo;\n  \"cms:v2:enterprise-partner\": SubscriptionInfo;\n  \"cms:v2:enterprise-poc\": SubscriptionInfo;\n  \"cms:v4:level1\": SubscriptionInfo;\n  \"cms:v4:level2\": SubscriptionInfo;\n  \"cms:v4:level3\": SubscriptionInfo;\n  \"cms:v5:level1\": SubscriptionInfo;\n  \"cms:v5:level2\": SubscriptionInfo;\n  \"cms:v5:level3\": SubscriptionInfo;\n  \"cms:v6:level3\": SubscriptionInfo;\n  \"cms:v7:level1\": SubscriptionInfo;\n  \"cms:v7:level2\": SubscriptionInfo;\n  \"cms:v7:level2-internal\": SubscriptionInfo;\n  \"cms:v7:level3\": SubscriptionInfo;\n  \"cms:v7:level3-internal\": SubscriptionInfo;\n  \"cms:v7.1:level1\": SubscriptionInfo;\n  \"cms:v8:level1\": SubscriptionInfo;\n  \"cms:v8:level2\": SubscriptionInfo;\n  \"cms:v9:level1\": SubscriptionInfo;\n  \"cms:v9:level2\": SubscriptionInfo;\n  \"cms:v10:level1\": SubscriptionInfo;\n  \"cms:v10:level2\": SubscriptionInfo;\n  \"vcp:v1:level1\": SubscriptionInfo;\n  \"vcp:v1:level2\": SubscriptionInfo;\n  \"vcp:v1:enterprise\": SubscriptionInfo;\n  \"vcp:v2:level1\": SubscriptionInfo;\n  \"vcp:v2:level2\": SubscriptionInfo;\n  \"shopify:v1:level1\": SubscriptionInfo;\n  \"shopify:v1:level2\": SubscriptionInfo;\n  \"shopify:v2:level1\": SubscriptionInfo;\n  \"shopify:v2:level2\": SubscriptionInfo;\n  \"shopify:v3:level1\": SubscriptionInfo;\n  \"shopify:v3:level2\": SubscriptionInfo;\n  \"shopify:v4:level2\": SubscriptionInfo;\n  \"shopify:v2:development\": SubscriptionInfo;\n  \"shopify:v3:development\": SubscriptionInfo;\n  \"shopify:v1:enterprise\": SubscriptionInfo;\n}\n\ninterface Role {\n  id?: string;\n  name?: string;\n  description?: string;\n  globalFilters?: Record<string, any>;\n  options?: RoleOptions;\n  models?: string;\n  environment?: RoleEnvironment;\n  locales?: RoleLocales;\n  projects?: \"all\" | Record<string, ProjectRole>;\n}\n\nexport interface Organization {\n  name?: string;\n  id?: string;\n  createdDate?: number;\n  intent?: string;\n  ecommerceBackend?: string;\n  loadPlugins?: string[];\n  ownerId?: string;\n  parentOrganization?: string;\n  type?: string;\n  kind?: string;\n  \"@version\"?: number;\n  hasIntegrated?: string;\n  hasMadeSomethingInteractive?: boolean;\n  settings?: OrganizationSettings;\n  subscription?: keyof SubscriptionInfoMap;\n  hasImportedFromFigma?: boolean;\n  hasIntegratedFigma?: boolean;\n  roles?: Role[];\n  subscriptionSettings?: string;\n  totalBytesStored?: number;\n  lastUpdateBy?: string | null;\n  trialStartDate?: number;\n  enterpriseTrialStartDate?: number;\n  enterpriseTrialEndDate?: number;\n  fusionReferrals?: string;\n  githubInstallationIds?: number[];\n}\n", "export type Feature = \"repo-indexing\" | \"component-mapping\";\n", "export * from \"./completion.js\";\nexport * from \"./events.js\";\nexport * from \"./messages.js\";\nexport * from \"./settings.js\";\nexport * from \"./mapping.js\";\nexport * from \"./codegen.js\";\nexport * from \"./projects.js\";\nexport * from \"./repo-indexing.js\";\nexport * from \"./organization.js\";\nexport * from \"./features.js\";\n", "function Diff() {}\nDiff.prototype = {\n  diff: function diff(oldString, newString) {\n    var _options$timeout;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var callback = options.callback;\n\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n\n    this.options = options;\n    var self = this;\n\n    function done(value) {\n      if (callback) {\n        setTimeout(function () {\n          callback(undefined, value);\n        }, 0);\n        return true;\n      } else {\n        return value;\n      }\n    } // Allow subclasses to massage the input prior to running\n\n\n    oldString = this.castInput(oldString);\n    newString = this.castInput(newString);\n    oldString = this.removeEmpty(this.tokenize(oldString));\n    newString = this.removeEmpty(this.tokenize(newString));\n    var newLen = newString.length,\n        oldLen = oldString.length;\n    var editLength = 1;\n    var maxEditLength = newLen + oldLen;\n\n    if (options.maxEditLength) {\n      maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n    }\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    }]; // Seed editLength = 0, i.e. the content starts with the same values\n\n    var newPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n\n    if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n      // Identity per the equality and tokenizer\n      return done([{\n        value: this.join(newString),\n        count: newString.length\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\n\n    var minDiagonalToConsider = -Infinity,\n        maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance.\n\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\n        if (removePath) {\n          // No one else is going to attempt to use this value, clear it\n          bestPath[diagonalPath - 1] = undefined;\n        }\n\n        var canAdd = false;\n\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\n        var canRemove = removePath && removePath.oldPos + 1 < oldLen;\n\n        if (!canAdd && !canRemove) {\n          // If this path is a terminal then prune\n          bestPath[diagonalPath] = undefined;\n          continue;\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        // TODO: Remove the `+ 1` here to make behavior match Myers algorithm\n        //       and prefer to order removals before insertions.\n\n\n        if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) {\n          basePath = self.addToPath(addPath, true, undefined, 0);\n        } else {\n          basePath = self.addToPath(removePath, undefined, true, 1);\n        }\n\n        newPos = self.extractCommon(basePath, newString, oldString, diagonalPath);\n\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\n          if (basePath.oldPos + 1 >= oldLen) {\n            maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n          }\n\n          if (newPos + 1 >= newLen) {\n            minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n          }\n        }\n      }\n\n      editLength++;\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\n\n    if (callback) {\n      (function exec() {\n        setTimeout(function () {\n          if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n            return callback();\n          }\n\n          if (!execEditLength()) {\n            exec();\n          }\n        }, 0);\n      })();\n    } else {\n      while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n        var ret = execEditLength();\n\n        if (ret) {\n          return ret;\n        }\n      }\n    }\n  },\n  addToPath: function addToPath(path, added, removed, oldPosInc) {\n    var last = path.lastComponent;\n\n    if (last && 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) {\n    var newLen = newString.length,\n        oldLen = oldString.length,\n        oldPos = basePath.oldPos,\n        newPos = oldPos - diagonalPath,\n        commonCount = 0;\n\n    while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n      newPos++;\n      oldPos++;\n      commonCount++;\n    }\n\n    if (commonCount) {\n      basePath.lastComponent = {\n        count: commonCount,\n        previousComponent: basePath.lastComponent\n      };\n    }\n\n    basePath.oldPos = oldPos;\n    return newPos;\n  },\n  equals: function equals(left, right) {\n    if (this.options.comparator) {\n      return this.options.comparator(left, right);\n    } else {\n      return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n    }\n  },\n  removeEmpty: function removeEmpty(array) {\n    var ret = [];\n\n    for (var i = 0; i < array.length; i++) {\n      if (array[i]) {\n        ret.push(array[i]);\n      }\n    }\n\n    return ret;\n  },\n  castInput: function castInput(value) {\n    return value;\n  },\n  tokenize: function tokenize(value) {\n    return value.split('');\n  },\n  join: function join(chars) {\n    return chars.join('');\n  }\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\n  while (lastComponent) {\n    components.push(lastComponent);\n    nextComponent = lastComponent.previousComponent;\n    delete lastComponent.previousComponent;\n    lastComponent = nextComponent;\n  }\n\n  components.reverse();\n  var componentPos = 0,\n      componentLen = components.length,\n      newPos = 0,\n      oldPos = 0;\n\n  for (; componentPos < componentLen; componentPos++) {\n    var component = components[componentPos];\n\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\n      newPos += component.count; // Common case\n\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; // Reverse add and remove so removes are output first to match common convention\n      // The diffing algorithm is tied to add then remove output and this is the simplest\n      // route to get the desired output with minimal overhead.\n\n      if (componentPos && components[componentPos - 1].added) {\n        var tmp = components[componentPos - 1];\n        components[componentPos - 1] = components[componentPos];\n        components[componentPos] = tmp;\n      }\n    }\n  } // Special case handle for when one terminal is ignored (i.e. whitespace).\n  // For this case we merge the terminal into the prior string and drop the change.\n  // This is only available for string mode.\n\n\n  var finalComponent = components[componentLen - 1];\n\n  if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) {\n    components[componentLen - 2].value += finalComponent.value;\n    components.pop();\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 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\n  return defaults;\n}\n\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080\u201300FF\n//  - U+00D7  \u00D7 Multiplication sign\n//  - U+00F7  \u00F7 Division sign\n// Latin Extended-A, 0100\u2013017F\n// Latin Extended-B, 0180\u2013024F\n// IPA Extensions, 0250\u201302AF\n// Spacing Modifier Letters, 02B0\u201302FF\n//  - U+02C7  \u02C7 &#711;  Caron\n//  - U+02D8  \u02D8 &#728;  Breve\n//  - U+02D9  \u02D9 &#729;  Dot Above\n//  - U+02DA  \u02DA &#730;  Ring Above\n//  - U+02DB  \u02DB &#731;  Ogonek\n//  - U+02DC  \u02DC &#732;  Small Tilde\n//  - U+02DD  \u02DD &#733;  Double Acute Accent\n// Latin Extended Additional, 1E00\u20131EFF\n\nvar extendedWordChars = /^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/;\nvar reWhitespace = /\\S/;\nvar wordDiff = new Diff();\n\nwordDiff.equals = function (left, right) {\n  if (this.options.ignoreCase) {\n    left = left.toLowerCase();\n    right = right.toLowerCase();\n  }\n\n  return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);\n};\n\nwordDiff.tokenize = function (value) {\n  // All whitespace symbols except newline group into one token, each newline - in separate token\n  var tokens = value.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.\n\n  for (var i = 0; i < tokens.length - 1; i++) {\n    // If we have an empty string in the next field and we have only word chars before and after, merge\n    if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {\n      tokens[i] += tokens[i + 2];\n      tokens.splice(i + 1, 2);\n      i--;\n    }\n  }\n\n  return tokens;\n};\n\nfunction diffWords(oldStr, newStr, options) {\n  options = generateOptions(options, {\n    ignoreWhitespace: true\n  });\n  return wordDiff.diff(oldStr, newStr, options);\n}\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n  return wordDiff.diff(oldStr, newStr, options);\n}\n\nvar lineDiff = new Diff();\n\nlineDiff.tokenize = function (value) {\n  if (this.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\n  var retLines = [],\n      linesAndNewlines = value.split(/(\\n|\\r\\n)/); // Ignore the final empty token that occurs if the string ends with a new line\n\n  if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n    linesAndNewlines.pop();\n  } // Merge the content and line separators into single tokens\n\n\n  for (var i = 0; i < linesAndNewlines.length; i++) {\n    var line = linesAndNewlines[i];\n\n    if (i % 2 && !this.options.newlineIsToken) {\n      retLines[retLines.length - 1] += line;\n    } else {\n      if (this.options.ignoreWhitespace) {\n        line = line.trim();\n      }\n\n      retLines.push(line);\n    }\n  }\n\n  return retLines;\n};\n\nfunction diffLines(oldStr, newStr, callback) {\n  return lineDiff.diff(oldStr, newStr, callback);\n}\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();\n\nsentenceDiff.tokenize = function (value) {\n  return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\n\nfunction diffSentences(oldStr, newStr, callback) {\n  return sentenceDiff.diff(oldStr, newStr, callback);\n}\n\nvar cssDiff = new Diff();\n\ncssDiff.tokenize = function (value) {\n  return value.split(/([{}:;,]|\\s+)/);\n};\n\nfunction diffCss(oldStr, newStr, callback) {\n  return cssDiff.diff(oldStr, newStr, callback);\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\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\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\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}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\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 objectPrototypeToString = Object.prototype.toString;\nvar jsonDiff = new Diff(); // 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:\n\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\n\njsonDiff.castInput = function (value) {\n  var _this$options = this.options,\n      undefinedReplacement = _this$options.undefinedReplacement,\n      _this$options$stringi = _this$options.stringifyReplacer,\n      stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) {\n    return typeof v === 'undefined' ? undefinedReplacement : v;\n  } : _this$options$stringi;\n  return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, '  ');\n};\n\njsonDiff.equals = function (left, right) {\n  return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'));\n};\n\nfunction diffJson(oldObj, newObj, options) {\n  return jsonDiff.diff(oldObj, newObj, options);\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\n\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n  stack = stack || [];\n  replacementStack = replacementStack || [];\n\n  if (replacer) {\n    obj = replacer(key, obj);\n  }\n\n  var i;\n\n  for (i = 0; i < stack.length; i += 1) {\n    if (stack[i] === obj) {\n      return replacementStack[i];\n    }\n  }\n\n  var canonicalizedObj;\n\n  if ('[object Array]' === objectPrototypeToString.call(obj)) {\n    stack.push(obj);\n    canonicalizedObj = new Array(obj.length);\n    replacementStack.push(canonicalizedObj);\n\n    for (i = 0; i < obj.length; i += 1) {\n      canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n    }\n\n    stack.pop();\n    replacementStack.pop();\n    return canonicalizedObj;\n  }\n\n  if (obj && obj.toJSON) {\n    obj = obj.toJSON();\n  }\n\n  if (_typeof(obj) === 'object' && obj !== null) {\n    stack.push(obj);\n    canonicalizedObj = {};\n    replacementStack.push(canonicalizedObj);\n\n    var sortedKeys = [],\n        _key;\n\n    for (_key in obj) {\n      /* istanbul ignore else */\n      if (obj.hasOwnProperty(_key)) {\n        sortedKeys.push(_key);\n      }\n    }\n\n    sortedKeys.sort();\n\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\n    stack.pop();\n    replacementStack.pop();\n  } else {\n    canonicalizedObj = obj;\n  }\n\n  return canonicalizedObj;\n}\n\nvar arrayDiff = new Diff();\n\narrayDiff.tokenize = function (value) {\n  return value.slice();\n};\n\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n  return value;\n};\n\nfunction diffArrays(oldArr, newArr, callback) {\n  return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nfunction parsePatch(uniDiff) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var diffstr = uniDiff.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n      delimiters = uniDiff.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n      list = [],\n      i = 0;\n\n  function parseIndex() {\n    var index = {};\n    list.push(index); // Parse diff metadata\n\n    while (i < diffstr.length) {\n      var line = diffstr[i]; // File header found, end parsing diff metadata\n\n      if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n        break;\n      } // Diff index\n\n\n      var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n\n      if (header) {\n        index.index = header[1];\n      }\n\n      i++;\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\n\n    parseFileHeader(index);\n    parseFileHeader(index); // Parse hunks\n\n    index.hunks = [];\n\n    while (i < diffstr.length) {\n      var _line = diffstr[i];\n\n      if (/^(Index:|diff|\\-\\-\\-|\\+\\+\\+)\\s/.test(_line)) {\n        break;\n      } else if (/^@@/.test(_line)) {\n        index.hunks.push(parseHunk());\n      } else if (_line && options.strict) {\n        // Ignore unexpected content unless in strict mode\n        throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n      } else {\n        i++;\n      }\n    }\n  } // Parses the --- and +++ headers, if none are found, no lines\n  // are consumed.\n\n\n  function parseFileHeader(index) {\n    var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)$/.exec(diffstr[i]);\n\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\n      if (/^\".*\"$/.test(fileName)) {\n        fileName = fileName.substr(1, fileName.length - 2);\n      }\n\n      index[keyPrefix + 'FileName'] = fileName;\n      index[keyPrefix + 'Header'] = (data[1] || '').trim();\n      i++;\n    }\n  } // Parses a hunk\n  // This assumes that we are at the start of a hunk.\n\n\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      linedelimiters: []\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\n    if (hunk.oldLines === 0) {\n      hunk.oldStart += 1;\n    }\n\n    if (hunk.newLines === 0) {\n      hunk.newStart += 1;\n    }\n\n    var addCount = 0,\n        removeCount = 0;\n\n    for (; i < diffstr.length; i++) {\n      // Lines starting with '---' could be mistaken for the \"remove line\" operation\n      // But they could be the header for the next file. Therefore prune such cases out.\n      if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {\n        break;\n      }\n\n      var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n\n      if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n        hunk.lines.push(diffstr[i]);\n        hunk.linedelimiters.push(delimiters[i] || '\\n');\n\n        if (operation === '+') {\n          addCount++;\n        } else if (operation === '-') {\n          removeCount++;\n        } else if (operation === ' ') {\n          addCount++;\n          removeCount++;\n        }\n      } else {\n        break;\n      }\n    } // Handle the empty block count case\n\n\n    if (!addCount && hunk.newLines === 1) {\n      hunk.newLines = 0;\n    }\n\n    if (!removeCount && hunk.oldLines === 1) {\n      hunk.oldLines = 0;\n    } // Perform optional sanity checking\n\n\n    if (options.strict) {\n      if (addCount !== hunk.newLines) {\n        throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n      }\n\n      if (removeCount !== hunk.oldLines) {\n        throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n      }\n    }\n\n    return hunk;\n  }\n\n  while (i < diffstr.length) {\n    parseIndex();\n  }\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      } // 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\n\n      if (start + localOffset <= maxLine) {\n        return localOffset;\n      }\n\n      forwardExhausted = true;\n    }\n\n    if (!backwardExhausted) {\n      if (!forwardExhausted) {\n        wantForward = true;\n      } // Check if trying to fit before text beginning, and if not, check it fits\n      // before offset location\n\n\n      if (minLine <= start - localOffset) {\n        return -localOffset++;\n      }\n\n      backwardExhausted = true;\n      return iterator();\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}\n\nfunction applyPatch(source, uniDiff) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  if (typeof uniDiff === 'string') {\n    uniDiff = parsePatch(uniDiff);\n  }\n\n  if (Array.isArray(uniDiff)) {\n    if (uniDiff.length > 1) {\n      throw new Error('applyPatch only works with a single input.');\n    }\n\n    uniDiff = uniDiff[0];\n  } // Apply the diff to the input\n\n\n  var lines = source.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n      delimiters = source.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n      hunks = uniDiff.hunks,\n      compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n    return line === patchContent;\n  },\n      errorCount = 0,\n      fuzzFactor = options.fuzzFactor || 0,\n      minLine = 0,\n      offset = 0,\n      removeEOFNL,\n      addEOFNL;\n  /**\n   * Checks if the hunk exactly fits on the provided location\n   */\n\n\n  function hunkFits(hunk, toPos) {\n    for (var j = 0; j < hunk.lines.length; j++) {\n      var line = hunk.lines[j],\n          operation = line.length > 0 ? line[0] : ' ',\n          content = line.length > 0 ? line.substr(1) : line;\n\n      if (operation === ' ' || operation === '-') {\n        // Context sanity check\n        if (!compareLine(toPos + 1, lines[toPos], operation, content)) {\n          errorCount++;\n\n          if (errorCount > fuzzFactor) {\n            return false;\n          }\n        }\n\n        toPos++;\n      }\n    }\n\n    return true;\n  } // Search best fit offsets for each hunk based on the previous ones\n\n\n  for (var i = 0; i < hunks.length; i++) {\n    var hunk = hunks[i],\n        maxLine = lines.length - hunk.oldLines,\n        localOffset = 0,\n        toPos = offset + hunk.oldStart - 1;\n    var iterator = distanceIterator(toPos, minLine, maxLine);\n\n    for (; localOffset !== undefined; localOffset = iterator()) {\n      if (hunkFits(hunk, toPos + localOffset)) {\n        hunk.offset = offset += localOffset;\n        break;\n      }\n    }\n\n    if (localOffset === undefined) {\n      return false;\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\n\n    minLine = hunk.offset + hunk.oldStart + hunk.oldLines;\n  } // Apply patch hunks\n\n\n  var diffOffset = 0;\n\n  for (var _i = 0; _i < hunks.length; _i++) {\n    var _hunk = hunks[_i],\n        _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;\n\n    diffOffset += _hunk.newLines - _hunk.oldLines;\n\n    for (var j = 0; j < _hunk.lines.length; j++) {\n      var line = _hunk.lines[j],\n          operation = line.length > 0 ? line[0] : ' ',\n          content = line.length > 0 ? line.substr(1) : line,\n          delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\\n';\n\n      if (operation === ' ') {\n        _toPos++;\n      } else if (operation === '-') {\n        lines.splice(_toPos, 1);\n        delimiters.splice(_toPos, 1);\n        /* istanbul ignore else */\n      } else if (operation === '+') {\n        lines.splice(_toPos, 0, content);\n        delimiters.splice(_toPos, 0, delimiter);\n        _toPos++;\n      } else if (operation === '\\\\') {\n        var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;\n\n        if (previousOperation === '+') {\n          removeEOFNL = true;\n        } else if (previousOperation === '-') {\n          addEOFNL = true;\n        }\n      }\n    }\n  } // Handle EOFNL insertion/removal\n\n\n  if (removeEOFNL) {\n    while (!lines[lines.length - 1]) {\n      lines.pop();\n      delimiters.pop();\n    }\n  } else if (addEOFNL) {\n    lines.push('');\n    delimiters.push('\\n');\n  }\n\n  for (var _k = 0; _k < lines.length - 1; _k++) {\n    lines[_k] = lines[_k] + delimiters[_k];\n  }\n\n  return lines.join('');\n} // Wrapper that supports multiple file patches via callbacks.\n\nfunction applyPatches(uniDiff, options) {\n  if (typeof uniDiff === 'string') {\n    uniDiff = parsePatch(uniDiff);\n  }\n\n  var currentIndex = 0;\n\n  function processIndex() {\n    var index = uniDiff[currentIndex++];\n\n    if (!index) {\n      return options.complete();\n    }\n\n    options.loadFile(index, function (err, data) {\n      if (err) {\n        return options.complete(err);\n      }\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\n        processIndex();\n      });\n    });\n  }\n\n  processIndex();\n}\n\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n  if (!options) {\n    options = {};\n  }\n\n  if (typeof options.context === 'undefined') {\n    options.context = 4;\n  }\n\n  var diff = diffLines(oldStr, newStr, options);\n\n  if (!diff) {\n    return;\n  }\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\n  var hunks = [];\n  var oldRangeStart = 0,\n      newRangeStart = 0,\n      curRange = [],\n      oldLine = 1,\n      newLine = 1;\n\n  var _loop = function _loop(i) {\n    var current = diff[i],\n        lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n    current.lines = lines;\n\n    if (current.added || current.removed) {\n      var _curRange;\n\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\n        if (prev) {\n          curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n          oldRangeStart -= curRange.length;\n          newRangeStart -= curRange.length;\n        }\n      } // Output our changes\n\n\n      (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n        return (current.added ? '+' : '-') + entry;\n      }))); // Track the updated file position\n\n\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\n          // Overlapping\n          (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n        } else {\n          var _curRange3;\n\n          // end the range and output\n          var contextSize = Math.min(lines.length, options.context);\n\n          (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n\n          var hunk = {\n            oldStart: oldRangeStart,\n            oldLines: oldLine - oldRangeStart + contextSize,\n            newStart: newRangeStart,\n            newLines: newLine - newRangeStart + contextSize,\n            lines: curRange\n          };\n\n          if (i >= diff.length - 2 && lines.length <= options.context) {\n            // EOF is inside this hunk\n            var oldEOFNewline = /\\n$/.test(oldStr);\n            var newEOFNewline = /\\n$/.test(newStr);\n            var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;\n\n            if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) {\n              // special case: old has no eol and no trailing context; no-nl can end up before adds\n              // however, if the old file is empty, do not output the no-nl line\n              curRange.splice(hunk.oldLines, 0, '\\\\ No newline at end of file');\n            }\n\n            if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {\n              curRange.push('\\\\ No newline at end of file');\n            }\n          }\n\n          hunks.push(hunk);\n          oldRangeStart = 0;\n          newRangeStart = 0;\n          curRange = [];\n        }\n      }\n\n      oldLine += lines.length;\n      newLine += lines.length;\n    }\n  };\n\n  for (var i = 0; i < diff.length; i++) {\n    _loop(i);\n  }\n\n  return {\n    oldFileName: oldFileName,\n    newFileName: newFileName,\n    oldHeader: oldHeader,\n    newHeader: newHeader,\n    hunks: hunks\n  };\n}\nfunction formatPatch(diff) {\n  if (Array.isArray(diff)) {\n    return diff.map(formatPatch).join('\\n');\n  }\n\n  var ret = [];\n\n  if (diff.oldFileName == diff.newFileName) {\n    ret.push('Index: ' + diff.oldFileName);\n  }\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\n  for (var i = 0; i < diff.hunks.length; i++) {\n    var hunk = diff.hunks[i]; // 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\n    if (hunk.oldLines === 0) {\n      hunk.oldStart -= 1;\n    }\n\n    if (hunk.newLines === 0) {\n      hunk.newStart -= 1;\n    }\n\n    ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n    ret.push.apply(ret, hunk.lines);\n  }\n\n  return ret.join('\\n') + '\\n';\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n  return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options));\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n  return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n\nfunction arrayEqual(a, b) {\n  if (a.length !== b.length) {\n    return false;\n  }\n\n  return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n  if (start.length > array.length) {\n    return false;\n  }\n\n  for (var i = 0; i < start.length; i++) {\n    if (start[i] !== array[i]) {\n      return false;\n    }\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\n  if (oldLines !== undefined) {\n    hunk.oldLines = oldLines;\n  } else {\n    delete hunk.oldLines;\n  }\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 = {}; // 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\n  if (mine.index || theirs.index) {\n    ret.index = mine.index || theirs.index;\n  }\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\n  ret.hunks = [];\n  var mineIndex = 0,\n      theirsIndex = 0,\n      mineOffset = 0,\n      theirsOffset = 0;\n\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\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\n  return ret;\n}\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\n    if (!base) {\n      throw new Error('Must provide a base reference or pass in a patch');\n    }\n\n    return structuredPatch(undefined, undefined, base, param);\n  }\n\n  return param;\n}\n\nfunction fileNameChanged(patch) {\n  return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\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}\n\nfunction hunkBefore(test, check) {\n  return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\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}\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  }; // Handle any leading content\n\n  insertLeading(hunk, mine, their);\n  insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each.\n\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\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\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\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  } // Now push anything that may be remaining\n\n\n  insertTrailing(hunk, mine);\n  insertTrailing(hunk, their);\n  calcLineCount(hunk);\n}\n\nfunction mutualChange(hunk, mine, their) {\n  var myChanges = collectChange(mine),\n      theirChanges = collectChange(their);\n\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\n      (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n\n      return;\n    } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n      var _hunk$lines4;\n\n      (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n\n      return;\n    }\n  } else if (arrayEqual(myChanges, theirChanges)) {\n    var _hunk$lines5;\n\n    (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n\n    return;\n  }\n\n  conflict(hunk, myChanges, theirChanges);\n}\n\nfunction removal(hunk, mine, their, swap) {\n  var myChanges = collectChange(mine),\n      theirChanges = collectContext(their, myChanges);\n\n  if (theirChanges.merged) {\n    var _hunk$lines6;\n\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}\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}\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}\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}\n\nfunction collectChange(state) {\n  var ret = [],\n      operation = state.lines[state.index][0];\n\n  while (state.index < state.lines.length) {\n    var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n\n    if (operation === '-' && line[0] === '+') {\n      operation = '+';\n    }\n\n    if (operation === line[0]) {\n      ret.push(line);\n      state.index++;\n    } else {\n      break;\n    }\n  }\n\n  return ret;\n}\n\nfunction collectContext(state, matchChanges) {\n  var changes = [],\n      merged = [],\n      matchIndex = 0,\n      contextChanges = false,\n      conflicted = false;\n\n  while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n    var change = state.lines[state.index],\n        match = matchChanges[matchIndex]; // Once we've hit our add, then we are done\n\n    if (match[0] === '+') {\n      break;\n    }\n\n    contextChanges = contextChanges || change[0] !== ' ';\n    merged.push(match);\n    matchIndex++; // Consume any additions in the other block as a conflict to attempt\n    // to pull in the remaining context after this\n\n    if (change[0] === '+') {\n      conflicted = true;\n\n      while (change[0] === '+') {\n        changes.push(change);\n        change = state.lines[++state.index];\n      }\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\n  if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n    conflicted = true;\n  }\n\n  if (conflicted) {\n    return changes;\n  }\n\n  while (matchIndex < matchChanges.length) {\n    merged.push(matchChanges[matchIndex++]);\n  }\n\n  return {\n    merged: merged,\n    changes: changes\n  };\n}\n\nfunction allRemoves(changes) {\n  return changes.reduce(function (prev, change) {\n    return prev && change[0] === '-';\n  }, true);\n}\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\n    if (state.lines[state.index + i] !== ' ' + changeContent) {\n      return false;\n    }\n  }\n\n  state.index += delta;\n  return true;\n}\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\n      if (oldLines !== undefined) {\n        if (myCount.oldLines === theirCount.oldLines) {\n          oldLines += myCount.oldLines;\n        } else {\n          oldLines = undefined;\n        }\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\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\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        linedelimiters: hunk.linedelimiters,\n        lines: hunk.lines.map(function (l) {\n          if (l.startsWith('-')) {\n            return \"+\".concat(l.slice(1));\n          }\n\n          if (l.startsWith('+')) {\n            return \"-\".concat(l.slice(1));\n          }\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\n  for (var i = 0; i < changes.length; i++) {\n    change = changes[i];\n\n    if (change.added) {\n      operation = 1;\n    } else if (change.removed) {\n      operation = -1;\n    } else {\n      operation = 0;\n    }\n\n    ret.push([operation, change.value]);\n  }\n\n  return ret;\n}\n\nfunction convertChangesToXML(changes) {\n  var ret = [];\n\n  for (var i = 0; i < changes.length; i++) {\n    var change = changes[i];\n\n    if (change.added) {\n      ret.push('<ins>');\n    } else if (change.removed) {\n      ret.push('<del>');\n    }\n\n    ret.push(escapeHTML(change.value));\n\n    if (change.added) {\n      ret.push('</ins>');\n    } else if (change.removed) {\n      ret.push('</del>');\n    }\n  }\n\n  return ret.join('');\n}\n\nfunction escapeHTML(s) {\n  var n = s;\n  n = n.replace(/&/g, '&amp;');\n  n = n.replace(/</g, '&lt;');\n  n = n.replace(/>/g, '&gt;');\n  n = n.replace(/\"/g, '&quot;');\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 { CustomInstruction } from \"../ai-utils/src/codegen\";\nimport path from \"path\";\n\nexport interface MdcFrontmatterData {\n  description?: string;\n  glob?: string;\n  type: \"agent-mode\" | \"always\";\n}\n\nexport interface MdcParseResult {\n  frontmatter: MdcFrontmatterData;\n  body: string;\n}\n\n/**\n * Detects if a file is an MDC file based on filename and content\n * @param fileName - The name or path of the file\n * @param content - The content of the file\n * @returns true if the file appears to be an MDC file\n */\nexport function isMdcFile(\n  fileName: string | undefined,\n  content: string | undefined,\n): boolean {\n  if (!fileName || !content) {\n    return false;\n  }\n\n  // Check file extension\n  const hasCorrectExtension = fileName.toLowerCase().endsWith(\".mdc\");\n\n  // Check content structure - should have frontmatter delimiters\n  const hasValidStructure =\n    typeof content === \"string\" &&\n    content.trim().startsWith(\"---\") &&\n    content.indexOf(\"---\", 3) > 3; // Second --- should exist after the first one\n\n  return hasCorrectExtension && hasValidStructure;\n}\n\n/**\n * Parses .mdc file content with frontmatter format.\n * Expected format:\n * ```\n * ---\n * description: Some description\n * globs: *.ts,*.js\n * alwaysApply: true\n * ---\n * Main content body here\n * ```\n *\n * @param fileContent - The raw file content to parse\n * @returns Parsed frontmatter data and body content\n * @throws Error if the file format is invalid\n */\nexport function parseMdcFile(fileContent: string): MdcParseResult {\n  // Handle invalid input gracefully\n  if (!fileContent || typeof fileContent !== \"string\") {\n    return {\n      frontmatter: {\n        description: \"\",\n        glob: \"\",\n        type: \"agent-mode\",\n      },\n      body: \"\",\n    };\n  }\n\n  try {\n    // Preprocess content by converting JSON string representation and replacing \\\\n with \\n\n    // This matches the original logic exactly\n    const preprocessedContent = JSON.stringify(fileContent).replace(\n      /\\\\n/g,\n      \"\\n\",\n    );\n\n    // Split by frontmatter delimiters\n    const parts = preprocessedContent.split(\"---\");\n\n    // Handle missing frontmatter delimiters gracefully\n    if (parts.length < 3) {\n      return {\n        frontmatter: {\n          description: \"\",\n          glob: \"\",\n          type: \"agent-mode\",\n        },\n        body: fileContent.trim(),\n      };\n    }\n\n    // Extract frontmatter and body, filtering out empty parts - this matches the original logic\n    const filteredParts = parts.map((s) => s.trim()).filter(Boolean);\n\n    // Handle insufficient parts gracefully\n    if (filteredParts.length < 2) {\n      return {\n        frontmatter: {\n          description: \"\",\n          glob: \"\",\n          type: \"agent-mode\",\n        },\n        body: \"\",\n      };\n    }\n\n    // The original logic assumes filtered parts [0] is the quote, [1] is frontmatter, [2] is body\n    // We need to handle this correctly based on the actual structure\n    let frontmatterContent = \"\";\n    let body = \"\";\n\n    if (filteredParts.length >= 3) {\n      // Standard case: ['\"', 'frontmatter', 'body...', 'more body...']\n      frontmatterContent = filteredParts[1];\n      // Join all remaining parts in case body contains additional ---\n      body = filteredParts.slice(2).join(\" --- \");\n\n      // Remove trailing quote from body if present\n      if (body.endsWith('\"')) {\n        body = body.slice(0, -1);\n      }\n    } else if (filteredParts.length === 2) {\n      // Edge case: just frontmatter and body combined\n      frontmatterContent = filteredParts[0];\n      body = filteredParts[1];\n\n      if (body.endsWith('\"')) {\n        body = body.slice(0, -1);\n      }\n    }\n\n    body = body.trim();\n\n    // Parse frontmatter\n    const frontmatterLines = frontmatterContent\n      .split(\"\\n\")\n      .filter((line) => line.trim());\n\n    let description = \"\";\n    let glob = \"\";\n    let type: \"agent-mode\" | \"always\" = \"agent-mode\";\n\n    for (const line of frontmatterLines) {\n      const colonIndex = line.indexOf(\":\");\n      if (colonIndex === -1) continue;\n\n      const key = line.substring(0, colonIndex).trim();\n      const value = line.substring(colonIndex + 1).trim();\n\n      switch (key) {\n        case \"description\":\n          description = value || \"\";\n          break;\n        case \"globs\":\n          glob = value || \"\";\n          break;\n        case \"alwaysApply\":\n          type = value === \"true\" ? \"always\" : \"agent-mode\";\n          break;\n      }\n    }\n\n    return {\n      frontmatter: {\n        description,\n        glob,\n        type,\n      },\n      body,\n    };\n  } catch (error) {\n    // If any error occurs during parsing, return graceful defaults\n    return {\n      frontmatter: {\n        description: \"\",\n        glob: \"\",\n        type: \"agent-mode\",\n      },\n      body: fileContent.trim(),\n    };\n  }\n}\n\n/**\n * Creates a custom instruction object from parsed .mdc content.\n * This is a convenience function that combines parsing with object creation.\n *\n * @param fileContent - The raw file content to parse\n * @param filePath - The file path for the instruction\n * @param hashFunction - Function to generate hash from content (optional)\n * @returns Custom instruction object\n */\nexport function createCustomInstructionFromMdc(\n  fileContent: string,\n  filePath: string,\n  hashFunction?: (content: string) => string,\n): CustomInstruction {\n  const parsed = parseMdcFile(fileContent);\n\n  const createInstruction = (id?: string): CustomInstruction => {\n    // Extract rule name from file path (remove extension)\n    // If filePath is a URL, use only the basename\n    let fileName: string;\n    if (filePath.startsWith(\"https://\") || filePath.startsWith(\"http://\")) {\n      // For URLs, extract just the basename\n      fileName = path.basename(new URL(filePath).pathname);\n    } else {\n      // For regular file paths\n      fileName = path.basename(filePath);\n    }\n\n    const ruleName = fileName.split(\".\")[0];\n\n    return {\n      id: id || `hash-${Date.now()}`, // fallback if no hash function provided\n      name: ruleName,\n      content: parsed.body,\n      description: parsed.frontmatter.description,\n      filePath,\n      glob: parsed.frontmatter.glob,\n      type: parsed.frontmatter.type,\n    };\n  };\n\n  if (hashFunction) {\n    const result = hashFunction(fileContent);\n    return createInstruction(`hash-${result}`);\n  }\n\n  return createInstruction();\n}\n", "function wait(ms: number) {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function exponentialBackoff(i: number) {\n  // Base delay of 500ms, max delay of 8 seconds\n  // Adding jitter of up to 25% of the calculated delay\n  const baseDelay = 500;\n  const maxDelay = 8000;\n  const calculatedDelay = Math.min(baseDelay * Math.pow(2, i), maxDelay);\n  const jitter = calculatedDelay * 0.25 * Math.random();\n  await wait(calculatedDelay + jitter);\n}\n", "export async function* transformStream(\n  body: ReadableStream<Uint8Array> | null,\n) {\n  if (!body) {\n    return;\n  }\n  let accumulatedValue = \"\";\n  const reader = body.getReader();\n  let done, value;\n  try {\n    while (!done) {\n      ({ value, done } = await reader.read());\n      if (done) {\n        break;\n      } else {\n        const str = new TextDecoder().decode(value);\n        accumulatedValue += str;\n        const parts = accumulatedValue.split(\"\\n\");\n        for (let i = 0; i < parts.length - 1; i++) {\n          yield parts[i];\n        }\n        accumulatedValue = parts[parts.length - 1];\n      }\n    }\n  } catch (err) {\n    throw err;\n  } finally {\n    try {\n      reader.releaseLock();\n    } catch (err) {\n      console.error(\"Error releasing lock\", err);\n    }\n  }\n}\n", "'use strict';\n\nvar childProcess = require('child_process');\nvar spawn = childProcess.spawn;\nvar exec = childProcess.exec;\n\nmodule.exports = function (pid, signal, callback) {\n    if (typeof signal === 'function' && callback === undefined) {\n        callback = signal;\n        signal = undefined;\n    }\n\n    pid = parseInt(pid);\n    if (Number.isNaN(pid)) {\n        if (callback) {\n            return callback(new Error(\"pid must be a number\"));\n        } else {\n            throw new Error(\"pid must be a number\");\n        }\n    }\n\n    var tree = {};\n    var pidsToProcess = {};\n    tree[pid] = [];\n    pidsToProcess[pid] = 1;\n\n    switch (process.platform) {\n    case 'win32':\n        exec('taskkill /pid ' + pid + ' /T /F', callback);\n        break;\n    case 'darwin':\n        buildProcessTree(pid, tree, pidsToProcess, function (parentPid) {\n          return spawn('pgrep', ['-P', parentPid]);\n        }, function () {\n            killAll(tree, signal, callback);\n        });\n        break;\n    // case 'sunos':\n    //     buildProcessTreeSunOS(pid, tree, pidsToProcess, function () {\n    //         killAll(tree, signal, callback);\n    //     });\n    //     break;\n    default: // Linux\n        buildProcessTree(pid, tree, pidsToProcess, function (parentPid) {\n          return spawn('ps', ['-o', 'pid', '--no-headers', '--ppid', parentPid]);\n        }, function () {\n            killAll(tree, signal, callback);\n        });\n        break;\n    }\n};\n\nfunction killAll (tree, signal, callback) {\n    var killed = {};\n    try {\n        Object.keys(tree).forEach(function (pid) {\n            tree[pid].forEach(function (pidpid) {\n                if (!killed[pidpid]) {\n                    killPid(pidpid, signal);\n                    killed[pidpid] = 1;\n                }\n            });\n            if (!killed[pid]) {\n                killPid(pid, signal);\n                killed[pid] = 1;\n            }\n        });\n    } catch (err) {\n        if (callback) {\n            return callback(err);\n        } else {\n            throw err;\n        }\n    }\n    if (callback) {\n        return callback();\n    }\n}\n\nfunction killPid(pid, signal) {\n    try {\n        process.kill(parseInt(pid, 10), signal);\n    }\n    catch (err) {\n        if (err.code !== 'ESRCH') throw err;\n    }\n}\n\nfunction buildProcessTree (parentPid, tree, pidsToProcess, spawnChildProcessesList, cb) {\n    var ps = spawnChildProcessesList(parentPid);\n    var allData = '';\n    ps.stdout.on('data', function (data) {\n        var data = data.toString('ascii');\n        allData += data;\n    });\n\n    var onClose = function (code) {\n        delete pidsToProcess[parentPid];\n\n        if (code != 0) {\n            // no more parent processes\n            if (Object.keys(pidsToProcess).length == 0) {\n                cb();\n            }\n            return;\n        }\n\n        allData.match(/\\d+/g).forEach(function (pid) {\n          pid = parseInt(pid, 10);\n          tree[parentPid].push(pid);\n          tree[pid] = [];\n          pidsToProcess[pid] = 1;\n          buildProcessTree(pid, tree, pidsToProcess, spawnChildProcessesList, cb);\n        });\n    };\n\n    ps.on('close', onClose);\n}\n", "import {\n  ChildProcess,\n  spawn as nodeSpawn,\n  type ChildProcessWithoutNullStreams,\n  type ChildProcessByStdio,\n  type SpawnOptions,\n  type StdioPipe,\n  type StdioNull,\n} from \"child_process\";\nimport type { Readable } from \"stream\";\nimport treeKill from \"tree-kill\";\nimport fs from \"fs\";\nimport os from \"os\";\nimport * as Sentry from \"@sentry/node\";\nimport path from \"path\";\nimport type { DevToolsSys } from \"../../types\";\nimport type { DevCommandProcess } from \"../launch/dev-server-orchestrator\";\n\n/**\n * Global process tracker that keeps track of all spawned processes\n * and ensures they are killed when the main process exits\n */\nclass ProcessTracker {\n  private processes = new Set<ChildProcess>();\n  private cleanupHandlersRegistered = false;\n\n  constructor() {\n    this.registerCleanupHandlers();\n  }\n\n  /**\n   * Register a spawned process for tracking and cleanup\n   */\n  track(childProcess: ChildProcess): void {\n    this.processes.add(childProcess);\n    // Auto-remove when process exits naturally\n    childProcess.on(\"exit\", () => {\n      this.processes.delete(childProcess);\n    });\n  }\n\n  /**\n   * Untrack a process (useful if you're managing it manually)\n   */\n  untrack(childProcess: ChildProcess): void {\n    this.processes.delete(childProcess);\n  }\n\n  /**\n   * Kill all tracked processes\n   * @param sys - DevToolsSys for logging and Sentry integration\n   */\n  async killAll(sys?: DevToolsSys): Promise<void> {\n    if (this.processes.size === 0) {\n      return;\n    }\n\n    const killPromises: Promise<boolean>[] = [];\n\n    for (const proc of this.processes) {\n      if (proc.pid && proc.exitCode === null) {\n        // Use the shared killProcess utility if sys is provided,\n        // otherwise fall back to direct treeKill\n        if (sys) {\n          killPromises.push(killProcess(sys, proc));\n        } else {\n          // Fallback for when sys is not available (e.g., during cleanup handlers)\n          killPromises.push(\n            new Promise<boolean>((resolve) => {\n              const timeout = setTimeout(() => {\n                resolve(false);\n              }, 5000);\n\n              treeKill(proc.pid!, \"SIGTERM\", (err) => {\n                if (err) {\n                  treeKill(proc.pid!, \"SIGKILL\", () => {\n                    clearTimeout(timeout);\n                    resolve(true);\n                  });\n                } else {\n                  clearTimeout(timeout);\n                  resolve(true);\n                }\n              });\n            }),\n          );\n        }\n      }\n    }\n\n    await Promise.all(killPromises);\n    this.processes.clear();\n  }\n\n  /**\n   * Register cleanup handlers for various exit signals\n   */\n  private registerCleanupHandlers(): void {\n    if (this.cleanupHandlersRegistered) {\n      return;\n    }\n\n    this.cleanupHandlersRegistered = true;\n\n    const cleanup = async (signal: string) => {\n      try {\n        await this.killAll();\n      } catch (err) {\n        // Log error but continue - the synchronous exit handler will catch any remaining processes\n        console.error(\"[ProcessTracker] Error during cleanup:\", err);\n      }\n      // Don't call process.exit() - let other handlers or the default signal handler do that\n    };\n\n    // Handle various exit signals - just clean up, don't exit\n    process.on(\"SIGINT\", () => cleanup(\"SIGINT\"));\n    process.on(\"SIGTERM\", () => cleanup(\"SIGTERM\"));\n    process.on(\"SIGHUP\", () => cleanup(\"SIGHUP\"));\n\n    // Handle normal exit\n    // This is synchronous and runs as a last resort to kill any remaining processes\n    // This will run regardless of how the process exits (normal, error, signal, etc.)\n    process.on(\"exit\", () => {\n      // Synchronous cleanup - can't use async here\n      // This is our last chance to kill processes before the process exits\n      for (const proc of this.processes) {\n        if (proc.pid && proc.exitCode === null) {\n          try {\n            process.kill(proc.pid, \"SIGKILL\");\n          } catch (err) {\n            // Silently ignore errors - we're exiting anyway\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Get the number of tracked processes\n   */\n  get count(): number {\n    return this.processes.size;\n  }\n}\n\n// Export singleton instance\nexport const processTracker = new ProcessTracker();\n\n/**\n * Options for trackedSpawn function\n */\nexport interface TrackedSpawnOptions {\n  /** The command to run */\n  command: string;\n  /** Arguments for the command */\n  args?: readonly string[];\n  /** Spawn options */\n  options?: SpawnOptions;\n}\n\n/**\n * Wrapper around child_process.spawn that automatically tracks the spawned process\n * and ensures it gets killed when the main process exits\n */\n\n// Overload: stdio is \"pipe\" - all streams are non-null\nexport function trackedSpawn(\n  config: TrackedSpawnOptions & {\n    options: SpawnOptions & {\n      stdio: \"pipe\" | [StdioPipe, StdioPipe, StdioPipe];\n    };\n  },\n): ChildProcessWithoutNullStreams;\n\n// Overload: stdio is [\"ignore\", \"pipe\", \"pipe\"] - stdout and stderr are non-null\nexport function trackedSpawn(\n  config: TrackedSpawnOptions & {\n    options: SpawnOptions & {\n      stdio: [StdioNull | \"ignore\", StdioPipe, StdioPipe];\n    };\n  },\n): ChildProcessByStdio<null, Readable, Readable>;\n\n// Overload: general case\nexport function trackedSpawn(config: TrackedSpawnOptions): ChildProcess;\n\n// Implementation\nexport function trackedSpawn({\n  command,\n  args,\n  options,\n}: TrackedSpawnOptions): ChildProcess {\n  let proc: ChildProcess;\n\n  if (args !== undefined && options !== undefined) {\n    proc = nodeSpawn(command, args, options);\n  } else if (args !== undefined) {\n    proc = nodeSpawn(command, args);\n  } else if (options !== undefined) {\n    proc = nodeSpawn(command, options);\n  } else {\n    proc = nodeSpawn(command);\n  }\n\n  processTracker.track(proc);\n  return proc;\n}\n\nexport function safeSpawn(\n  shell: string,\n  command: string,\n  options: SpawnOptions & {\n    stdio: \"pipe\" | [StdioPipe, StdioPipe, StdioPipe];\n  },\n): ChildProcessWithoutNullStreams;\n\n// Overload: stdio is [\"ignore\", \"pipe\", \"pipe\"] - stdout and stderr are non-null\nexport function safeSpawn(\n  shell: string,\n  command: string,\n  options: SpawnOptions & {\n    stdio: [StdioNull | \"ignore\", StdioPipe, StdioPipe];\n  },\n): ChildProcessByStdio<null, Readable, Readable>;\n\n// Overload: general case\nexport function safeSpawn(\n  shell: string,\n  command: string,\n  options: SpawnOptions,\n): ChildProcess;\n\nexport function safeSpawn(\n  shell: string,\n  command: string,\n  options: SpawnOptions,\n) {\n  return trackedSpawn({\n    command: shell,\n    args: getCommandWithShellArgs(command, shell),\n    options,\n  });\n}\n\nlet tempFolder: string | undefined;\nexport const getTempFolder = () => {\n  if (!tempFolder) {\n    tempFolder = path.join(os.tmpdir(), \"shell-scripts\");\n    fs.mkdirSync(tempFolder, { recursive: true });\n  }\n  return tempFolder;\n};\n\nexport const cleanupTempFolder = () => {\n  try {\n    if (tempFolder) {\n      fs.rmdirSync(tempFolder, { recursive: true });\n      tempFolder = undefined;\n      return true;\n    }\n  } catch (error) {\n    Sentry.captureException(error);\n  }\n  return false;\n};\n\n/**\n * Detects if a command is multi-line (contains newlines)\n */\nexport const isMultiLineCommand = (command: string): boolean => {\n  command = command.trim();\n  return command.includes(\"\\n\") || command.includes(\"\\r\\n\");\n};\n\n/**\n * Creates a temporary script file for multi-line commands\n */\nexport const createTempScript = (command: string, shell: string): string => {\n  const isWindows = process.platform === \"win32\";\n\n  let scriptExtension: string;\n  let scriptContent: string;\n\n  if (isWindows) {\n    if (\n      shell.includes(\"powershell\") ||\n      shell.includes(\"PowerShell\") ||\n      shell.includes(\"pwsh\")\n    ) {\n      scriptExtension = \".ps1\";\n      scriptContent = command;\n    } else {\n      scriptExtension = \".bat\";\n      scriptContent = `@echo off\\n${command}`;\n    }\n  } else {\n    // For Unix shells, add proper shebang and make executable\n    const isZsh = shell.includes(\"zsh\");\n    const isBash = shell.includes(\"bash\");\n    const isSh = shell.includes(\"sh\");\n    const isFish = shell.includes(\"fish\");\n    const shebang = isZsh\n      ? \"#!/bin/zsh\"\n      : isBash\n        ? \"#!/bin/bash\"\n        : isFish\n          ? \"#!/bin/fish\"\n          : isSh\n            ? \"#!/bin/sh\"\n            : \"#!/bin/bash\";\n    if (isFish) {\n      scriptExtension = \".fish\";\n      scriptContent = `${shebang}\\n${command}`;\n    } else {\n      scriptExtension = \".sh\";\n      scriptContent = `${shebang}\\nset -e\\n${command}`;\n    }\n  }\n\n  const scriptPath = getTempScriptPath(scriptExtension);\n  try {\n    fs.writeFileSync(scriptPath, scriptContent, { mode: 0o755 });\n    return scriptPath;\n  } catch (error) {\n    throw new Error(`Failed to create temporary script: ${error}`);\n  }\n};\n\nexport const getTempScriptPath = (extension: string): string => {\n  const tempDir = getTempFolder();\n  const timestamp = Date.now();\n  const random = Math.random().toString(36).substring(2, 8);\n  return path.join(tempDir, `builder_temp_${timestamp}_${random}${extension}`);\n};\n\n/**\n * Cleans up a temporary script file\n */\nexport const cleanupTempScript = (scriptPath: string): void => {\n  try {\n    if (fs.existsSync(scriptPath)) {\n      fs.unlinkSync(scriptPath);\n    }\n  } catch (error) {\n    // Silently ignore cleanup errors\n    console.warn(\n      `Warning: Failed to cleanup temporary script ${scriptPath}:`,\n      error,\n    );\n  }\n};\n\nexport const getCommandWithShellArgs = (command: string, shell: string) => {\n  // Handle multi-line commands by creating temporary script files\n  if (isMultiLineCommand(command)) {\n    const scriptPath = createTempScript(command, shell);\n\n    // Windows shells\n    if (shell.includes(\"cmd\") || shell.includes(\"CMD\")) {\n      return [\"/c\", scriptPath];\n    }\n    if (\n      shell.includes(\"powershell\") ||\n      shell.includes(\"PowerShell\") ||\n      shell.includes(\"pwsh\")\n    ) {\n      return [\"-ExecutionPolicy\", \"Bypass\", \"-File\", scriptPath];\n    }\n\n    // Unix shells - execute the script directly\n    return [scriptPath];\n  }\n\n  // Handle single-line commands (existing logic)\n  // Windows shells\n  if (shell.includes(\"cmd\") || shell.includes(\"CMD\")) {\n    return [\"/c\", command]; // cmd.exe uses /c to execute command\n  }\n  if (\n    shell.includes(\"powershell\") ||\n    shell.includes(\"PowerShell\") ||\n    shell.includes(\"pwsh\")\n  ) {\n    return [\"-Command\", command]; // PowerShell uses -Command\n  }\n\n  // Unix shells\n  if (shell.includes(\"zsh\")) {\n    return [\"-l\", \"-c\", `source ~/.zshrc 2>/dev/null || true; ${command}`]; // zsh with login only loads .zprofile, so we need to source .zshrc\n  }\n  if (shell.includes(\"bash\")) {\n    return [\"-l\", \"-c\", command]; // bash with login\n  }\n\n  // Default fallback (likely sh or other POSIX shell)\n  return [\"-c\", command];\n};\n\nexport async function killProcess(\n  sys: DevToolsSys,\n  procOrPid: ChildProcess | DevCommandProcess | number | undefined,\n  abortSignal?: AbortSignal,\n  timeout = 5_000, // ms\n): Promise<boolean> {\n  if (typeof procOrPid !== \"number\") {\n    if (\n      !procOrPid ||\n      (checkIsDevCommandProcess(procOrPid)\n        ? procOrPid.getExitCode() !== null\n        : procOrPid.exitCode !== null)\n    ) {\n      return false; // already gone\n    }\n  }\n\n  if (abortSignal?.aborted) {\n    return false;\n  }\n\n  const abortedPromise = new Promise<void>((_, reject) => {\n    abortSignal?.addEventListener(\n      \"abort\",\n      () => {\n        reject(new Error(\"killProcess aborted by the user\"));\n      },\n      { once: true },\n    );\n  });\n\n  // Extract PID from process or use the number directly\n  let pid: number | undefined;\n  let proc: ChildProcess | DevCommandProcess | undefined;\n\n  if (typeof procOrPid === \"number\") {\n    pid = procOrPid;\n  } else {\n    proc = procOrPid;\n    pid = checkIsDevCommandProcess(proc) ? proc.getPid() : proc.pid;\n  }\n\n  if (!pid) {\n    if (proc) {\n      sys.Sentry?.captureException(new Error(\"killProcess: no pid\"), {\n        level: \"warning\",\n      });\n      return proc.kill(\"SIGKILL\");\n    }\n    return false;\n  }\n  try {\n    // Whichever happens first: close event *or* timeout\n    await Promise.race([\n      await new Promise<Error | void>((resolve, reject) =>\n        treeKill(pid, \"SIGTERM\", (err) => {\n          if (err) {\n            reject(err);\n          } else {\n            resolve();\n          }\n        }),\n      ),\n      new Promise<void>((_, reject) =>\n        setTimeout(\n          () => reject(new Error(\"SIGTERM killProcess timeout\")),\n          timeout,\n        ),\n      ),\n      abortedPromise,\n    ]);\n    return true;\n  } catch (err) {\n    sys.Sentry?.captureException(err, {\n      level: \"warning\",\n    });\n    try {\n      await Promise.race([\n        await new Promise<void>((resolve, reject) =>\n          treeKill(pid, \"SIGKILL\", (err) => {\n            if (err) {\n              reject(err);\n            } else {\n              resolve();\n            }\n          }),\n        ),\n        new Promise<void>((_, reject) =>\n          setTimeout(\n            () => reject(new Error(\"SIGKILL killProcess timeout\")),\n            timeout,\n          ),\n        ),\n        abortedPromise,\n      ]);\n      return true;\n    } catch (err) {\n      sys.Sentry?.captureException(err, {\n        level: \"warning\",\n      });\n      return false;\n    }\n  } finally {\n    // Only remove listeners if we have a process object (not just a PID)\n    if (proc) {\n      proc.removeAllListeners();\n    }\n  }\n}\n\nconst checkIsDevCommandProcess = (\n  proc: DevCommandProcess | ChildProcess,\n): proc is DevCommandProcess => {\n  return \"type\" in proc;\n};\n", "import { BashError } from \"../../cli/codegen\";\nimport { killProcess } from \"./process-tracker\";\nimport { spawn, type ChildProcessWithoutNullStreams } from \"node:child_process\";\nimport type { DevToolsSys } from \"../../types\";\nimport { apiAirV2Host } from \"../constants\";\nimport { safeFetch } from \"../fetch\";\nimport type { Credentials } from \"../credentials\";\nimport type { GitConfigs } from \"$/ai-utils\";\n\nexport interface RunCommandOptions {\n  cwd?: string;\n  debug?: boolean;\n  sys: DevToolsSys;\n  timeout?: number;\n  stdin?: string;\n  retry?: number;\n}\n\ntype FetchGitConfigsResult =\n  | { success: true; gitConfigs: GitConfigs }\n  | { success: false; error: Error };\n\n/**\n * Sanitizes git command for logging by obscuring sensitive tokens\n */\nfunction sanitizeGitCommand(command: string) {\n  // Replace tokens in URLs like https://token@github.com or https://user:token@github.com\n  return command.replace(\n    /(https?:\\/\\/)([^@\\s]+@)?([^\\/\\s]+)/g,\n    (match, protocol, auth, domain) => {\n      if (auth) {\n        // Replace the auth part with asterisks, keeping the @ symbol\n        return `${protocol}***@${domain}`;\n      }\n      return match;\n    },\n  );\n}\n\nexport async function runCommand(\n  cmd: string,\n  args: string[],\n  opts: RunCommandOptions,\n): Promise<string> {\n  const runs = Math.max(opts.retry ?? 0, 0) + 1;\n  let lastError: Error | undefined;\n  for (let i = 0; i < runs; i++) {\n    try {\n      return await _runCommand(cmd, args, opts);\n    } catch (e) {\n      lastError = e as Error;\n    }\n  }\n  throw lastError;\n}\n\nfunction _runCommand(\n  cmd: string,\n  args: string[],\n  opts: RunCommandOptions,\n): Promise<string> {\n  const command = `${cmd} ${args.join(\" \")}`;\n\n  if (opts.debug) {\n    console.log(`RUN GIT: ${sanitizeGitCommand(command)}`);\n  }\n\n  return new Promise((resolve, reject) => {\n    let stdout = \"\";\n    let stderr = \"\";\n\n    const proc = spawn(cmd, args, {\n      cwd: opts.cwd,\n      stdio: [opts.stdin ? \"pipe\" : \"ignore\", \"pipe\", \"pipe\"],\n      shell: false,\n    });\n\n    if (opts.stdin) {\n      (proc as ChildProcessWithoutNullStreams).stdin.write(opts.stdin);\n      (proc as ChildProcessWithoutNullStreams).stdin.end();\n    }\n\n    const timeout = opts.timeout\n      ? setTimeout(() => {\n          killProcess(opts.sys, proc).then(() => {\n            reject(\n              new BashError(command, undefined, stdout, stderr, {\n                cause: new Error(`${cmd} command timed out`),\n              }),\n            );\n          });\n        }, opts.timeout)\n      : undefined;\n\n    proc.on(\"error\", (err) => {\n      clearTimeout(timeout);\n      reject(\n        new BashError(command, undefined, stdout, stderr, {\n          cause: err,\n        }),\n      );\n    });\n\n    proc.stdout?.on(\"data\", (data) => {\n      const str = data.toString();\n      stdout += str;\n    });\n\n    proc.stderr?.on(\"data\", (data) => {\n      const str = data.toString();\n      stderr += str;\n    });\n\n    proc.on(\"close\", (code) => {\n      clearTimeout(timeout);\n      if (code === 0) {\n        if (stderr && !stdout) {\n          if (opts.debug) {\n            console.log(`${cmd}(stderr(${stderr.length}))): ${stderr}`);\n          }\n          resolve(stderr);\n        } else {\n          if (opts.debug) {\n            console.log(\n              `${cmd}(stdout+stderr(${stdout.length + stderr.length})): ${stdout} ${stderr}`,\n            );\n          }\n          resolve(stdout);\n        }\n      } else {\n        if (opts.debug) {\n          console.log(\n            `${cmd}(code: ${code})(stdout+stderr(${stdout.length + stderr.length})): ${stdout} ${stderr}`,\n          );\n        }\n        if (code === 128 && isGitRepoCorrupted(stdout, stderr)) {\n          opts.sys.Sentry?.captureException(\n            new Error(`Git repo is corrupted`),\n            {\n              tags: {\n                operation: \"codegen-git\",\n              },\n              extra: {\n                stdout,\n                stderr,\n                command,\n                exitCode: code,\n              },\n            },\n          );\n        }\n        reject(new BashError(command, code ?? undefined, stdout, stderr));\n      }\n    });\n  });\n}\n\nexport const isGitRepoCorrupted = (stdout: string, stderr: string) => {\n  const corruptionIndicators = [\n    // Most common corruption patterns\n    /fatal:\\s*bad\\s+object/i,\n    /fatal:\\s*loose\\s+object.*is\\s+corrupt/i,\n    /fatal:\\s*index\\s+file.*is\\s+corrupt/i,\n    /fatal:\\s*corrupt\\s+loose\\s+object/i,\n    /fatal:\\s*object\\s+file.*is\\s+corrupt/i,\n\n    // Pack corruption (common with large repos)\n    /fatal:\\s*packfile.*is\\s+truncated/i,\n    /corrupted\\s+pack/i,\n    /invalid\\s+pack\\s+checksum/i,\n\n    // Object database issues\n    /error:\\s*inflate:\\s+data\\s+stream\\s+error/i,\n    /error:\\s*missing\\s+blob/i,\n    /error:\\s*missing\\s+commit/i,\n    /error:\\s*broken\\s+link/i,\n    /unable\\s+to\\s+read\\s+.*object/i,\n\n    // Repository corruption indicators\n    /repository\\s+corruption/i,\n    /index.*is\\s+corrupt/i,\n  ];\n\n  const output = `${stdout}\\n${stderr}`.toLowerCase();\n\n  return corruptionIndicators.some((pattern) => pattern.test(output));\n};\n\nexport async function fetchGitConfigs(\n  credentials: Credentials,\n  projectId: string,\n): Promise<FetchGitConfigsResult> {\n  try {\n    const url = new URL(`${apiAirV2Host}/projects/git-configs`);\n    url.searchParams.set(\"projectId\", projectId);\n    if (credentials.builderPublicKey) {\n      url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n    }\n    if (credentials.userId) {\n      url.searchParams.set(\"userId\", credentials.userId);\n    }\n\n    const response = await safeFetch(url, {\n      keepalive: true,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${credentials.builderPrivateKey}`,\n      },\n      signal: AbortSignal.timeout(10000),\n    });\n\n    if (response.status === 404) {\n      return {\n        success: false,\n        error: new Error(\"Failed to fetch git configs\", {\n          cause: new Error(\"Project not found\"),\n        }),\n      };\n    }\n    if (!response.ok) {\n      return {\n        success: false,\n        error: new Error(\n          `Failed to fetch git configs. HTTP ${response.status}: ${response.statusText}`,\n        ),\n      };\n    }\n\n    const json = (await response.json()) as { gitConfigs: GitConfigs };\n    return { success: true, gitConfigs: json.gitConfigs };\n  } catch (e) {\n    const err = new Error(\"Failed to fetch git configs\", {\n      cause: e instanceof Error ? e : new Error(String(e)),\n    });\n    return { success: false, error: err };\n  }\n}\n", "import fs from \"node:fs\";\nimport type { DevToolsSys } from \"../types\";\nimport type { Credentials } from \"./credentials\";\nimport { apiAirV2Host } from \"./constants\";\nimport { safeFetch } from \"./fetch\";\nimport {\n  type GitBackupUploadUrlResult,\n  type GitBackupUploadUrlOptions,\n  type GitBackupRecordOptions,\n  type GitBackupRecordResult,\n  type BackupMetadata,\n  type WorkspaceConfiguration,\n  EXAMPLE_OR_STARTER_REPOS,\n  type CodegenRuntimeStatus,\n  type ForcedBackup,\n  type BackupGitRepoResult,\n} from \"$/ai-utils\";\nimport { createHash } from \"node:crypto\";\nimport { runCommand, fetchGitConfigs } from \"./utils/git\";\n\ninterface BackupGitRepoOptions {\n  sys: DevToolsSys;\n  credentials: Credentials;\n  projectId: string;\n  branchName: string;\n  repoPath: string;\n  aiBranch: string; // Branch where AI creates commits as work progresses\n  featureBranch: string; // Base branch where work started (usually \"main\")\n  workspace: WorkspaceConfiguration | undefined;\n  /**\n   * If true, the system is connected to the git provider.\n   * If false, the system is offline and will not fetch any branches from origin.\n   */\n  isConnectedToProvider: boolean;\n  debug: boolean;\n  forcedFullBackup: boolean;\n  canAbortMerge: boolean;\n}\n\n/**\n * Creates a backup of git repository changes made by the AI system.\n *\n * This function handles both partial and full backups:\n * - Partial backups: Only include commits created locally (on aiBranch) that aren't in upstream.\n *   This keeps backups small and doesn't store the entire repo's code. Requires a clone from\n *   upstream plus applying the backup to restore.\n * - Full backups: Complete repo backup that can be directly cloned from.\n *\n * The aiBranch is where the AI creates commits as work progresses, while featureBranch\n * is the base branch where work started (usually \"main\").\n */\nexport async function backupGitRepo({\n  sys,\n  credentials,\n  projectId,\n  branchName,\n  repoPath,\n  aiBranch,\n  featureBranch,\n  workspace,\n  isConnectedToProvider,\n  debug,\n  forcedFullBackup,\n  canAbortMerge,\n}: BackupGitRepoOptions): Promise<BackupGitRepoResult> {\n  async function git(args: string[]) {\n    return runCommand(\"git\", args, { cwd: repoPath, sys, debug });\n  }\n  async function getCurrentBranch() {\n    const currentBranch = await git([\"branch\", \"--show-current\"]);\n    return currentBranch.trim();\n  }\n\n  async function checkIfCommitInBranch(commitHash: string, branch: string) {\n    try {\n      await git([\"merge-base\", \"--is-ancestor\", commitHash, branch]);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  async function hasCleanWorkTree() {\n    try {\n      const out = await git([\n        \"status\",\n        \"--porcelain=v1\",\n        \"-z\",\n        \"--ignore-submodules=dirty\",\n      ]);\n\n      // When the work tree is clean, status outputs nothing.\n      return out.trim().length === 0;\n    } catch {\n      // If status itself fails, treat as dirty.\n      return false;\n    }\n  }\n\n  async function hasMergeConflict() {\n    try {\n      await git([\"rev-parse\", \"-q\", \"--verify\", \"MERGE_HEAD\"]);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  async function getCommitMeta(\n    commitHash: string | undefined,\n  ): Promise<string | undefined> {\n    if (commitHash == null) {\n      return undefined;\n    }\n    // git --no-pager show -s --format='%an%n%ad%n%B' <commit-hash>\n    try {\n      const out = await git([\n        \"--no-pager\",\n        \"show\",\n        \"-s\",\n        \"--format='%an%n%ad%n%B'\",\n        commitHash,\n      ]);\n      return out.trim();\n    } catch (e) {\n      return undefined;\n    }\n  }\n\n  async function getCurrentCommitHash() {\n    try {\n      const commitHash = await git([\"rev-parse\", \"HEAD\"]);\n      return commitHash.trim();\n    } catch (e) {\n      return null;\n    }\n  }\n\n  async function getRecentCommitSHAs(branchName: string, maxCount: number) {\n    try {\n      const out = await git([\n        \"rev-list\",\n        branchName,\n        `--max-count=${maxCount}`,\n      ]);\n      const trimmed = out.trim();\n      return trimmed ? trimmed.split(\"\\n\") : [];\n    } catch (e) {\n      return [];\n    }\n  }\n\n  const silenceErrors = forcedFullBackup;\n\n  if (!workspace) {\n    throw new Error(\"Workspace is required for backup upload\");\n  }\n\n  if (await hasMergeConflict()) {\n    if (canAbortMerge) {\n      if (debug) {\n        console.log(\n          \"There is an merge conflict, when attempting to backup, let's try to abort the merge\",\n        );\n      }\n      await git([\"merge\", \"--abort\"]);\n    } else {\n      throw new Error(\n        \"Merge conflict detected, please resolve the conflict before continuing\",\n      );\n    }\n  }\n\n  if (!(await hasCleanWorkTree())) {\n    if (debug) {\n      console.log(\n        \"\uD83D\uDD0D Uncommitted changes detected, staging and committing before backup\",\n      );\n    }\n    await git([\"add\", \".\"]);\n    await git([\n      \"commit\",\n      \"--quiet\",\n      \"--no-verify\",\n      \"-m\",\n      \"commit pending changes\",\n    ]);\n  }\n\n  const originalRepoUrl = workspace.folders.find(\n    (folder) => folder.enableGit,\n  )?.originalRepoUrl;\n  if (!originalRepoUrl) {\n    throw new Error(\"Original repo URL is required for backup upload\");\n  }\n\n  const lastCommitHash = await getCurrentCommitHash();\n  if (!lastCommitHash) {\n    throw new Error(\"Failed to get current commit hash\");\n  }\n\n  const currentBranch = await getCurrentBranch();\n  if (!silenceErrors && currentBranch !== aiBranch) {\n    throw new Error(\n      `Current branch \"${currentBranch}\" is not the ai branch \"${aiBranch}\"`,\n    );\n  }\n\n  // Update the last commit hash in the database as early as possible.\n  // This is done frequently throughout the codebase (after every commit creation)\n  // to track the current state and determine if backups are up-to-date.\n  await setRuntimeStatus(sys, credentials, {\n    projectId,\n    branchName,\n    lastCommitHash,\n    clearSecondaryVolumeId: false,\n  });\n\n  const initCommitHashResult = await getInitialCommitHash({\n    sys,\n    repoPath,\n    featureBranch,\n    debug,\n    workspace,\n    isConnectedToProvider,\n    forcedFullBackup,\n    credentials,\n    projectId,\n  });\n\n  const forced: ForcedBackup = forcedFullBackup\n    ? \"offline-full\"\n    : !isConnectedToProvider\n      ? \"offline\"\n      : undefined;\n\n  const recentRemoteSHAs = await getRecentCommitSHAs(\n    initCommitHashResult.initialBranch,\n    10,\n  );\n  const recentLocalSHAs = await getRecentCommitSHAs(aiBranch, 10);\n\n  if (initCommitHashResult.partial) {\n    // Check if the current commit is already in the feature branch (upstream)\n    const isLastCommitInFeatureBranch =\n      initCommitHashResult.initialCommitHash === lastCommitHash ||\n      (await checkIfCommitInBranch(\n        lastCommitHash,\n        initCommitHashResult.initialBranch,\n      ));\n\n    // Early exit: If this is a partial backup and all commits are already upstream,\n    // there's nothing new to backup. Creating an empty git bundle would error,\n    // so instead we record an \"empty\" backup. This allows the system to \"reset\"\n    // to the last commit without needing a full backup since all commits exist upstream.\n    if (isLastCommitInFeatureBranch) {\n      if (debug) {\n        console.log(`\uD83D\uDD0D No commits to backup. ${lastCommitHash}`);\n      }\n\n      const recordResult = await recordBackup(credentials, {\n        projectId: projectId,\n        branchName: branchName,\n        size: 0,\n        partial: initCommitHashResult.partial,\n        initialBranch: initCommitHashResult.initialBranch,\n        initialCommitHash: initCommitHashResult.initialCommitHash,\n        lastCommitHash,\n        gitBranchName: aiBranch,\n        empty: true,\n        status: \"completed\",\n        version: \"v2\",\n        repoUrl: originalRepoUrl,\n        forced,\n        metadata: {\n          initialCommitMeta: await getCommitMeta(\n            initCommitHashResult.initialCommitHash,\n          ),\n          lastCommitMeta: await getCommitMeta(lastCommitHash),\n          rangeInRemote: recentRemoteSHAs,\n          rangeInLocal: recentLocalSHAs,\n        },\n      });\n      if (recordResult.success) {\n        if (debug) {\n          console.log(`\u2705 Everything is done: ${lastCommitHash}`);\n        }\n        return {\n          success: true,\n          empty: true,\n          lastCommitHash,\n          partial: initCommitHashResult.partial,\n          repoUrl: originalRepoUrl,\n          backupRef: computeBackupRef({\n            version: \"v2\",\n            originalRepoUrl,\n            commitHash: lastCommitHash,\n          }),\n        };\n      } else {\n        const err = new Error(\n          \"Commit(s) not found on remote when recording empty backup\",\n        );\n        sys.Sentry?.captureException(err, {\n          tags: { operation: \"codegen-backup\" },\n          extra: {\n            projectId,\n            branchName,\n            repoUrl: originalRepoUrl,\n            initialCommitHash: initCommitHashResult.initialCommitHash,\n            lastCommitHash,\n            initialBranch: initCommitHashResult.initialBranch,\n            aiBranch,\n            featureBranch,\n            partial: initCommitHashResult.partial,\n            forced,\n            rangeInRemote: recentRemoteSHAs,\n            rangeInLocal: recentLocalSHAs,\n          },\n        });\n        throw err;\n      }\n    }\n  }\n\n  if (debug) {\n    console.log(\"\uD83D\uDD0D Creating git bundle...\");\n  }\n\n  // Step 2: Create git bundle\n  // Generate unique filename to avoid conflicts in shared /tmp directory\n  const timestamp = Date.now();\n  const randomId = Math.random().toString(36).substring(2, 8);\n  const bundleFileName = `backup-${timestamp}-${randomId}.bundle`;\n  const bundleFolder = \"/tmp\"; // Uses non-persistent filesystem, no cleanup needed on crash\n  const bundlePath = sys.join(bundleFolder, bundleFileName);\n\n  fs.mkdirSync(bundleFolder, { recursive: true });\n\n  // Create bundle with appropriate commit range:\n  // - Partial backup: Only commits from initialCommitHash to aiBranch (new commits not in upstream)\n  // - Full backup: All branches and tags (complete repo that can be cloned directly)\n  await git([\n    \"bundle\",\n    \"create\",\n    \"--quiet\",\n    bundlePath,\n    ...(initCommitHashResult.partial\n      ? [`${initCommitHashResult.initialCommitHash}..${aiBranch}`]\n      : [\"--branches\", \"--tags\"]),\n  ]);\n\n  if (debug) {\n    console.log(\"\uD83D\uDD0D Computing MD5 hash of bundle file...\");\n  }\n\n  // Compute MD5 hash for integrity verification with Google Cloud Storage\n  // (MD5 is used because it's the format supported by GCS)\n  const { contentMd5, size } = await computeMD5Hash(bundlePath);\n\n  if (debug) {\n    console.log(\"\uD83D\uDD0D Verify bundle file integrity\");\n  }\n  // Verify the bundle is valid before uploading (should hopefully never fail)\n  await git([\"bundle\", \"verify\", \"--quiet\", bundlePath]);\n\n  if (debug) {\n    console.log(`\uD83D\uDD0D Requesting signed upload URL for size: ${size} bytes`);\n  }\n  // Step 1: Request signed upload URL\n  const uploadUrlResult = await requestSignedUploadUrl(credentials, {\n    projectId: projectId,\n    branchName: branchName,\n    size,\n    partial: initCommitHashResult.partial,\n    contentMd5,\n  });\n\n  // Handle case where project/branch was removed from the system\n  // but this backup process is still running on an abandoned instance\n  if (!uploadUrlResult) {\n    console.log(\"\uD83D\uDD0D Project/branch was removed, it's okey to skip backup\");\n    return {\n      success: false,\n      reason: \"project_removed\",\n    };\n  }\n\n  const { signedUrl } = uploadUrlResult;\n\n  if (debug) {\n    console.log(`\uD83D\uDD0D Uploading to URL: ${signedUrl}`);\n  }\n\n  // Step 3: Upload the bundle using streaming\n  await uploadFileStream(bundlePath, signedUrl, size, contentMd5);\n\n  if (debug) {\n    console.log(\"\u2705 Uploaded Successfully\");\n  }\n\n  // Step 4: Record backup success in Firebase\n  const recordResult = await recordBackup(credentials, {\n    projectId: projectId,\n    branchName: branchName,\n    size,\n    partial: initCommitHashResult.partial,\n    initialBranch: initCommitHashResult.initialBranch,\n    initialCommitHash: initCommitHashResult.initialCommitHash,\n    lastCommitHash,\n    gitBranchName: aiBranch,\n    empty: false,\n    status: \"completed\",\n    contentMd5,\n    version: \"v2\",\n    repoUrl: originalRepoUrl,\n    forced,\n    metadata: {\n      initialCommitMeta: await getCommitMeta(\n        initCommitHashResult.initialCommitHash,\n      ),\n      lastCommitMeta: await getCommitMeta(lastCommitHash),\n      rangeInRemote: recentRemoteSHAs,\n      rangeInLocal: recentLocalSHAs,\n    },\n  });\n  if (recordResult.success) {\n    if (debug) {\n      console.log(\"\u2705 Backup completed recorded successfully\");\n    }\n  } else {\n    const err = new Error(\n      \"Commit(s) not found on remote when recording backup\",\n    );\n    sys.Sentry?.captureException(err, {\n      tags: { operation: \"codegen-backup\" },\n      extra: {\n        projectId,\n        branchName,\n        repoUrl: originalRepoUrl,\n        initialCommitHash: initCommitHashResult.initialCommitHash,\n        lastCommitHash,\n        initialBranch: initCommitHashResult.initialBranch,\n        aiBranch,\n        featureBranch,\n        partial: initCommitHashResult.partial,\n        forced,\n        size,\n        contentMd5,\n        rangeInRemote: recentRemoteSHAs,\n        rangeInLocal: recentLocalSHAs,\n      },\n    });\n    throw err;\n  }\n\n  // Step 5: Clean up temporary bundle file\n  try {\n    fs.unlinkSync(bundlePath);\n  } catch (cleanupError) {\n    sys.Sentry?.captureException(cleanupError, {\n      level: \"warning\",\n      tags: {\n        operation: \"codegen-backup\",\n      },\n    });\n  }\n\n  if (debug) {\n    console.log(\"\u2705 Everything is done\");\n  }\n\n  return {\n    success: true,\n    empty: false,\n    lastCommitHash,\n    partial: initCommitHashResult.partial,\n    repoUrl: originalRepoUrl,\n    backupRef: computeBackupRef({\n      version: \"v2\",\n      originalRepoUrl,\n      commitHash: lastCommitHash,\n    }),\n  };\n}\n\ntype InitialCommitHashResult =\n  | {\n      initialBranch: string;\n      initialCommitHash: string | undefined;\n      partial: false;\n      forcedFullBackup: true;\n    }\n  | {\n      initialBranch: string;\n      initialCommitHash: string;\n      partial: boolean;\n      forcedFullBackup: false;\n    };\n\n/**\n * Determines the initial commit hash and whether to create a partial or full backup.\n *\n * Partial backups are preferred to keep backup sizes small, but full backups are needed when:\n * - The repo is an example/starter template (users can't push to origin, need to fork)\n * - There's no origin remote configured\n *\n * For partial backups, we fetch the latest state of the chosen upstream branch from origin\n * to ensure the backup has the correct commit range reference.\n */\nexport async function getInitialCommitHash({\n  sys,\n  repoPath,\n  featureBranch,\n  debug,\n  workspace,\n  isConnectedToProvider,\n  forcedFullBackup,\n  credentials,\n  projectId,\n}: {\n  sys: DevToolsSys;\n  repoPath: string;\n  featureBranch: string;\n  debug: boolean;\n  workspace: WorkspaceConfiguration | undefined;\n  isConnectedToProvider: boolean;\n  forcedFullBackup: boolean;\n  credentials: Credentials;\n  projectId: string;\n}): Promise<InitialCommitHashResult> {\n  async function git(args: string[]) {\n    return runCommand(\"git\", args, { cwd: repoPath, sys, debug });\n  }\n\n  async function getCurrentCommitHash(branch: string) {\n    try {\n      const commitHash = await git([\"rev-parse\", branch || \"HEAD\"]);\n      return commitHash.trim();\n    } catch (e) {\n      return null;\n    }\n  }\n\n  async function hasRemote(remote: string) {\n    try {\n      await git([\"remote\", \"get-url\", remote]);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  async function getDefaultRemoteBranch() {\n    try {\n      const remoteInfo = await git([\"remote\", \"show\", \"origin\"]);\n      const defaultBranchMatch = remoteInfo.match(/HEAD branch: (.+)/);\n      if (defaultBranchMatch) {\n        const defaultBranch = defaultBranchMatch[1].trim();\n        if (defaultBranch) {\n          return defaultBranch;\n        }\n      }\n      return null;\n    } catch (e) {\n      const wrapperError = new Error(\"failed to get default remote branch\", {\n        cause: e,\n      });\n      sys.Sentry?.captureException(wrapperError, {\n        tags: {\n          operation: \"codegen-backup\",\n        },\n      });\n      throw wrapperError;\n    }\n  }\n\n  async function setRemoteOriginUrl(url: string) {\n    let currentOriginUrl: string | undefined;\n    try {\n      currentOriginUrl = (await git([\"remote\", \"get-url\", \"origin\"])).trim();\n    } catch (e) {\n      // ignore: origin may not exist\n    }\n\n    if (currentOriginUrl === url) {\n      return;\n    }\n\n    if (currentOriginUrl) {\n      await git([\"remote\", \"set-url\", \"origin\", url]);\n    } else {\n      await git([\"remote\", \"add\", \"origin\", url]);\n    }\n  }\n\n  const getPartialValue = async () => {\n    // Check if this is an example/starter repo that needs special handling\n    if (workspace?.folders.length) {\n      const gitWorkspace = workspace?.folders.find((a) => a.enableGit);\n      if (!gitWorkspace?.repoName) {\n        throw new Error(\"Git workspace not found\");\n      }\n      // Example/starter repos are special cases - they're provided templates where\n      // users can't push to origin (they need to fork or create new repos).\n      // These require full backups since there's no meaningful upstream to reference.\n      return !EXAMPLE_OR_STARTER_REPOS.includes(gitWorkspace.repoName);\n    }\n\n    // If no origin remote exists, we can't create partial backups\n    // (no upstream reference point)\n    const hasOrigin = await hasRemote(\"origin\");\n    if (!hasOrigin) {\n      return false;\n    }\n\n    return true;\n  };\n\n  async function refreshRemoteOriginUrl() {\n    try {\n      if (workspace?.folders?.length) {\n        const mainRepo = workspace.folders.find((f) => f.enableGit);\n        if (mainRepo?.repoName && projectId) {\n          const result = await fetchGitConfigs(credentials, projectId);\n          if (result.success) {\n            const cfg = result.gitConfigs?.[mainRepo.repoName];\n            if (cfg?.url) {\n              console.log(`\uD83D\uDD0D Refreshing origin remote URL to ${cfg.url}`);\n              await setRemoteOriginUrl(cfg.url);\n            }\n          } else {\n            sys.Sentry?.captureException(result.error, {\n              tags: {\n                operation: \"codegen-backup\",\n                endpoint: \"fetch-git-configs\",\n              },\n              extra: { projectId, mainRepo },\n            });\n          }\n        }\n      }\n    } catch (e) {\n      sys.Sentry?.captureException(e, {\n        tags: { operation: \"codegen-backup\", endpoint: \"fetch-git-configs\" },\n        extra: { projectId },\n      });\n    }\n  }\n\n  if (forcedFullBackup) {\n    const initialCommitHash = await getCurrentCommitHash(featureBranch);\n    return {\n      initialBranch: featureBranch,\n      initialCommitHash: initialCommitHash ?? undefined,\n      partial: false,\n      forcedFullBackup,\n    };\n  }\n\n  const partial = await getPartialValue();\n  if (!partial) {\n    if (debug) {\n      console.log(\n        `\uD83D\uDD0D No origin remote found. Partial backups are not supported.`,\n      );\n    }\n    const initialCommitHash = await getCurrentCommitHash(featureBranch);\n    if (!initialCommitHash) {\n      throw new Error(\"Failed to get initial commit hash\");\n    }\n    return {\n      initialBranch: featureBranch,\n      initialCommitHash,\n      partial: false,\n      forcedFullBackup,\n    };\n  } else if (!isConnectedToProvider) {\n    console.log(\n      \"\uD83D\uDD0D Performing offline backup. Not attempting to fetch origin remote.\",\n    );\n    const initialCommitHash = await getCurrentCommitHash(featureBranch);\n    if (!initialCommitHash) {\n      throw new Error(\"Failed to get initial commit hash\");\n    }\n    return {\n      initialBranch: featureBranch,\n      initialCommitHash,\n      partial,\n      forcedFullBackup,\n    };\n  }\n\n  // Re-fetch the feature branch from origin to ensure we have the latest state.\n  // This ensures the backup will be created with the correct commit range -\n  // not more commits than necessary, and not missing any recent upstream changes.\n  if (debug) {\n    console.log(`\uD83D\uDD0D Re-fetching all branches`);\n  }\n\n  // refresh the remote origin url\n  await refreshRemoteOriginUrl();\n  await git([\"fetch\", \"origin\"]);\n\n  const defaultRemoteBranch = await getDefaultRemoteBranch();\n  if (!defaultRemoteBranch) {\n    throw new Error(\"Failed to get default remote branch\");\n  }\n  if (defaultRemoteBranch === \"(unknown)\") {\n    // Remote default branch is explicitly \"(unknown)\" -> empty remote, do a full backup.\n    console.log(\n      \"\uD83D\uDD0D Origin default branch is (unknown); performing full backup.\",\n    );\n    const initialCommitHash = await getCurrentCommitHash(featureBranch);\n    if (!initialCommitHash) {\n      throw new Error(\"Failed to get initial commit hash\");\n    }\n    return {\n      initialBranch: featureBranch,\n      initialCommitHash,\n      partial: false,\n      forcedFullBackup,\n    };\n  }\n  // use default remote branch\n  const initialBranch = `refs/remotes/origin/${defaultRemoteBranch}`;\n  const initialCommitHash = await getCurrentCommitHash(initialBranch);\n  if (!initialCommitHash) {\n    throw new Error(\"Failed to get initial commit hash\");\n  }\n  return {\n    initialBranch,\n    initialCommitHash,\n    partial,\n    forcedFullBackup,\n  };\n}\n\n/**\n * Requests a signed upload URL for git backup\n */\nexport async function requestSignedUploadUrl(\n  credentials: Credentials,\n  body: GitBackupUploadUrlOptions,\n): Promise<GitBackupUploadUrlResult | null> {\n  const url = new URL(`${apiAirV2Host}/projects/git-backup-upload-url`);\n  if (credentials.builderPublicKey) {\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n  }\n  if (credentials.userId) {\n    url.searchParams.set(\"userId\", credentials.userId);\n  }\n\n  const uploadUrlResponse = await safeFetch(url, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey}`,\n    },\n    body: JSON.stringify(body),\n    signal: AbortSignal.timeout(10000),\n  });\n\n  if (uploadUrlResponse.status === 404) {\n    return null;\n  }\n  if (!uploadUrlResponse.ok) {\n    throw new Error(\n      `Failed to get upload URL: ${uploadUrlResponse.statusText}`,\n    );\n  }\n\n  return await uploadUrlResponse.json();\n}\n\n/**\n * Records a successful git backup in Firebase\n */\nexport async function recordBackup(\n  credentials: Credentials,\n  body: GitBackupRecordOptions,\n): Promise<GitBackupRecordResult> {\n  const url = new URL(`${apiAirV2Host}/projects/git-backup-record`);\n  if (credentials.builderPublicKey) {\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n  }\n  if (credentials.userId) {\n    url.searchParams.set(\"userId\", credentials.userId);\n  }\n\n  const recordResponse = await safeFetch(url, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey}`,\n    },\n    signal: AbortSignal.timeout(10000),\n    body: JSON.stringify(body),\n  });\n\n  if (recordResponse.status === 404) {\n    return {\n      success: true,\n    };\n  }\n\n  if (!recordResponse.ok) {\n    throw new Error(`Failed to record backup: ${recordResponse.statusText}`);\n  }\n\n  return await recordResponse.json();\n}\n\nexport interface GitBackupDownloadResultValid {\n  success: true;\n  partial: boolean;\n  bundlePath: string | undefined;\n  bundleSize: number;\n  gitBranchName: string;\n  lastCommitHash: string;\n}\n\nexport interface GitBackupDownloadResultInvalid {\n  success: false;\n  error: Error;\n}\n\nexport type GitBackupDownloadResult =\n  | GitBackupDownloadResultValid\n  | GitBackupDownloadResultInvalid;\n\n/**\n * Downloads a git backup bundle from remote storage.\n * Handles both empty backups (no bundle file) and regular backups with bundle files.\n * @returns The path to the downloaded bundle file, or undefined if it's an empty backup\n */\nexport async function downloadGitBackup(\n  sys: DevToolsSys,\n  response: BackupMetadata,\n): Promise<GitBackupDownloadResult> {\n  try {\n    if (response.check.backup.empty) {\n      return {\n        success: true,\n        bundlePath: undefined,\n        bundleSize: 0,\n        partial: response.check.backup.partial,\n        gitBranchName: response.check.backup.gitBranchName,\n        lastCommitHash: response.check.backup.lastCommitHash,\n      };\n    }\n    if (!response.downloadUrl) {\n      throw new Error(\"No download URL found\");\n    }\n    const { signedUrl, partial } = response.downloadUrl;\n\n    // Step 2: Download the bundle\n    const timestamp = Date.now();\n    const randomId = Math.random().toString(36).substring(2, 8);\n    const bundleFileName = `download-${timestamp}-${randomId}.bundle`;\n    const bundleFolder = \"/tmp\";\n    const bundlePath = sys.join(bundleFolder, bundleFileName);\n\n    fs.mkdirSync(bundleFolder, { recursive: true });\n\n    const downloadResponse = await fetch(signedUrl);\n\n    if (!downloadResponse.ok) {\n      const errorText = await downloadResponse.text();\n      throw new Error(\n        `Failed to download bundle: ${downloadResponse.statusText}: ${errorText}`,\n      );\n    }\n\n    // Write the bundle to disk\n    const buffer = await downloadResponse.arrayBuffer();\n    fs.writeFileSync(bundlePath, new Uint8Array(buffer));\n\n    const bundleStats = await sys.stat(bundlePath);\n    console.log(`Downloaded bundle: ${bundleStats.size} bytes`);\n\n    return {\n      success: true,\n      bundlePath,\n      bundleSize: bundleStats.size,\n      partial,\n      gitBranchName: response.check.backup.gitBranchName,\n      lastCommitHash: response.check.backup.lastCommitHash,\n    };\n  } catch (error) {\n    const errorToCapture = new Error(`Failed to download backup`, {\n      cause: error,\n    });\n    sys.Sentry?.captureException(errorToCapture, {\n      tags: {\n        operation: \"codegen-backup\",\n      },\n    });\n    return {\n      success: false,\n      error: errorToCapture,\n    };\n  }\n}\n\n/**\n * Uploads a file stream to a signed URL (Google Cloud Storage).\n * Uses MD5 hash for content verification as required by GCS.\n */\nexport async function uploadFileStream(\n  filePath: string,\n  signedUrl: string,\n  size: number,\n  contentMd5: string,\n): Promise<Response> {\n  const fileStream = fs.createReadStream(filePath);\n\n  // Modern fetch with Node.js stream support\n  const response = await fetch(signedUrl, {\n    method: \"PUT\",\n    // @ts-ignore - Node.js streams are supported in modern fetch implementations\n    body: fileStream,\n    headers: {\n      \"Content-Type\": \"application/octet-stream\",\n      \"Content-Length\": size.toString(),\n      \"Content-MD5\": contentMd5,\n    },\n    // @ts-ignore - duplex is required for streaming uploads\n    duplex: \"half\",\n  });\n  const responseBody = await response.text();\n  if (!response.ok) {\n    throw new Error(\n      `Failed to upload bundle: ${response.statusText}: ${responseBody}`,\n    );\n  }\n\n  console.log(`Uploaded bundle: ${responseBody}`);\n\n  return response;\n}\n\nexport async function computeMD5Hash(bundlePath: string) {\n  const bundleStats = await fs.promises.stat(bundlePath);\n  if (!bundleStats.isFile()) {\n    throw new Error(\"Bundle file does not exist\");\n  }\n\n  // Compute MD5 hash of the bundle file\n  const hash = createHash(\"md5\");\n  const stream = fs.createReadStream(bundlePath);\n\n  await new Promise<void>((resolve, reject) => {\n    stream.on(\"error\", reject);\n    stream.on(\"data\", (chunk: Buffer) => hash.update(chunk as any));\n    stream.on(\"end\", resolve);\n  });\n\n  const contentMd5 = hash.digest(\"base64\");\n  return { contentMd5, size: bundleStats.size };\n}\n\n/**\n * Updates the last commit hash in the database for tracking purposes.\n * This is called frequently throughout the codebase (after every commit creation)\n * to track the current state and determine if backups are up-to-date.\n */\nexport async function setRuntimeStatus(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  data: CodegenRuntimeStatus,\n) {\n  try {\n    const json = JSON.stringify(data);\n    const url = new URL(`${apiAirV2Host}/projects/set-runtime-status`);\n    if (credentials.builderPublicKey) {\n      url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n    }\n    if (credentials.userId) {\n      url.searchParams.set(\"userId\", credentials.userId);\n    }\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    if (credentials.builderPrivateKey) {\n      headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n    }\n    const res = await safeFetch(url, {\n      method: \"POST\",\n      body: json,\n      keepalive: true,\n      headers,\n      signal: AbortSignal.timeout(10000),\n    });\n    if (!res.ok) {\n      return false;\n    }\n    const body = await res.json();\n    return body;\n  } catch (error) {\n    sys.Sentry?.captureException(error, {\n      level: \"warning\",\n      tags: {\n        operation: \"codegen-backup\",\n      },\n    });\n    return false;\n  }\n}\n\n/**\n * Computes a unique backup reference string that combines version, repo URL, and commit hash.\n * This reference can be used to identify and retrieve specific backups.\n */\nexport function computeBackupRef(input: {\n  version: string | undefined;\n  originalRepoUrl: string | undefined;\n  commitHash: string | undefined;\n}) {\n  if (input.originalRepoUrl == null || input.commitHash == null) {\n    return undefined;\n  }\n  return `${input.version ?? \"v1\"}::${input.originalRepoUrl}::${input.commitHash}`;\n}\n", "/**\n * Advanced command security validation with configurable policies and custom error messages\n */\n\nexport interface SecurityPolicyViolation {\n  policy: string;\n  message: string;\n  command: string;\n  matchedPattern?: string;\n}\n\nexport interface SecurityPolicy {\n  name: string;\n  description: string;\n  patterns: string[] | RegExp[];\n  errorMessage: string;\n  priority: number; // Higher priority policies are checked first\n}\n\nexport interface SecurityConfig {\n  policies: SecurityPolicy[];\n  allowOverrides?: string[] | RegExp[]; // Commands that override policy violations\n}\n\n/**\n * Default security policies to prevent common abuse patterns\n */\nexport const DEFAULT_SECURITY_POLICIES: SecurityPolicy[] = [\n  {\n    name: \"git_project_creation\",\n    description: \"Prevents git operations that could cause permanent data loss\",\n    patterns: [\n      /\\bgit\\s+clone\\b/,\n\n      // Block: git checkout -b <branch> (create new branch)\n      /\\bgit\\s+checkout\\s+-b\\s+\\S+/,\n\n      // Block: git switch <branch> (switch branch)\n      /\\bgit\\s+switch\\s+\\S+/,\n\n      // Block: git branch <name> (create new branch)\n      // Allow: git branch -d/-D (delete), git branch -l/-r/-a/-v (list/view)\n      // Allow: git branch --all/--list/--remote/--verbose (long-form read-only flags)\n      /\\bgit\\s+branch\\s+(?!-[dlDrav])(?!--(?:all|list|remote|verbose)\\b)\\S/,\n\n      /\\bgit\\s+init\\b/,\n      /\\bgit\\s+remote\\b/,\n      /\\bgit\\s+clean\\s+-[fF]/,\n      /\\bgit\\s+commit\\s+--amend/,\n      /\\bgit\\s+rm\\b/,\n      /\\bgit\\s+mv\\b/,\n      /\\bgit\\s+tag\\b/,\n\n      // Block: git restore <source> (without --staged or --source or --)\n      // Allow: git restore --staged, git restore --source=..., git restore -- file\n      /\\bgit\\s+restore\\s+(?!--staged\\b)(?!--source\\b)(?!--\\s)\\S+\\s*$/,\n\n      /\\bgit\\s+reset\\s+--hard/,\n      /\\bgit\\s+reset\\s+--mixed/,\n      /\\bgit\\s+stash\\s+drop/,\n      /\\bgit\\s+stash\\s+clear/,\n    ],\n    errorMessage:\n      \"Git operations that could cause permanent data loss are not supported. This includes branch switching, creating new branches, cloning repositories, or destructive operations. File-specific operations like 'git checkout -- file.json' or 'git checkout --ours file.json' are allowed for merge conflict resolution.\",\n    priority: 95,\n  },\n  {\n    name: \"git_operations\",\n    description: \"Prevents direct .git directory manipulation\",\n    patterns: [/\\.git\\b/, /\\/\\.git\\//, /\\\\\\.git\\\\/, /\\.git\\//, /\\.git$/],\n    errorMessage:\n      \"Direct .git operations are prohibited for security reasons. Use proper git commands instead of manipulating .git directly.\",\n    priority: 100,\n  },\n  {\n    name: \"system_files\",\n    description: \"Prevents access to critical system files\",\n    patterns: [\n      /\\/etc\\/passwd/,\n      /\\/etc\\/shadow/,\n      /\\/etc\\/sudoers/,\n      /\\/proc\\/self/,\n      /\\/sys\\//,\n      /\\/dev\\/null.*>/,\n      /\\bsudo\\s/,\n      /\\bsu\\s+(root|admin)/,\n    ],\n    errorMessage: \"Access to system files is prohibited for security reasons.\",\n    priority: 90,\n  },\n  {\n    name: \"network_commands\",\n    description: \"Prevents potentially dangerous network operations\",\n    patterns: [\n      /\\bnc\\s.*-e/, // netcat with execute\n      /\\btelnet\\b/,\n      /\\bftp\\b.*<<</, // ftp with heredoc\n      /\\bcurl\\s+.*\\|\\s*(sh|bash)/, // curl piping to shell\n      /\\bwget\\s+.*\\|\\s*(sh|bash)/, // wget piping to shell\n    ],\n    errorMessage: \"Potentially dangerous network operations are restricted.\",\n    priority: 80,\n  },\n  {\n    name: \"file_permissions\",\n    description: \"Prevents dangerous file permission changes\",\n    patterns: [\n      /\\bchmod\\s+(777|755).*\\/$/, // chmod on root directories\n      /\\bchown\\s+root/,\n      /\\bchgrp\\s+root/,\n      /\\bchmod\\s+.*[+]s/, // setuid/setgid\n      /\\bchmod\\s+777\\s+\\/etc/, // chmod 777 on /etc\n      /\\bchmod\\s+777\\s+\\/$/, // chmod 777 on root\n    ],\n    errorMessage: \"Dangerous file permission operations are prohibited.\",\n    priority: 70,\n  },\n  {\n    name: \"environment_manipulation\",\n    description: \"Prevents dangerous environment variable manipulation\",\n    patterns: [\n      /export\\s+PATH=.*:/, // PATH manipulation\n      /export\\s+LD_LIBRARY_PATH/,\n      /export\\s+LD_PRELOAD/,\n      /\\$\\{IFS\\}/, // IFS manipulation for injection\n    ],\n    errorMessage:\n      \"Environment variable manipulation that could compromise security is not allowed.\",\n    priority: 60,\n  },\n  {\n    name: \"code_execution\",\n    description: \"Prevents various code execution patterns\",\n    patterns: [\n      /\\beval\\s+/,\n      /\\bexec\\s+\\/bin\\/(sh|bash)/, // exec shell\n      /\\bsource\\s+\\/dev/,\n      /\\.\\s+\\/dev/, // dot sourcing from /dev\n      /\\.\\s+\\/proc/, // dot sourcing from /proc\n      /\\bdd\\s+.*of=.*\\|/, // dd piping (potential data exfiltration)\n    ],\n    errorMessage: \"Arbitrary code execution patterns are prohibited.\",\n    priority: 50,\n  },\n  {\n    name: \"data_exfiltration\",\n    description: \"Prevents potential data exfiltration\",\n    patterns: [\n      /\\btar\\s+.*\\|.*nc\\b/, // tar piping to netcat\n      /\\bcat\\s+.*\\|.*curl\\b/, // cat piping to curl\n      /\\bfind\\s+.*-exec.*\\|/, // find with exec piping\n      /\\bbase64\\s+.*\\|.*curl/, // base64 encoding for exfiltration\n      /\\btar\\s+czf\\s+-.*\\|\\s*nc/, // tar to stdout piped to nc\n      /\\bfind\\s+\\/.*-name.*\\+.*\\|\\s*base64/, // find with base64\n      /\\bcat\\s+\\/etc\\/passwd\\s*\\|/, // reading passwd and piping\n    ],\n    errorMessage:\n      \"Commands that could be used for data exfiltration are blocked.\",\n    priority: 40,\n  },\n  {\n    name: \"inefficient_file_search\",\n    description:\n      \"Recommends using Glob tool instead of find for file searching\",\n    patterns: [\n      /\\bfind\\s+.*-name\\s+[\"']?[^\"'\\s]*\\*[^\"'\\s]*[\"']?/, // find with -name and wildcards\n      /\\bfind\\s+.*-iname\\s+[\"']?[^\"'\\s]*\\*[^\"'\\s]*[\"']?/, // find with -iname and wildcards\n      /\\bfind\\s+.*-name\\s+[\"']?\\*[^\"'\\s]*[\"']?/, // find with -name starting with wildcard\n      /\\bfind\\s+.*-iname\\s+[\"']?\\*[^\"'\\s]*[\"']?/, // find with -iname starting with wildcard\n    ],\n    errorMessage:\n      \"Consider using the Glob tool instead of 'find' for file pattern matching. It's more efficient and provides better results. For example, instead of 'find . -name \\\"pattern*\\\"', use the Glob tool with pattern 'pattern*'.\",\n    priority: 30,\n  },\n];\n\nfunction patternToRegExp(pattern: string): RegExp {\n  // Escape regex metacharacters, then restore * and ?\n  const escaped = pattern.replace(/([.+^=!:${}()|[\\]\\\\\\/^])/g, \"\\\\$1\");\n  const regexStr = \"^\" + escaped.replace(/\\*/g, \".*\").replace(/\\?/g, \".\") + \"$\";\n  return new RegExp(regexStr);\n}\n\nfunction splitCommands(command: string): string[] {\n  // Split on &&, ||, ;, |, but be more careful about quoted strings\n  const segments: string[] = [];\n  let current = \"\";\n  let inQuotes = false;\n  let quoteChar = \"\";\n\n  for (let i = 0; i < command.length; i++) {\n    const char = command[i];\n    const next = command[i + 1];\n\n    if (!inQuotes && (char === '\"' || char === \"'\")) {\n      // Check if this quote is escaped by counting preceding backslashes\n      let backslashCount = 0;\n      for (let j = i - 1; j >= 0 && command[j] === \"\\\\\"; j--) {\n        backslashCount++;\n      }\n      // If there's an even number of backslashes (including 0), the quote starts a string\n      if (backslashCount % 2 === 0) {\n        inQuotes = true;\n        quoteChar = char;\n      }\n      current += char;\n    } else if (inQuotes && char === quoteChar) {\n      // Check if this quote is escaped by counting preceding backslashes\n      let backslashCount = 0;\n      for (let j = i - 1; j >= 0 && command[j] === \"\\\\\"; j--) {\n        backslashCount++;\n      }\n      // If there's an even number of backslashes, the quote ends the string\n      if (backslashCount % 2 === 0) {\n        inQuotes = false;\n        quoteChar = \"\";\n      }\n      current += char;\n    } else if (!inQuotes) {\n      if ((char === \"&\" && next === \"&\") || (char === \"|\" && next === \"|\")) {\n        segments.push(current.trim());\n        current = \"\";\n        i++; // Skip next character\n      } else if (char === \";\" || char === \"|\") {\n        segments.push(current.trim());\n        current = \"\";\n      } else {\n        current += char;\n      }\n    } else {\n      current += char;\n    }\n  }\n\n  if (current.trim()) {\n    segments.push(current.trim());\n  }\n\n  return segments.filter(Boolean);\n}\n\n/**\n * Check if command violates any security policies\n */\nexport function validateCommandSecurity(\n  command: string,\n  config: SecurityConfig = { policies: DEFAULT_SECURITY_POLICIES },\n): SecurityPolicyViolation | null {\n  // Basic injection protection (from original implementation)\n  if (/`|\\$\\(/.test(command)) {\n    return {\n      policy: \"injection_prevention\",\n      message:\n        \"Command substitution and backticks are prohibited to prevent injection attacks.\",\n      command,\n    };\n  }\n\n  // Sort policies by priority (highest first)\n  const sortedPolicies = [...config.policies].sort(\n    (a, b) => b.priority - a.priority,\n  );\n\n  // Helper function to check a command string against all policies\n  const checkAgainstPolicies = (\n    cmdToCheck: string,\n    isFullCommand: boolean,\n  ): SecurityPolicyViolation | null => {\n    for (const policy of sortedPolicies) {\n      const patterns = policy.patterns.map((p) =>\n        typeof p === \"string\" ? patternToRegExp(p) : p,\n      );\n\n      for (const pattern of patterns) {\n        if (pattern.test(cmdToCheck)) {\n          // Check if command is in override list\n          if (config.allowOverrides) {\n            const overridePatterns = config.allowOverrides.map((p) =>\n              typeof p === \"string\" ? patternToRegExp(p) : p,\n            );\n            const isOverridden = overridePatterns.some((override) =>\n              override.test(cmdToCheck),\n            );\n            if (isOverridden) {\n              continue; // Skip this violation\n            }\n          }\n\n          return {\n            policy: policy.name,\n            message: policy.errorMessage,\n            command: cmdToCheck,\n            matchedPattern: pattern.source,\n          };\n        }\n      }\n    }\n    return null;\n  };\n\n  // First check the full command string (for patterns like \"curl.*|.*bash\")\n  const fullCommandViolation = checkAgainstPolicies(command, true);\n  if (fullCommandViolation) {\n    return fullCommandViolation;\n  }\n\n  // Then check individual segments (for patterns within each command)\n  const segments = splitCommands(command);\n  for (const segment of segments) {\n    const segmentViolation = checkAgainstPolicies(segment, false);\n    if (segmentViolation) {\n      return segmentViolation;\n    }\n  }\n\n  return null; // No violations found\n}\n\n/**\n * Backward compatible wrapper for the original isCommandAllowed function\n */\nexport function isCommandAllowed(\n  command: string,\n  allowList: string[] | RegExp[] = [],\n  denyList: string[] | RegExp[] = [],\n  securityConfig?: SecurityConfig,\n): boolean {\n  // First check new security policies\n  if (securityConfig) {\n    const violation = validateCommandSecurity(command, securityConfig);\n    if (violation) {\n      return false;\n    }\n  }\n\n  // Then fall back to original logic for backward compatibility\n  if (/`|\\$\\(/.test(command)) {\n    return false;\n  }\n\n  const allowRegs =\n    Array.isArray(allowList) && allowList.length > 0\n      ? typeof allowList[0] === \"string\"\n        ? (allowList as string[]).map(patternToRegExp)\n        : (allowList as RegExp[])\n      : [];\n\n  const denyRegs =\n    Array.isArray(denyList) && denyList.length > 0\n      ? typeof denyList[0] === \"string\"\n        ? (denyList as string[]).map(patternToRegExp)\n        : (denyList as RegExp[])\n      : [];\n\n  const segments = splitCommands(command);\n  return segments.every((segment) => {\n    const denied = denyRegs.some((reg) => reg.test(segment));\n    if (denied) {\n      return allowRegs.some((reg) => reg.test(segment));\n    }\n    if (allowRegs.length > 0) {\n      return allowRegs.some((reg) => reg.test(segment));\n    }\n    return true;\n  });\n}\n\n/**\n * Create a custom security configuration\n */\nexport function createSecurityConfig(\n  overrides: Partial<SecurityConfig> = {},\n): SecurityConfig {\n  return {\n    policies: DEFAULT_SECURITY_POLICIES,\n    ...overrides,\n  };\n}\n\n/**\n * Add a custom security policy\n */\nexport function addSecurityPolicy(\n  config: SecurityConfig,\n  policy: SecurityPolicy,\n): SecurityConfig {\n  return {\n    ...config,\n    policies: [...config.policies, policy].sort(\n      (a, b) => b.priority - a.priority,\n    ),\n  };\n}\n\nexport function compilePatterns(patterns: string[]): RegExp[] {\n  return patterns.map(patternToRegExp);\n}\n", "const brokenEmojiRegex =\n  /[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/g;\n\nconst ansiRegex = /\\x1B(?:[@-Z\\\\-_]|\\[[0-?]*[ -/]*[@-~])/g;\n\nexport function normalizeTextForLLM(\n  text: string | undefined,\n  lineBreaks: boolean = true,\n) {\n  if (!text) return \"\";\n\n  if (lineBreaks) {\n    // normalize window line breaks\n    text = text.replace(/\\r\\n/g, \"\\n\");\n    text = text.replace(/\\r/g, \"\\n\");\n  }\n\n  // remove broken emojis\n  text = text.replace(brokenEmojiRegex, \"\");\n\n  // remove ansi codes\n  text = text.replace(ansiRegex, \"\");\n\n  // remove unusual line terminators\n  const unusualLineTerminators = /[\\u2028\\u2029]/g;\n  text = text.replace(unusualLineTerminators, \"\");\n\n  return text;\n}\n\n// Function to truncate a string by taking first N and last N chars\nexport function truncateString(str: string, n: number): string {\n  if (str.length <= 2 * n) {\n    return str;\n  }\n\n  const firstPart = str.substring(0, n);\n  const lastPart = str.substring(str.length - n);\n\n  return `${firstPart}...${lastPart}`;\n}\n\nfunction truncateEnd(str: string, maxLength: number): string {\n  if (str.length <= maxLength) {\n    return str;\n  }\n\n  return str.slice(0, maxLength) + \"...\";\n}\n\n// Function to truncate a string by taking first N and last N lines\nexport function truncateLines(\n  str: string,\n  n: number,\n  maxLineLength: number = Number.MAX_SAFE_INTEGER,\n): string {\n  const lines = str.split(\"\\n\");\n\n  if (lines.length <= 2 * n) {\n    return lines.map((l) => truncateEnd(l, maxLineLength)).join(\"\\n\");\n  }\n\n  const firstLines = lines.slice(0, n);\n  const lastLines = lines.slice(-n);\n\n  return `${firstLines.map((l) => truncateEnd(l, maxLineLength)).join(\"\\n\")}\\n...\\n${lastLines.map((l) => truncateEnd(l, maxLineLength)).join(\"\\n\")}`;\n}\n", "import micromatch from \"micromatch\";\nimport type { Permission, AclPolicy, AccessResult } from \"$/ai-utils\";\n\n/**\n * Checks if user principals match the ACL entry principals\n * @param userPrincipals Array of user's teams/roles\n * @param entryPrincipals Array of teams/roles from ACL entry\n * @returns True if user has at least one matching principal, or if entry has no principal restrictions\n */\nfunction checkPrincipalMatch(\n  userPrincipals?: string[],\n  entryPrincipals?: string[],\n): boolean {\n  // If the ACL entry doesn't specify principals, it applies to everyone\n  if (!entryPrincipals || entryPrincipals.length === 0) {\n    return true;\n  }\n\n  // If user has no principals but entry requires them, deny access\n  if (!userPrincipals || userPrincipals.length === 0) {\n    return false;\n  }\n\n  // Check if user has at least one matching principal\n  return entryPrincipals.some((entryPrincipal) =>\n    userPrincipals.includes(entryPrincipal),\n  );\n}\n\n/**\n * Evaluates whether a resource access is allowed based on the ACL policy\n * @param resource The resource path being accessed\n * @param permission The permission being requested (read, write, or list)\n * @param policy The ACL policy to evaluate against\n * @param userPrincipals Array of teams/roles the user belongs to (e.g., [\"developer\", \"admin\"])\n * @returns AccessResult indicating whether access is allowed and a message\n */\nexport function evaluateAccess(\n  resource: string,\n  permission: Permission,\n  policy?: AclPolicy,\n  userPrincipals?: string[],\n): AccessResult {\n  // If no policy is defined, allow all access\n  if (!policy || !policy.entries) {\n    return {\n      allowed: true,\n      message: \"No ACL policy defined, access granted by default\",\n    };\n  }\n\n  // Normalize the resource path (remove leading slash if present for consistency)\n  const normalizedResource = resource.startsWith(\"/\")\n    ? resource.slice(1)\n    : resource;\n\n  // First, check for any deny rules that match\n  for (const entry of policy.entries) {\n    // Check if the resource matches using glob pattern\n    const resourcePattern = entry.resource.startsWith(\"/\")\n      ? entry.resource.slice(1)\n      : entry.resource;\n    if (\n      !micromatch.isMatch(normalizedResource, resourcePattern, { dot: true })\n    ) {\n      continue;\n    }\n\n    // Check if the requested permission applies to this rule\n    if (entry.permissions.includes(permission) && entry.action === \"deny\") {\n      // Check if the user's principals match the entry's principals\n      if (!checkPrincipalMatch(userPrincipals, entry.principals)) {\n        continue;\n      }\n\n      // Deny rules take precedence and immediately deny access\n      return {\n        allowed: false,\n        message:\n          entry.description ??\n          policy.denyDescription ??\n          `Access denied by ACL deny rule for ${permission} on ${resource}`,\n      };\n    }\n  }\n\n  // If no deny rules matched, check for allow rules\n  for (const entry of policy.entries) {\n    // Check if the resource matches using glob pattern\n    const resourcePattern = entry.resource.startsWith(\"/\")\n      ? entry.resource.slice(1)\n      : entry.resource;\n    if (\n      !micromatch.isMatch(normalizedResource, resourcePattern, { dot: true })\n    ) {\n      continue;\n    }\n\n    // Check if the requested permission applies to this rule\n    if (entry.permissions.includes(permission) && entry.action === \"allow\") {\n      // Check if the user's principals match the entry's principals\n      if (!checkPrincipalMatch(userPrincipals, entry.principals)) {\n        continue;\n      }\n\n      // Allow rule grants access\n      return {\n        allowed: true,\n        message: `Access granted by ACL allow rule for ${permission} on ${resource}`,\n      };\n    }\n  }\n\n  // No matching rules found, deny by default\n  return {\n    allowed: false,\n    message:\n      policy.denyDescription ??\n      `Access denied: No ACL rule found granting ${permission} permission on ${resource}`,\n  };\n}\n\n/**\n * Extracts all deny patterns for the \"list\" permission from an ACL policy\n * @param policy The ACL policy to extract patterns from\n * @returns Array of normalized resource patterns that deny list access\n */\nexport function extractListPatterns(policy?: AclPolicy): {\n  allow: string[];\n  deny: string[];\n} {\n  if (!policy || !policy.entries || policy.entries.length === 0) {\n    return {\n      allow: [],\n      deny: [],\n    };\n  }\n\n  const denyPatterns: string[] = [];\n  const allowPatterns: string[] = [];\n  for (const entry of policy.entries) {\n    // Only process deny rules that include \"list\" permission\n    if (entry.action === \"deny\" && entry.permissions.includes(\"list\")) {\n      // Normalize the resource pattern (remove leading slash for consistency)\n      const normalizedPattern = entry.resource.startsWith(\"/\")\n        ? entry.resource.slice(1)\n        : entry.resource;\n\n      denyPatterns.push(normalizedPattern);\n    }\n    if (entry.action === \"allow\" && entry.permissions.includes(\"list\")) {\n      const normalizedPattern = entry.resource.startsWith(\"/\")\n        ? entry.resource.slice(1)\n        : entry.resource;\n\n      allowPatterns.push(normalizedPattern);\n    }\n  }\n\n  return {\n    allow: allowPatterns,\n    deny: denyPatterns,\n  };\n}\n\nexport function createFilterMatcher(\n  filterPattern?: string,\n  getDotFiles: boolean = false,\n) {\n  if (!filterPattern) {\n    return () => true;\n  }\n\n  filterPattern = filterPattern.startsWith(\"/\")\n    ? filterPattern.slice(1)\n    : filterPattern;\n\n  const basenameMatcher = micromatch.matcher(filterPattern, {\n    basename: true,\n    dot: getDotFiles,\n  });\n  const fullPathMatcher = micromatch.matcher(filterPattern, {\n    matchBase: false,\n    dot: getDotFiles,\n  });\n  return (file: string) => fullPathMatcher(file) || basenameMatcher(file);\n}\n\nexport function filterFilesByListPatterns({\n  files,\n  policy,\n  filterPattern,\n  getDotFiles = false,\n}: {\n  files: string[];\n  policy: AclPolicy | undefined;\n  filterPattern?: string;\n  getDotFiles?: boolean;\n}): string[] {\n  // Create the filter matcher for the optional filterPattern\n  const filterMatcher = createFilterMatcher(filterPattern, getDotFiles);\n\n  // If no policy is provided, just apply the filterPattern if present\n  if (!policy?.entries) {\n    return files.filter((file) => {\n      // Normalize the file path (remove leading slash for consistency)\n      const normalizedFile = file.startsWith(\"/\") ? file.slice(1) : file;\n      return filterMatcher(normalizedFile);\n    });\n  }\n\n  const { allow, deny } = extractListPatterns(policy);\n\n  // If policy has no entries, return empty array (no allow rules means nothing is allowed)\n  if (allow.length === 0 && deny.length === 0) {\n    return [];\n  }\n\n  const denyMatchers = deny.map((pattern) =>\n    micromatch.matcher(pattern.startsWith(\"/\") ? pattern.slice(1) : pattern, {\n      dot: getDotFiles,\n    }),\n  );\n  const allowMatchers = allow.map((pattern) =>\n    micromatch.matcher(pattern.startsWith(\"/\") ? pattern.slice(1) : pattern, {\n      dot: getDotFiles,\n    }),\n  );\n\n  return files.filter((file) => {\n    // Normalize the file path (remove leading slash for consistency)\n    const normalizedFile = file.startsWith(\"/\") ? file.slice(1) : file;\n\n    // First check if the file is allowed by ACL patterns\n    const allowed = allowMatchers.some((matcher) => matcher(normalizedFile));\n    if (!allowed) {\n      return false;\n    }\n\n    // Then check if the file is explicitly denied by ACL patterns\n    const explicitDenied = denyMatchers.some((matcher) =>\n      matcher(normalizedFile),\n    );\n    if (explicitDenied) {\n      return false;\n    }\n\n    // Finally apply the additional filterPattern if present\n    return filterMatcher(normalizedFile);\n  });\n}\n", "import micromatch from \"micromatch\";\nimport type { AclPolicy } from \"$/ai-utils\";\nimport { evaluateAccess } from \"./acl\";\n\n// Types for ripgrep JSON output\ninterface RipgrepBegin {\n  type: \"begin\";\n  data: {\n    path: { text: string };\n  };\n}\n\ninterface RipgrepMatch {\n  type: \"match\";\n  data: {\n    path: { text: string };\n    lines: { text: string };\n    line_number: number;\n    absolute_offset: number;\n    submatches: Array<{\n      match: { text: string };\n      start: number;\n      end: number;\n    }>;\n  };\n}\n\ninterface RipgrepContext {\n  type: \"context\";\n  data: {\n    path: { text: string };\n    lines: { text: string };\n    line_number: number;\n    absolute_offset: number;\n    submatches: never[];\n  };\n}\n\ninterface RipgrepEnd {\n  type: \"end\";\n  data: {\n    path: { text: string };\n    binary_offset: number | null;\n    stats: {\n      elapsed: { secs: number; nanos: number; human: string };\n      searches: number;\n      searches_with_match: number;\n      bytes_searched: number;\n      bytes_printed: number;\n      matched_lines: number;\n      matches: number;\n    };\n  };\n}\n\ninterface RipgrepSummary {\n  type: \"summary\";\n  data: {\n    elapsed_total: { human: string; nanos: number; secs: number };\n    stats: {\n      bytes_printed: number;\n      bytes_searched: number;\n      elapsed: { human: string; nanos: number; secs: number };\n      matched_lines: number;\n      matches: number;\n      searches: number;\n      searches_with_match: number;\n    };\n  };\n}\n\ntype RipgrepEntry =\n  | RipgrepBegin\n  | RipgrepMatch\n  | RipgrepContext\n  | RipgrepEnd\n  | RipgrepSummary;\n\ninterface FileResult {\n  path: string;\n  lines: Array<{\n    number: number;\n    text: string;\n    isMatch: boolean;\n  }>;\n}\n\n/**\n * Parses ripgrep JSON output, filters files based on ACL read permissions, and formats to human-readable output\n * @param jsonLines String containing JSON per line from ripgrep --json\n * @param policy The ACL policy to evaluate against\n * @param userPrincipals Array of teams/roles the user belongs to\n * @param includeGlob Optional glob pattern to further filter file paths\n * @returns Human-readable formatted search results for files the user has read access to\n */\nexport function parseAndFilterRipgrepResults(\n  jsonLines: string,\n  policy?: AclPolicy,\n  userPrincipals?: string[],\n  includeGlob?: string,\n): string {\n  const lines = jsonLines\n    .trim()\n    .split(\"\\n\")\n    .filter((line) => line.trim());\n  const fileResults: Map<string, FileResult> = new Map();\n\n  // Parse JSON lines and group by file\n  for (const line of lines) {\n    try {\n      const entry: RipgrepEntry = JSON.parse(line);\n\n      if (entry.type === \"match\" || entry.type === \"context\") {\n        const filePath = entry.data.path.text;\n\n        let fileResult = fileResults.get(filePath);\n        if (!fileResult) {\n          fileResults.set(\n            filePath,\n            (fileResult = {\n              path: filePath,\n              lines: [],\n            }),\n          );\n        }\n\n        fileResult.lines.push({\n          number: entry.data.line_number,\n          text: entry.data.lines.text.replace(/\\n$/, \"\"), // Remove trailing newline\n          isMatch: entry.type === \"match\",\n        });\n      }\n    } catch (error) {\n      // Skip invalid JSON lines (like summary lines that might be malformed)\n      continue;\n    }\n  }\n\n  // Filter files based on ACL read permissions\n  let allowedResults: FileResult[] = [];\n\n  if (policy?.entries) {\n    for (const [filePath, fileResult] of fileResults.entries()) {\n      const accessResult = evaluateAccess(\n        filePath,\n        \"read\",\n        policy,\n        userPrincipals,\n      );\n      if (accessResult.allowed) {\n        allowedResults.push(fileResult);\n      }\n    }\n  } else {\n    allowedResults = Array.from(fileResults.values());\n  }\n\n  // Apply additional glob filtering if provided\n  let finalResults = allowedResults;\n  if (includeGlob) {\n    finalResults = allowedResults.filter((fileResult) => {\n      // Normalize the file path (remove leading slash for consistency)\n      const normalizedPath = fileResult.path.startsWith(\"/\")\n        ? fileResult.path.slice(1)\n        : fileResult.path;\n      return micromatch.isMatch(normalizedPath, includeGlob);\n    });\n  }\n\n  // Format to human-readable output\n  if (finalResults.length === 0) {\n    return \"\";\n  }\n\n  const formattedResults: string[] = [];\n\n  for (const fileResult of finalResults) {\n    const lines: string[] = [fileResult.path];\n\n    for (const line of fileResult.lines) {\n      const prefix = line.isMatch ? \":\" : \"-\";\n      lines.push(`${line.number}${prefix}${line.text}`);\n    }\n\n    formattedResults.push(lines.join(\"\\n\"));\n  }\n\n  return formattedResults.join(\"\\n\\n\");\n}\n", "import { normalize } from \"path\";\n\ninterface TreeNode {\n  name: string;\n  children: Map<string, TreeNode>;\n  isFile: boolean;\n}\n\ninterface RenderFileTreeOptions {\n  paths: string[];\n  maxFilesPerDir?: number | ((folderPath: string) => number);\n  excludeBasenames?: Set<string>;\n  maxDepth?: number;\n  simple?: boolean;\n}\n\n/**\n * Renders a file tree structure in ASCII format with a limit on files shown per directory\n * @param options Configuration options for rendering the file tree\n * @param options.paths Array of file paths to render\n * @param options.maxFilesPerDir Maximum number of files to show per directory. Can be a number or a function that takes the folder path and returns the limit. Default is 10.\n * @param options.excludeBasenames Set of directory names to exclude from expansion\n * @param options.maxDepth Maximum depth to render\n * @param options.simple Whether to use simple format (no tree characters)\n * @returns ASCII representation of the file tree\n */\nexport function renderFileTree(options: RenderFileTreeOptions): string {\n  const {\n    paths,\n    maxFilesPerDir = 10,\n    excludeBasenames = new Set(),\n    maxDepth = Infinity,\n    simple = false,\n  } = options;\n\n  // Helper function to get the file limit for a directory\n  function getFileLimit(folderPath: string): number {\n    if (typeof maxFilesPerDir === \"function\") {\n      return maxFilesPerDir(folderPath);\n    }\n    return maxFilesPerDir;\n  }\n\n  // Build tree structure\n  const root: TreeNode = {\n    name: \"\",\n    children: new Map(),\n    isFile: false,\n  };\n\n  // Normalize and sort paths\n  paths\n    .map((path) => normalize(path).replace(/\\\\/g, \"/\"))\n    .filter((path) => path !== \".\" && path !== \"..\")\n    .sort()\n    .forEach((path) => {\n      let current = root;\n      const parts = path\n        .split(\"/\")\n        .filter((part) => part !== \"\" && part !== \".\" && part !== \"..\");\n\n      // If path ends with '/', treat it as a directory\n      const isDirectory = path.endsWith(\"/\");\n\n      for (let i = 0; i < parts.length; i++) {\n        const part = parts[i];\n        const isFile = i === parts.length - 1 && !isDirectory;\n\n        if (!current.children.has(part)) {\n          current.children.set(part, {\n            name: part,\n            children: new Map(),\n            isFile,\n          });\n        }\n        current = current.children.get(part)!;\n      }\n    });\n\n  // Helper function to get collapsed path for single-child directories\n  function getCollapsedPath(\n    node: TreeNode,\n  ): { path: string; depth: number } | null {\n    let path = node.name;\n    let current = node;\n    let depth = 1;\n\n    while (!current.isFile && current.children.size === 1) {\n      const [childName, childNode] = Array.from(current.children.entries())[0];\n      if (childNode.isFile) break;\n      path += \"/\" + childName;\n      depth++;\n      current = childNode;\n    }\n\n    return current === node ? null : { path: path + \"/\", depth };\n  }\n\n  // Recursive function to render tree\n  function renderNode(\n    node: TreeNode,\n    prefix: string = \"\",\n    isLast: boolean = true,\n    isRoot: boolean = true,\n    currentPath: string = \"\",\n    currentDepth: number = 0,\n  ): string {\n    let result = \"\";\n    let collapsedDepth = 0;\n\n    if (node.name) {\n      const nodePath = currentPath ? `${currentPath}/${node.name}` : node.name;\n\n      // Check if this directory should be excluded from expansion FIRST\n      if (!node.isFile && excludeBasenames.has(node.name)) {\n        const fileCount = paths.filter(\n          (path) => path.startsWith(nodePath + \"/\") && !path.endsWith(\"/\"),\n        ).length;\n\n        if (simple) {\n          result += prefix + node.name + \"/\\n\";\n          if (fileCount > 0) {\n            result += `${prefix}  ... ${fileCount} file${fileCount === 1 ? \"\" : \"s\"}\\n`;\n          }\n        } else {\n          result += prefix;\n          result += isLast ? \"\u2514\u2500 \" : \"\u251C\u2500 \";\n          result += node.name + \"/\";\n          result += \"\\n\";\n\n          if (fileCount > 0) {\n            const newPrefix = prefix + (isLast ? \"   \" : \"\u2502  \");\n            result += `${newPrefix}\u2514\u2500 ... ${fileCount} file${fileCount === 1 ? \"\" : \"s\"}\\n`;\n          }\n        }\n        return result;\n      }\n\n      const collapsedInfo = !node.isFile ? getCollapsedPath(node) : null;\n\n      if (simple) {\n        result +=\n          prefix +\n          (collapsedInfo?.path || node.name + (node.isFile ? \"\" : \"/\")) +\n          \"\\n\";\n      } else {\n        result += prefix;\n        result += isLast ? \"\u2514\u2500 \" : \"\u251C\u2500 \";\n        result += collapsedInfo?.path || node.name + (node.isFile ? \"\" : \"/\");\n        result += \"\\n\";\n      }\n\n      if (collapsedInfo) {\n        // Skip rendering the collapsed nodes and update depth\n        let current = node;\n        while (!current.isFile && current.children.size === 1) {\n          const [_, childNode] = Array.from(current.children.entries())[0];\n          if (childNode.isFile) break;\n          current = childNode;\n        }\n        node = current;\n        collapsedDepth = collapsedInfo.depth; // Full internal depth of collapsed path\n      }\n    }\n\n    if (!node.isFile) {\n      const entries = Array.from(node.children.entries());\n      let sortedEntries: [string, TreeNode][];\n\n      if (isRoot) {\n        // At root level, sort everything alphabetically\n        sortedEntries = entries.sort(([a], [b]) => a.localeCompare(b));\n      } else {\n        // In subdirectories, sort directories first, then files\n        const dirs = entries\n          .filter(([_, n]) => !n.isFile)\n          .sort(([a], [b]) => a.localeCompare(b));\n        const files = entries\n          .filter(([_, n]) => n.isFile)\n          .sort(([a], [b]) => a.localeCompare(b));\n        sortedEntries = [...dirs, ...files];\n      }\n\n      // Process directories and files\n      const files = sortedEntries.filter(([_, n]) => n.isFile);\n\n      // Construct the full path for the current directory\n      const currentDirPath =\n        currentPath && node.name\n          ? `${currentPath}/${node.name}`\n          : node.name || currentPath || \"/\";\n\n      const fileLimit = getFileLimit(currentDirPath);\n      const visibleFiles = files.slice(0, fileLimit);\n      const visibleEntries = isRoot\n        ? sortedEntries.filter(\n            ([_, n]) => !n.isFile || sortedEntries.indexOf([_, n]) < fileLimit,\n          )\n        : [...sortedEntries.filter(([_, n]) => !n.isFile), ...visibleFiles];\n\n      visibleEntries.forEach(([childName, childNode], index) => {\n        const newPrefix = simple\n          ? prefix + (node.name ? \"  \" : \"\")\n          : prefix + (node.name ? (isLast ? \"   \" : \"\u2502  \") : \"\");\n        const isLastItem =\n          index === visibleEntries.length - 1 &&\n          (!childNode.isFile || files.length <= fileLimit);\n        const childPath =\n          currentPath && node.name\n            ? `${currentPath}/${node.name}`\n            : node.name || currentPath;\n\n        // Calculate effective depth including any collapsed paths\n        const effectiveCurrentDepth = currentDepth + collapsedDepth;\n\n        // Check if this child directory would exceed maxDepth\n        if (!childNode.isFile && effectiveCurrentDepth >= maxDepth) {\n          const nodeChildPath = childPath\n            ? `${childPath}/${childName}`\n            : childName;\n          const fileCount = paths.filter(\n            (path) =>\n              path.startsWith(nodeChildPath + \"/\") && !path.endsWith(\"/\"),\n          ).length;\n\n          if (simple) {\n            result += newPrefix + childName + \"/\\n\";\n            if (fileCount > 0) {\n              result += `${newPrefix}  ... ${fileCount} file${fileCount === 1 ? \"\" : \"s\"}\\n`;\n            }\n          } else {\n            result += newPrefix;\n            result += isLastItem ? \"\u2514\u2500 \" : \"\u251C\u2500 \";\n            result += childName + \"/\";\n            result += \"\\n\";\n\n            if (fileCount > 0) {\n              const filePrefix = newPrefix + (isLastItem ? \"   \" : \"\u2502  \");\n              result += `${filePrefix}\u2514\u2500 ... ${fileCount} file${fileCount === 1 ? \"\" : \"s\"}\\n`;\n            }\n          }\n        } else {\n          result += renderNode(\n            childNode,\n            newPrefix,\n            isLastItem,\n            false,\n            childPath,\n            effectiveCurrentDepth + 1,\n          );\n        }\n      });\n\n      // Show count of remaining files if limit was exceeded\n      if (files.length > fileLimit) {\n        const remaining = files.length - fileLimit;\n        if (simple) {\n          const newPrefix = prefix + (node.name ? \"  \" : \"\");\n          result += `${newPrefix}... ${remaining} more file${remaining === 1 ? \"\" : \"s\"}\\n`;\n        } else {\n          const newPrefix =\n            prefix + (node.name ? (isLast ? \"   \" : \"\u2502  \") : \"\");\n          result += `${newPrefix}\u2514\u2500 ... ${remaining} more file${remaining === 1 ? \"\" : \"s\"}\\n`;\n        }\n      }\n    }\n\n    return result;\n  }\n\n  return renderNode(root);\n}\n", "/**\n * Simple terminal buffer that handles basic control sequences\n * to properly represent what would be shown in a real terminal\n */\nexport class TerminalBuffer {\n  private lines: string[] = [\"\"];\n  private currentLine = 0;\n  private currentColumn = 0;\n  private maxLines: number;\n  private maxColumns: number;\n  private chunks: string[] = [];\n\n  constructor(maxLines = 1000, maxColumns = 300) {\n    // Validate maxLines parameter to prevent issues\n    this.maxLines =\n      typeof maxLines === \"number\" && maxLines > 0 && isFinite(maxLines)\n        ? Math.floor(maxLines)\n        : 1000;\n\n    // Validate maxColumns parameter to prevent issues\n    this.maxColumns =\n      typeof maxColumns === \"number\" && maxColumns > 0 && isFinite(maxColumns)\n        ? Math.floor(maxColumns)\n        : 300;\n  }\n\n  write(data: string): void {\n    if (this.chunks.length > this.maxLines) {\n      this.chunks.shift();\n    }\n    this.chunks.push(data);\n\n    // Guard against null, undefined, or non-string inputs\n    if (data == null || typeof data !== \"string\") {\n      return;\n    }\n\n    for (let i = 0; i < data.length; i++) {\n      const char = data[i];\n\n      if (char === \"\\r\") {\n        // Carriage return - move to start of line\n        this.currentColumn = 0;\n      } else if (char === \"\\n\") {\n        // Newline - move to next line\n        this.currentLine++;\n        this.currentColumn = 0;\n        if (this.currentLine >= this.lines.length) {\n          this.lines.push(\"\");\n        }\n        // Trim buffer if it exceeds maxLines\n        if (this.lines.length > this.maxLines) {\n          const removeCount = this.lines.length - this.maxLines;\n          this.lines.splice(0, removeCount);\n          this.currentLine = Math.max(0, this.currentLine - removeCount);\n        }\n      } else if (char === \"\\b\") {\n        // Backspace - move back one column\n        if (this.currentColumn > 0) {\n          this.currentColumn--;\n        }\n      } else if (\n        char === \"\\x1b\" &&\n        i + 1 < data.length &&\n        data[i + 1] === \"[\"\n      ) {\n        // ANSI escape sequence - parse it\n        let j = i + 2;\n        while (j < data.length && !/[A-Za-z]/.test(data[j])) {\n          j++;\n        }\n        if (j < data.length) {\n          const code = data[j];\n          const params = data.slice(i + 2, j);\n\n          // Handle common ANSI codes\n          if (code === \"K\") {\n            // Clear to end of line - ensure line exists\n            this.ensureLineExists(this.currentLine);\n            this.lines[this.currentLine] = (\n              this.lines[this.currentLine] || \"\"\n            ).slice(\n              0,\n              Math.max(0, Math.min(this.currentColumn, this.maxColumns)),\n            );\n          } else if (code === \"A\") {\n            // Move cursor up\n            const n = Math.max(1, parseInt(params) || 1);\n            this.currentLine = Math.max(0, this.currentLine - n);\n          } else if (code === \"B\") {\n            // Move cursor down\n            const n = Math.max(1, parseInt(params) || 1);\n            this.currentLine = Math.max(\n              0,\n              Math.min(this.lines.length - 1, this.currentLine + n),\n            );\n          } else if (code === \"C\") {\n            // Move cursor right\n            const n = Math.max(1, parseInt(params) || 1);\n            this.currentColumn = Math.max(\n              0,\n              Math.min(this.maxColumns, this.currentColumn + n),\n            );\n          } else if (code === \"D\") {\n            // Move cursor left\n            const n = Math.max(1, parseInt(params) || 1);\n            this.currentColumn = Math.max(0, this.currentColumn - n);\n          }\n          // Skip other ANSI codes for now (colors, etc.)\n\n          i = j; // Skip to after the ANSI sequence\n        } else {\n          // Incomplete ANSI sequence - skip the entire remaining part\n          i = data.length - 1; // This will be incremented by the for loop, so we end up at data.length\n        }\n      } else {\n        // Regular character - write it only if within column limit\n        if (this.currentColumn < this.maxColumns) {\n          // Ensure we have a line at the current position\n          this.ensureLineExists(this.currentLine);\n\n          const line = this.lines[this.currentLine] || \"\";\n          if (this.currentColumn >= line.length) {\n            // Extend the line\n            this.lines[this.currentLine] =\n              line.padEnd(Math.max(0, this.currentColumn), \" \") + char;\n          } else {\n            // Overwrite existing character\n            const safeColumn = Math.max(0, this.currentColumn);\n            this.lines[this.currentLine] =\n              line.slice(0, safeColumn) + char + line.slice(safeColumn + 1);\n          }\n          this.currentColumn = Math.max(0, this.currentColumn + 1);\n        }\n        // If we're at or beyond maxColumns, ignore the character (truncate)\n      }\n    }\n  }\n\n  private ensureLineExists(lineIndex: number): void {\n    // Ensure we have valid line index\n    const safeIndex = Math.max(0, lineIndex);\n\n    // Ensure we have enough lines\n    while (this.lines.length <= safeIndex) {\n      this.lines.push(\"\");\n    }\n\n    // Ensure line is a string\n    if (typeof this.lines[safeIndex] !== \"string\") {\n      this.lines[safeIndex] = \"\";\n    }\n  }\n\n  getWrite(): string {\n    return this.chunks.join(\"\");\n  }\n\n  getContent(): string {\n    // Guard against corrupted state\n    if (!Array.isArray(this.lines) || this.lines.length === 0) {\n      return \"\";\n    }\n\n    // Return the visible content, trimming trailing empty lines\n    let lastNonEmptyLine = this.lines.length - 1;\n    while (\n      lastNonEmptyLine >= 0 &&\n      typeof this.lines[lastNonEmptyLine] === \"string\" &&\n      this.lines[lastNonEmptyLine].trim() === \"\"\n    ) {\n      lastNonEmptyLine--;\n    }\n\n    if (lastNonEmptyLine < 0) {\n      return \"\";\n    }\n\n    return this.lines\n      .slice(0, lastNonEmptyLine + 1)\n      .map((line) => (typeof line === \"string\" ? line : \"\"))\n      .join(\"\\n\");\n  }\n\n  clear(): void {\n    this.lines = [\"\"];\n    this.currentLine = 0;\n    this.currentColumn = 0;\n  }\n\n  /**\n   * Get current cursor position for testing/debugging\n   */\n  getCursorPosition(): { line: number; column: number } {\n    return {\n      line: Math.max(0, this.currentLine || 0),\n      column: Math.max(0, this.currentColumn || 0),\n    };\n  }\n\n  /**\n   * Get the current number of lines for testing/debugging\n   */\n  getLineCount(): number {\n    return Array.isArray(this.lines) ? this.lines.length : 0;\n  }\n}\n", "import fs from \"fs\";\nimport { getTempScriptPath } from \"./process-tracker\";\n\n/**\n * Options for capturing environment variables from a setup command\n */\nexport interface EnvCaptureOptions {\n  /** The command to wrap with env capture */\n  command: string;\n}\n\n/**\n * Result of environment capture\n */\nexport interface EnvCaptureResult {\n  /** The modified command that includes env capture */\n  command: string;\n  /** Path to the temporary file where env will be captured */\n  envFilePath: string;\n  /**\n   * Function to get the captured environment variables.\n   * This will read, parse, and cleanup the env file in one call.\n   * Returns undefined if the env file couldn't be read.\n   */\n  getCapturedEnv: () => Promise<Record<string, string> | undefined>;\n}\n\n/**\n * Wraps a command with environment variable capture at the end.\n * The environment is captured to a temporary file that can be parsed later.\n *\n * @param options - Configuration for env capture\n * @returns The modified command and a function to retrieve the captured env\n *\n * @example\n * ```typescript\n * const { command, getCapturedEnv } = wrapCommandWithEnvCapture({\n *   command: 'npm install',\n * });\n *\n * // Execute command...\n * // Later, get the captured environment (reads, parses, and cleans up automatically):\n * const env = await getCapturedEnv();\n * ```\n */\nexport function wrapCommandWithEnvCapture(\n  options: EnvCaptureOptions,\n): EnvCaptureResult {\n  const { command } = options;\n  const envFilePath = getTempScriptPath(\".env\");\n\n  let wrappedCommand = command + \"\\n\";\n  wrappedCommand += `env > ${envFilePath}\\n`;\n\n  // Return a closure that handles read, parse, and cleanup\n  const getCapturedEnv = async (): Promise<\n    Record<string, string> | undefined\n  > => {\n    try {\n      const env = await parseEnvFile(envFilePath);\n      return env;\n    } catch (err) {\n      // Failed to read env file - that's okay, return undefined\n      return undefined;\n    } finally {\n      // Always cleanup the env file\n      await cleanupEnvFile(envFilePath);\n    }\n  };\n\n  return {\n    command: wrappedCommand,\n    envFilePath,\n    getCapturedEnv,\n  };\n}\n\n/**\n * Parses an environment file into a key-value object.\n * Handles multi-line values and empty lines.\n *\n * @param filePath - Path to the environment file\n * @returns A promise that resolves to the parsed environment variables\n *\n * @example\n * ```typescript\n * const env = await parseEnvFile('/tmp/env.txt');\n * console.log(env.PATH); // \"/usr/bin:/bin\"\n * ```\n */\nexport async function parseEnvFile(\n  filePath: string,\n): Promise<Record<string, string>> {\n  const content = await fs.promises.readFile(filePath, \"utf-8\");\n  return parseEnvContent(content);\n}\n\n/**\n * Parses environment variable content into a key-value object.\n * This is the core parsing logic extracted for easier testing.\n *\n * Environment format is: KEY=VALUE\n * Each line represents one variable.\n *\n * @param content - The raw content from an env file\n * @returns The parsed environment variables\n *\n * @example\n * ```typescript\n * const env = parseEnvContent('PATH=/usr/bin\\nHOME=/home/user');\n * // { PATH: '/usr/bin', HOME: '/home/user' }\n * ```\n */\nexport function parseEnvContent(content: string): Record<string, string> {\n  const env: Record<string, string> = {};\n\n  const lines = content.split(\"\\n\");\n  for (const line of lines) {\n    // Skip empty lines\n    if (!line.trim()) {\n      continue;\n    }\n\n    const idx = line.indexOf(\"=\");\n    if (idx > 0) {\n      const key = line.substring(0, idx);\n      let value = line.substring(idx + 1);\n      // Remove trailing carriage return (Windows line endings)\n      if (value.endsWith(\"\\r\")) {\n        value = value.slice(0, -1);\n      }\n      env[key] = value;\n    }\n  }\n\n  return env;\n}\n\n/**\n * Cleans up the environment capture file.\n * Call this after parsing to remove temporary files.\n *\n * @param filePath - Path to the environment file to clean up\n *\n * @example\n * ```typescript\n * try {\n *   const env = await parseEnvFile(envFilePath);\n *   // Use env...\n * } finally {\n *   await cleanupEnvFile(envFilePath);\n * }\n * ```\n */\nexport async function cleanupEnvFile(filePath: string): Promise<void> {\n  try {\n    await fs.promises.unlink(filePath);\n  } catch (err) {\n    // Silently ignore cleanup errors\n  }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isSSL = void 0;\nexports.setupOutgoing = setupOutgoing;\nexports.setupSocket = setupSocket;\nexports.getPort = getPort;\nexports.hasEncryptedConnection = hasEncryptedConnection;\nexports.urlJoin = urlJoin;\nexports.rewriteCookieProperty = rewriteCookieProperty;\nexports.toURL = toURL;\nconst node_tls_1 = require(\"node:tls\");\nconst upgradeHeader = /(^|,)\\s*upgrade\\s*($|,)/i;\n// Simple Regex for testing if protocol is https\nexports.isSSL = /^https|wss/;\n// If we allow this header and a user sends it with a request,\n// then serving this request goes into a weird broken state, which\n// wastes resources.  This could be a DOS security vulnerability.\n// We strip this header if it appears in any request, and then things\n// work fine.\n// See https://github.com/http-party/node-http-proxy/issues/1647\nconst HEADER_BLACKLIST = \"trailer\";\nconst HTTP2_HEADER_BLACKLIST = [\n    ':method',\n    ':path',\n    ':scheme',\n    ':authority',\n];\n// setupOutgoing -- Copies the right headers from `options` and `req` to\n// `outgoing` which is then used to fire the proxied request by calling\n// http.request or https.request with outgoing as input.\n// Returns Object with all required properties outgoing options.\nfunction setupOutgoing(\n// Base object to be filled with required properties\noutgoing, \n// Config object passed to the proxy\noptions, \n// Request Object\nreq, \n// String to select forward or target\nforward) {\n    // the final path is target path + relative path requested by user:\n    const target = options[forward || \"target\"];\n    outgoing.port =\n        +(target.port ?? (target.protocol !== undefined && exports.isSSL.test(target.protocol) ? 443 : 80));\n    for (const e of [\n        \"host\",\n        \"hostname\",\n        \"socketPath\",\n        \"pfx\",\n        \"key\",\n        \"passphrase\",\n        \"cert\",\n        \"ca\",\n        \"ciphers\",\n        \"secureProtocol\",\n    ]) {\n        // @ts-expect-error -- this mapping is valid\n        outgoing[e] = target[e];\n    }\n    outgoing.method = options.method || req.method;\n    outgoing.headers = { ...req.headers };\n    if (options.headers) {\n        outgoing.headers = { ...outgoing.headers, ...options.headers };\n    }\n    // note -- we do the scan in this order since\n    // the header could be any case, i.e., doing\n    // outgoing.headers['Trailer'] won't work, because\n    // it might be {'TrAiLeR':...}\n    for (const header in outgoing.headers) {\n        if (HEADER_BLACKLIST == header.toLowerCase()) {\n            delete outgoing.headers[header];\n            break;\n        }\n    }\n    if (req.httpVersionMajor > 1) {\n        for (const header of HTTP2_HEADER_BLACKLIST) {\n            delete outgoing.headers[header];\n        }\n    }\n    if (options.auth) {\n        delete outgoing.headers.authorization;\n        outgoing.auth = options.auth;\n    }\n    if (options.ca) {\n        outgoing.ca = options.ca;\n    }\n    if (target.protocol !== undefined && exports.isSSL.test(target.protocol)) {\n        outgoing.rejectUnauthorized =\n            typeof options.secure === \"undefined\" ? true : options.secure;\n    }\n    outgoing.agent = options.agent || false;\n    outgoing.localAddress = options.localAddress;\n    // Remark: If we are false and not upgrading, set the connection: close. This is the right thing to do\n    // as node core doesn't handle this COMPLETELY properly yet.\n    if (!outgoing.agent) {\n        outgoing.headers = outgoing.headers || {};\n        if (typeof outgoing.headers.connection !== \"string\" ||\n            !upgradeHeader.test(outgoing.headers.connection)) {\n            outgoing.headers.connection = \"close\";\n        }\n    }\n    // target if defined is a URL object so has attribute \"pathname\", not \"path\".\n    const targetPath = target && options.prependPath !== false && 'pathname' in target ? getPath(`${target.pathname}${target.search ?? \"\"}`) : \"/\";\n    let outgoingPath = options.toProxy ? req.url : getPath(req.url);\n    // Remark: ignorePath will just straight up ignore whatever the request's\n    // path is. This can be labeled as FOOT-GUN material if you do not know what\n    // you are doing and are using conflicting options.\n    outgoingPath = !options.ignorePath ? outgoingPath : \"\";\n    outgoing.path = urlJoin(targetPath, outgoingPath ?? \"\");\n    if (options.changeOrigin) {\n        outgoing.headers.host =\n            target.protocol !== undefined &&\n                required(outgoing.port, target.protocol) &&\n                !hasPort(outgoing.host)\n                ? outgoing.host + \":\" + outgoing.port\n                : outgoing.host;\n    }\n    return outgoing;\n}\n// Set the proper configuration for sockets,\n// set no delay and set keep alive, also set\n// the timeout to 0.\n// Return the configured socket.\nfunction setupSocket(socket) {\n    socket.setTimeout(0);\n    socket.setNoDelay(true);\n    socket.setKeepAlive(true, 0);\n    return socket;\n}\n// Get the port number from the host. Or guess it based on the connection type.\nfunction getPort(\n// Incoming HTTP request.\nreq) {\n    const res = req.headers.host ? req.headers.host.match(/:(\\d+)/) : \"\";\n    return res ? res[1] : hasEncryptedConnection(req) ? \"443\" : \"80\";\n}\n// Check if the request has an encrypted connection.\nfunction hasEncryptedConnection(\n// Incoming HTTP request.\nreq) {\n    const conn = req.connection;\n    return ((conn instanceof node_tls_1.TLSSocket && conn.encrypted) || Boolean(conn.pair));\n}\n// OS-agnostic join (doesn't break on URLs like path.join does on Windows)>\nfunction urlJoin(...args) {\n    // join url and merge all query string.\n    const queryParams = [];\n    let queryParamRaw = \"\";\n    args.forEach((url, index) => {\n        const qpStart = url.indexOf(\"?\");\n        if (qpStart !== -1) {\n            queryParams.push(url.substring(qpStart + 1));\n            args[index] = url.substring(0, qpStart);\n        }\n    });\n    queryParamRaw = queryParams.filter(Boolean).join(\"&\");\n    // Join all strings, but remove empty strings so we don't get extra slashes from\n    // joining e.g. ['', 'am'].\n    // Also we respect strings that start and end in multiple slashes, e.g., so\n    //  ['/', '//test', '///foo'] --> '//test'\n    // since e.g., http://localhost//test///foo is a valid URL. See\n    // lib/test/http/double-slashes.test.ts\n    // The algorithm for joining is just straightforward and simple, instead\n    // of the complicated \"too clever\" code from http-proxy. This just concats\n    // the strings together, not adding any slashes, and also combining adjacent\n    // slashes in two segments, e.g., ['/foo/','/bar'] --> '/foo/bar'\n    let retSegs = \"\";\n    for (const seg of args) {\n        if (!seg) {\n            continue;\n        }\n        if (retSegs.endsWith(\"/\")) {\n            if (seg.startsWith(\"/\")) {\n                retSegs += seg.slice(1);\n            }\n            else {\n                retSegs += seg;\n            }\n        }\n        else {\n            if (seg.startsWith(\"/\")) {\n                retSegs += seg;\n            }\n            else {\n                retSegs += \"/\" + seg;\n            }\n        }\n    }\n    // Only join the query string if it exists so we don't have trailing a '?'\n    // on every request\n    return queryParamRaw ? retSegs + \"?\" + queryParamRaw : retSegs;\n}\nfunction rewriteCookieProperty(header, \n// config = mapping of domain to rewritten domain.\n//         '*' key to match any domain, null value to remove the domain.\nconfig, property) {\n    if (Array.isArray(header)) {\n        return header.map((headerElement) => {\n            return rewriteCookieProperty(headerElement, config, property);\n        });\n    }\n    return header.replace(new RegExp(\"(;\\\\s*\" + property + \"=)([^;]+)\", \"i\"), (match, prefix, previousValue) => {\n        let newValue;\n        if (previousValue in config) {\n            newValue = config[previousValue];\n        }\n        else if (\"*\" in config) {\n            newValue = config[\"*\"];\n        }\n        else {\n            //no match, return previous value\n            return match;\n        }\n        if (newValue) {\n            //replace value\n            return prefix + newValue;\n        }\n        else {\n            //remove value\n            return \"\";\n        }\n    });\n}\n// Check the host and see if it potentially has a port in it (keep it simple)\nfunction hasPort(host) {\n    return !!~host.indexOf(\":\");\n}\nfunction getPath(url) {\n    if (url === '' || url?.startsWith('?')) {\n        return url;\n    }\n    const u = toURL(url);\n    return `${u.pathname ?? \"\"}${u.search ?? \"\"}`;\n}\nfunction toURL(url) {\n    if (url instanceof URL) {\n        return url;\n    }\n    else if (typeof url === \"object\" && 'href' in url && typeof url.href === \"string\") {\n        url = url.href;\n    }\n    if (!url) {\n        url = \"\";\n    }\n    if (typeof url != \"string\") {\n        // it has to be a string at this point, but to keep typescript happy:\n        url = `${url}`;\n    }\n    if (url.startsWith(\"//\")) {\n        // special case -- this would be viewed as a this is a \"network-path reference\",\n        // so we explicitly prefix with our http schema.  See\n        url = `http://base.invalid${url}`;\n    }\n    // urllib.Url is deprecated but we support it by converting to URL\n    return new URL(url, \"http://base.invalid\");\n}\n// vendor simplified version of https://www.npmjs.com/package/requires-port to\n// reduce dep and add typescript.\nfunction required(port, protocol) {\n    protocol = protocol.split(\":\")[0];\n    port = +port;\n    if (!port)\n        return false;\n    switch (protocol) {\n        case \"http\":\n        case \"ws\":\n            return port !== 80;\n        case \"https\":\n        case \"wss\":\n            return port !== 443;\n    }\n    return port !== 0;\n}\n", "\"use strict\";\n/*\nThe passes.\n\nA `pass` is just a function that is executed on `req, res, options`\nso that you can easily add new checks while still keeping the base\nflexible.\n\nNOTE: The function in OUTGOING_PASSES are called. They are assumed\nto not return anything.\n*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OUTGOING_PASSES = void 0;\nexports.removeChunked = removeChunked;\nexports.setConnection = setConnection;\nexports.setRedirectHostRewrite = setRedirectHostRewrite;\nexports.writeHeaders = writeHeaders;\nexports.writeStatusCode = writeStatusCode;\nconst common = __importStar(require(\"../common\"));\nconst redirectRegex = /^201|30(1|2|7|8)$/;\n// <--\n// If is a HTTP 1.0 request, remove chunk headers\nfunction removeChunked(_req, _res, \n// Response object from the proxy request\nproxyRes) {\n    // transfer-encoding is hop-by-hop, don't preserve it across proxy hops\n    delete proxyRes.headers[\"transfer-encoding\"];\n}\n// If is a HTTP 1.0 request, set the correct connection header\n// or if connection header not present, then use `keep-alive`\nfunction setConnection(req, _res, \n// Response object from the proxy request\nproxyRes) {\n    if (req.httpVersion === \"1.0\") {\n        proxyRes.headers[\"connection\"] = req.headers[\"connection\"] || \"close\";\n    }\n    else if (req.httpVersion !== \"2.0\" && !proxyRes.headers[\"connection\"]) {\n        proxyRes.headers[\"connection\"] = req.headers[\"connection\"] || \"keep-alive\";\n    }\n}\nfunction setRedirectHostRewrite(req, _res, proxyRes, options) {\n    if ((options.hostRewrite || options.autoRewrite || options.protocolRewrite) &&\n        proxyRes.headers[\"location\"] &&\n        redirectRegex.test(`${proxyRes.statusCode}`)) {\n        const target = common.toURL(options.target);\n        const location = proxyRes.headers[\"location\"];\n        if (typeof location != \"string\") {\n            return;\n        }\n        const u = common.toURL(location);\n        // make sure the redirected host matches the target host before rewriting\n        if (target.host != u.host) {\n            return;\n        }\n        if (options.hostRewrite) {\n            u.host = options.hostRewrite;\n        }\n        else if (options.autoRewrite) {\n            u.host = req.headers[\"host\"] ?? \"\";\n        }\n        if (options.protocolRewrite) {\n            u.protocol = options.protocolRewrite;\n        }\n        proxyRes.headers[\"location\"] = u.toString();\n    }\n}\n// Copy headers from proxyRes to res.\nfunction writeHeaders(_req, \n// Response to set headers in\nres, \n// Response object from the proxy request\nproxyRes, \n// options.cookieDomainRewrite: Config to rewrite cookie domain\noptions) {\n    const rewriteCookieDomainConfig = typeof options.cookieDomainRewrite === \"string\"\n        ? // also test for ''\n            { \"*\": options.cookieDomainRewrite }\n        : options.cookieDomainRewrite;\n    const rewriteCookiePathConfig = typeof options.cookiePathRewrite === \"string\"\n        ? // also test for ''\n            { \"*\": options.cookiePathRewrite }\n        : options.cookiePathRewrite;\n    const preserveHeaderKeyCase = options.preserveHeaderKeyCase;\n    const setHeader = (key, header) => {\n        if (header == undefined) {\n            return;\n        }\n        if (rewriteCookieDomainConfig && key.toLowerCase() === \"set-cookie\") {\n            header = common.rewriteCookieProperty(header, rewriteCookieDomainConfig, \"domain\");\n        }\n        if (rewriteCookiePathConfig && key.toLowerCase() === \"set-cookie\") {\n            header = common.rewriteCookieProperty(header, rewriteCookiePathConfig, \"path\");\n        }\n        res.setHeader(String(key).trim(), header);\n    };\n    // message.rawHeaders is added in: v0.11.6\n    // https://nodejs.org/api/http.html#http_message_rawheaders\n    let rawHeaderKeyMap;\n    if (preserveHeaderKeyCase && proxyRes.rawHeaders != undefined) {\n        rawHeaderKeyMap = {};\n        for (let i = 0; i < proxyRes.rawHeaders.length; i += 2) {\n            const key = proxyRes.rawHeaders[i];\n            rawHeaderKeyMap[key.toLowerCase()] = key;\n        }\n    }\n    for (const key0 in proxyRes.headers) {\n        let key = key0;\n        if (_req.httpVersionMajor > 1 && key === \"connection\") {\n            // don't send connection header to http2 client\n            continue;\n        }\n        const header = proxyRes.headers[key];\n        if (preserveHeaderKeyCase && rawHeaderKeyMap) {\n            key = rawHeaderKeyMap[key] ?? key;\n        }\n        setHeader(key, header);\n    }\n}\n// Set the statusCode from the proxyResponse\nfunction writeStatusCode(_req, res, proxyRes) {\n    // From Node.js docs: response.writeHead(statusCode[, statusMessage][, headers])\n    res.statusCode = proxyRes.statusCode;\n    if (proxyRes.statusMessage && _req.httpVersionMajor === 1) {\n        res.statusMessage = proxyRes.statusMessage;\n    }\n}\nexports.OUTGOING_PASSES = {\n    removeChunked,\n    setConnection,\n    setRedirectHostRewrite,\n    writeHeaders,\n    writeStatusCode,\n};\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(' ', ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", "var debug;\n\nmodule.exports = function () {\n  if (!debug) {\n    try {\n      /* eslint global-require: off */\n      debug = require(\"debug\")(\"follow-redirects\");\n    }\n    catch (error) { /* */ }\n    if (typeof debug !== \"function\") {\n      debug = function () { /* */ };\n    }\n  }\n  debug.apply(null, arguments);\n};\n", "var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Preventive platform detection\n// istanbul ignore next\n(function detectUnsupportedEnvironment() {\n  var looksLikeNode = typeof process !== \"undefined\";\n  var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n  var looksLikeV8 = isFunction(Error.captureStackTrace);\n  if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n    console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n  }\n}());\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n  assert(new URL(\"\"));\n}\ncatch (error) {\n  useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n  \"auth\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"path\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"query\",\n  \"search\",\n  \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n  eventHandlers[event] = function (arg1, arg2, arg3) {\n    this._redirectable.emit(event, arg1, arg2, arg3);\n  };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n  \"ERR_INVALID_URL\",\n  \"Invalid URL\",\n  TypeError\n);\nvar RedirectionError = createErrorType(\n  \"ERR_FR_REDIRECTION_FAILURE\",\n  \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n  \"ERR_FR_TOO_MANY_REDIRECTS\",\n  \"Maximum number of redirects exceeded\",\n  RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n  \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n  \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n  \"ERR_STREAM_WRITE_AFTER_END\",\n  \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n  // Initialize the request\n  Writable.call(this);\n  this._sanitizeOptions(options);\n  this._options = options;\n  this._ended = false;\n  this._ending = false;\n  this._redirectCount = 0;\n  this._redirects = [];\n  this._requestBodyLength = 0;\n  this._requestBodyBuffers = [];\n\n  // Attach a callback if passed\n  if (responseCallback) {\n    this.on(\"response\", responseCallback);\n  }\n\n  // React to responses of native requests\n  var self = this;\n  this._onNativeResponse = function (response) {\n    try {\n      self._processResponse(response);\n    }\n    catch (cause) {\n      self.emit(\"error\", cause instanceof RedirectionError ?\n        cause : new RedirectionError({ cause: cause }));\n    }\n  };\n\n  // Perform the first request\n  this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n  destroyRequest(this._currentRequest);\n  this._currentRequest.abort();\n  this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n  destroyRequest(this._currentRequest, error);\n  destroy.call(this, error);\n  return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n  // Writing is not allowed if end has been called\n  if (this._ending) {\n    throw new WriteAfterEndError();\n  }\n\n  // Validate input and shift parameters if necessary\n  if (!isString(data) && !isBuffer(data)) {\n    throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n  }\n  if (isFunction(encoding)) {\n    callback = encoding;\n    encoding = null;\n  }\n\n  // Ignore empty buffers, since writing them doesn't invoke the callback\n  // https://github.com/nodejs/node/issues/22066\n  if (data.length === 0) {\n    if (callback) {\n      callback();\n    }\n    return;\n  }\n  // Only write when we don't exceed the maximum body length\n  if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n    this._requestBodyLength += data.length;\n    this._requestBodyBuffers.push({ data: data, encoding: encoding });\n    this._currentRequest.write(data, encoding, callback);\n  }\n  // Error when we exceed the maximum body length\n  else {\n    this.emit(\"error\", new MaxBodyLengthExceededError());\n    this.abort();\n  }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n  // Shift parameters if necessary\n  if (isFunction(data)) {\n    callback = data;\n    data = encoding = null;\n  }\n  else if (isFunction(encoding)) {\n    callback = encoding;\n    encoding = null;\n  }\n\n  // Write data if needed and end\n  if (!data) {\n    this._ended = this._ending = true;\n    this._currentRequest.end(null, null, callback);\n  }\n  else {\n    var self = this;\n    var currentRequest = this._currentRequest;\n    this.write(data, encoding, function () {\n      self._ended = true;\n      currentRequest.end(null, null, callback);\n    });\n    this._ending = true;\n  }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n  this._options.headers[name] = value;\n  this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n  delete this._options.headers[name];\n  this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n  var self = this;\n\n  // Destroys the socket on timeout\n  function destroyOnTimeout(socket) {\n    socket.setTimeout(msecs);\n    socket.removeListener(\"timeout\", socket.destroy);\n    socket.addListener(\"timeout\", socket.destroy);\n  }\n\n  // Sets up a timer to trigger a timeout event\n  function startTimer(socket) {\n    if (self._timeout) {\n      clearTimeout(self._timeout);\n    }\n    self._timeout = setTimeout(function () {\n      self.emit(\"timeout\");\n      clearTimer();\n    }, msecs);\n    destroyOnTimeout(socket);\n  }\n\n  // Stops a timeout from triggering\n  function clearTimer() {\n    // Clear the timeout\n    if (self._timeout) {\n      clearTimeout(self._timeout);\n      self._timeout = null;\n    }\n\n    // Clean up all attached listeners\n    self.removeListener(\"abort\", clearTimer);\n    self.removeListener(\"error\", clearTimer);\n    self.removeListener(\"response\", clearTimer);\n    self.removeListener(\"close\", clearTimer);\n    if (callback) {\n      self.removeListener(\"timeout\", callback);\n    }\n    if (!self.socket) {\n      self._currentRequest.removeListener(\"socket\", startTimer);\n    }\n  }\n\n  // Attach callback if passed\n  if (callback) {\n    this.on(\"timeout\", callback);\n  }\n\n  // Start the timer if or when the socket is opened\n  if (this.socket) {\n    startTimer(this.socket);\n  }\n  else {\n    this._currentRequest.once(\"socket\", startTimer);\n  }\n\n  // Clean up on events\n  this.on(\"socket\", destroyOnTimeout);\n  this.on(\"abort\", clearTimer);\n  this.on(\"error\", clearTimer);\n  this.on(\"response\", clearTimer);\n  this.on(\"close\", clearTimer);\n\n  return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n  \"flushHeaders\", \"getHeader\",\n  \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n  RedirectableRequest.prototype[method] = function (a, b) {\n    return this._currentRequest[method](a, b);\n  };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n  Object.defineProperty(RedirectableRequest.prototype, property, {\n    get: function () { return this._currentRequest[property]; },\n  });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n  // Ensure headers are always present\n  if (!options.headers) {\n    options.headers = {};\n  }\n\n  // Since http.request treats host as an alias of hostname,\n  // but the url module interprets host as hostname plus port,\n  // eliminate the host property to avoid confusion.\n  if (options.host) {\n    // Use hostname if set, because it has precedence\n    if (!options.hostname) {\n      options.hostname = options.host;\n    }\n    delete options.host;\n  }\n\n  // Complete the URL object when necessary\n  if (!options.pathname && options.path) {\n    var searchPos = options.path.indexOf(\"?\");\n    if (searchPos < 0) {\n      options.pathname = options.path;\n    }\n    else {\n      options.pathname = options.path.substring(0, searchPos);\n      options.search = options.path.substring(searchPos);\n    }\n  }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n  // Load the native protocol\n  var protocol = this._options.protocol;\n  var nativeProtocol = this._options.nativeProtocols[protocol];\n  if (!nativeProtocol) {\n    throw new TypeError(\"Unsupported protocol \" + protocol);\n  }\n\n  // If specified, use the agent corresponding to the protocol\n  // (HTTP and HTTPS use different types of agents)\n  if (this._options.agents) {\n    var scheme = protocol.slice(0, -1);\n    this._options.agent = this._options.agents[scheme];\n  }\n\n  // Create the native request and set up its event handlers\n  var request = this._currentRequest =\n        nativeProtocol.request(this._options, this._onNativeResponse);\n  request._redirectable = this;\n  for (var event of events) {\n    request.on(event, eventHandlers[event]);\n  }\n\n  // RFC7230\u00A75.3.1: When making a request directly to an origin server, [\u2026]\n  // a client MUST send only the absolute path [\u2026] as the request-target.\n  this._currentUrl = /^\\//.test(this._options.path) ?\n    url.format(this._options) :\n    // When making a request to a proxy, [\u2026]\n    // a client MUST send the target URI in absolute-form [\u2026].\n    this._options.path;\n\n  // End a redirected request\n  // (The first request must be ended explicitly with RedirectableRequest#end)\n  if (this._isRedirect) {\n    // Write the request entity and end\n    var i = 0;\n    var self = this;\n    var buffers = this._requestBodyBuffers;\n    (function writeNext(error) {\n      // Only write if this request has not been redirected yet\n      // istanbul ignore else\n      if (request === self._currentRequest) {\n        // Report any write errors\n        // istanbul ignore if\n        if (error) {\n          self.emit(\"error\", error);\n        }\n        // Write the next buffer if there are still left\n        else if (i < buffers.length) {\n          var buffer = buffers[i++];\n          // istanbul ignore else\n          if (!request.finished) {\n            request.write(buffer.data, buffer.encoding, writeNext);\n          }\n        }\n        // End the request if `end` has been called on us\n        else if (self._ended) {\n          request.end();\n        }\n      }\n    }());\n  }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n  // Store the redirected response\n  var statusCode = response.statusCode;\n  if (this._options.trackRedirects) {\n    this._redirects.push({\n      url: this._currentUrl,\n      headers: response.headers,\n      statusCode: statusCode,\n    });\n  }\n\n  // RFC7231\u00A76.4: The 3xx (Redirection) class of status code indicates\n  // that further action needs to be taken by the user agent in order to\n  // fulfill the request. If a Location header field is provided,\n  // the user agent MAY automatically redirect its request to the URI\n  // referenced by the Location field value,\n  // even if the specific status code is not understood.\n\n  // If the response is not a redirect; return it as-is\n  var location = response.headers.location;\n  if (!location || this._options.followRedirects === false ||\n      statusCode < 300 || statusCode >= 400) {\n    response.responseUrl = this._currentUrl;\n    response.redirects = this._redirects;\n    this.emit(\"response\", response);\n\n    // Clean up\n    this._requestBodyBuffers = [];\n    return;\n  }\n\n  // The response is a redirect, so abort the current request\n  destroyRequest(this._currentRequest);\n  // Discard the remainder of the response to avoid waiting for data\n  response.destroy();\n\n  // RFC7231\u00A76.4: A client SHOULD detect and intervene\n  // in cyclical redirections (i.e., \"infinite\" redirection loops).\n  if (++this._redirectCount > this._options.maxRedirects) {\n    throw new TooManyRedirectsError();\n  }\n\n  // Store the request headers if applicable\n  var requestHeaders;\n  var beforeRedirect = this._options.beforeRedirect;\n  if (beforeRedirect) {\n    requestHeaders = Object.assign({\n      // The Host header was set by nativeProtocol.request\n      Host: response.req.getHeader(\"host\"),\n    }, this._options.headers);\n  }\n\n  // RFC7231\u00A76.4: Automatic redirection needs to done with\n  // care for methods not known to be safe, [\u2026]\n  // RFC7231\u00A76.4.2\u20133: For historical reasons, a user agent MAY change\n  // the request method from POST to GET for the subsequent request.\n  var method = this._options.method;\n  if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n      // RFC7231\u00A76.4.4: The 303 (See Other) status code indicates that\n      // the server is redirecting the user agent to a different resource [\u2026]\n      // A user agent can perform a retrieval request targeting that URI\n      // (a GET or HEAD request if using HTTP) [\u2026]\n      (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n    this._options.method = \"GET\";\n    // Drop a possible entity and headers related to it\n    this._requestBodyBuffers = [];\n    removeMatchingHeaders(/^content-/i, this._options.headers);\n  }\n\n  // Drop the Host header, as the redirect might lead to a different host\n  var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n  // If the redirect is relative, carry over the host of the last request\n  var currentUrlParts = parseUrl(this._currentUrl);\n  var currentHost = currentHostHeader || currentUrlParts.host;\n  var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n    url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n  // Create the redirected request\n  var redirectUrl = resolveUrl(location, currentUrl);\n  debug(\"redirecting to\", redirectUrl.href);\n  this._isRedirect = true;\n  spreadUrlObject(redirectUrl, this._options);\n\n  // Drop confidential headers when redirecting to a less secure protocol\n  // or to a different domain that is not a superdomain\n  if (redirectUrl.protocol !== currentUrlParts.protocol &&\n     redirectUrl.protocol !== \"https:\" ||\n     redirectUrl.host !== currentHost &&\n     !isSubdomain(redirectUrl.host, currentHost)) {\n    removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n  }\n\n  // Evaluate the beforeRedirect callback\n  if (isFunction(beforeRedirect)) {\n    var responseDetails = {\n      headers: response.headers,\n      statusCode: statusCode,\n    };\n    var requestDetails = {\n      url: currentUrl,\n      method: method,\n      headers: requestHeaders,\n    };\n    beforeRedirect(this._options, responseDetails, requestDetails);\n    this._sanitizeOptions(this._options);\n  }\n\n  // Perform the redirected request\n  this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n  // Default settings\n  var exports = {\n    maxRedirects: 21,\n    maxBodyLength: 10 * 1024 * 1024,\n  };\n\n  // Wrap each protocol\n  var nativeProtocols = {};\n  Object.keys(protocols).forEach(function (scheme) {\n    var protocol = scheme + \":\";\n    var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n    var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n    // Executes a request, following redirects\n    function request(input, options, callback) {\n      // Parse parameters, ensuring that input is an object\n      if (isURL(input)) {\n        input = spreadUrlObject(input);\n      }\n      else if (isString(input)) {\n        input = spreadUrlObject(parseUrl(input));\n      }\n      else {\n        callback = options;\n        options = validateUrl(input);\n        input = { protocol: protocol };\n      }\n      if (isFunction(options)) {\n        callback = options;\n        options = null;\n      }\n\n      // Set defaults\n      options = Object.assign({\n        maxRedirects: exports.maxRedirects,\n        maxBodyLength: exports.maxBodyLength,\n      }, input, options);\n      options.nativeProtocols = nativeProtocols;\n      if (!isString(options.host) && !isString(options.hostname)) {\n        options.hostname = \"::1\";\n      }\n\n      assert.equal(options.protocol, protocol, \"protocol mismatch\");\n      debug(\"options\", options);\n      return new RedirectableRequest(options, callback);\n    }\n\n    // Executes a GET request, following redirects\n    function get(input, options, callback) {\n      var wrappedRequest = wrappedProtocol.request(input, options, callback);\n      wrappedRequest.end();\n      return wrappedRequest;\n    }\n\n    // Expose the properties on the wrapped protocol\n    Object.defineProperties(wrappedProtocol, {\n      request: { value: request, configurable: true, enumerable: true, writable: true },\n      get: { value: get, configurable: true, enumerable: true, writable: true },\n    });\n  });\n  return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n  var parsed;\n  // istanbul ignore else\n  if (useNativeURL) {\n    parsed = new URL(input);\n  }\n  else {\n    // Ensure the URL is valid and absolute\n    parsed = validateUrl(url.parse(input));\n    if (!isString(parsed.protocol)) {\n      throw new InvalidUrlError({ input });\n    }\n  }\n  return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n  // istanbul ignore next\n  return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n  if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n    throw new InvalidUrlError({ input: input.href || input });\n  }\n  if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n    throw new InvalidUrlError({ input: input.href || input });\n  }\n  return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n  var spread = target || {};\n  for (var key of preservedUrlFields) {\n    spread[key] = urlObject[key];\n  }\n\n  // Fix IPv6 hostname\n  if (spread.hostname.startsWith(\"[\")) {\n    spread.hostname = spread.hostname.slice(1, -1);\n  }\n  // Ensure port is a number\n  if (spread.port !== \"\") {\n    spread.port = Number(spread.port);\n  }\n  // Concatenate path\n  spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n  return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n  var lastValue;\n  for (var header in headers) {\n    if (regex.test(header)) {\n      lastValue = headers[header];\n      delete headers[header];\n    }\n  }\n  return (lastValue === null || typeof lastValue === \"undefined\") ?\n    undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n  // Create constructor\n  function CustomError(properties) {\n    // istanbul ignore else\n    if (isFunction(Error.captureStackTrace)) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n    Object.assign(this, properties || {});\n    this.code = code;\n    this.message = this.cause ? message + \": \" + this.cause.message : message;\n  }\n\n  // Attach constructor and set default properties\n  CustomError.prototype = new (baseClass || Error)();\n  Object.defineProperties(CustomError.prototype, {\n    constructor: {\n      value: CustomError,\n      enumerable: false,\n    },\n    name: {\n      value: \"Error [\" + code + \"]\",\n      enumerable: false,\n    },\n  });\n  return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n  for (var event of events) {\n    request.removeListener(event, eventHandlers[event]);\n  }\n  request.on(\"error\", noop);\n  request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n  assert(isString(subdomain) && isString(domain));\n  var dot = subdomain.length - domain.length - 1;\n  return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n  return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n  return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n  return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n", "\"use strict\";\n/*\nA `pass` is just a function that is executed on `req, res, options`\nso that you can easily add new checks while still keeping the base\nflexible.\n\nThe names of passes are exported as WEB_PASSES from this module.\n\n*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WEB_PASSES = void 0;\nexports.deleteLength = deleteLength;\nexports.timeout = timeout;\nexports.XHeaders = XHeaders;\nexports.stream = stream;\nconst http = __importStar(require(\"node:http\"));\nconst https = __importStar(require(\"node:https\"));\nconst web_outgoing_1 = require(\"./web-outgoing\");\nconst common = __importStar(require(\"../common\"));\nconst followRedirects = __importStar(require(\"follow-redirects\"));\nconst web_o = Object.values(web_outgoing_1.OUTGOING_PASSES);\nconst nativeAgents = { http, https };\n//  Sets `content-length` to '0' if request is of DELETE type.\nfunction deleteLength(req) {\n    if ((req.method === \"DELETE\" || req.method === \"OPTIONS\") &&\n        !req.headers[\"content-length\"]) {\n        req.headers[\"content-length\"] = \"0\";\n        delete req.headers[\"transfer-encoding\"];\n    }\n}\n// Sets timeout in request socket if it was specified in options.\nfunction timeout(req, _res, options) {\n    if (options.timeout) {\n        req.socket.setTimeout(options.timeout);\n    }\n}\n// Sets `x-forwarded-*` headers if specified in config.\nfunction XHeaders(req, _res, options) {\n    if (!options.xfwd) {\n        return;\n    }\n    const encrypted = common.hasEncryptedConnection(req);\n    const values = {\n        for: req.connection.remoteAddress || req.socket.remoteAddress,\n        port: common.getPort(req),\n        proto: encrypted ? \"https\" : \"http\",\n    };\n    for (const header of [\"for\", \"port\", \"proto\"]) {\n        req.headers[\"x-forwarded-\" + header] =\n            (req.headers[\"x-forwarded-\" + header] || \"\") +\n                (req.headers[\"x-forwarded-\" + header] ? \",\" : \"\") +\n                values[header];\n    }\n    req.headers[\"x-forwarded-host\"] =\n        req.headers[\"x-forwarded-host\"] || req.headers[\"host\"] || \"\";\n}\n// Does the actual proxying. If `forward` is enabled fires up\n// a ForwardStream (there is NO RESPONSE), same happens for ProxyStream. The request\n// just dies otherwise.\nfunction stream(req, res, options, _, server, cb) {\n    // And we begin!\n    server.emit(\"start\", req, res, options.target || options.forward);\n    const agents = options.followRedirects ? followRedirects : nativeAgents;\n    const http = agents.http;\n    const https = agents.https;\n    if (options.forward) {\n        // forward enabled, so just pipe the request\n        const proto = options.forward.protocol === \"https:\" ? https : http;\n        const outgoingOptions = common.setupOutgoing(options.ssl || {}, options, req, \"forward\");\n        const forwardReq = proto.request(outgoingOptions);\n        // error handler (e.g. ECONNRESET, ECONNREFUSED)\n        // Handle errors on incoming request as well as it makes sense to\n        const forwardError = createErrorHandler(forwardReq, options.forward);\n        req.on(\"error\", forwardError);\n        forwardReq.on(\"error\", forwardError);\n        (options.buffer || req).pipe(forwardReq);\n        if (!options.target) {\n            // no target, so we do not send anything back to the client.\n            // If target is set, we do a separate proxy below, which might be to a\n            // completely different server.\n            return res.end();\n        }\n    }\n    // Request initalization\n    const proto = options.target.protocol === \"https:\" ? https : http;\n    const outgoingOptions = common.setupOutgoing(options.ssl || {}, options, req);\n    const proxyReq = proto.request(outgoingOptions);\n    // Enable developers to modify the proxyReq before headers are sent\n    proxyReq.on(\"socket\", (socket) => {\n        if (server && !proxyReq.getHeader(\"expect\")) {\n            server.emit(\"proxyReq\", proxyReq, req, res, options, socket);\n        }\n    });\n    // allow outgoing socket to timeout so that we could\n    // show an error page at the initial request\n    if (options.proxyTimeout) {\n        proxyReq.setTimeout(options.proxyTimeout, () => {\n            proxyReq.destroy();\n        });\n    }\n    // Ensure we abort proxy if request is aborted\n    res.on(\"close\", () => {\n        const aborted = !res.writableFinished;\n        if (aborted) {\n            proxyReq.destroy();\n        }\n    });\n    // handle errors in proxy and incoming request, just like for forward proxy\n    const proxyError = createErrorHandler(proxyReq, options.target);\n    req.on(\"error\", proxyError);\n    proxyReq.on(\"error\", proxyError);\n    function createErrorHandler(proxyReq, url) {\n        return (err) => {\n            if (req.socket.destroyed && err.code === \"ECONNRESET\") {\n                server.emit(\"econnreset\", err, req, res, url);\n                proxyReq.destroy();\n                return;\n            }\n            if (cb) {\n                cb(err, req, res, url);\n            }\n            else {\n                server.emit(\"error\", err, req, res, url);\n            }\n        };\n    }\n    (options.buffer || req).pipe(proxyReq);\n    proxyReq.on(\"response\", (proxyRes) => {\n        server?.emit(\"proxyRes\", proxyRes, req, res);\n        if (!res.headersSent && !options.selfHandleResponse) {\n            for (const pass of web_o) {\n                // note: none of these return anything\n                pass(req, res, proxyRes, options);\n            }\n        }\n        if (!res.finished) {\n            // Allow us to listen for when the proxy has completed\n            proxyRes.on(\"end\", () => {\n                server?.emit(\"end\", req, res, proxyRes);\n            });\n            // We pipe to the response unless its expected to be handled by the user\n            if (!options.selfHandleResponse) {\n                proxyRes.pipe(res);\n            }\n        }\n        else {\n            server?.emit(\"end\", req, res, proxyRes);\n        }\n    });\n}\nexports.WEB_PASSES = { deleteLength, timeout, XHeaders, stream };\n", "\"use strict\";\n/*\nWebsockets Passes: Array of passes.\n\nA `pass` is just a function that is executed on `req, socket, options`\nso that you can easily add new checks while still keeping the base\nflexible.\n\nThe names of passes are exported as WS_PASSES from this module.\n*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WS_PASSES = void 0;\nexports.numOpenSockets = numOpenSockets;\nexports.checkMethodAndHeader = checkMethodAndHeader;\nexports.XHeaders = XHeaders;\nexports.stream = stream;\nconst http = __importStar(require(\"node:http\"));\nconst https = __importStar(require(\"node:https\"));\nconst common = __importStar(require(\"../common\"));\nconst web_outgoing_1 = require(\"./web-outgoing\");\nconst debug_1 = __importDefault(require(\"debug\"));\nconst log = (0, debug_1.default)(\"http-proxy-3:ws-incoming\");\nconst web_o = Object.values(web_outgoing_1.OUTGOING_PASSES);\nfunction createSocketCounter(name) {\n    let sockets = new Set();\n    return ({ add, rm, } = {}) => {\n        if (add) {\n            if (!add.id) {\n                add.id = Math.random();\n            }\n            if (!sockets.has(add.id)) {\n                sockets.add(add.id);\n            }\n        }\n        if (rm) {\n            if (!rm.id) {\n                rm.id = Math.random();\n            }\n            if (sockets.has(rm.id)) {\n                sockets.delete(rm.id);\n            }\n        }\n        log(\"socket counter:\", { [name]: sockets.size }, add ? \"add\" : rm ? \"rm\" : \"\");\n        return sockets.size;\n    };\n}\nconst socketCounter = createSocketCounter(\"socket\");\nconst proxySocketCounter = createSocketCounter(\"proxySocket\");\n/* MockResponse\n   when a websocket gets a regular HTTP Response,\n   apply proxied headers\n*/\nclass MockResponse {\n    constructor() {\n        this.headers = {};\n        this.statusCode = 200;\n        this.statusMessage = \"\";\n    }\n    setHeader(key, value) {\n        this.headers[key] = value;\n        return this;\n    }\n    ;\n}\nfunction numOpenSockets() {\n    return socketCounter() + proxySocketCounter();\n}\n// WebSocket requests must have the `GET` method and\n// the `upgrade:websocket` header\nfunction checkMethodAndHeader(req, socket) {\n    log(\"websocket: checkMethodAndHeader\");\n    if (req.method !== \"GET\" || !req.headers.upgrade) {\n        socket.destroy();\n        return true;\n    }\n    if (req.headers.upgrade.toLowerCase() !== \"websocket\") {\n        socket.destroy();\n        return true;\n    }\n}\n// Sets `x-forwarded-*` headers if specified in config.\nfunction XHeaders(req, _socket, options) {\n    if (!options.xfwd)\n        return;\n    log(\"websocket: XHeaders\");\n    const values = {\n        for: req.connection.remoteAddress || req.socket.remoteAddress,\n        port: common.getPort(req),\n        proto: common.hasEncryptedConnection(req) ? \"wss\" : \"ws\",\n    };\n    for (const header of [\"for\", \"port\", \"proto\"]) {\n        req.headers[\"x-forwarded-\" + header] =\n            (req.headers[\"x-forwarded-\" + header] || \"\") +\n                (req.headers[\"x-forwarded-\" + header] ? \",\" : \"\") +\n                values[header];\n    }\n}\n// Do the actual proxying. Make the request and upgrade it.\n// Send the Switching Protocols request and pipe the sockets.\nfunction stream(req, socket, options, head, server, cb) {\n    log(\"websocket: new stream\");\n    const proxySockets = [];\n    socketCounter({ add: socket });\n    const cleanUpProxySockets = () => {\n        for (const p of proxySockets) {\n            p.end();\n        }\n    };\n    socket.on(\"close\", () => {\n        socketCounter({ rm: socket });\n        cleanUpProxySockets();\n    });\n    // The pipe below will end proxySocket if socket closes cleanly, but not\n    // if it errors (eg, vanishes from the net and starts returning\n    // EHOSTUNREACH). We need to do that explicitly.\n    socket.on(\"error\", cleanUpProxySockets);\n    const createHttpHeader = (line, headers) => {\n        return (Object.keys(headers)\n            .reduce((head, key) => {\n            const value = headers[key];\n            if (!Array.isArray(value)) {\n                head.push(key + \": \" + value);\n                return head;\n            }\n            for (let i = 0; i < value.length; i++) {\n                head.push(key + \": \" + value[i]);\n            }\n            return head;\n        }, [line])\n            .join(\"\\r\\n\") + \"\\r\\n\\r\\n\");\n    };\n    common.setupSocket(socket);\n    if (head && head.length) {\n        socket.unshift(head);\n    }\n    // @ts-expect-error FIXME: options.target may be undefined\n    const proto = common.isSSL.test(options.target.protocol) ? https : http;\n    const outgoingOptions = common.setupOutgoing(options.ssl || {}, options, req);\n    const proxyReq = proto.request(outgoingOptions);\n    // Enable developers to modify the proxyReq before headers are sent\n    if (server) {\n        server.emit(\"proxyReqWs\", proxyReq, req, socket, options, head);\n    }\n    // Error Handler\n    proxyReq.on(\"error\", onOutgoingError);\n    proxyReq.on(\"upgrade\", (proxyRes, proxySocket, proxyHead) => {\n        log(\"upgrade\");\n        proxySocketCounter({ add: proxySocket });\n        proxySockets.push(proxySocket);\n        proxySocket.on(\"close\", () => {\n            proxySocketCounter({ rm: proxySocket });\n        });\n        proxySocket.on(\"error\", onOutgoingError);\n        // Allow us to listen for when the websocket has completed.\n        proxySocket.on(\"end\", () => {\n            server.emit(\"close\", proxyRes, proxySocket, proxyHead);\n        });\n        proxySocket.on(\"close\", () => {\n            socket.end();\n        });\n        common.setupSocket(proxySocket);\n        if (proxyHead && proxyHead.length) {\n            proxySocket.unshift(proxyHead);\n        }\n        // Remark: Handle writing the headers to the socket when switching protocols\n        // Also handles when a header is an array.\n        socket.write(createHttpHeader(\"HTTP/1.1 101 Switching Protocols\", proxyRes.headers));\n        proxySocket.pipe(socket).pipe(proxySocket);\n        server.emit(\"open\", proxySocket);\n    });\n    function onOutgoingError(err) {\n        if (cb) {\n            cb(err, req, socket);\n        }\n        else {\n            server.emit(\"error\", err, req, socket);\n        }\n        // I changed this from \"socket.end()\" which is what node-http-proxy does to destroySoon() due to getting\n        // the unit test \"should close client socket if upstream is closed before upgrade\" from lib/http-proxy.test.ts\n        // to work.  Just doing socket.end() leaves things half open for a while if proxySocket errors out,\n        // which may be another leak type situation and definitely doesn't work for unit testing.\n        socket.destroySoon();\n    }\n    // if we get a response, backend is not a websocket endpoint,\n    // relay HTTP response and close the socket\n    proxyReq.on(\"response\", (proxyRes) => {\n        log(\"got non-ws HTTP response\", {\n            statusCode: proxyRes.statusCode,\n            statusMessage: proxyRes.statusMessage,\n        });\n        const res = new MockResponse();\n        for (const pass of web_o) {\n            // note: none of these return anything\n            pass(req, res, proxyRes, options);\n        }\n        // implement HTTP/1.1 chunked transfer unless content-length is defined\n        // matches proxyRes.pipe(res) behavior,\n        // but we are piping directly to the socket instead, so it's our job.\n        let writeChunk = (chunk) => {\n            socket.write(chunk);\n        };\n        if (req.httpVersion === \"1.1\" && proxyRes.headers[\"content-length\"] === undefined) {\n            res.headers[\"transfer-encoding\"] = \"chunked\";\n            writeChunk = (chunk) => {\n                socket.write(chunk.length.toString(16));\n                socket.write(\"\\r\\n\");\n                socket.write(chunk);\n                socket.write(\"\\r\\n\");\n            };\n        }\n        const proxyHead = createHttpHeader(`HTTP/${req.httpVersion} ${proxyRes.statusCode} ${proxyRes.statusMessage}`, res.headers);\n        if (!socket.destroyed) {\n            socket.write(proxyHead);\n            proxyRes.on(\"data\", (chunk) => {\n                writeChunk(chunk);\n            });\n            proxyRes.on(\"end\", () => {\n                writeChunk(\"\");\n                socket.destroySoon();\n            });\n        }\n        else {\n            // make sure response is consumed\n            proxyRes.resume();\n        }\n    });\n    proxyReq.end();\n}\nexports.WS_PASSES = { checkMethodAndHeader, XHeaders, stream };\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProxyServer = void 0;\nconst http = __importStar(require(\"node:http\"));\nconst http2 = __importStar(require(\"node:http2\"));\nconst web_incoming_1 = require(\"./passes/web-incoming\");\nconst ws_incoming_1 = require(\"./passes/ws-incoming\");\nconst node_events_1 = require(\"node:events\");\nconst debug_1 = __importDefault(require(\"debug\"));\nconst common_1 = require(\"./common\");\nconst log = (0, debug_1.default)(\"http-proxy-3\");\nclass ProxyServer extends node_events_1.EventEmitter {\n    /**\n     * Creates the proxy server with specified options.\n     * @param options - Config object passed to the proxy\n     */\n    constructor(options = {}) {\n        super();\n        // createRightProxy - Returns a function that when called creates the loader for\n        // either `ws` or `web`'s passes.\n        this.createRightProxy = (type) => {\n            log(\"createRightProxy\", { type });\n            return (options) => {\n                return (...args /* req, res, [head], [opts] */) => {\n                    const req = args[0];\n                    log(\"proxy: \", { type, path: req.url });\n                    const res = args[1];\n                    const passes = type === \"ws\" ? this.wsPasses : this.webPasses;\n                    if (type == \"ws\") {\n                        // socket -- proxy websocket errors to our error handler;\n                        // see https://github.com/sagemathinc/http-proxy-3/issues/5\n                        // NOTE: as mentioned below, res is the socket in this case.\n                        // One of the passes does add an error handler, but there's no\n                        // guarantee we even get to that pass before something bad happens,\n                        // and there's no way for a user of http-proxy-3 to get ahold\n                        // of this res object and attach their own error handler until\n                        // after the passes. So we better attach one ASAP right here:\n                        res.on(\"error\", (err) => {\n                            this.emit(\"error\", err, req, res);\n                        });\n                    }\n                    let counter = args.length - 1;\n                    let head;\n                    let cb;\n                    // optional args parse begin\n                    if (typeof args[counter] === \"function\") {\n                        cb = args[counter];\n                        counter--;\n                    }\n                    let requestOptions;\n                    if (!(args[counter] instanceof Buffer) && args[counter] !== res) {\n                        // Copy global options, and overwrite with request options\n                        requestOptions = { ...options, ...args[counter] };\n                        counter--;\n                    }\n                    else {\n                        requestOptions = { ...options };\n                    }\n                    if (args[counter] instanceof Buffer) {\n                        head = args[counter];\n                    }\n                    for (const e of [\"target\", \"forward\"]) {\n                        if (typeof requestOptions[e] === \"string\") {\n                            requestOptions[e] = (0, common_1.toURL)(requestOptions[e]);\n                        }\n                    }\n                    if (!requestOptions.target && !requestOptions.forward) {\n                        this.emit(\"error\", new Error(\"Must set target or forward\"), req, res);\n                        return;\n                    }\n                    for (const pass of passes) {\n                        /**\n                         * Call of passes functions\n                         *     pass(req, res, options, head)\n                         *\n                         * In WebSockets case, the `res` variable\n                         * refer to the connection socket\n                         *    pass(req, socket, options, head)\n                         */\n                        if (pass(req, res, requestOptions, head, this, cb)) {\n                            // passes can return a truthy value to halt the loop\n                            break;\n                        }\n                    }\n                };\n            };\n        };\n        this.onError = (err) => {\n            // Force people to handle their own errors\n            if (this.listeners(\"error\").length === 1) {\n                throw err;\n            }\n        };\n        /**\n         * A function that wraps the object in a webserver, for your convenience\n         * @param port - Port to listen on\n         * @param hostname - The hostname to listen on\n         */\n        this.listen = (port, hostname) => {\n            log(\"listen\", { port, hostname });\n            const requestListener = (req, res) => {\n                this.web(req, res);\n            };\n            this._server = this.options.ssl ? http2.createSecureServer({ ...this.options.ssl, allowHTTP1: true }, requestListener) : http.createServer(requestListener);\n            if (this.options.ws) {\n                this._server.on(\"upgrade\", (req, socket, head) => {\n                    this.ws(req, socket, head);\n                });\n            }\n            this._server.listen(port, hostname);\n            return this;\n        };\n        // if the proxy started its own http server, this is the address of that server.\n        this.address = () => {\n            return this._server?.address();\n        };\n        /**\n         * A function that closes the inner webserver and stops listening on given port\n         */\n        this.close = (cb) => {\n            if (this._server == null) {\n                cb?.();\n                return;\n            }\n            // Wrap cb anb nullify server after all open connections are closed.\n            this._server.close((err) => {\n                this._server = null;\n                cb?.(err);\n            });\n        };\n        this.before = (type, passName, cb) => {\n            if (type !== \"ws\" && type !== \"web\") {\n                throw new Error(\"type must be `web` or `ws`\");\n            }\n            const passes = (type === \"ws\" ? this.wsPasses : this.webPasses);\n            let i = false;\n            passes.forEach((v, idx) => {\n                if (v.name === passName) {\n                    i = idx;\n                }\n            });\n            if (i === false) {\n                throw new Error(\"No such pass\");\n            }\n            passes.splice(i, 0, cb);\n        };\n        this.after = (type, passName, cb) => {\n            if (type !== \"ws\" && type !== \"web\") {\n                throw new Error(\"type must be `web` or `ws`\");\n            }\n            const passes = (type === \"ws\" ? this.wsPasses : this.webPasses);\n            let i = false;\n            passes.forEach((v, idx) => {\n                if (v.name === passName) {\n                    i = idx;\n                }\n            });\n            if (i === false) {\n                throw new Error(\"No such pass\");\n            }\n            passes.splice(i++, 0, cb);\n        };\n        log(\"creating a ProxyServer\", options);\n        options.prependPath = options.prependPath === false ? false : true;\n        this.options = options;\n        this.web = this.createRightProxy(\"web\")(options);\n        this.ws = this.createRightProxy(\"ws\")(options);\n        this.webPasses = Object.values(web_incoming_1.WEB_PASSES);\n        this.wsPasses = Object.values(ws_incoming_1.WS_PASSES);\n        this.on(\"error\", this.onError);\n    }\n    /**\n     * Creates the proxy server with specified options.\n     * @param options Config object passed to the proxy\n     * @returns Proxy object with handlers for `ws` and `web` requests\n     */\n    static createProxyServer(options) {\n        return new ProxyServer(options);\n    }\n    /**\n     * Creates the proxy server with specified options.\n     * @param options Config object passed to the proxy\n     * @returns Proxy object with handlers for `ws` and `web` requests\n     */\n    static createServer(options) {\n        return new ProxyServer(options);\n    }\n    /**\n     * Creates the proxy server with specified options.\n     * @param options Config object passed to the proxy\n     * @returns Proxy object with handlers for `ws` and `web` requests\n     */\n    static createProxy(options) {\n        return new ProxyServer(options);\n    }\n}\nexports.ProxyServer = ProxyServer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.numOpenSockets = exports.ProxyServer = void 0;\nexports.createProxyServer = createProxyServer;\nexports.createServer = createProxyServer;\nexports.createProxy = createProxyServer;\nconst index_1 = require(\"./http-proxy/index\");\nObject.defineProperty(exports, \"ProxyServer\", { enumerable: true, get: function () { return index_1.ProxyServer; } });\nvar ws_incoming_1 = require(\"./http-proxy/passes/ws-incoming\");\nObject.defineProperty(exports, \"numOpenSockets\", { enumerable: true, get: function () { return ws_incoming_1.numOpenSockets; } });\n/**\n * Creates the proxy server.\n *\n * Examples:\n *\n *    httpProxy.createProxyServer({ .. }, 8000)\n *    // => '{ web: [Function], ws: [Function] ... }'\n *\n * @param {Object} Options Config object passed to the proxy\n *\n * @return {Object} Proxy Proxy object with handlers for `ws` and `web` requests\n *\n * @api public\n */\nfunction createProxyServer(options = {}) {\n    return new index_1.ProxyServer(options);\n}\n/**\n * Export the proxy \"Server\" as the main export.\n */\nexports.default = index_1.ProxyServer;\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\nvar __hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name       = token\n * token             = 1*tchar\n * tchar             = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n *                     \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n *                     \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n */\n\nvar cookieNameRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n *                     ; US-ASCII characters excluding CTLs,\n *                     ; whitespace DQUOTE, comma, semicolon,\n *                     ; and backslash\n */\n\nvar cookieValueRegExp = /^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value      = <subdomain>\n *                     ; defined in [RFC1034], Section 3.5, as\n *                     ; enhanced by [RFC1123], Section 2.1\n * <subdomain>       = <label> | <subdomain> \".\" <label>\n * <label>           = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n *                     Labels must be 63 characters or less.\n *                     'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str>         = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp>     = <let-dig> | \"-\"\n * <let-dig>         = <letter> | <digit>\n * <letter>          = any one of the 52 alphabetic characters A through Z in\n *                     upper case and a through z in lower case\n * <digit>           = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\n\nvar domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value        = <any CHAR except CTLs or \";\">\n * CHAR              = %x01-7F\n *                     ; defined in RFC 5234 appendix B.1\n */\n\nvar pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [opt]\n * @return {object}\n * @public\n */\n\nfunction parse(str, opt) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {};\n  var len = str.length;\n  // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n  if (len < 2) return obj;\n\n  var dec = (opt && opt.decode) || decode;\n  var index = 0;\n  var eqIdx = 0;\n  var endIdx = 0;\n\n  do {\n    eqIdx = str.indexOf('=', index);\n    if (eqIdx === -1) break; // No more cookie pairs.\n\n    endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = len;\n    } else if (eqIdx > endIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    var keyStartIdx = startIndex(str, index, eqIdx);\n    var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n    var key = str.slice(keyStartIdx, keyEndIdx);\n\n    // only assign once\n    if (!__hasOwnProperty.call(obj, key)) {\n      var valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n      var valEndIdx = endIndex(str, endIdx, valStartIdx);\n\n      if (str.charCodeAt(valStartIdx) === 0x22 /* \" */ && str.charCodeAt(valEndIdx - 1) === 0x22 /* \" */) {\n        valStartIdx++;\n        valEndIdx--;\n      }\n\n      var val = str.slice(valStartIdx, valEndIdx);\n      obj[key] = tryDecode(val, dec);\n    }\n\n    index = endIdx + 1\n  } while (index < len);\n\n  return obj;\n}\n\nfunction startIndex(str, index, max) {\n  do {\n    var code = str.charCodeAt(index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index;\n  } while (++index < max);\n  return max;\n}\n\nfunction endIndex(str, index, min) {\n  while (index > min) {\n    var code = str.charCodeAt(--index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index + 1;\n  }\n  return min;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [opt]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, opt) {\n  var enc = (opt && opt.encode) || encodeURIComponent;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!cookieNameRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (!cookieValueRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n  if (!opt) return str;\n\n  if (null != opt.maxAge) {\n    var maxAge = Math.floor(opt.maxAge);\n\n    if (!isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + maxAge;\n  }\n\n  if (opt.domain) {\n    if (!domainValueRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!pathValueRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    var expires = opt.expires\n\n    if (!isDate(expires) || isNaN(expires.valueOf())) {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + expires.toUTCString()\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.partitioned) {\n    str += '; Partitioned'\n  }\n\n  if (opt.priority) {\n    var priority = typeof opt.priority === 'string'\n      ? opt.priority.toLowerCase() : opt.priority;\n\n    switch (priority) {\n      case 'low':\n        str += '; Priority=Low'\n        break\n      case 'medium':\n        str += '; Priority=Medium'\n        break\n      case 'high':\n        str += '; Priority=High'\n        break\n      default:\n        throw new TypeError('option priority is invalid')\n    }\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n  return str.indexOf('%') !== -1\n    ? decodeURIComponent(str)\n    : str\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n  return __toString.call(val) === '[object Date]';\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}\n", "/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto');\n\n/**\n * Sign the given `val` with `secret`.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String}\n * @api private\n */\n\nexports.sign = function(val, secret){\n  if ('string' != typeof val) throw new TypeError(\"Cookie value must be provided as a string.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  return val + '.' + crypto\n    .createHmac('sha256', secret)\n    .update(val)\n    .digest('base64')\n    .replace(/\\=+$/, '');\n};\n\n/**\n * Unsign and decode the given `val` with `secret`,\n * returning `false` if the signature is invalid.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String|Boolean}\n * @api private\n */\n\nexports.unsign = function(val, secret){\n  if ('string' != typeof val) throw new TypeError(\"Signed cookie string must be provided.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  var str = val.slice(0, val.lastIndexOf('.'))\n    , mac = exports.sign(str, secret);\n  \n  return sha1(mac) == sha1(val) ? str : false;\n};\n\n/**\n * Private\n */\n\nfunction sha1(str){\n  return crypto.createHash('sha1').update(str).digest('hex');\n}\n", "/*!\n * cookie-parser\n * Copyright(c) 2014 TJ Holowaychuk\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar cookie = require('cookie')\nvar signature = require('cookie-signature')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = cookieParser\nmodule.exports.JSONCookie = JSONCookie\nmodule.exports.JSONCookies = JSONCookies\nmodule.exports.signedCookie = signedCookie\nmodule.exports.signedCookies = signedCookies\n\n/**\n * Parse Cookie header and populate `req.cookies`\n * with an object keyed by the cookie names.\n *\n * @param {string|array} [secret] A string (or array of strings) representing cookie signing secret(s).\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction cookieParser (secret, options) {\n  var secrets = !secret || Array.isArray(secret)\n    ? (secret || [])\n    : [secret]\n\n  return function cookieParser (req, res, next) {\n    if (req.cookies) {\n      return next()\n    }\n\n    var cookies = req.headers.cookie\n\n    req.secret = secrets[0]\n    req.cookies = Object.create(null)\n    req.signedCookies = Object.create(null)\n\n    // no cookies\n    if (!cookies) {\n      return next()\n    }\n\n    req.cookies = cookie.parse(cookies, options)\n\n    // parse signed cookies\n    if (secrets.length !== 0) {\n      req.signedCookies = signedCookies(req.cookies, secrets)\n      req.signedCookies = JSONCookies(req.signedCookies)\n    }\n\n    // parse JSON cookies\n    req.cookies = JSONCookies(req.cookies)\n\n    next()\n  }\n}\n\n/**\n * Parse JSON cookie string.\n *\n * @param {String} str\n * @return {Object} Parsed object or undefined if not json cookie\n * @public\n */\n\nfunction JSONCookie (str) {\n  if (typeof str !== 'string' || str.substr(0, 2) !== 'j:') {\n    return undefined\n  }\n\n  try {\n    return JSON.parse(str.slice(2))\n  } catch (err) {\n    return undefined\n  }\n}\n\n/**\n * Parse JSON cookies.\n *\n * @param {Object} obj\n * @return {Object}\n * @public\n */\n\nfunction JSONCookies (obj) {\n  var cookies = Object.keys(obj)\n  var key\n  var val\n\n  for (var i = 0; i < cookies.length; i++) {\n    key = cookies[i]\n    val = JSONCookie(obj[key])\n\n    if (val) {\n      obj[key] = val\n    }\n  }\n\n  return obj\n}\n\n/**\n * Parse a signed cookie string, return the decoded value.\n *\n * @param {String} str signed cookie string\n * @param {string|array} secret\n * @return {String} decoded value\n * @public\n */\n\nfunction signedCookie (str, secret) {\n  if (typeof str !== 'string') {\n    return undefined\n  }\n\n  if (str.substr(0, 2) !== 's:') {\n    return str\n  }\n\n  var secrets = !secret || Array.isArray(secret)\n    ? (secret || [])\n    : [secret]\n\n  for (var i = 0; i < secrets.length; i++) {\n    var val = signature.unsign(str.slice(2), secrets[i])\n\n    if (val !== false) {\n      return val\n    }\n  }\n\n  return false\n}\n\n/**\n * Parse signed cookies, returning an object containing the decoded key/value\n * pairs, while removing the signed key from obj.\n *\n * @param {Object} obj\n * @param {string|array} secret\n * @return {Object}\n * @public\n */\n\nfunction signedCookies (obj, secret) {\n  var cookies = Object.keys(obj)\n  var dec\n  var key\n  var ret = Object.create(null)\n  var val\n\n  for (var i = 0; i < cookies.length; i++) {\n    key = cookies[i]\n    val = obj[key]\n    dec = signedCookie(val, secret)\n\n    if (val !== dec) {\n      ret[key] = dec\n      delete obj[key]\n    }\n  }\n\n  return ret\n}\n", "import type { Express, RequestHandler } from \"express\";\nimport cookieParser from \"cookie-parser\";\nimport type { LaunchServerStatus, FusionStatus } from \"$/ai-utils\";\n\nexport const BUILDER_ENDPOINT_PREFIX = \"/_builder.io\";\nexport const BUILDER_API_ENDPOINT_PREFIX = BUILDER_ENDPOINT_PREFIX + \"/api\";\n\n/**\n * Endpoints that are not authenticated because they are used by the fly.io health check.\n */\nexport const NON_AUTHENTICATED_ENDPOINTS = {\n  STATUS: \"/status\",\n  PROXY_STATUS: \"/proxy-status\",\n  STATUS_V2: \"/status-v2\",\n  INIT_LOGS: \"/init-logs\",\n} as const;\n\nexport const configureServer = ({\n  app,\n  validBuilderPrivateKey,\n  authenticateProxy,\n  isLocal,\n  sharedState,\n}: {\n  app: Express;\n  validBuilderPrivateKey: string | undefined;\n  authenticateProxy: boolean;\n  isLocal: boolean;\n  sharedState: LaunchServerStatus;\n}) => {\n  // Disable `etag` for all endpoints\n  app.set(\"etag\", false);\n\n  // Setup cookie parser\n  app.use(cookieParser());\n\n  // Enable CORS for Builder.io frontend and handle auth\n  app.use((req, res, next) => {\n    if (req.path.startsWith(BUILDER_ENDPOINT_PREFIX)) {\n      // console.log(\"req.headers origin: '\" + req.headers[\"origin\"] + \"'\");\n      const allowOrigin = req.headers[\"origin\"] || \"*\";\n      res.header(\"Access-Control-Allow-Origin\", allowOrigin);\n      res.header(\"Access-Control-Allow-Methods\", \"GET, POST, OPTIONS\");\n      res.header(\n        \"Access-Control-Allow-Headers\",\n        \"Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Builder-Private-Key, sentry-trace, baggage\",\n      );\n      res.header(\"Access-Control-Allow-Credentials\", \"true\");\n      res.header(\"Connection\", \"close\");\n\n      // Handle preflight requests\n      if (req.method === \"OPTIONS\") {\n        return res.status(204).end();\n      }\n    }\n\n    next();\n    return;\n  });\n\n  if (!isLocal) {\n    app.use(\n      serverAuthMiddleware({\n        validBuilderPrivateKey,\n        authenticateProxy,\n      }),\n    );\n  }\n\n  app.get(BUILDER_API_ENDPOINT_PREFIX + \"/status-v2\", (_req, res) => {\n    const status: FusionStatus = {\n      status: \"ok\",\n      state: sharedState.state,\n      setupState: sharedState.setupState,\n      devState: sharedState.devState,\n      editorReady: sharedState.editorReady,\n      httpServerState: sharedState.httpServerState,\n      initState: sharedState.initState,\n      errorMessage: sharedState.errorMessage,\n      devToolsVersion: sharedState.devToolsVersion,\n      idleTime: performance.now() - sharedState.lastRequestTime,\n      upTime: performance.now() - sharedState.startTime,\n      machine: sharedState.machine,\n      projectId: sharedState.projectId,\n      detectedServerUrl: sharedState.detectedServerUrl,\n      _attemptDryRunBackupOutcome: sharedState._attemptDryRunBackupOutcome,\n      workingDirectory: sharedState.workingDirectory,\n    };\n    res.status(200).json(status);\n  });\n\n  app.get(BUILDER_API_ENDPOINT_PREFIX + \"/init-logs\", (_req, res) => {\n    res.status(200).json({\n      initStatusLogs: sharedState.initStatusLogs || [],\n      initState: sharedState.initState,\n    });\n  });\n};\n\nconst serverAuthMiddleware =\n  ({\n    validBuilderPrivateKey,\n    authenticateProxy,\n  }: {\n    validBuilderPrivateKey: string | undefined;\n    authenticateProxy: boolean;\n  }): RequestHandler =>\n  (req, res, next) => {\n    const isBuilderApiEndpoint = req.path.startsWith(BUILDER_ENDPOINT_PREFIX);\n    const isNonAuthenticatedEndpoint = Object.values(\n      NON_AUTHENTICATED_ENDPOINTS,\n    ).some((endpoint) => req.path.includes(endpoint));\n\n    if (isNonAuthenticatedEndpoint) {\n      next();\n      return;\n    }\n\n    if (!isBuilderApiEndpoint && !authenticateProxy) {\n      next();\n      return;\n    }\n\n    // Get the builder private key from:\n    // 1. Request header\n    // 2. Cookies\n    const requestKey: string | undefined =\n      req.headers[\"X-Builder-Private-Key\"] ||\n      req.headers[\"x-builder-private-key\"] ||\n      req.cookies.builderPrivateKey;\n\n    if (validBuilderPrivateKey && requestKey === validBuilderPrivateKey) {\n      // Set a cookie with the private key if it came from query param or body\n      // and it's not already in the cookies\n      if (!req.cookies.builderPrivateKey) {\n        res.cookie(\"builderPrivateKey\", validBuilderPrivateKey, {\n          httpOnly: true,\n          sameSite: \"lax\",\n          maxAge: 24 * 60 * 60 * 1000, // 24 hours\n        });\n      }\n      next();\n      return;\n    }\n\n    // Return unauthorized for invalid/missing key\n    return res.status(401).json({\n      error: \"Authentication required.\",\n    });\n  };\n", "import { createProxyServer, type ServerOptions } from \"http-proxy-3\";\nimport type { DevToolsSys } from \"../../types\";\nimport { BUILDER_ENDPOINT_PREFIX } from \"./server\";\nimport type { Request, Response, NextFunction } from \"express\";\nimport type {\n  ProxyMiddleware,\n  WebSocketUpgradeFunction,\n} from \"../../types/proxy-middleware\";\nimport type { IncomingMessage } from \"http\";\nimport type { Duplex } from \"stream\";\n\nexport const createProxy = (\n  serverUrl: string,\n  sys: DevToolsSys,\n): ProxyMiddleware => {\n  // Use the global ConnectionTracker from DevToolsSys\n  const connectionTracker = sys.connectionTracker;\n  const proxy = createProxyServer(createProxyOptions(serverUrl, sys));\n\n  // Set up event handlers\n  proxy.on(\"proxyReq\", (proxyReq, req, _res) => {\n    if (process.env.DEBUG_FUSION_PROXY) {\n      console.log(\n        \"proxyReq: removing headers. Initial headers:\",\n        JSON.stringify(req.headers, null, 2),\n      );\n      console.log(\"proxyReq: removing headers. Initial host:\", proxyReq.host);\n    }\n    proxyReq.removeHeader(\"accept-encoding\");\n    proxyReq.removeHeader(\"x-forwarded-proto\");\n    proxyReq.removeHeader(\"x-forwarded-host\");\n    proxyReq.removeHeader(\"x-forwarded-port\");\n    proxyReq.removeHeader(\"x-forwarded-for\");\n    proxyReq.removeHeader(\"fly-client-ip\");\n    proxyReq.removeHeader(\"fly-forwarded-port\");\n    proxyReq.removeHeader(\"fly-forwarded-proto\");\n    proxyReq.removeHeader(\"fly-forwarded-ssl\");\n    proxyReq.removeHeader(\"fly-region\");\n\n    proxyReq.setHeader(\"x-fusion-proxy\", \"true\");\n    const hostname = new URL(serverUrl).host;\n    proxyReq.host = hostname;\n    proxyReq.setHeader(\"Host\", hostname);\n\n    if (process.env.DEBUG_FUSION_PROXY) {\n      console.log(\n        \"proxyReq: removing headers. Final headers:\",\n        JSON.stringify(proxyReq.getHeaders(), null, 2),\n      );\n      console.log(\"proxyReq: removing headers. Final host:\", proxyReq.host);\n    }\n  });\n\n  proxy.on(\"proxyRes\", (proxyRes, _req, res) => {\n    try {\n      const statusCode = proxyRes.statusCode || 200;\n      const contentType = proxyRes.headers[\"content-type\"] || \"\";\n      const contentLength = parseInt(proxyRes.headers[\"content-length\"] || \"0\");\n      const maxBufferSize = 1024 * 1024; // 1MB limit\n\n      const setHeadersAndStatusCode = () => {\n        Object.keys(proxyRes.headers).forEach((key) => {\n          if (shouldSkipHeader(key)) {\n            return;\n          }\n          const newValue = proxyRes.headers[key] || \"\";\n          if (process.env.DEBUG_FUSION_PROXY) {\n            const oldValue = res.getHeader(key) || \"\";\n            console.log(\n              `proxyRes: setting header \"${key}\" old->\"${oldValue}\", new->\"${newValue}\"`,\n            );\n          }\n          res.setHeader(key, newValue);\n        });\n        res.statusCode = statusCode;\n      };\n\n      // First check if we can determine HTML from content-type header\n      if (\n        contentType &&\n        contentType.includes(\"text/html\") &&\n        statusCode === 200\n      ) {\n        let body = \"\";\n        proxyRes.on(\"data\", (chunk: Buffer) => {\n          body += chunk.toString();\n        });\n        proxyRes.on(\"end\", () => {\n          processHtmlContent(body, proxyRes, res, statusCode);\n        });\n        return;\n      } else if (\n        statusCode !== 200 ||\n        contentLength > maxBufferSize ||\n        (contentType && !contentType.includes(\"text/html\"))\n      ) {\n        setHeadersAndStatusCode();\n        if (process.env.DEBUG_FUSION_PROXY) {\n          console.log(\"proxyRes: piping to response\");\n        }\n        proxyRes.pipe(res);\n        return;\n      } else {\n        // If the content is small enough, we can buffer it and check if it's HTML\n        let body = \"\";\n        proxyRes.on(\"data\", (chunk: Buffer) => {\n          body += chunk.toString();\n        });\n\n        proxyRes.on(\"end\", () => {\n          if (isProbablyHtmlContent({ body })) {\n            processHtmlContent(body, proxyRes, res, statusCode);\n          } else {\n            setHeadersAndStatusCode();\n            if (process.env.DEBUG_FUSION_PROXY) {\n              console.log(\"proxyRes: ending response with body\");\n            }\n            res.end(body);\n          }\n        });\n      }\n    } catch (err) {\n      if (!res.headersSent) {\n        res.statusCode = 500;\n        res.end(\"Error handling proxy response\");\n      }\n    }\n  });\n\n  proxy.on(\"error\", (err, _req, _res) => {\n    sys.debug(`Proxy error: ${err.message}`);\n    if (process.env.DEBUG_FUSION_PROXY) {\n      console.log(\"proxy: error\", err);\n    }\n    console.error(\"Proxy error:\", err);\n  });\n\n  const middleware = (req: Request, res: Response, next: NextFunction) => {\n    // Skip proxy for Builder endpoints\n    if (req.path.startsWith(BUILDER_ENDPOINT_PREFIX)) {\n      return next();\n    }\n\n    const secFetchDest = req.headers[\"sec-fetch-dest\"];\n    const httpXBuilderSource = req.headers[\"x-builder-source\"];\n\n    // Bypass if screenshot tool param present (mirrors nginx `$arg__screenshot_tool_allow`)\n    const screenshotBypassParam = (req.query as any)?._screenshot_tool_allow;\n    const screenshotBypass = Array.isArray(screenshotBypassParam)\n      ? screenshotBypassParam.includes(\"true\")\n      : screenshotBypassParam === \"true\" || screenshotBypassParam === true;\n\n    if (\n      !screenshotBypass &&\n      secFetchDest &&\n      secFetchDest === \"document\" &&\n      httpXBuilderSource !== \"desktop-app\"\n    ) {\n      res.status(401).send(\"Not Authorized\");\n      return;\n    }\n\n    proxy.web(req, res);\n  };\n\n  const upgradeFunction: WebSocketUpgradeFunction = (\n    req: IncomingMessage,\n    socket: Duplex,\n    head: Buffer,\n  ) => {\n    if (!connectionTracker.addConnection(socket, req)) {\n      if (socket.writable) {\n        socket.write(\"HTTP/1.1 503 Service Unavailable\\r\\n\\r\\n\");\n      }\n      socket.destroy();\n      return;\n    }\n\n    proxy.ws(req, socket, head, (err) => {\n      if (err) {\n        sys.debug(`WebSocket proxy error for ${req.url}: ${err.message}`);\n        connectionTracker.removeConnection(socket);\n        if (socket.writable) {\n          socket.write(\"HTTP/1.1 500 Internal Server Error\\r\\n\\r\\n\");\n        }\n        socket.destroy();\n      }\n    });\n  };\n\n  const proxyMiddleware: ProxyMiddleware = Object.assign(middleware, {\n    upgrade: upgradeFunction,\n    // Graceful shutdown\n    cleanup: () => {\n      connectionTracker.cleanup();\n    },\n  });\n\n  return proxyMiddleware;\n};\n\nconst isProbablyHtmlContent = ({ body }: { body?: string }): boolean => {\n  if (!body) {\n    return false;\n  }\n\n  const trimmedBody = body.trim();\n  return (\n    trimmedBody.startsWith(\"<!DOCTYPE html\") ||\n    trimmedBody.startsWith(\"<!doctype html\") ||\n    trimmedBody.startsWith(\"<html\") ||\n    trimmedBody.startsWith(\"<HTML\") ||\n    /^\\s*<\\s*html[\\s>]/i.test(trimmedBody)\n  );\n};\n\n/**\n * Detects if HTML was server-side rendered by checking for framework-specific markers.\n * Returns whether SSR was used and whether the header/head was server-rendered.\n */\nexport const detectSSR = (\n  body: string,\n): { hasSSR: boolean; hasHeaderSSR: boolean } => {\n  // Check for SSR markers from various frameworks\n  const ssrMarkers = [\n    // React/Next.js\n    /data-reactroot/i,\n    /id=[\"']__next[\"']/i,\n    /__NEXT_DATA__/,\n    // Vue/Nuxt\n    /data-server-rendered=[\"']true[\"']/i,\n    /id=[\"']__nuxt[\"']/i,\n    /inertia-head-ssr-element/i,\n    // Angular Universal\n    /ng-server-context=[\"'](ssr|ssg)[\"']/i,\n    /_ngcontent-/,\n    /_nghost-/,\n    // SolidJS\n    /data-hk=/,\n    // Svelte/SvelteKit\n    /<!--\\[-->/,\n    /<!--\\]-->/,\n    /class=[\"'][^\"']*svelte-[a-z0-9]+/i,\n    // Qwik\n    /q:container=/i,\n    /q:render=/i,\n    /<!--qv\\s/,\n  ];\n\n  const hasSSR = ssrMarkers.some((marker) => marker.test(body));\n\n  if (!hasSSR) {\n    return { hasSSR: false, hasHeaderSSR: false };\n  }\n\n  // Since header always goes first, determine if header has SSR by checking\n  // if any SSR marker is located before <body>\n  const bodyTagIndex = body.search(/<body(?=[\\s>])/i);\n\n  // If no body tag found, assume full document is SSR\n  if (bodyTagIndex === -1) {\n    return { hasSSR, hasHeaderSSR: hasSSR };\n  }\n\n  // Check if any SSR marker appears before the body tag\n  const beforeBody = body.substring(0, bodyTagIndex);\n  const hasHeaderSSR = ssrMarkers.some((marker) => marker.test(beforeBody));\n\n  return { hasSSR, hasHeaderSSR };\n};\n\nconst processHtmlContent = (\n  body: string,\n  proxyRes: any,\n  res: any,\n  statusCode: number,\n) => {\n  try {\n    Object.keys(proxyRes.headers).forEach((key) => {\n      if (shouldSkipHeader(key)) {\n        return;\n      }\n      if (key.toLowerCase() !== \"content-length\") {\n        const newValue = proxyRes.headers[key] || \"\";\n        if (process.env.DEBUG_FUSION_PROXY) {\n          const oldValue = res.getHeader(key) || \"\";\n          console.log(\n            `processHtmlContent: setting header \"${key}\" old->\"${oldValue}\", new->\"${newValue}\"`,\n          );\n        }\n        res.setHeader(key, newValue);\n      }\n    });\n\n    const script = `<script>\n      // Flag to indicate this page is being proxied by Builder\n      window.BUILDER_PROXY_EXISTS = true;\n      \n      const isInIframe = window !== window.parent;\n\n      function sendMessage(message) {\n        if (isInIframe) {\n          window.parent.postMessage(message, '*');\n        } else {\n          console.warn('No parent context available for messaging');\n        }\n      }\n\n      const messageHandler = (event) => {\n        const { data } = event;\n        if (!data?.type) {\n          return;\n        }\n\n        switch (data.type) {\n          case 'builder.evaluate': {\n            const text = data.data.text;\n            const args = data.data.arguments || [];\n            const id = data.data.id;\n            // tslint:disable-next-line:no-function-constructor-with-string-args\n            const fn = new Function(text);\n            let result;\n            let error = null;\n            try {\n              // eslint-disable-next-line prefer-spread\n              result = fn.apply(null, args);\n            } catch (err) {\n              error = err;\n            }\n\n            if (error) {\n              sendMessage({\n                type: 'builder.evaluateError',\n                data: { id, error: error.message },\n              });\n            } else {\n              if (result && typeof result.then === 'function') {\n                result\n                  .then((finalResult) => {\n                    sendMessage({\n                      type: 'builder.evaluateResult',\n                      data: { id, result: finalResult },\n                    });\n                  })\n                  .catch(console.error);\n              } else {\n                sendMessage({\n                  type: 'builder.evaluateResult',\n                  data: { result, id },\n                });\n              }\n            }\n            break;\n          }\n        }\n      };\n\n      window.addEventListener('message', messageHandler);\n\n      window.addEventListener('error', (event) => {\n        sendMessage({\n          type: 'builder.interactiveFrameError',\n          data: { message: event.error?.stack || event.error?.message || event.message },\n        });\n      });\n      \n      setTimeout(() => {\n        const viteError = document.querySelector('vite-error-overlay')?.shadowRoot?.textContent;\n        if (typeof viteError === 'string') {\n          sendMessage({\n            type: 'builder.interactiveFrameError',\n            data: { message: viteError },\n          });\n        }\n      }, 500);\n      if (document.currentScript) {\n        document.currentScript.remove();\n      }\n    </script>`;\n\n    /**\n     * Injecting script into head ASAP. This allows us to capture any early errors in the user's code.\n     * Only inject into head if it was NOT server-side rendered (to avoid interfering with SSR hydration).\n     * Only match <head> where the first char after \"head\" is a space, newline, or >\n     */\n    const headMatch = body.match(/<head(?=[\\s>])[^>]*>/i);\n    const modifiedBody =\n      headMatch && !detectSSR(body).hasHeaderSSR\n        ? body.replace(headMatch[0], headMatch[0] + script)\n        : body + script;\n\n    res.statusCode = statusCode;\n    if (process.env.DEBUG_FUSION_PROXY) {\n      console.log(`processHtmlContent: setting status code ${statusCode}`);\n    }\n    res.end(modifiedBody);\n  } catch (err) {\n    if (!res.headersSent) {\n      res.statusCode = 500;\n      res.end(\"Error processing response\");\n    }\n  }\n};\n\nconst shouldSkipHeader = (headerKey: string) => {\n  headerKey = headerKey.toLowerCase();\n  return (\n    headerKey === \"etag\" ||\n    headerKey === \"cache-control\" ||\n    headerKey === \"expires\" ||\n    headerKey === \"content-security-policy\" ||\n    headerKey === \"x-frame-options\" ||\n    headerKey === \"age\"\n  );\n};\n\nconst createProxyOptions = (\n  serverUrl: string,\n  sys: DevToolsSys,\n): ServerOptions => {\n  const isHttps = serverUrl.startsWith(\"https://\");\n  const url = new URL(serverUrl);\n  const targetOrigin = url.origin;\n\n  const proxyOptions: ServerOptions = {\n    target: targetOrigin,\n    changeOrigin: true,\n    selfHandleResponse: true,\n    ws: true,\n    ...(isHttps && {\n      secure: false,\n      agent: new (require(\"https\").Agent)({\n        rejectUnauthorized: false,\n      }),\n    }),\n  };\n  return proxyOptions;\n};\n", "// Polyfill for AbortSignal.any\nexport function abortSignalAny(\n  input: (AbortSignal | undefined)[],\n): AbortSignal {\n  const signals = input.filter(\n    (signal) => signal !== undefined,\n  ) as AbortSignal[];\n  if (typeof AbortSignal.any === \"function\") {\n    return AbortSignal.any(signals);\n  }\n  const controller = new AbortController();\n  const onAbort = () => controller.abort();\n  for (const signal of signals) {\n    if (signal.aborted) {\n      controller.abort();\n      break;\n    }\n    signal.addEventListener(\"abort\", onAbort, { once: true });\n  }\n  // Clean up listeners if the controller is aborted\n  controller.signal.addEventListener(\"abort\", () => {\n    for (const signal of signals) {\n      signal.removeEventListener(\"abort\", onAbort);\n    }\n  });\n  return controller.signal;\n}\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "import stripAnsi from \"strip-ansi\";\n\n// Regular expressions to match various dev server URL patterns\nconst DEV_SERVER_URL_PATTERNS = [\n  // Vite pattern: \"\u279C  Local:   http://localhost:5173/\"\n  /\u279C\\s+(?:Local|Network):\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Next.js pattern: \"- Local:        http://localhost:3000\"\n  /-\\s+Local:\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Create React App pattern: \"Local:            http://localhost:3000\"\n  /Local:\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Webpack Dev Server: \"Project is running at http://localhost:8080/\"\n  /Project is running at\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Angular CLI: \"Local:   http://localhost:4200/\"\n  /Local:\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Nuxt.js: \"Local:   http://localhost:3000\"\n  /Local:\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Generic pattern: any \"http://localhost:port\" or \"https://localhost:port\"\n  /(https?:\\/\\/(?:localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0):\\d+)/i,\n  // Vite Network pattern: \"\u279C  Network: https://localhost.local.com:5173/\"\n  /\u279C\\s+Network:\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Parcel pattern: \"Server running at http://localhost:1234\"\n  /Server running at\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Storybook pattern: \"Local:    http://localhost:6006/\"\n  /Local:\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Expo pattern: \"Metro waiting on exp://192.168.1.1:19000\"\n  /Metro waiting on\\s+(https?:\\/\\/[^\\s]+)/i,\n  // Gatsby pattern: \"On Your Network:  http://192.168.1.1:8000/\"\n  /You can now view .+ in the browser\\.\\s+Local:\\s+(https?:\\/\\/[^\\s]+)/i,\n];\n\nexport interface DevServerUrlInfo {\n  url: string;\n  port: number;\n}\n\n/**\n * Parse a URL string and return DevServerUrlInfo or null if invalid\n * @param urlString - The URL string to parse\n * @returns DevServerUrlInfo object or null if invalid\n */\nfunction parseUrlString(urlString: string): DevServerUrlInfo | null {\n  try {\n    const url = new URL(urlString);\n    const port = parseInt(url.port, 10);\n    return {\n      url: urlString.replace(/\\/$/, \"\"), // Remove trailing slash\n      port: port || (url.protocol === \"https:\" ? 443 : 80),\n    };\n  } catch (error) {\n    // Not a valid URL, but might be just a port or path\n    // Try to extract port from patterns like \"localhost:3000\" without protocol\n    const portMatch = urlString.match(/:(\\d+)/);\n    if (portMatch) {\n      const port = parseInt(portMatch[1], 10);\n      // Prepend http:// if no protocol specified\n      const normalizedUrl = urlString.startsWith(\"http\")\n        ? urlString\n        : `http://${urlString}`;\n\n      try {\n        new URL(normalizedUrl); // Validate it's parseable\n        return {\n          url: normalizedUrl.replace(/\\/$/, \"\"),\n          port: port,\n        };\n      } catch (error) {\n        return null;\n      }\n    }\n    return null;\n  }\n}\n\n/**\n * Clean ANSI escape sequences and carriage returns from tmux/node-pty output\n * @param output - Raw output string that may contain ANSI codes and carriage returns\n * @returns Cleaned string with ANSI codes removed and normalized line endings\n */\nfunction cleanTmuxOutput(output: string): string {\n  // Remove ANSI escape sequences using strip-ansi library\n  let cleaned = stripAnsi(output);\n\n  // // Remove carriage returns and normalize line endings\n  cleaned = cleaned.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n\n  return cleaned;\n}\n\n/**\n * Parse dev server output to extract URL and port information\n *\n * @param output - The command output string to parse\n * @param customPatterns - Optional array of custom regex patterns to try first\n * @returns Object with url and port, or null if no valid URL found\n */\nexport function parseDevServerOutput(\n  output: string,\n  customPatterns?: string[],\n): DevServerUrlInfo | null {\n  // Compile custom patterns to RegExp objects if provided\n  const patterns: RegExp[] = [];\n  if (customPatterns && customPatterns.length > 0) {\n    for (let pattern of customPatterns) {\n      try {\n        try {\n          // Handle double-escaped patterns from shell command line\n          const cleanedPattern = JSON.parse(pattern);\n          patterns.push(new RegExp(cleanedPattern, \"i\"));\n        } catch (error) {}\n        patterns.push(new RegExp(pattern, \"i\"));\n      } catch (error) {\n        // Skip invalid regex patterns\n        console.warn(`Invalid regex pattern: ${pattern}`, error);\n      }\n    }\n  }\n\n  const patternsToCheck =\n    patterns.length > 0\n      ? [...patterns, ...DEV_SERVER_URL_PATTERNS]\n      : DEV_SERVER_URL_PATTERNS;\n\n  for (const line of output.split(\"\\n\")) {\n    for (const pattern of patternsToCheck) {\n      const match = line.match(pattern);\n      if (match) {\n        // Get the captured group if it exists, otherwise use the full match\n        const urlString = match[1] || match[0];\n        const result = parseUrlString(urlString);\n        if (result) {\n          return result;\n        }\n      }\n    }\n  }\n\n  // If no URL found in individual lines, try to find URLs that might be split across lines\n  // This is common in tmux output where URLs can be broken by carriage returns\n  // Instead of concatenating all lines (which can be too greedy), look for URLs in adjacent lines\n  const cleanedOutput = cleanTmuxOutput(output);\n  const outputLines = cleanedOutput.split(\"\\n\");\n  for (let i = 0; i < outputLines.length; i++) {\n    const currentLine = outputLines[i];\n    const nextLine = outputLines[i + 1] || \"\";\n\n    // Check if current line has a partial URL and next line completes it\n    const partialUrlMatch = currentLine.match(/(https?:\\/\\/[^\\s]*)$/);\n    if (partialUrlMatch && nextLine) {\n      const combinedLine = currentLine + nextLine;\n      for (const pattern of patternsToCheck) {\n        const match = combinedLine.match(pattern);\n        if (match) {\n          const urlString = match[1] || match[0];\n          const result = parseUrlString(urlString);\n          if (result) {\n            return result;\n          }\n        }\n      }\n    }\n  }\n\n  return null;\n}\n", "import { readFileSync, writeFileSync } from \"node:fs\";\n\n/**\n * Marker comments to identify lines managed by our system\n */\nconst MANAGED_BLOCK_START = \"# BEGIN BUILDER.IO DEV-TOOLS MANAGED\";\nconst MANAGED_BLOCK_END = \"# END BUILDER.IO DEV-TOOLS MANAGED\";\n\n/**\n * Path to the hosts file\n */\nconst HOSTS_FILE_PATH =\n  process.platform === \"win32\"\n    ? \"C:\\\\Windows\\\\System32\\\\drivers\\\\etc\\\\hosts\"\n    : \"/etc/hosts\";\n\nexport interface HostEntry {\n  hostname: string;\n  ip?: string;\n}\n\nexport interface SentryLike {\n  captureException: (error: unknown) => void;\n}\n\n/**\n * Check if a hostname is localhost or 127.0.0.1\n */\nexport function isLocalhost(hostname: string): boolean {\n  return (\n    hostname === \"localhost\" ||\n    hostname === \"127.0.0.1\" ||\n    hostname === \"::1\" ||\n    hostname === \"0.0.0.0\"\n  );\n}\n\n/**\n * Read the current hosts file content\n * @returns The content of the hosts file, or null if it cannot be read\n */\nfunction readHostsFile(): string | null {\n  try {\n    return readFileSync(HOSTS_FILE_PATH, \"utf-8\");\n  } catch (error) {\n    return null;\n  }\n}\n\n/**\n * Write content to the hosts file (requires root/admin privileges)\n * @returns true if successful, false otherwise\n */\nfunction writeHostsFile(content: string): boolean {\n  try {\n    // Node.js is running with root permissions, so we can write directly\n    writeFileSync(HOSTS_FILE_PATH, content, \"utf-8\");\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\n\n/**\n * Remove all lines managed by our system from the hosts file\n */\nfunction removeManagedEntries(hostsContent: string): string {\n  const lines = hostsContent.split(\"\\n\");\n  const result: string[] = [];\n  let inManagedBlock = false;\n\n  for (const line of lines) {\n    if (line.trim() === MANAGED_BLOCK_START) {\n      inManagedBlock = true;\n      continue;\n    }\n    if (line.trim() === MANAGED_BLOCK_END) {\n      inManagedBlock = false;\n      continue;\n    }\n    if (!inManagedBlock) {\n      result.push(line);\n    }\n  }\n\n  return result.join(\"\\n\");\n}\n\n/**\n * Create a managed block with the given entries\n */\nfunction createManagedBlock(entries: HostEntry[]): string {\n  if (entries.length === 0) {\n    return \"\";\n  }\n\n  const lines = [MANAGED_BLOCK_START];\n\n  for (const entry of entries) {\n    const ip = entry.ip || \"127.0.0.1\";\n    lines.push(`${ip} ${entry.hostname}`);\n  }\n\n  lines.push(MANAGED_BLOCK_END);\n\n  return lines.join(\"\\n\");\n}\n\n/**\n * Update the /etc/hosts file with new entries in a non-destructive way.\n * This function will:\n * 1. Remove all previously managed entries (marked with special comments)\n * 2. Add new entries with marker comments\n * 3. Preserve all other entries in the file\n *\n * @param entries - Array of host entries to add\n * @param sentry - Optional Sentry instance for error logging\n * @returns true if successful, false otherwise\n */\nexport function updateHostsFile(\n  entries: HostEntry[],\n  sentry?: SentryLike,\n): boolean {\n  try {\n    // Read current hosts file\n    const currentContent = readHostsFile();\n    if (currentContent === null) {\n      const error = new Error(\n        `Failed to read hosts file at ${HOSTS_FILE_PATH}`,\n      );\n      sentry?.captureException(error);\n      return false;\n    }\n\n    // Remove existing managed entries\n    let newContent = removeManagedEntries(currentContent);\n\n    // Ensure content ends with newline if it has content\n    if (newContent.trim() && !newContent.endsWith(\"\\n\")) {\n      newContent += \"\\n\";\n    }\n\n    // Add new managed block if there are entries\n    const managedBlock = createManagedBlock(entries);\n    if (managedBlock) {\n      // Add a newline before the managed block if the file has content\n      if (newContent.trim()) {\n        newContent += \"\\n\";\n      }\n      newContent += managedBlock + \"\\n\";\n    }\n\n    // Write the updated content\n    const success = writeHostsFile(newContent);\n    if (!success) {\n      const error = new Error(\n        `Failed to write to hosts file at ${HOSTS_FILE_PATH}`,\n      );\n      sentry?.captureException(error);\n      return false;\n    }\n\n    return true;\n  } catch (error) {\n    sentry?.captureException(error);\n    return false;\n  }\n}\n\n/**\n * Remove all managed entries from the hosts file\n * @param sentry - Optional Sentry instance for error logging\n * @returns true if successful, false otherwise\n */\nexport function clearManagedHostEntries(sentry?: SentryLike): boolean {\n  try {\n    const currentContent = readHostsFile();\n    if (currentContent === null) {\n      const error = new Error(\n        `Failed to read hosts file at ${HOSTS_FILE_PATH}`,\n      );\n      sentry?.captureException(error);\n      return false;\n    }\n\n    const newContent = removeManagedEntries(currentContent);\n    const success = writeHostsFile(newContent);\n\n    if (!success) {\n      const error = new Error(\n        `Failed to write to hosts file at ${HOSTS_FILE_PATH}`,\n      );\n      sentry?.captureException(error);\n      return false;\n    }\n\n    return true;\n  } catch (error) {\n    sentry?.captureException(error);\n    return false;\n  }\n}\n\n/**\n * Check if we have permission to modify the hosts file\n * Returns true if we can write, false otherwise\n */\nexport function canModifyHostsFile(): boolean {\n  try {\n    // Try to read the file first\n    readHostsFile();\n    return true;\n  } catch {\n    return false;\n  }\n}\n", "import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, isAbsolute, normalize, join } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nexport interface FileOverride {\n  /**\n   * Path where the file should be written.\n   * - Absolute paths: \"/app/.env\", \"/etc/config/app.conf\"\n   * - Tilde expansion: \"~/.config/app.json\" (expands to home directory)\n   * - Relative paths: \"./file.txt\", \"config.json\" (resolved against working directory)\n   */\n  path: string;\n  /**\n   * Content to write to the file.\n   */\n  content: string;\n}\n\nexport interface SentryLike {\n  captureException: (error: unknown) => void;\n}\n\nexport interface ApplyFileOverridesResult {\n  success: boolean;\n  appliedFiles: string[];\n  failedFiles: Array<{ path: string; error: string }>;\n}\n\n/**\n * Expand tilde (~) in file path to home directory\n * @param filePath - The file path that may contain tilde\n * @returns Expanded path with home directory\n */\nexport function expandTildePath(filePath: string): string {\n  if (!filePath || typeof filePath !== \"string\") {\n    return filePath;\n  }\n\n  // Handle ~/path\n  if (filePath.startsWith(\"~/\") || filePath === \"~\") {\n    return join(homedir(), filePath.slice(1));\n  }\n\n  // Handle ~user/path (not supported, return as-is)\n  // Could be extended in the future if needed\n  return filePath;\n}\n\n/**\n * Resolve a file path to an absolute path.\n * Handles tilde expansion, relative paths, and absolute paths.\n * @param filePath - The file path to resolve\n * @param workingDirectory - Optional working directory for resolving relative paths\n * @returns Resolved absolute path\n */\nexport function resolveFilePath(\n  filePath: string,\n  workingDirectory?: string,\n): string {\n  if (!filePath || typeof filePath !== \"string\") {\n    return filePath;\n  }\n\n  // First, expand tilde if present\n  let resolvedPath = expandTildePath(filePath);\n\n  // If it's already absolute after tilde expansion, return it\n  if (isAbsolute(resolvedPath)) {\n    return normalize(resolvedPath);\n  }\n\n  // If it's relative and we have a working directory, resolve against it\n  if (workingDirectory) {\n    resolvedPath = join(workingDirectory, resolvedPath);\n    return normalize(resolvedPath);\n  }\n\n  // If no working directory provided, cannot resolve relative paths\n  return resolvedPath;\n}\n\n/**\n * Validate that a file path can be resolved to an absolute path\n * Supports tilde (~) expansion and relative paths (when workingDirectory is provided)\n * @param filePath - The file path to validate\n * @param workingDirectory - Optional working directory for resolving relative paths\n * @returns true if valid, false otherwise\n */\nexport function isValidFilePath(\n  filePath: string,\n  workingDirectory?: string,\n): boolean {\n  if (!filePath || typeof filePath !== \"string\") {\n    return false;\n  }\n\n  // Resolve the path\n  const resolvedPath = resolveFilePath(filePath, workingDirectory);\n\n  // Must be an absolute path after resolution\n  if (!isAbsolute(resolvedPath)) {\n    return false;\n  }\n\n  // Path should already be normalized by resolveFilePath\n  // But double-check for safety\n  const normalized = normalize(resolvedPath);\n  if (normalized !== resolvedPath) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Ensure the directory for a file path exists\n * @param filePath - The file path whose directory should exist\n * @returns true if directory exists or was created, false otherwise\n */\nfunction ensureDirectoryExists(filePath: string): boolean {\n  try {\n    const dir = dirname(filePath);\n\n    // Check if directory already exists\n    if (existsSync(dir)) {\n      return true;\n    }\n\n    // Create directory recursively\n    mkdirSync(dir, { recursive: true, mode: 0o755 });\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\n\n/**\n * Write a single file override\n * @param override - The file override to apply\n * @param workingDirectory - Optional working directory for resolving relative paths\n * @param sentry - Optional Sentry instance for error logging\n * @returns Object with success status and error message if failed, and the resolved path\n */\nfunction applyFileOverride(\n  override: FileOverride,\n  workingDirectory?: string,\n  sentry?: SentryLike,\n): { success: boolean; error?: string; resolvedPath?: string } {\n  try {\n    // Validate path\n    if (!isValidFilePath(override.path, workingDirectory)) {\n      const error = `Invalid file path: ${override.path}. Path must be resolvable to an absolute path.`;\n      return { success: false, error };\n    }\n\n    // Resolve the path (handles tilde, relative, and absolute paths)\n    const resolvedPath = resolveFilePath(override.path, workingDirectory);\n\n    // Ensure directory exists\n    if (!ensureDirectoryExists(resolvedPath)) {\n      const error = `Failed to create directory for: ${resolvedPath}`;\n      return { success: false, error };\n    }\n\n    // Write the file\n    writeFileSync(resolvedPath, override.content, \"utf-8\");\n    return { success: true, resolvedPath };\n  } catch (error) {\n    const errorMessage = error instanceof Error ? error.message : String(error);\n    sentry?.captureException(error);\n    return { success: false, error: errorMessage };\n  }\n}\n\n/**\n * Apply multiple file overrides to the filesystem.\n * This function will:\n * 1. Validate each file path\n * 2. Resolve relative paths against working directory\n * 3. Create directories as needed\n * 4. Write files with the provided content\n * 5. Return detailed results for success/failure of each file\n *\n * @param overrides - Array of file overrides to apply\n * @param workingDirectory - Optional working directory for resolving relative paths\n * @param sentry - Optional Sentry instance for error logging\n * @returns Object with overall success status and details for each file\n */\nexport function applyFileOverrides(\n  overrides: FileOverride[],\n  workingDirectory?: string,\n  sentry?: SentryLike,\n): ApplyFileOverridesResult {\n  const result: ApplyFileOverridesResult = {\n    success: true,\n    appliedFiles: [],\n    failedFiles: [],\n  };\n\n  // Handle empty array\n  if (!overrides || overrides.length === 0) {\n    return result;\n  }\n\n  // Apply each override\n  for (const override of overrides) {\n    const applyResult = applyFileOverride(override, workingDirectory, sentry);\n\n    if (applyResult.success && applyResult.resolvedPath) {\n      result.appliedFiles.push(applyResult.resolvedPath);\n    } else {\n      result.success = false;\n      result.failedFiles.push({\n        path: override.path,\n        error: applyResult.error || \"Unknown error\",\n      });\n    }\n  }\n\n  return result;\n}\n\n/**\n * Read a file and return its content\n * Supports tilde (~) expansion and relative paths.\n * @param filePath - The path to the file to read\n * @param workingDirectory - Optional working directory for resolving relative paths\n * @returns The file content or null if it cannot be read\n */\nexport function readFileOverride(\n  filePath: string,\n  workingDirectory?: string,\n): string | null {\n  try {\n    if (!isValidFilePath(filePath, workingDirectory)) {\n      return null;\n    }\n\n    const resolvedPath = resolveFilePath(filePath, workingDirectory);\n    if (!existsSync(resolvedPath)) {\n      return null;\n    }\n\n    return readFileSync(resolvedPath, \"utf-8\");\n  } catch (error) {\n    return null;\n  }\n}\n\n/**\n * Check if a file exists at the given path\n * Supports tilde (~) expansion and relative paths.\n * @param filePath - The path to check\n * @param workingDirectory - Optional working directory for resolving relative paths\n * @returns true if the file exists, false otherwise\n */\nexport function fileOverrideExists(\n  filePath: string,\n  workingDirectory?: string,\n): boolean {\n  try {\n    if (!isValidFilePath(filePath, workingDirectory)) {\n      return false;\n    }\n    const resolvedPath = resolveFilePath(filePath, workingDirectory);\n    return existsSync(resolvedPath);\n  } catch {\n    return false;\n  }\n}\n", "import type { DevToolsSys } from \"@builder.io/dev-tools/core\";\nimport type { ProxyMiddleware } from \"../../types/proxy-middleware\";\nimport {\n  getCommandWithShellArgs,\n  cleanupTempFolder,\n  safeSpawn,\n  killProcess,\n} from \"../utils/process-tracker\";\nimport { wrapCommandWithEnvCapture } from \"../utils/env-capture\";\nimport type {\n  DevCommandResult,\n  DevCommandState,\n  EnvironmentVariable,\n  HttpServerState,\n  SetupCommandResult,\n  SetupDependency,\n} from \"$/ai-utils\";\n\nimport EventEmitter from \"events\";\nimport { execSync } from \"node:child_process\";\nimport { TerminalBuffer } from \"../utils/terminal-buffer\";\nimport type { FusionConfig, SetupCommandState } from \"$/ai-utils\";\nimport { createProxy } from \"../launch/proxy\";\nimport { abortSignalAny } from \"../abort-signal-any\";\nimport { parseDevServerOutput } from \"../utils/dev-server-url-parser\";\nimport { log } from \"@clack/prompts\";\nimport https from \"node:https\";\nimport http from \"node:http\";\nimport {\n  updateHostsFile,\n  isLocalhost,\n  type HostEntry,\n} from \"../utils/hosts-file-manager\";\nimport { applyFileOverrides } from \"../utils/file-overrides-manager\";\nimport { existsSync } from \"node:fs\";\n\nexport type DevServerState = Exclude<\n  SetupCommandState | DevCommandState,\n  \"installed\" | \"starting\"\n>;\nfunction isCommandAvailable(command: string): boolean {\n  // Sanitize command to prevent shell injection - only allow alphanumeric, dash, underscore\n  if (!/^[a-zA-Z0-9_-]+$/.test(command)) {\n    return false;\n  }\n\n  try {\n    const checkCommand = process.platform === \"win32\" ? \"where\" : \"which\";\n    execSync(`${checkCommand} ${command}`, {\n      stdio: \"ignore\",\n    });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nfunction detectPackageManagerInstallCommand(\n  sys: DevToolsSys,\n  workingDir?: string,\n): string {\n  try {\n    const dir = workingDir || sys.cwd() || process.cwd();\n\n    // Check for lockfiles in order of preference\n    if (sys.existsSync(sys.join(dir, \"pnpm-lock.yaml\"))) {\n      return \"pnpm install\";\n    }\n    if (sys.existsSync(sys.join(dir, \"yarn.lock\"))) {\n      return \"yarn install\";\n    }\n    if (sys.existsSync(sys.join(dir, \"bun.lockb\"))) {\n      return \"bun install\";\n    }\n    if (sys.existsSync(sys.join(dir, \"package-lock.json\"))) {\n      return \"npm install\";\n    }\n    // Default to npm if no lockfile found\n    return \"npm install\";\n  } catch {\n    return \"npm install\";\n  }\n}\n\nfunction safeReplaceNiCommand(\n  command: string,\n  sys: DevToolsSys,\n  workingDirectory?: string,\n): string {\n  // Only replace if the command is exactly \"npm install\" (the original logic)\n  // Don't replace custom commands with flags or multi-step commands\n  if (command !== \"npm install\") {\n    return command;\n  }\n\n  if (isCommandAvailable(\"ni\")) {\n    return \"ni\";\n  } else {\n    const originalCommand = command;\n\n    // Fallback: detect package manager from lockfiles\n    const detectedCommand = detectPackageManagerInstallCommand(\n      sys,\n      workingDirectory,\n    );\n\n    // Log warning for monitoring\n    sys.Sentry?.captureMessage(\n      `ni command not found in PATH, falling back to detected command: ${detectedCommand}`,\n      {\n        level: \"warning\",\n        extra: {\n          originalCommand,\n          detectedCommand,\n          workingDirectory,\n        },\n      },\n    );\n\n    return detectedCommand;\n  }\n}\n\n// Minimal interface for the subset of ChildProcess we actually use\nexport interface DevCommandProcess {\n  type: \"devCommandProcess\";\n  getPid: () => number | undefined;\n  getExitCode: () => number | null;\n  kill: (signal?: NodeJS.Signals) => boolean;\n  onSpawn: (listener: () => void) => void;\n  onError: (listener: (err: Error) => void) => void;\n  onClose: (\n    listener: (code: number | null, signal: NodeJS.Signals | null) => void,\n  ) => void;\n  resize?: (cols: number | undefined, rows: number | undefined) => void;\n  write?: (data: string) => void;\n  stdout: {\n    on: (event: \"data\", callback: (data: Buffer) => void) => void;\n  };\n  stderr: {\n    on: (event: \"data\", callback: (data: Buffer) => void) => void;\n  };\n  removeAllListeners: () => void;\n}\n\nexport interface DevCommandProcessOptions {\n  command: string;\n  shell: string;\n  cwd: string | undefined;\n  env: Record<string, string | undefined>;\n}\n\nexport interface DevServerOrchestrator {\n  devCommand: string;\n  setupCommand: string | undefined;\n  setupState: SetupCommandState;\n  lastServerBody: string | undefined;\n  lastServerStatus: number | undefined;\n  devState: DevCommandState;\n  httpServerState: HttpServerState;\n  state: DevServerState;\n  proxyTarget: string | undefined;\n  proxyPort: number | undefined;\n  environmentVariables: EnvironmentVariable[];\n  envVars: Record<string, string>;\n  proxyMiddleware: ProxyMiddleware | undefined;\n  pid: number | undefined;\n  autoDetectedUrl: boolean;\n  autoDetectDevServer: boolean;\n  devCommandProcess: DevCommandProcess | undefined;\n  autoDetectDevServerPatterns: string[] | undefined;\n  abortSetupCommand: () => void;\n  clearEnvVariables: () => void;\n  setEnvVariable: (key: string, value: string | undefined) => boolean;\n  ensureDevCommand: (abortSignal?: AbortSignal) => Promise<boolean>;\n  ensureSetupCommand: (abortSignal?: AbortSignal) => Promise<boolean>;\n  setupCommandPromise: Promise<SetupCommandResult> | undefined;\n  runSetupCommand: (signal?: AbortSignal) => Promise<SetupCommandResult>;\n  setSetupCommand: (opts: {\n    setupDependencies?: SetupDependency[] | null;\n    setupCommand?: string | null;\n    forceRestart?: boolean;\n    signal?: AbortSignal;\n  }) => Promise<SetupCommandResult | null>;\n  setDevCommand: (\n    newCommand: string | undefined,\n    forceRestart?: boolean,\n    signal?: AbortSignal,\n  ) => Promise<DevCommandResult>;\n  setProxyServer: (newProxyServer: string) => Promise<{\n    updatedProxyServer: boolean;\n    updatedHosts: boolean;\n  }>;\n  setPort: (newPort: number) => Promise<boolean>;\n  setAutoDetectSettings: (\n    enabled: boolean,\n    patterns?: string[],\n  ) => Promise<boolean>;\n  addCheckpoint: () => void;\n  getOpenPorts: () => Promise<number[]>;\n  getCheckpoints: (n: number, mode: \"all\" | \"out\" | \"err\") => string;\n  getAllStdout: () => string;\n  getAllStderr: () => string;\n  getOutput: () => string;\n  getSetupWrite: () => string;\n  getDevWrite: () => string;\n  getSetupOutput: () => string;\n  getMiseActivationCommand: (shell: string) => Promise<string | null>;\n  waitUntilIdle: (initialWaitMs?: number, idleTimeMs?: number) => Promise<void>;\n  onClose: (callback: (code: number | null) => void) => void;\n  restart: (abortSignal?: AbortSignal) => Promise<DevCommandResult>;\n  emitter: EventEmitter<{\n    close: [number | null];\n    stdout: [string];\n    stderr: [string];\n    installStdout: [string];\n    installStderr: [string];\n    setupState: [SetupCommandState];\n    devState: [DevCommandState];\n    httpServerState: [HttpServerState];\n    urlDetected: [string];\n  }>;\n  close: () => Promise<void>;\n}\n\ntype Pty = typeof import(\"@lydell/node-pty\");\n\nexport const importPty = (sys: DevToolsSys) => {\n  let pty: Pty | undefined;\n  let ptyError: Error | undefined;\n  try {\n    pty = require(\"@lydell/node-pty\");\n  } catch (error) {\n    ptyError = error instanceof Error ? error : new Error(String(error));\n  }\n\n  if (!pty) {\n    const error = new Error(\"Could not import node-pty.\", { cause: ptyError });\n    sys.Sentry?.captureException(error);\n  }\n  return pty;\n};\n\nfunction checkMiseInstalled(\n  miseLocationPath: string | undefined,\n): string | null {\n  try {\n    if (miseLocationPath) {\n      if (existsSync(miseLocationPath)) {\n        return miseLocationPath;\n      }\n    }\n    execSync(\"which mise\", { stdio: \"ignore\" });\n    return \"mise\";\n  } catch {\n    return null;\n  }\n}\n\nfunction safeParseUrl(serverUrl: string | undefined): URL | undefined {\n  if (!serverUrl) {\n    return undefined;\n  }\n  try {\n    return new URL(serverUrl);\n  } catch (error) {\n    return undefined;\n  }\n}\n\nexport async function devServerOrchestrator(\n  sys: DevToolsSys,\n  fusionConfig: FusionConfig,\n  initialSetupState: \"installed\" | \"not-installed\" | \"install-failed\",\n): Promise<DevServerOrchestrator> {\n  interface CheckPoint {\n    all: TerminalBuffer;\n    out: TerminalBuffer;\n    err: TerminalBuffer;\n  }\n  // Start the command in a child process\n  const setupOutputBuffer = new TerminalBuffer(500);\n  const stdoutBuffer = new TerminalBuffer(500);\n  const stderrBuffer = new TerminalBuffer(500);\n  const allOutputBuffer = new TerminalBuffer(1000);\n  let _autoDetectedUrl: boolean = false;\n  let _autoDetectDevServer: boolean = fusionConfig.autoDetectDevServer ?? false;\n  let _autoDetectDevServerPatterns: string[] | undefined =\n    fusionConfig.autoDetectDevServerPatterns;\n  let serverUrl = _autoDetectDevServer\n    ? undefined\n    : safeParseUrl(fusionConfig.serverUrl);\n  let devCommandProc: DevCommandProcess | undefined;\n  let extraEnvVariables: EnvironmentVariable[] = [];\n  let _setupEnvVars: Record<string, string> = {};\n  let _devState: DevCommandState = fusionConfig.devCommand\n    ? \"stopped\"\n    : \"unset\";\n  let _httpServerState: HttpServerState = \"stopped\";\n  let _setupState: SetupCommandState = initialSetupState;\n  let _lastServerBody: string | undefined;\n  let _lastServerStatus: number | undefined;\n\n  let checkpoints: CheckPoint[] = [];\n  let emitter = new EventEmitter<{\n    close: [number | null];\n    stdout: [string];\n    stderr: [string];\n    installStdout: [string];\n    installStderr: [string];\n    setupState: [SetupCommandState];\n    devState: [DevCommandState];\n    httpServerState: [HttpServerState];\n    urlDetected: [string];\n  }>();\n  let setupAbortController: AbortController | undefined;\n  let setupPromise: Promise<SetupCommandResult> | undefined;\n  let devCommand: string | undefined = fusionConfig.devCommand ?? undefined;\n  let setupCommand: string | undefined = fusionConfig.setupCommand ?? undefined;\n  let setupDependencies: SetupDependency[] | undefined =\n    fusionConfig.setupDependencies ?? undefined;\n  let currentHealthCheckAbort: AbortController | undefined =\n    new AbortController();\n\n  // Check if mise is installed once at startup\n  const miseLocationPath = checkMiseInstalled(\n    fusionConfig.miseLocationPath ?? process.env.MISE_INSTALL_PATH,\n  );\n\n  function addCheckpoint() {\n    checkpoints.push({\n      all: new TerminalBuffer(300),\n      out: new TerminalBuffer(300),\n      err: new TerminalBuffer(300),\n    });\n  }\n\n  /**\n   * Update /etc/hosts file if autoConfigureHosts is enabled and hostname is not localhost\n   */\n  function updateHostsFileIfNeeded() {\n    if (!fusionConfig.autoConfigureHosts || !serverUrl) {\n      return false;\n    }\n\n    const hostname = serverUrl.hostname;\n    if (!isLocalhost(hostname)) {\n      const entries: HostEntry[] = [{ hostname, ip: \"127.0.0.1\" }];\n      const success = updateHostsFile(entries, sys.Sentry);\n      if (success) {\n        log.info(`Updated /etc/hosts with entry: 127.0.0.1 ${hostname}`);\n        return true;\n      } else {\n        log.warn(\n          `Failed to update /etc/hosts for ${hostname}. Make sure the process has root/admin permissions.`,\n        );\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Apply file overrides from fusion config if specified.\n   * This writes files to the filesystem before setup/dev commands run.\n   * Relative paths are resolved against the git working directory (bashWorkingDirectory).\n   */\n  function applyFileOverridesIfNeeded(): boolean {\n    if (\n      !fusionConfig.fileOverrides ||\n      fusionConfig.fileOverrides.length === 0\n    ) {\n      return true;\n    }\n\n    // Use bashWorkingDirectory as the working directory for resolving relative paths\n    const workingDirectory = fusionConfig.bashWorkingDirectory;\n    const result = applyFileOverrides(\n      fusionConfig.fileOverrides,\n      workingDirectory,\n      sys.Sentry,\n    );\n\n    if (result.success) {\n      if (result.appliedFiles.length > 0) {\n        log.info(\n          `Applied ${result.appliedFiles.length} file override(s): ${result.appliedFiles.map((f) => f).join(\", \")}`,\n        );\n      }\n      return true;\n    } else {\n      log.warn(\n        `Failed to apply some file overrides (${result.failedFiles.length} failed):`,\n      );\n      for (const failed of result.failedFiles) {\n        log.warn(`  - ${failed.path}: ${failed.error}`);\n      }\n      return false;\n    }\n  }\n\n  async function waitUntilIdle(\n    initialWaitMs?: number,\n    idleTimeMs?: number,\n  ): Promise<void> {\n    // Use longer timeouts for native app development\n    const defaultInitialWait = fusionConfig.nativeApp ? 30000 : 5000; // 30s vs 5s\n    const defaultIdleTime = fusionConfig.nativeApp ? 10000 : 2000; // 10s vs 2s\n\n    initialWaitMs = initialWaitMs ?? defaultInitialWait;\n    idleTimeMs = idleTimeMs ?? defaultIdleTime;\n    // Wait until no new logs have been emitted for idleTimeMs milliseconds\n    return new Promise<void>((resolve) => {\n      if (_devState !== \"running\" && _devState !== \"starting\") {\n        return resolve();\n      }\n\n      let timer: ReturnType<typeof setTimeout> | undefined = undefined;\n      const resetTimer = (ms: number) => {\n        if (timer) clearTimeout(timer);\n        timer = setTimeout(() => {\n          cleanup();\n          resolve();\n        }, ms);\n      };\n\n      const onOutput = () => resetTimer(idleTimeMs);\n\n      const cleanup = () => {\n        emitter.off(\"stdout\", onOutput);\n        emitter.off(\"stderr\", onOutput);\n        if (timer) clearTimeout(timer);\n      };\n\n      emitter.on(\"stdout\", onOutput);\n      emitter.on(\"stderr\", onOutput);\n\n      // Start the initial timer\n      resetTimer(initialWaitMs);\n    });\n  }\n\n  let proxyMiddleware: ReturnType<typeof createProxy> | undefined;\n  const getOpenPorts = async (): Promise<number[]> => {\n    const pid = devCommandProc?.getPid();\n    if (!pid) {\n      return [];\n    }\n\n    return checkPortsListenedByPid(pid);\n  };\n\n  const updateProxyMiddleware = () => {\n    // Skip proxy middleware creation in native app mode\n    if (fusionConfig.nativeApp) {\n      proxyMiddleware = undefined;\n      return false;\n    }\n\n    // Update /etc/hosts file if needed\n    const updatedHosts = updateHostsFileIfNeeded();\n\n    // when we set the port, we need to update the proxy options and recreate the middleware\n    if (serverUrl) {\n      proxyMiddleware = createProxy(serverUrl.href, sys);\n    } else {\n      proxyMiddleware = undefined;\n    }\n    return updatedHosts;\n  };\n\n  function setDevState(newState: DevCommandState) {\n    if (_devState === newState) {\n      return;\n    }\n    _devState = newState;\n    if (_devState !== \"running\") {\n      setHttpServerState(\"stopped\");\n    }\n    emitter.emit(\"devState\", _devState);\n  }\n\n  function setSetupState(newState: SetupCommandState) {\n    if (_setupState === newState) {\n      return;\n    }\n    _setupState = newState;\n    emitter.emit(\"setupState\", _setupState);\n\n    if (_setupState !== \"installed\") {\n      setHttpServerState(\"stopped\");\n    }\n    if (_setupState === \"installed\") {\n      ensureDevCommand();\n    }\n  }\n\n  function setHttpServerState(newState: HttpServerState) {\n    if (_httpServerState === newState) {\n      return;\n    }\n    _httpServerState = newState;\n    emitter.emit(\"httpServerState\", _httpServerState);\n  }\n\n  async function healthCheckLoop() {\n    let badStateCounter = 0;\n    while (currentHealthCheckAbort) {\n      currentHealthCheckAbort = new AbortController();\n      const timerTimeout = setTimeout(() => {\n        currentHealthCheckAbort?.abort();\n      }, 20000);\n      const abortSignal = currentHealthCheckAbort.signal;\n      await Promise.allSettled([\n        healthCheck(abortSignal).then((state) => {\n          if (_devState !== \"running\" || _setupState !== \"installed\") {\n            badStateCounter = 0;\n            setHttpServerState(\"stopped\");\n          } else if (state === \"error-5xx\" || state === \"error-fetch\") {\n            badStateCounter++;\n            if (badStateCounter > 2) {\n              setHttpServerState(state);\n            }\n          } else {\n            badStateCounter = 0;\n            setHttpServerState(state);\n          }\n        }),\n        new Promise<void>((resolve) => {\n          // at least wait 2 seconds to make sure the abort signal is set\n          let waitTime = 2500;\n          if (_httpServerState === \"ok-2xx\") {\n            waitTime = 6000;\n          } else if (_httpServerState === \"error-fetch\") {\n            waitTime = 1000;\n          } else if (_httpServerState === \"connecting\") {\n            waitTime = 100;\n          }\n          setTimeout(() => {\n            resolve();\n          }, waitTime);\n\n          // if the abort signal is set, resolve the promise\n          currentHealthCheckAbort?.signal.addEventListener(\n            \"abort\",\n            () => {\n              resolve();\n            },\n            { once: true },\n          );\n        }),\n      ]);\n      clearTimeout(timerTimeout);\n    }\n  }\n\n  async function healthCheck(\n    abortSignal: AbortSignal,\n  ): Promise<HttpServerState> {\n    // Skip health checks in native app mode\n    if (fusionConfig.nativeApp) {\n      return _devState === \"running\" ? \"ok-2xx\" : \"stopped\";\n    }\n\n    try {\n      if (_devState !== \"running\") {\n        return \"stopped\";\n      }\n      if (!serverUrl) {\n        return \"stopped\";\n      }\n      if (abortSignal.aborted) {\n        return \"connecting\";\n      }\n      if (_httpServerState === \"stopped\" || abortSignal.aborted) {\n        return \"connecting\";\n      }\n      if (!serverUrl) {\n        return \"stopped\";\n      }\n\n      // Use http/https modules instead of fetch to properly handle SSL certificates\n      const isHttps = serverUrl.protocol === \"https:\";\n      const requestModule = isHttps ? https : http;\n      const urlToCheck = serverUrl.href;\n\n      const result = await new Promise<{ status: number; body: string }>(\n        (resolve, reject) => {\n          // Set up abort handling before creating the request\n          const onAbort = () => {\n            req.destroy();\n            reject(new Error(\"AbortError\"));\n          };\n\n          if (abortSignal.aborted) {\n            reject(new Error(\"AbortError\"));\n            return;\n          }\n\n          abortSignal.addEventListener(\"abort\", onAbort);\n\n          const req = requestModule.get(\n            urlToCheck,\n            {\n              rejectUnauthorized: false, // Allow self-signed certificates in development\n              headers: {\n                /**\n                 * Since `http`/`https` modules are much more low-level than `fetch`,\n                 * We have to explicitly provide useful headers that fetch would set by default.\n                 */\n                accept: \"*/*\",\n                \"accept-language\": \"*\",\n                \"sec-fetch-mode\": \"cors\",\n                \"user-agent\": \"node\",\n                \"accept-encoding\": \"gzip, deflate\",\n              },\n            },\n            (res) => {\n              let body = \"\";\n              res.on(\"data\", (chunk) => {\n                body += chunk.toString();\n              });\n              res.on(\"end\", () => {\n                abortSignal.removeEventListener(\"abort\", onAbort);\n                resolve({ status: res.statusCode ?? 0, body });\n              });\n            },\n          );\n\n          req.on(\"error\", (err) => {\n            abortSignal.removeEventListener(\"abort\", onAbort);\n            reject(err);\n          });\n        },\n      );\n\n      if (abortSignal.aborted) {\n        return \"connecting\";\n      }\n      _lastServerStatus = result.status;\n      // Status code 0 means no valid HTTP response\n      if (result.status > 0 && result.status < 400) {\n        _lastServerBody = undefined;\n        return \"ok-2xx\";\n      } else if (result.status >= 400 && result.status < 500) {\n        _lastServerBody = result.body;\n        return \"error-4xx\";\n      } else if (result.status >= 500 && result.status < 600) {\n        _lastServerBody = result.body;\n        return \"error-5xx\";\n      }\n    } catch (err) {\n      _lastServerStatus = undefined;\n      if (\n        (err instanceof Error && err.message === \"AbortError\") ||\n        abortSignal.aborted\n      ) {\n        if (_httpServerState === \"ok-2xx\") {\n          return \"ok-2xx\";\n        }\n        return \"connecting\";\n      } else {\n        _lastServerBody = String(err);\n        return \"error-fetch\";\n      }\n    }\n    return \"connecting\";\n  }\n\n  function computedState(): DevServerState {\n    if (_devState === \"running\" || _devState === \"starting\") {\n      return \"running\";\n    } else {\n      if (_setupState === \"installed\") {\n        return _devState;\n      } else {\n        return _setupState;\n      }\n    }\n  }\n\n  function getEnvObject(includeSetupVars: boolean) {\n    const envVars = extraEnvVariables.reduce(\n      (acc, { key, value }) => {\n        acc[key] = value;\n        return acc;\n      },\n      {} as Record<string, string>,\n    );\n\n    if (includeSetupVars) {\n      return {\n        ...envVars,\n        ..._setupEnvVars,\n      };\n    }\n\n    return envVars;\n  }\n\n  function getSharedProcEnv(includeSetupVars: boolean): NodeJS.ProcessEnv {\n    return {\n      /**\n       * These come from the fusion config (inlined or file).\n       * We need to pass them when running `launch` in a local environment,\n       * since `process.env` will not have them.\n       */\n      ...fusionConfig.environmentVariables?.reduce<Record<string, string>>(\n        (acc, { key, value }) => {\n          acc[key] = value;\n          return acc;\n        },\n        {},\n      ),\n      ...process.env,\n      ...getEnvObject(includeSetupVars),\n    };\n  }\n\n  async function updateMiseToml(shell: string, includeEcho = false) {\n    try {\n      if (!miseLocationPath) {\n        return null;\n      }\n      const environment = process.env.FUSION_ENVIRONMENT;\n      let command = \"\";\n      const useCustomConfig = !!(\n        fusionConfig.workspace &&\n        fusionConfig.workingDirectory &&\n        environment !== \"cloud\"\n      );\n      const miseConfigLocation = useCustomConfig\n        ? `${sys.resolve(process.cwd(), fusionConfig.workingDirectory ?? \".\")}/mise.toml`\n        : \"/etc/mise/config.toml\";\n\n      const mise = setupDependencies?.filter((d) => d.type === \"mise\");\n      if (mise?.length) {\n        if (includeEcho) {\n          command += `printf '======== Install dependencies ========\\n\\n'\\n`;\n          command += `cat ${JSON.stringify(miseConfigLocation)}\\n`;\n        }\n        if (useCustomConfig) {\n          command += `${JSON.stringify(miseLocationPath)} trust ${JSON.stringify(miseConfigLocation)}\\n`;\n        }\n        command += `${JSON.stringify(miseLocationPath)} install\\n`;\n        if (shell.includes(\"fish\")) {\n          command += `${JSON.stringify(miseLocationPath)} activate fish | source\\n`;\n        } else {\n          command += `eval \"$(${JSON.stringify(miseLocationPath)} activate)\"\\n`;\n        }\n\n        const content = `[tools]\\n${mise.map((d) => `${d.tool} = '${d.version ?? \"latest\"}'`).join(\"\\n\")}\\n`;\n        await sys.writeFile(miseConfigLocation, content);\n        return command;\n      } else if (await sys.exists(miseConfigLocation)) {\n        // Delete file if there are no mise dependencies\n        await sys.unlink(miseConfigLocation);\n      }\n    } catch (err) {\n      sys.Sentry?.captureException(err);\n    }\n    return null;\n  }\n\n  function runSetupCommand(signal?: AbortSignal): Promise<SetupCommandResult> {\n    if (!setupPromise) {\n      const command = setupCommand?.trim();\n      _setupEnvVars = {};\n      if (!command) {\n        setSetupState(\"installed\");\n        return Promise.resolve({ code: 0, output: \"\" });\n      }\n      if (setupAbortController) {\n        setupAbortController.abort();\n      }\n      setSetupState(\"installing\");\n      const shell = process.env.SHELL || process.env.COMSPEC || \"/bin/sh\";\n      setupPromise = updateMiseToml(shell, true).then((miseCommand) => {\n        return new Promise<{\n          code: number | null;\n          output: string;\n          capturedEnv?: Record<string, string>;\n        }>((resolve) => {\n          setupAbortController = new AbortController();\n          setupOutputBuffer.clear();\n\n          let actualCommand = \"\";\n          if (miseCommand) {\n            actualCommand = miseCommand + \"\\n\";\n          }\n          actualCommand += `printf '\\n========= Run setup command ==========\\n\\n'\\n`;\n          actualCommand += command;\n\n          const envCollector = wrapCommandWithEnvCapture({\n            command: actualCommand,\n          });\n          actualCommand = envCollector.command;\n\n          const setupProc = safeSpawn(shell, actualCommand, {\n            stdio: [\"ignore\", \"pipe\", \"pipe\"],\n            cwd:\n              fusionConfig.bashWorkingDirectory ??\n              fusionConfig.workingDirectory,\n            env: {\n              ...getSharedProcEnv(false),\n            },\n          });\n          const anySignal = abortSignalAny([\n            signal,\n            setupAbortController.signal,\n          ]);\n          anySignal.addEventListener(\n            \"abort\",\n            () => {\n              killProcess(sys, setupProc).then(() => {\n                if (_setupState === \"installing\") {\n                  setSetupState(\"install-aborted\");\n                }\n                resolve({\n                  code: null,\n                  output: setupOutputBuffer.getContent(),\n                });\n              });\n            },\n            { once: true },\n          );\n\n          setupProc.on(\"error\", (_err) => {\n            setSetupState(\"install-failed\");\n            resolve({ code: null, output: setupOutputBuffer.getContent() });\n          });\n\n          setupProc.stdout.on(\"data\", (data) => {\n            const str = data.toString();\n            setupOutputBuffer.write(str);\n            emitter.emit(\"installStdout\", str);\n          });\n\n          setupProc.stderr.on(\"data\", (data) => {\n            const str = data.toString();\n            setupOutputBuffer.write(str);\n            emitter.emit(\"installStderr\", str);\n          });\n\n          setupProc.on(\"close\", async (code) => {\n            // Get captured environment (handles read, parse, and cleanup)\n            const capturedEnv = await envCollector.getCapturedEnv();\n\n            // Store captured environment variables if setup was successful\n            if (code === 0 && capturedEnv) {\n              _setupEnvVars = capturedEnv;\n            }\n\n            if (code === 0) {\n              setSetupState(\"installed\");\n            } else {\n              setSetupState(\"install-failed\");\n            }\n            if (typeof code === \"number\" && !anySignal?.aborted) {\n              emitter.emit(\"installStderr\", `\\n\\nexited with code ${code}\\n`);\n            }\n\n            resolve({\n              code,\n              output: setupOutputBuffer.getContent(),\n              capturedEnv,\n            });\n          });\n        }).then((value) => {\n          setupAbortController = undefined;\n          setupPromise = undefined;\n          return value;\n        });\n      });\n    }\n    return setupPromise;\n  }\n\n  async function ensureDevCommand(signal?: AbortSignal) {\n    if (computedState() === \"stopped\" || computedState() === \"failed\") {\n      try {\n        await restart(signal);\n        return true;\n      } catch (err) {\n        return false;\n      }\n    }\n    return false;\n  }\n\n  async function restart(abortSignal?: AbortSignal): Promise<DevCommandResult> {\n    const oldProc = devCommandProc;\n    devCommandProc = undefined;\n    // Reset auto-detected URL when restarting\n    _autoDetectedUrl = false;\n    await killProcess(sys, oldProc, abortSignal);\n    if (!devCommand) {\n      setDevState(\"unset\");\n      return {\n        status: \"failure\",\n        code: null,\n        output: \"DevCommand is not set\",\n      };\n    }\n    currentHealthCheckAbort?.abort();\n    setDevState(\"stopped\");\n    if (abortSignal?.aborted) {\n      return {\n        status: \"failure\",\n        code: null,\n        output: \"Aborted\",\n      };\n    }\n\n    if (_setupState !== \"installed\") {\n      return {\n        status: \"failure\",\n        code: null,\n        output: \"Setup command is not installed\",\n      };\n    }\n    const shell = process.env.SHELL || process.env.COMSPEC || \"/bin/sh\";\n\n    return updateMiseToml(shell).then((miseCommand) => {\n      return new Promise<DevCommandResult>((resolve) => {\n        if (abortSignal?.aborted) {\n          resolve({\n            status: \"failure\",\n            code: null,\n            output: \"Aborted\",\n          });\n        }\n        abortSignal?.addEventListener(\n          \"abort\",\n          () => {\n            resolve({\n              status: \"failure\",\n              code: null,\n              output: \"Aborted\",\n            });\n          },\n          { once: true },\n        );\n\n        let actualCommand = devCommand;\n        if (miseCommand) {\n          actualCommand = miseCommand + \"\\n\" + actualCommand;\n        }\n        // Create process based on configuration\n        const proc = createDevProcess({\n          runInPty: fusionConfig.runInPty,\n          command: actualCommand ?? \"\",\n          shell,\n          cwd:\n            fusionConfig.bashWorkingDirectory ?? fusionConfig.workingDirectory,\n          env: getSharedProcEnv(true),\n        });\n\n        devCommandProc = proc;\n        addCheckpoint();\n        let running = false;\n        proc.onSpawn(() => {\n          running = true;\n          setDevState(\"starting\");\n          waitUntilIdle().then(() => {\n            if (running) {\n              setDevState(\"running\");\n              currentHealthCheckAbort?.abort();\n              resolve({\n                status: \"success\",\n              });\n            }\n          });\n        });\n        proc.onError((err) => {\n          running = false;\n          setDevState(\"failed\");\n          sys.Sentry?.captureException(err);\n          resolve({\n            status: \"failure\",\n            code: null,\n            output: err.message,\n          });\n        });\n        proc.onClose((code) => {\n          running = false;\n          if (code === 0) {\n            setDevState(\"failed\");\n          } else {\n            setDevState(\"failed\");\n          }\n          if (typeof code === \"number\" && !abortSignal?.aborted) {\n            writeStdErr(`\\n\\nexited with code ${code}\\n`);\n          }\n          emitter.emit(\"close\", code);\n          resolve({\n            status: \"failure\",\n            code,\n            output: getCheckpoints(1, \"all\"),\n          });\n        });\n\n        const attemptAutoDetectDevServer = (str: string) => {\n          if (_autoDetectDevServer && !_autoDetectedUrl) {\n            const parsedOutput = parseDevServerOutput(\n              str,\n              _autoDetectDevServerPatterns,\n            );\n            if (parsedOutput) {\n              serverUrl = safeParseUrl(parsedOutput.url);\n              if (serverUrl) {\n                _autoDetectedUrl = true;\n                updateProxyMiddleware();\n                currentHealthCheckAbort?.abort();\n                log.info(`URL auto-detected: ${serverUrl.href}`);\n                emitter.emit(\"urlDetected\", serverUrl.href);\n              }\n            }\n          }\n        };\n\n        const writeStdOut = (str: string) => {\n          if (devCommandProc !== proc) {\n            return;\n          }\n          stdoutBuffer.write(str);\n          allOutputBuffer.write(str);\n          const lastCheckpoint = checkpoints[checkpoints.length - 1];\n          if (lastCheckpoint) {\n            lastCheckpoint.out.write(str);\n            lastCheckpoint.all.write(str);\n          }\n\n          attemptAutoDetectDevServer(str);\n\n          emitter.emit(\"stdout\", str);\n        };\n\n        const writeStdErr = (str: string) => {\n          if (devCommandProc !== proc) {\n            return;\n          }\n          stderrBuffer.write(str);\n          allOutputBuffer.write(str);\n          const lastCheckpoint = checkpoints[checkpoints.length - 1];\n          if (lastCheckpoint) {\n            lastCheckpoint.err.write(str);\n            lastCheckpoint.all.write(str);\n          }\n\n          // Auto-detect server URL if enabled (some servers output to stderr)\n          attemptAutoDetectDevServer(str);\n          emitter.emit(\"stderr\", str);\n        };\n\n        proc.stdout.on(\"data\", (data) => {\n          const str = data.toString();\n          writeStdOut(str);\n        });\n\n        proc.stderr.on(\"data\", (data) => {\n          const str = data.toString();\n          writeStdErr(str);\n        });\n      });\n    });\n  }\n\n  function createSpawnProcess({\n    command,\n    shell,\n    cwd,\n    env,\n  }: DevCommandProcessOptions): DevCommandProcess {\n    const childProc = safeSpawn(shell, command, {\n      stdio: [\"inherit\", \"pipe\", \"pipe\"],\n      cwd,\n      env: {\n        ...env,\n        NODE_ENV: \"development\",\n        TERM: \"dumb\",\n      },\n    });\n\n    return {\n      type: \"devCommandProcess\",\n      getPid: () => childProc.pid,\n      getExitCode: () => childProc.exitCode,\n      kill: (signal) => childProc.kill(signal),\n      onSpawn: (listener) => childProc.on(\"spawn\", listener),\n      onError: (listener) => childProc.on(\"error\", listener),\n      onClose: (listener) => childProc.on(\"close\", listener),\n      stdout: {\n        on: (event, callback) => childProc.stdout?.on(event, callback),\n      },\n      stderr: {\n        on: (event, callback) => childProc.stderr?.on(event, callback),\n      },\n      removeAllListeners: () => childProc.removeAllListeners(),\n    };\n  }\n\n  function createPtyProcess({\n    command,\n    shell,\n    cwd,\n    env,\n    pty,\n  }: DevCommandProcessOptions & {\n    pty: Pty;\n  }) {\n    const TERM = env.TERM || \"xterm-color\";\n\n    const ptyProcess = pty.spawn(\n      shell,\n      getCommandWithShellArgs(command, shell),\n      {\n        name: TERM,\n        cols: 80,\n        rows: 30,\n        cwd,\n        env: {\n          ...env,\n          TERM,\n        },\n      },\n    );\n\n    let _exitCode: number | null = null;\n    const devProcess: DevCommandProcess = {\n      type: \"devCommandProcess\",\n      getPid: () => ptyProcess.pid,\n      getExitCode: () => _exitCode,\n      kill: (signal) => {\n        try {\n          ptyProcess.kill(signal);\n          return true;\n        } catch (error) {\n          return false;\n        }\n      },\n      resize(cols, rows) {\n        ptyProcess.resize(cols ?? ptyProcess.cols, rows ?? ptyProcess.rows);\n      },\n      write(data) {\n        ptyProcess.write(data);\n      },\n      onSpawn: (listener) => {\n        setTimeout(() => listener(), 0);\n      },\n      onError: (listener) => {\n        ptyProcess.onExit((exitCode) => {\n          if (exitCode.exitCode !== 0) {\n            listener(\n              new Error(`Process exited with code ${exitCode.exitCode}`),\n            );\n          }\n        });\n      },\n      onClose: (listener) => {\n        ptyProcess.onExit((exitCode) => {\n          _exitCode = exitCode.exitCode;\n          listener(\n            exitCode.exitCode,\n            // TODO: convert number to corresponding signal\n            null,\n          );\n        });\n      },\n      stdout: {\n        on: (event, callback) => {\n          if (event === \"data\") {\n            ptyProcess.onData((data) => {\n              callback(Buffer.from(data));\n            });\n          }\n        },\n      },\n      stderr: {\n        on: (_event, _callback) => {\n          // PTY combines stdout and stderr\n          // We won't get separate stderr events\n        },\n      },\n      removeAllListeners: () => {\n        // No-op for PTY processes\n      },\n    };\n\n    return devProcess;\n  }\n\n  function createDevProcess({\n    runInPty,\n    ...options\n  }: DevCommandProcessOptions & { runInPty: boolean | undefined }) {\n    if (runInPty) {\n      const pty = importPty(sys);\n      if (pty) {\n        return createPtyProcess({ ...options, pty });\n      } else {\n        log.warn(\n          \"Could not import node-pty for interactive terminal mode. Falling back to normal process.\",\n        );\n        return createSpawnProcess({ ...options });\n      }\n    }\n    return createSpawnProcess({ ...options });\n  }\n\n  function getCheckpoints(n: number, mode: \"all\" | \"out\" | \"err\") {\n    return checkpoints\n      .slice(-n)\n      .map((c) => {\n        if (mode === \"all\") return c.all.getContent();\n        if (mode === \"out\") return c.out.getContent();\n        if (mode === \"err\") return c.err.getContent();\n        return \"\";\n      })\n      .join(\"\\n\");\n  }\n\n  updateProxyMiddleware();\n\n  // Apply file overrides from config before starting any processes\n  applyFileOverridesIfNeeded();\n\n  healthCheckLoop();\n  if (_setupState === \"installed\") {\n    restart();\n  }\n  return {\n    clearEnvVariables() {\n      extraEnvVariables = [];\n    },\n    setEnvVariable(key, value) {\n      const envIndex = extraEnvVariables.findIndex((env) => env.key === key);\n      const env = envIndex >= 0 ? extraEnvVariables[envIndex] : undefined;\n      if (env?.value === value) {\n        return false;\n      }\n      if (env && value === undefined) {\n        extraEnvVariables.splice(envIndex, 1);\n      } else if (env && value !== undefined) {\n        env.value = value;\n      } else if (value !== undefined) {\n        extraEnvVariables.push({ key, value, isSecret: false });\n      } else {\n        return false;\n      }\n      return true;\n    },\n    async setSetupCommand(opts) {\n      let newCommand =\n        opts.setupCommand === undefined\n          ? setupCommand\n          : opts.setupCommand || undefined;\n\n      let newSetupDependencies =\n        opts.setupDependencies === undefined\n          ? setupDependencies\n          : opts.setupDependencies || undefined;\n\n      if (fusionConfig._useNI) {\n        newCommand = safeReplaceNiCommand(\n          newCommand ?? \"\",\n          sys,\n          fusionConfig.workingDirectory,\n        );\n      }\n      let needToReInstall = false;\n      if (opts.forceRestart) {\n        needToReInstall = true;\n      }\n      if (setupCommand !== newCommand) {\n        needToReInstall = true;\n      }\n      if (\n        JSON.stringify(newSetupDependencies) !==\n        JSON.stringify(setupDependencies)\n      ) {\n        needToReInstall = true;\n      }\n      if (!needToReInstall) {\n        return null;\n      }\n      setupDependencies = newSetupDependencies;\n      setupCommand = newCommand;\n      if (_devState === \"running\") {\n        try {\n          const oldProc = devCommandProc;\n          devCommandProc = undefined;\n          await killProcess(sys, oldProc, opts.signal);\n          currentHealthCheckAbort?.abort();\n          if (devCommand) {\n            setDevState(\"stopped\");\n          } else {\n            setDevState(\"unset\");\n          }\n        } catch (err) {\n          sys.Sentry?.captureException(err);\n        }\n      }\n      return await runSetupCommand(opts.signal);\n    },\n    async runSetupCommand(signal?: AbortSignal) {\n      return await runSetupCommand(signal);\n    },\n    async ensureSetupCommand(signal?: AbortSignal) {\n      if (\n        _setupState === \"install-failed\" ||\n        _setupState === \"not-installed\" ||\n        _setupState === \"installing\"\n      ) {\n        await runSetupCommand(signal);\n      }\n      return _setupState === \"installed\";\n    },\n    get setupCommandPromise() {\n      return setupPromise;\n    },\n    abortSetupCommand() {\n      setupAbortController?.abort();\n    },\n    async setDevCommand(\n      newCommand: string | undefined,\n      forceRestart?: boolean,\n      signal?: AbortSignal,\n    ) {\n      if (devCommand === newCommand && !forceRestart) {\n        return {\n          status: \"success\",\n          code: null,\n          output: \"Same command, no restart\",\n        };\n      }\n      devCommand = newCommand;\n      return await restart(signal);\n    },\n    getOpenPorts,\n    async setProxyServer(newProxyServer: string | undefined) {\n      const newServerUrl = safeParseUrl(newProxyServer);\n      if (serverUrl?.href === newServerUrl?.href) {\n        return {\n          updatedProxyServer: false,\n          updatedHosts: false,\n        };\n      }\n      serverUrl = newServerUrl;\n      setHttpServerState(\"stopped\");\n      const updatedHosts = updateProxyMiddleware();\n      currentHealthCheckAbort?.abort();\n      return {\n        updatedProxyServer: true,\n        updatedHosts,\n      };\n    },\n    async setPort(newPort: number) {\n      if (Number(serverUrl?.port) === newPort) {\n        return false;\n      }\n      if (!serverUrl) {\n        serverUrl = new URL(`http://localhost:${newPort}`);\n      }\n      serverUrl.port = newPort.toString();\n      setHttpServerState(\"stopped\");\n      updateProxyMiddleware();\n      currentHealthCheckAbort?.abort();\n      return true;\n    },\n    async setAutoDetectSettings(enabled: boolean, patterns?: string[]) {\n      if (_autoDetectDevServer === enabled) {\n        return false;\n      }\n      _autoDetectDevServer = enabled;\n      if (patterns !== undefined) {\n        _autoDetectDevServerPatterns = patterns;\n      }\n      setHttpServerState(\"stopped\");\n      updateProxyMiddleware();\n      currentHealthCheckAbort?.abort();\n      _autoDetectedUrl = false;\n      if (_autoDetectDevServer && _devState === \"running\") {\n        await restart();\n      }\n\n      return true;\n    },\n    ensureDevCommand,\n    onClose(callback: (code: number | null) => void) {\n      emitter.on(\"close\", callback);\n    },\n    addCheckpoint: addCheckpoint,\n    emitter,\n    getCheckpoints,\n    getAllStdout() {\n      return stdoutBuffer.getContent();\n    },\n    getAllStderr() {\n      return stderrBuffer.getContent();\n    },\n    getOutput() {\n      return allOutputBuffer.getContent();\n    },\n    getSetupWrite() {\n      return setupOutputBuffer?.getWrite();\n    },\n    getDevWrite() {\n      return stdoutBuffer?.getWrite();\n    },\n    getSetupOutput() {\n      return setupOutputBuffer.getContent();\n    },\n    async getMiseActivationCommand(shell: string) {\n      return await updateMiseToml(shell);\n    },\n    async waitUntilIdle(initialWaitMs?: number, idleTimeMs?: number) {\n      return waitUntilIdle(initialWaitMs, idleTimeMs);\n    },\n    async restart(abortSignal) {\n      return restart(abortSignal);\n    },\n    get devCommandProcess() {\n      return devCommandProc;\n    },\n    get httpServerState() {\n      return _httpServerState;\n    },\n    get devCommand() {\n      return devCommand ?? \"\";\n    },\n    get proxyTarget() {\n      return serverUrl?.href;\n    },\n    get environmentVariables() {\n      return extraEnvVariables;\n    },\n    get envVars() {\n      return getEnvObject(true);\n    },\n    get proxyPort() {\n      if (serverUrl) {\n        if (serverUrl.protocol === \"https:\") {\n          return Number(serverUrl.port) || 443;\n        } else {\n          return Number(serverUrl.port) || 80;\n        }\n      }\n      return undefined;\n    },\n    get proxyMiddleware() {\n      return proxyMiddleware;\n    },\n    get setupCommand() {\n      return setupCommand;\n    },\n    get setupState() {\n      return _setupState;\n    },\n    get lastServerStatus() {\n      return _lastServerStatus;\n    },\n    get lastServerBody() {\n      return _lastServerBody;\n    },\n    get devState() {\n      return _devState;\n    },\n    get state() {\n      return computedState();\n    },\n    get pid() {\n      return devCommandProc?.getPid();\n    },\n    get autoDetectedUrl() {\n      return _autoDetectedUrl;\n    },\n    get autoDetectDevServer() {\n      return _autoDetectDevServer;\n    },\n    get autoDetectDevServerPatterns() {\n      return _autoDetectDevServerPatterns;\n    },\n    async close() {\n      try {\n        currentHealthCheckAbort?.abort();\n        setupAbortController?.abort();\n        currentHealthCheckAbort = undefined;\n        setupPromise = undefined;\n        setupAbortController = undefined;\n        setupCommand = undefined;\n        emitter.removeAllListeners();\n        const oldProc = devCommandProc;\n        devCommandProc = undefined;\n        await killProcess(sys, oldProc);\n        setupOutputBuffer.clear();\n        checkpoints = [];\n        stdoutBuffer.clear();\n        stderrBuffer.clear();\n        allOutputBuffer.clear();\n        // Cleanup temporary script files\n        cleanupTempFolder();\n      } catch (err) {\n        sys.Sentry?.captureException(err);\n      }\n    },\n  };\n}\n\nexport const checkPortsListenedByPid = (pid: number): number[] => {\n  try {\n    // Use lsof to find ports listened by the process on macOS/Linux\n    const output = execSync(\n      `parent=${pid}\n  pids=$(ps -e -o pid=,ppid= |\n         awk -v root=$parent '\n           {pt[$1]=$2}                       # pt[PID] = PPID\n           END {\n             for (p in pt) {\n               x=p\n               while (x && x!=root && pt[x]!=x) x=pt[x]   # walk up tree\n               if (x==root) print p\n             }\n           }')\n  lsof -Pan -p \"$parent,$(tr '\\n' , <<<\"$pids\")\" -iTCP -sTCP:LISTEN\n  `,\n      {\n        encoding: \"utf8\",\n        timeout: 5000,\n      },\n    );\n\n    // Parse the output to extract port numbers\n    const ports: number[] = [];\n    const lines = output.trim().split(\"\\n\");\n\n    for (const line of lines) {\n      if (line.trim()) {\n        // We're looking for the NAME column which contains the address:port\n        const parts = line.trim().split(/\\s+/);\n        if (parts.length >= 9) {\n          const name = parts[8]; // NAME column\n          const match = name.match(/:(\\d+)$/);\n          if (match) {\n            const port = parseInt(match[1], 10);\n            if (!ports.includes(port)) {\n              ports.push(port);\n            }\n          }\n        }\n      }\n    }\n    return ports;\n  } catch (error) {\n    // If command fails (process not found, lsof not available, etc.), return empty array\n    return [];\n  }\n};\n", "import type {\n  AccessResult,\n  BaseCodeGenPosition,\n  CodeGenPosition,\n  CodeGenToolMap,\n  CodeGenTools,\n  CodegenTurn,\n  ContentMessageItemToolResult,\n  FusionConfig,\n  GenerateCompletionStep,\n  Permission,\n  ProjectFile,\n  SetImportantFilesToolInput,\n  UserSource,\n  WorkspaceFolder,\n} from \"$/ai-utils\";\nimport { isCommandAllowed } from \"$/vcp-common/command-security\";\nimport {\n  validateCommandSecurity,\n  createSecurityConfig,\n} from \"$/vcp-common/command-security\";\nimport { truncateLines } from \"$/vcp-common/normalize-text\";\nimport { parseAndFilterRipgrepResults } from \"$/vcp-common/ripgrep-filter\";\nimport type { DevToolsSys } from \"../core\";\nimport { safeSpawn, trackedSpawn, killProcess } from \"./utils/process-tracker\";\nimport { renderFileTree } from \"$/vcp-common/file-tree\";\nimport { formatFileContent, getViewFileRange } from \"$/vcp-common/codegen\";\nimport { TerminalBuffer } from \"./utils/terminal-buffer\";\nimport { type DevServerOrchestrator } from \"./launch/dev-server-orchestrator\";\nimport type { CodeGenEventEmitter } from \"./codegen\";\nimport { CodeGenSession } from \"./codegen\";\nimport type { Credentials } from \"./credentials\";\nimport * as Sentry from \"@sentry/node\";\nimport { abortSignalAny } from \"./abort-signal-any\";\nimport { PrivateError } from \"../common/errors\";\nimport type { LocalMCPClientManager } from \"./mcp-local\";\n\nexport interface LLMToolCalls {\n  name: CodeGenTools;\n  input: Record<string, any>;\n  id: string;\n  abortController: AbortController;\n}\n\nexport interface ToolResolution {\n  toolResult: string;\n  isError: boolean;\n  title?: string;\n}\n\nexport interface FusionContext {\n  devServerOrchestrator?: DevServerOrchestrator;\n\n  // Fusion options\n  git: boolean;\n  gitRemote?: string;\n  gitAutoInit?: boolean;\n}\n\nexport interface ToolContext extends Partial<FusionContext> {\n  sys: DevToolsSys;\n  credentials: Credentials;\n  files: ProjectFile[];\n  user: UserSource;\n  position: CodeGenPosition;\n  emitter: CodeGenEventEmitter;\n  fusionConfig: FusionConfig | undefined;\n  canCollapseWorkspace: boolean;\n  signal: AbortSignal;\n  workingDirectory: string;\n  allowedCommands: RegExp[];\n  localMCPManager: LocalMCPClientManager | undefined;\n  getAllFiles: (options: {\n    getDotFiles?: boolean;\n    pattern?: string;\n  }) => Promise<string[]>;\n  restore: (options: {\n    location: \"before\" | \"after\";\n    predicate: (turn: CodegenTurn | null, index: number) => boolean;\n    dryRun?: boolean;\n    revert?: boolean;\n    forceReplay?: boolean;\n    debug?: string;\n  }) => Promise<{\n    undone: string[] | null;\n    message: string;\n  }>;\n  bashWorkingDirectory: string;\n  filterText: (text: string) => string;\n  resolveWorkspacePath: (\n    path: string,\n    forceWorkspace: boolean,\n  ) => { resolvedPath: string; workspaceFolder?: WorkspaceFolder };\n  absolutePathToWorkspaceUrl: (absolutePath: string) => string | undefined;\n  setHasPlanToApply: (value: boolean) => void;\n\n  // Multi-root workspace information\n  workspaceFolders: Array<{ path: string; name?: string }>;\n\n  patchFusionConfig: (patch: Partial<FusionConfig>) => void;\n  passThrough: (\n    toolCall: LLMToolCalls,\n    signal: AbortSignal,\n  ) => Promise<ToolResolution>;\n  // Workspace-aware file operations\n  readFile: (filePath: string) => Promise<string | null>;\n  writeFile: (\n    filePath: string,\n    content: string | Uint8Array,\n  ) => Promise<string | null>;\n  deleteFile: (filePath: string) => Promise<string | null>;\n  fileExists: (filePath: string) => Promise<{\n    absolutePath: string | undefined;\n    recommendedPath: string | undefined;\n    workspaceFolder: WorkspaceFolder | undefined;\n    virtual: boolean;\n  }>;\n  listDir: (dirPath: string) => Promise<string[]>;\n  evaluateAccess: (resource: string, permission: Permission) => AccessResult;\n  stat: (filePath: string) => Promise<{\n    isDirectory: () => boolean;\n    isFile: () => boolean;\n    size: number;\n  } | null>;\n}\n\nexport async function resolveToolCalls(\n  toolContext: ToolContext,\n  toolCalls: LLMToolCalls[],\n  existingToolResults: ContentMessageItemToolResult[] | undefined,\n  onStep: (step: GenerateCompletionStep) => void,\n): Promise<ContentMessageItemToolResult[]> {\n  const results: (\n    | ContentMessageItemToolResult\n    | Promise<ContentMessageItemToolResult>\n  )[] = [];\n\n  const addResult = (\n    result:\n      | Promise<ContentMessageItemToolResult>\n      | ContentMessageItemToolResult,\n  ) => {\n    const promise =\n      result instanceof Promise ? result : Promise.resolve(result);\n    results.push(promise);\n    promise\n      .then((result) => {\n        onStep({\n          type: \"tool_result\",\n          result,\n        });\n      })\n      .catch((err) => {\n        Sentry.captureException(\n          new Error(\"Unhandled tool call error\", { cause: err }),\n        );\n      });\n  };\n\n  for (const toolCall of toolCalls) {\n    const signal = abortSignalAny([\n      toolCall.abortController.signal,\n      toolContext.signal,\n    ]);\n    const existingToolResult = existingToolResults?.find(\n      (result) => result.tool_use_id === toolCall.id,\n    );\n    if (existingToolResult) {\n      results.push(existingToolResult);\n      continue;\n    }\n    if (signal.aborted) {\n      addResult({\n        type: \"tool_result\",\n        tool_use_id: toolCall.id,\n        tool_name: toolCall.name,\n        tool_input: JSON.stringify(toolCall.input),\n        content: \"Aborted by the user. So the task could not be completed.\",\n        is_error: true,\n        title: `Aborted by the user.`,\n      });\n    } else {\n      try {\n        const result = await callTool(toolCall, {\n          ...toolContext,\n          signal,\n        });\n        if (typeof result === \"function\") {\n          addResult(\n            result().then((result) => convertToToolResult(toolCall, result)),\n          );\n        } else {\n          addResult(convertToToolResult(toolCall, result));\n        }\n      } catch (error) {\n        addResult({\n          type: \"tool_result\",\n          tool_name: toolCall.name,\n          tool_input: JSON.stringify(toolCall.input),\n          tool_use_id: toolCall.id,\n          content: error instanceof Error ? error.message : \"Unknown error\",\n          is_error: true,\n          title: `Error calling tool \"${toolCall.name}\"`,\n        });\n      }\n    }\n  }\n  return Promise.all(results);\n}\n\nfunction convertToToolResult(\n  toolCall: LLMToolCalls,\n  result: ToolResolution,\n): ContentMessageItemToolResult {\n  return {\n    type: \"tool_result\",\n    tool_use_id: toolCall.id,\n    tool_name: toolCall.name,\n    tool_input: JSON.stringify(toolCall.input),\n    content: result.toolResult,\n    is_error: result.isError,\n    title: result.title,\n  } satisfies ContentMessageItemToolResult;\n}\n\nfunction callTool(\n  toolCall: LLMToolCalls,\n  toolContext: ToolContext,\n): Promise<ToolResolution> | (() => Promise<ToolResolution>) {\n  // Check if this is a local MCP tool (prefixed with mcp__)\n  if (toolCall.name.startsWith(\"mcp__\") && toolContext.localMCPManager) {\n    return handleLocalMCPTool(toolContext, toolCall);\n  }\n\n  switch (toolCall.name) {\n    case \"view_path\":\n      return viewPath(toolContext, toolCall.input as any);\n    case \"Write\":\n    case \"Edit\":\n    case \"MultiEdit\":\n      return handleBadWrite(toolContext, toolCall.input as any);\n    case \"Read\":\n      return readFile(toolContext, toolCall.input as any);\n    case \"LS\":\n      return listDir(toolContext, toolCall.input as any);\n    case \"glob_search\":\n    case \"Glob\":\n      return globSearch(toolContext, toolCall.input as any);\n    case \"grep_search\":\n    case \"Grep\":\n      return grepSearch(toolContext, toolCall.input as any);\n    case \"dev_server_control\":\n    case \"DevServerControl\":\n      return devServerControl(toolContext, toolCall.input as any);\n    case \"bash\":\n    case \"Bash\":\n      return bash(toolContext, toolCall.input as any, toolCall.id);\n    case \"powershell\":\n    case \"PowerShell\":\n      return powershell(toolContext, toolCall.input as any, toolCall.id);\n    case \"AskUserQuestion\":\n      return toolContext.passThrough(toolCall, toolContext.signal);\n    case \"Agent\":\n      return dispatchAgent(toolContext, toolCall.input as any, toolCall.id);\n    case \"Revert\":\n      return revertToCheckpoint(toolContext, toolCall.input as any);\n    case \"ExitPlanMode\":\n      return exitPlanMode(toolContext, toolCall.input as any);\n    default:\n      throw new Error(\"Unknown tool call. Do not use this tool anymore.\");\n  }\n}\n\nasync function handleLocalMCPTool(\n  { localMCPManager, signal }: ToolContext,\n  toolCall: LLMToolCalls,\n): Promise<ToolResolution> {\n  if (!localMCPManager) {\n    return {\n      isError: true,\n      toolResult: `Local MCP tool \"${toolCall.name}\" not available`,\n      title: \"Local MCP Tool Error\",\n    };\n  }\n\n  try {\n    const result = await localMCPManager.callTool(\n      toolCall.name,\n      toolCall.input,\n      signal,\n    );\n\n    // Convert MCP result to ToolResolution\n    const textContent = result.content\n      .filter((c) => c.type === \"text\" && c.text)\n      .map((c) => c.text)\n      .join(\"\\n\");\n\n    return {\n      isError: result.isError ?? false,\n      toolResult: textContent || \"No output from MCP tool\",\n      title: `Local MCP: ${toolCall.name}`,\n    };\n  } catch (error) {\n    return {\n      isError: true,\n      toolResult: error instanceof Error ? error.message : \"Unknown error\",\n      title: `Local MCP Tool Error: ${toolCall.name}`,\n    };\n  }\n}\n\nasync function handleBadWrite(\n  { fileExists, evaluateAccess }: ToolContext,\n  input:\n    | CodeGenToolMap[\"Write\"]\n    | CodeGenToolMap[\"Edit\"]\n    | CodeGenToolMap[\"MultiEdit\"],\n): Promise<ToolResolution> {\n  const { file_path } = input;\n  if (!file_path) {\n    return {\n      isError: true,\n      toolResult: \"No file path provided\",\n    };\n  }\n  const fileStat = await fileExists(file_path);\n  if (fileStat.recommendedPath) {\n    return {\n      isError: true,\n      toolResult: `File not found: ${file_path}, use \"${fileStat.recommendedPath}\" instead.`,\n    };\n  }\n  const accessResult = evaluateAccess(file_path, \"write\");\n  if (!accessResult.allowed) {\n    return {\n      isError: true,\n      toolResult: `ACL policy violation when writing to ${file_path}.\\n${accessResult.message}`,\n    };\n  }\n  return {\n    isError: true,\n    toolResult: `ACL policy violation. You do not have permission to write to ${file_path}.`,\n  };\n}\n\nasync function revertToCheckpoint(\n  toolContext: ToolContext,\n  { checkpoint_id }: CodeGenToolMap[\"Revert\"],\n): Promise<ToolResolution> {\n  if (!checkpoint_id) {\n    return {\n      isError: true,\n      toolResult: \"No checkpoint_id provided\",\n      title: \"Revert failed\",\n    };\n  }\n  const restored = await toolContext.restore({\n    location: \"before\",\n    predicate: (turn) => turn?.completionId.startsWith(checkpoint_id) ?? false,\n    revert: true,\n    dryRun: false,\n    forceReplay: false,\n  });\n  if (restored.undone) {\n    return {\n      isError: false,\n      toolResult: `Reverted to checkpoint ${checkpoint_id} successfully`,\n      title: \"Reverted to checkpoint\",\n    };\n  }\n  return {\n    isError: true,\n    toolResult: `Failed to revert to checkpoint ${checkpoint_id}. ${restored.message}`,\n    title: \"Revert failed\",\n  };\n}\n\nasync function devServerControl(\n  {\n    devServerOrchestrator,\n    patchFusionConfig,\n    emitter,\n    signal,\n    user,\n  }: ToolContext,\n  {\n    restart,\n    get_logs,\n    set_proxy_port,\n    set_dev_command,\n    set_and_run_setup_command,\n    set_env_variable,\n  }: CodeGenToolMap[\"DevServerControl\"],\n): Promise<ToolResolution> {\n  const NOT_ALLOWED =\n    \"You do not have permission to change settings (e.g. environment variables, dev server command, etc). Do not try to workaround this limitation. Communicate to the user that this task is not possible.\";\n  if (!devServerOrchestrator) {\n    return {\n      isError: true,\n      toolResult:\n        \"Seems like the 'DevServerControl' tool is not available. Please suggest the user to either restore or try to fix the issue themself.\",\n      title: \"Getting debug output\",\n    };\n  }\n  let didRestart = false;\n  let initial = \"\";\n  if (set_env_variable) {\n    if (\n      user.permissions &&\n      !user.permissions.includes(\"modifyProjectSettings\")\n    ) {\n      return {\n        isError: true,\n        toolResult: NOT_ALLOWED,\n        title: \"Changing project setting not allowed\",\n      };\n    }\n    const [key, value] = set_env_variable;\n    devServerOrchestrator.setEnvVariable(key, value);\n    patchFusionConfig({\n      envVariables: {\n        [key]: value,\n      },\n    });\n    return {\n      isError: false,\n      toolResult: `Environment variable \"${set_env_variable[0]}\" was set to \"${set_env_variable[1]}\".\n  \nIf this environment variable is expected to be used by the \"set_dev_command\", a restart is required to take effect.`,\n      title: \"Environment variable set\",\n    };\n  }\n  if (set_and_run_setup_command) {\n    if (\n      user.permissions &&\n      !user.permissions.includes(\"modifyProjectSettings\")\n    ) {\n      return {\n        isError: true,\n        toolResult: NOT_ALLOWED,\n        title: \"Changing project setting not allowed\",\n      };\n    }\n    const output = await devServerOrchestrator.setSetupCommand({\n      setupCommand: set_and_run_setup_command,\n      forceRestart: true,\n      signal,\n    });\n    const isError = output?.code !== 0;\n    let toolResult = output?.output ?? \"Setup command was not updated\";\n    if (isError) {\n      toolResult += ` exited with code ${output?.code}`;\n    } else {\n      patchFusionConfig({\n        setupCommand: set_and_run_setup_command,\n      });\n    }\n    return {\n      isError,\n      toolResult,\n      title: \"Setup command output\",\n    };\n  }\n\n  if (set_dev_command) {\n    if (\n      user.permissions &&\n      !user.permissions.includes(\"modifyProjectSettings\")\n    ) {\n      return {\n        isError: true,\n        toolResult: NOT_ALLOWED,\n        title: \"Changing project setting not allowed\",\n      };\n    }\n    const success = await devServerOrchestrator.setDevCommand(\n      set_dev_command,\n      false,\n      signal,\n    );\n    if (success) {\n      patchFusionConfig({\n        devCommand: set_dev_command,\n      });\n      didRestart = true;\n    }\n  }\n\n  // If the dev server is idle, it means the dev_command was never set\n  if (devServerOrchestrator.state === \"unset\") {\n    return {\n      isError: true,\n      title: \"Dev server is not configured\",\n      toolResult:\n        \"Dev server process is unset, please call the tool again with a set_dev_command to provide a valid dev server command.\",\n    };\n  }\n\n  if (set_proxy_port) {\n    if (\n      user.permissions &&\n      !user.permissions.includes(\"modifyProjectSettings\")\n    ) {\n      return {\n        isError: true,\n        toolResult: NOT_ALLOWED,\n        title: \"Changing project setting not allowed\",\n      };\n    }\n    const previousPort = devServerOrchestrator.proxyPort;\n    await devServerOrchestrator.setPort(set_proxy_port);\n    patchFusionConfig({\n      serverUrl: devServerOrchestrator.proxyTarget,\n    });\n    initial += `Dev server proxy port was set to \"${set_proxy_port}\" successfully! (previous port: \"${previousPort}\")\\n`;\n    initial += `  - The new proxy target is: ${devServerOrchestrator.proxyTarget}\\n`;\n  }\n\n  if (!didRestart && restart) {\n    await devServerOrchestrator.restart(signal);\n    didRestart = true;\n  }\n\n  if (didRestart || set_proxy_port) {\n    emitter.emit(\"step\", {\n      type: \"builder-action\",\n      action: \"refresh\",\n      metadata: {},\n    });\n  }\n\n  const statusMessage = `\nSTATUS:\n  The setupCommand is: \"${devServerOrchestrator.setupCommand}\" [state=${devServerOrchestrator.setupState}]\n  The proxy_server is: ${devServerOrchestrator.proxyTarget} [state=${devServerOrchestrator.httpServerState}]\n  The dev_command is: \"${devServerOrchestrator.devCommand}\" [state=${devServerOrchestrator.devState}]\n`;\n\n  if (didRestart) {\n    const ports = await devServerOrchestrator.getOpenPorts();\n    if (set_dev_command) {\n      initial += `Dev server command was updated to \"${set_dev_command}\"`;\n    } else {\n      initial += \"Dev server restarted\";\n    }\n    if (devServerOrchestrator.state === \"running\") {\n      initial += \" and running\";\n      if (ports.length > 0) {\n        initial += ` (open http ports: ${ports.join(\", \")})`;\n      }\n    } else {\n      initial += \" and failed\";\n    }\n\n    return {\n      isError: devServerOrchestrator.state !== \"running\",\n      toolResult: `\n${initial}\n${statusMessage}\n<initial_logs>\n${devServerOrchestrator.getCheckpoints(1, \"all\")}\n</initial_logs>`.trim(),\n      title: \"Dev server restarted\",\n    };\n  }\n\n  const isRunning = devServerOrchestrator.state === \"running\";\n  const logsMessage = get_logs\n    ? `<logs devCommand=${JSON.stringify(devServerOrchestrator.devCommand)}>\n${devServerOrchestrator.getCheckpoints(2, \"all\")}\n${!isRunning ? \"existed with 1 code\" : \"\"}\n</logs>`\n    : \"\";\n\n  const toolResult = `\n${statusMessage}\n${logsMessage}\n`.trim();\n  return {\n    isError: !isRunning,\n    toolResult,\n    title: \"Dev server logs\",\n  };\n}\n\nasync function viewPath(\n  { readFile, stat, listDir, files }: ToolContext,\n  { file_path, view_range }: CodeGenToolMap[\"view_path\"],\n): Promise<ToolResolution> {\n  let title = `Read path \"${file_path}\"`;\n\n  try {\n    // Use the required workspace-aware stat method\n    const fileStats = await stat(file_path);\n    if (!fileStats) {\n      throw new Error(`File or directory not found: ${file_path}`);\n    }\n\n    if (fileStats.isFile()) {\n      title = `Read file \"${file_path}\"`;\n      if (view_range) {\n        title += ` (lines ${view_range[0]} to ${view_range[1]})`;\n      }\n\n      // Use the required workspace-aware readFile method\n      const fileContent = await readFile(file_path);\n      if (fileContent === null) {\n        throw new Error(`File not found: ${file_path}`);\n      }\n\n      const answer = getViewFileRange(file_path, fileContent, view_range);\n\n      files.push({\n        filePath: file_path,\n        content: fileContent,\n        importance: 0.1,\n        wasIncluded: true,\n      });\n\n      return {\n        isError: false,\n        toolResult: answer,\n        title,\n      };\n    } else if (fileStats.isDirectory()) {\n      title = `Listing directory \"${file_path}\"`;\n\n      // Use the required workspace-aware listDir method\n      const dirFiles = await listDir(file_path);\n\n      return {\n        isError: false,\n        toolResult: renderFileTree({\n          paths: dirFiles,\n          maxFilesPerDir: 400,\n          maxDepth: 2,\n        }),\n        title,\n      };\n    } else {\n      throw new Error(\"Unknown file type\");\n    }\n  } catch (error) {\n    return {\n      isError: true,\n      toolResult: error instanceof Error ? error.message : String(error),\n      title,\n    };\n  }\n}\n\nasync function readFile(\n  { listDir, fileExists, readFile, stat, files }: ToolContext,\n  { file_path, offset, limit }: CodeGenToolMap[\"view_path\"],\n): Promise<ToolResolution> {\n  let title = `Read file \"${file_path}\"`;\n  const includeLineNumbers =\n    typeof offset === \"number\" || typeof limit === \"number\";\n\n  offset = offset ?? 0;\n  limit = limit ?? 1500;\n  if (offset > 0 || limit !== 1500) {\n    title += ` (offset: ${offset}, limit: ${limit})`;\n  }\n\n  if (!file_path) {\n    return {\n      isError: true,\n      toolResult: \"No file path provided\",\n      title: \"Read file\",\n    };\n  }\n\n  try {\n    const fileStat = await fileExists(file_path);\n    if (fileStat.recommendedPath) {\n      return {\n        isError: false,\n        toolResult: `File not found: ${file_path}, use \"${fileStat.recommendedPath}\" instead.`,\n        title,\n      };\n    }\n\n    // Use the workspace-aware stat method to check if file exists\n    const fileStats = await stat(file_path);\n    if (!fileStats) {\n      throw new Error(`File or directory not found: ${file_path}`);\n    }\n\n    if (!fileStats.isFile()) {\n      // Use the workspace-aware listDir method\n      const dirFiles = await listDir(file_path);\n      const toolResult = `${file_path.endsWith(\"/\") ? file_path : file_path + \"/\"}\n${dirFiles.map((file) => `  ${file}`).join(\"\\n\")}\n\nNote: It's recommended to use the \"Glob\" tool to search for files, since it's recursive and support glob patterns.`;\n\n      return {\n        isError: false,\n        toolResult,\n        title,\n      };\n    }\n\n    if (fileStats.size > 1024 * 1024 * 1.2) {\n      return {\n        isError: true,\n        toolResult: `File is too large: ${file_path} (size: ${fileStats.size} bytes). Files this big can not be read (ACL). Do not attempt to read it.`,\n        title,\n      };\n    }\n\n    // Use the workspace-aware readFile method\n    const fileContent = await readFile(file_path);\n    if (fileContent === null) {\n      throw new Error(`File not found: ${file_path}`);\n    }\n\n    // Handle empty file case\n    if (fileContent.trim() === \"\") {\n      return {\n        isError: false,\n        toolResult: \"WARNING: File exists but has empty contents.\",\n        title,\n      };\n    }\n\n    const result = formatFileContent(\n      fileContent,\n      offset,\n      limit,\n      includeLineNumbers,\n    );\n\n    // Add file to files array for tracking\n    files.push({\n      filePath: file_path,\n      content: fileContent,\n      importance: 0.1,\n      wasIncluded: true,\n    });\n\n    return {\n      isError: false,\n      toolResult: result,\n      title,\n    };\n  } catch (error) {\n    return {\n      isError: true,\n      toolResult: error instanceof Error ? error.message : String(error),\n      title,\n    };\n  }\n}\n\nasync function listDir(\n  { listDir, stat }: ToolContext,\n  { path }: CodeGenToolMap[\"LS\"],\n): Promise<ToolResolution> {\n  if (!path) {\n    return {\n      isError: true,\n      toolResult: \"No path provided\",\n      title: \"List directory\",\n    };\n  }\n  const fileStats = await stat(path);\n  if (!fileStats) {\n    return {\n      isError: true,\n      toolResult: `File or directory not found: ${path}`,\n      title: \"List directory\",\n    };\n  }\n  if (!fileStats.isDirectory()) {\n    return {\n      isError: true,\n      toolResult: `Path is not a directory: ${path}`,\n      title: \"List directory\",\n    };\n  }\n  let files = await listDir(path);\n  if (files.length === 0) {\n    return {\n      isError: false,\n      toolResult: `The directory is empty`,\n      title: \"List directory\",\n    };\n  }\n\n  return {\n    isError: false,\n    toolResult: files.join(\"\\n\"),\n    title: `Files in \"${path}\"`,\n  };\n}\nasync function globSearch(\n  { getAllFiles }: ToolContext,\n  { pattern }: CodeGenToolMap[\"Glob\"],\n): Promise<ToolResolution> {\n  // If we have workspace folders, search in each workspace folder\n  let files = await getAllFiles({\n    pattern,\n  });\n\n  if (files.length > 0) {\n    if (files.length > 200) {\n      const totalMatches = files.length;\n\n      const firstFiles = files.slice(0, 100);\n      const lastFiles = files.slice(-100);\n\n      files = [\n        ...firstFiles,\n        `...`,\n        ...lastFiles,\n        \"\",\n        `List truncated, too many matches (${totalMatches}). Please narrow down the search.`,\n      ];\n    }\n    return {\n      isError: false,\n      toolResult: files.join(\"\\n\"),\n      title: `Files matching \"${pattern}\" across workspaces`,\n    };\n  } else {\n    return {\n      isError: true,\n      toolResult: `No files found matching glob pattern \"${pattern}\". Maybe use the \"LS\" tool to manually list all files`,\n      title: \"Glob search\",\n    };\n  }\n}\n\nasync function exitPlanMode(\n  toolContext: ToolContext,\n  { plan }: CodeGenToolMap[\"ExitPlanMode\"],\n): Promise<ToolResolution> {\n  if (!plan) {\n    return {\n      isError: true,\n      toolResult: \"ExitPlanMode tool requires a plan parameter\",\n      title: \"Exit Plan Mode\",\n    };\n  }\n\n  // Set the flag to indicate a plan is ready for approval\n  toolContext.setHasPlanToApply(true);\n\n  return {\n    isError: false,\n    toolResult: `Plan has been presented to the user. Waiting for user approval to proceed with implementation. Do not communicate anything to the user after using this tool, just acknowledge that the plan has been presented.`,\n    title: \"Plan presented\",\n  };\n}\n\ninterface RipgrepMatch {\n  path: string;\n  lineNumber: number;\n  lineContent: string;\n}\n\ninterface RipgrepResult {\n  matches: RipgrepMatch[];\n}\n\nexport async function runRipgrep(\n  sys: DevToolsSys,\n  bashWorkingDirectory: string,\n  pattern: string,\n  includeGlob?: string,\n  excludeGlob?: string,\n): Promise<RipgrepResult> {\n  const rgPath = await getRipgrepExecutable(sys);\n  const args = [\"--path-separator\", \"/\", \"--json\", \"--max-columns\", \"200\"];\n\n  if (includeGlob) {\n    args.push(\"--glob\", includeGlob);\n  }\n  if (excludeGlob) {\n    args.push(\"--glob\", `!${excludeGlob}`);\n  }\n\n  args.push(\"--\", pattern);\n\n  return new Promise((resolve) => {\n    const child = trackedSpawn({\n      command: rgPath,\n      args,\n      options: {\n        env: process.env,\n        cwd: bashWorkingDirectory,\n        stdio: [\"ignore\", \"pipe\", \"pipe\"],\n      },\n    });\n    const outputBuffer = new TerminalBuffer(10000);\n\n    child.stdout.on(\"data\", (data) => {\n      outputBuffer.write(data.toString());\n    });\n\n    child.on(\"error\", () => {\n      resolve({ matches: [] });\n    });\n\n    child.on(\"close\", (code) => {\n      if (code !== 0) {\n        resolve({ matches: [] });\n      } else {\n        const matches: RipgrepMatch[] = [];\n        const output = outputBuffer.getContent();\n        const lines = output.split(\"\\n\");\n        for (const line of lines) {\n          if (line.trim()) {\n            try {\n              const jsonLine = JSON.parse(line);\n              if (jsonLine.type === \"match\") {\n                matches.push({\n                  path: jsonLine.data.path.text,\n                  lineNumber: jsonLine.data.line_number,\n                  lineContent: jsonLine.data.lines.text,\n                });\n              }\n            } catch (error) {\n              continue;\n            }\n          }\n        }\n\n        resolve({ matches });\n      }\n    });\n  });\n}\n\nasync function getRipgrepExecutable(sys: DevToolsSys) {\n  const { rgPath } = await import(\"@lvce-editor/ripgrep\");\n  if (sys.existsSync(rgPath)) {\n    return rgPath;\n  }\n  return \"rg\";\n}\n\nconst EXCLUDE = [\n  // \u2500\u2500 Core VCS / editor cruft \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \"!**/.git/**\",\n  \"!**/.hg/**\",\n  \"!**/.svn/**\",\n  \"!**/.DS_Store\",\n  \"!**/.idea/**\",\n  \"!**/.vscode/**\",\n  \"!**/.cache/**\",\n  \"!**/coverage/**\",\n\n  // \u2500\u2500 JavaScript / TypeScript front-end builds \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \"!**/node_modules/**\",\n  \"!**/dist/**\",\n  \"!**/*.tsbuildinfo\",\n  \"!**/package-lock.json\",\n  \"!**/yarn.lock\",\n  \"!**/pnpm-lock.yaml\",\n  \"!**/*.min.js\",\n  \"!**/*.min.css\",\n  \"!**/*.bundle.js\",\n  \"!**/*.chunk.js\",\n  \"!**/builder-registry.*\",\n  \"!**/*.bundle.css\",\n  \"!**/*.map\",\n\n  // \u2500\u2500 Generated / compiled artifacts across languages \u2500\u2500\u2500\u2500\u2500\u2500\n  \"!**/vendor/**\", // Go / PHP vendoring\n  \"!**/target/**\", // Rust\n  \"!**/__pycache__/**\",\n  \"!**/*.pyc\",\n  \"!**/*.pyo\",\n  \"!**/*.class\", // Java / Kotlin\n  \"!**/*.jar\",\n  \"!**/build/**/*.gradle\",\n  \"!**/*.lock\",\n  \"!**/*.log\",\n\n  // \u2500\u2500 Native & object files \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \"!**/*.o\",\n  \"!**/*.a\",\n  \"!**/*.so\",\n  \"!**/*.dylib\",\n  \"!**/*.dll\",\n  \"!**/*.exe\",\n\n  // \u2500\u2500 Archives & binary assets \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \"!**/*.zip\",\n  \"!**/*.tar\",\n  \"!**/*.tar.gz\",\n  \"!**/*.tgz\",\n  \"!**/*.7z\",\n  \"!**/*.rar\",\n  \"!**/*.png\",\n  \"!**/*.jpg\",\n  \"!**/*.jpeg\",\n  \"!**/*.gif\",\n  \"!**/*.svg\",\n  \"!**/*.ico\",\n  \"!**/*.webp\",\n  \"!**/*.mp4\",\n  \"!**/*.mp3\",\n];\n\n/**\n * Returns true if query is likely a string literal rather than a regex.\n * Returns false otherwise.\n * This is intended to ensure that queries such as \"import {\" do not get\n * interpreted as invalid regex values by ripgrep.\n * @param query - The query to check\n */\nexport const isLikelyFixedString = (query: string): boolean => {\n  const specialOpeningChars = [\"{\", \"(\", \"[\"];\n  const specialClosingChars = [\"}\", \")\", \"]\"];\n  const openingChars = [];\n  const closingChars = [];\n\n  const closingCharsMap: Map<string, string> = new Map([\n    [\"{\", \"}\"],\n    [\"(\", \")\"],\n    [\"[\", \"]\"],\n  ]);\n\n  for (let i = 0; i <= query.length - 1; i++) {\n    const char = query[i];\n\n    // Skip characters that are manually escaped\n    // but make sure the escape isn't itself escaped\n    if (query[i - 1] === \"\\\\\" && query[i - 2] !== \"\\\\\") {\n      continue;\n    }\n\n    if (specialOpeningChars.includes(char)) {\n      openingChars.push({ location: i, value: char });\n    } else if (specialClosingChars.includes(char)) {\n      closingChars.push({ location: i, value: char });\n    }\n  }\n\n  for (const openingChar of openingChars) {\n    const { location, value } = openingChar;\n\n    const index = closingChars.findIndex(\n      (c) => c.location > location && c.value === closingCharsMap.get(value),\n    );\n    if (index > -1) {\n      closingChars.splice(index, 1);\n    } else {\n      return true;\n    }\n  }\n\n  return closingChars.length > 0;\n};\n\nasync function grepSearch(\n  toolContext: ToolContext,\n  input: CodeGenToolMap[\"grep_search\"],\n): Promise<ToolResolution> {\n  const { signal, bashWorkingDirectory, sys, filterText, fusionConfig, user } =\n    toolContext;\n  const rgPath = await getRipgrepExecutable(sys);\n  const args = [\n    \"--path-separator\",\n    \"/\",\n    \"-A\",\n    \"1\",\n    \"-B\",\n    \"1\",\n    \"--max-columns\",\n    \"300\",\n    \"--json\",\n    \"--multiline\",\n    \"--multiline-dotall\",\n    \"--line-number\",\n    \"-i\",\n  ];\n\n  let workingDirectory = bashWorkingDirectory;\n  let title = `Grepping codebase with \"${input.query}\"`;\n  let globContext = \"\";\n  if (input.include_glob) {\n    globContext += ` (including: ${input.include_glob})`;\n  }\n  if (input.exclude_glob) {\n    globContext += ` (excluding: ${input.exclude_glob})`;\n    args.push(\"--glob\", `!${input.exclude_glob}`);\n  }\n  EXCLUDE.forEach((glob) => {\n    args.push(\"--glob\", glob);\n  });\n  title += globContext;\n\n  if (isLikelyFixedString(input.query)) {\n    // forces ripgrep to interpret query as a string literal instead of a regex\n    args.push(\"--fixed-strings\");\n  }\n\n  args.push(\"--\", input.query);\n\n  // If no workspace folders, just search the working directory\n  const result = await executeRipgrepAndGetResult(\n    rgPath,\n    args,\n    workingDirectory,\n    signal,\n    input.query,\n    globContext,\n    title,\n  );\n\n  // Always apply JSON parsing and ACL filtering (if no ACL policy, nothing gets filtered)\n  if (!result.isError && result.toolResult) {\n    try {\n      const filteredResults = parseAndFilterRipgrepResults(\n        result.toolResult,\n        fusionConfig?.accessControl,\n        user.principals,\n        input.include_glob ?? undefined,\n      );\n\n      if (!filteredResults) {\n        if (input.include_glob) {\n          const result = await globSearch(toolContext, {\n            pattern: input.include_glob,\n          });\n          if (result.isError) {\n            const alternative = input.include_glob.startsWith(\"**/\")\n              ? `Try a wider Grep without include_glob.`\n              : `Try a wider Grep with **/${input.include_glob}`;\n            return {\n              isError: true,\n              toolResult: `Zero files read, include_glob: \"${input.include_glob}\" is too restrictive. ${alternative}`,\n              title: result.title,\n            };\n          } else {\n            return {\n              isError: true,\n              toolResult: `No matches found for pattern: \"${input.query}\" ${globContext || \"\"}`,\n              title: result.title,\n            };\n          }\n        }\n        return {\n          isError: true,\n          toolResult: `No matches found for pattern: \"${input.query}\" ${globContext || \"\"}`,\n          title: result.title,\n        };\n      } else {\n        return {\n          ...result,\n          toolResult: truncateLines(filterText(filteredResults), 200, 300),\n        };\n      }\n    } catch (error) {\n      return {\n        isError: true,\n        toolResult: `Error processing search results: ${error instanceof Error ? error.message : String(error)}`,\n        title: result.title,\n      };\n    }\n  }\n\n  return result;\n}\n\n// Helper function to execute ripgrep and format the result as a ToolResolution\nasync function executeRipgrepAndGetResult(\n  rgPath: string,\n  args: string[],\n  cwd: string,\n  signal?: AbortSignal,\n  query?: string,\n  globContext?: string,\n  title?: string,\n): Promise<ToolResolution> {\n  return new Promise((resolve) => {\n    const outputBuffer = new TerminalBuffer(10000);\n    const child = trackedSpawn({\n      command: rgPath,\n      args,\n      options: {\n        env: process.env,\n        cwd,\n        stdio: [\"ignore\", \"pipe\", \"pipe\"],\n        signal,\n      },\n    });\n\n    child.stdout.on(\"data\", (data) => {\n      outputBuffer.write(data.toString());\n    });\n\n    child.stderr.on(\"data\", (data) => {\n      outputBuffer.write(data.toString());\n    });\n\n    child.on(\"error\", (error) => {\n      resolve({\n        isError: true,\n        toolResult: `Failed to start ripgrep process: ${error.message}`,\n        title: title,\n      });\n    });\n\n    child.on(\"close\", (code) => {\n      const output = outputBuffer.getContent();\n      if (code == null) {\n        resolve({\n          isError: true,\n          toolResult: `The process was aborted while grepping for pattern: \"${query}\" ${globContext || \"\"}`,\n          title: title,\n        });\n      } else if (code === 0) {\n        resolve({\n          isError: false,\n          toolResult: output,\n          title: title,\n        });\n      } else if (code === 1) {\n        resolve({\n          isError: true,\n          toolResult: `No matches found for pattern: \"${query}\" ${globContext || \"\"}`,\n          title: title,\n        });\n      } else {\n        Sentry.captureException(\n          new PrivateError(\"Fatal ripgrep error\", {\n            cause: new PrivateError(output),\n          }),\n          {\n            contexts: {\n              ripgrep: {\n                exitCode: code,\n                cwd,\n                rgPath,\n                args,\n              },\n            },\n          },\n        );\n        resolve({\n          isError: true,\n          toolResult: `There was a fatal error when grepping for pattern: \"${query}\"\\n\\n${output}\\n(remember it needs to be a string encoded regex)`,\n          title: title,\n        });\n      }\n    });\n  });\n}\n\nfunction isInstallCommand(command: string) {\n  return (\n    command.includes(\"npm i\") ||\n    command === \"yarn\" ||\n    command.includes(\"pnpm i\")\n  );\n}\n\nasync function executeShellCommand(\n  toolContext: ToolContext,\n  command: string,\n  timeout: number | null | undefined,\n  toolId: string,\n  shellType: \"bash\" | \"powershell\",\n): Promise<ToolResolution> {\n  const {\n    sys,\n    signal,\n    allowedCommands,\n    bashWorkingDirectory,\n    emitter,\n    devServerOrchestrator,\n    filterText,\n  } = toolContext;\n\n  const shellName = shellType === \"bash\" ? \"Bash\" : \"PowerShell\";\n\n  const timeoutSignal = timeout ? AbortSignal.timeout(timeout) : undefined;\n  const composedSignal = timeoutSignal\n    ? AbortSignal.any([signal, timeoutSignal])\n    : signal;\n  if (command) {\n    if (\n      devServerOrchestrator &&\n      command.includes(devServerOrchestrator.devCommand)\n    ) {\n      return {\n        isError: true,\n        toolResult: `Seems like you tried to execute \"${devServerOrchestrator.devCommand}\", however \"${shellType}\" tool is not the right tool to use, use \"DevServerControl\" tool with {\"restart\": true} instead.`,\n        title: `${shellName} command \"${command}\"`,\n      };\n    }\n  }\n\n  // Enhanced security validation with detailed error messages\n  const securityConfig = createSecurityConfig();\n  const securityViolation = validateCommandSecurity(command, securityConfig);\n  if (securityViolation) {\n    return {\n      isError: true,\n      toolResult: `ACL policy: Security policy violation (${securityViolation.policy}): ${securityViolation.message}.\\nStop and communicate to the user that the command is not allowed.`,\n      title: `${shellName} command blocked: \"${command}\"`,\n    };\n  }\n\n  // Fallback to original command validation for backward compatibility\n  if (!isCommandAllowed(command, allowedCommands)) {\n    return {\n      isError: true,\n      toolResult: `ACL policy: Command \"${command}\" is not allowed by configured policies. Stop and communicate to the user that the command is not allowed.`,\n      title: `${shellName} command \"${command}\"`,\n    };\n  }\n\n  if (signal.aborted) {\n    return {\n      isError: true,\n      toolResult: `Command aborted/skipped by the user. The command was not even executed but it's okey, the user decided to skip it, do not retry.`,\n      title: `${shellName} command \"${command}\"`,\n    };\n  }\n\n  const promise = new Promise<ToolResolution>((resolve) => {\n    // Determine the appropriate shell based on type and platform\n    let shell: string;\n    if (shellType === \"bash\") {\n      shell = process.env.BASH || \"bash\";\n    } else {\n      if (process.platform === \"win32\") {\n        shell = process.env.POWERSHELL || \"powershell.exe\";\n      } else {\n        shell = process.env.POWERSHELL || \"pwsh\";\n      }\n    }\n\n    const proc = safeSpawn(shell, command, {\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n      cwd: bashWorkingDirectory,\n      env: {\n        ...process.env,\n        TERM: \"dumb\",\n        CI: \"true\",\n        ...devServerOrchestrator?.envVars,\n      },\n    });\n\n    const outputBuffer = new TerminalBuffer(500);\n\n    proc.stdout.on(\"data\", (data) => {\n      const content = data.toString();\n      outputBuffer.write(content);\n      emitter.emit(\"step\", {\n        type: \"stdio\",\n        id: toolId,\n        command,\n        stream: \"stdout\",\n        source: \"tool-command\",\n        content,\n      });\n    });\n\n    proc.stderr.on(\"data\", (data) => {\n      const content = data.toString();\n      outputBuffer.write(content);\n      emitter.emit(\"step\", {\n        type: \"stdio\",\n        id: toolId,\n        command,\n        stream: \"stderr\",\n        source: \"tool-command\",\n        content,\n      });\n    });\n\n    const stopProcess = async () => {\n      await killProcess(sys, proc);\n\n      const isTimeout = timeoutSignal?.aborted && !signal.aborted;\n      const abortReason = isTimeout\n        ? `Command timed out after ${timeout}ms`\n        : \"Command aborted/skipped by the user\";\n\n      resolve({\n        isError: true,\n        toolResult: `${abortReason}. Stdout so far:\\n\\n${filterText(outputBuffer.getContent().slice(0, 5000))}`,\n        title: `${shellName} command \"${command}\"`,\n      });\n    };\n\n    proc.on(\"spawn\", () => {\n      if (composedSignal.aborted) {\n        stopProcess();\n      } else {\n        composedSignal.addEventListener(\"abort\", stopProcess, { once: true });\n      }\n    });\n\n    proc.on(\"error\", (error) => {\n      resolve({\n        isError: true,\n        toolResult:\n          filterText(outputBuffer.getContent().slice(0, 5000)) +\n          \"\\n\" +\n          String(error),\n        title: `${shellName} command \"${command}\"`,\n      });\n    });\n\n    proc.on(\"exit\", (code) => {\n      let toolResult = filterText(outputBuffer.getContent().slice(0, 5000));\n      const isError = code !== 0;\n      if (isError) {\n        toolResult += \"\\n\" + `exited with code ${code}`;\n      }\n\n      resolve({\n        isError: isError,\n        toolResult: toolResult.trim(),\n        title: `${shellName} command \"${command}\"`,\n      });\n    });\n  });\n\n  const output = await promise;\n\n  if (isInstallCommand(command) && !output.isError && !signal.aborted) {\n    await devServerOrchestrator?.restart(signal);\n  }\n  return output;\n}\n\nasync function bash(\n  toolContext: ToolContext,\n  { command, timeout, description }: CodeGenToolMap[\"bash\"],\n  toolId: string,\n): Promise<ToolResolution> {\n  if (!command) {\n    return {\n      isError: true,\n      toolResult:\n        \"Please provide a 'command' parameter when calling the 'bash' tool, make sure it's a valid bash command.\",\n      title: \"Bash error\",\n    };\n  }\n\n  return executeShellCommand(toolContext, command, timeout, toolId, \"bash\");\n}\n\nasync function powershell(\n  toolContext: ToolContext,\n  { command, timeout, description }: CodeGenToolMap[\"powershell\"],\n  toolId: string,\n): Promise<ToolResolution> {\n  if (!command) {\n    return {\n      isError: true,\n      toolResult:\n        \"Please provide a 'command' parameter when calling the 'powershell' tool, make sure it's a valid powershell command.\",\n      title: \"PowerShell error\",\n    };\n  }\n\n  return executeShellCommand(\n    toolContext,\n    command,\n    timeout,\n    toolId,\n    \"powershell\",\n  );\n}\n\nfunction dispatchAgent(\n  toolContext: ToolContext,\n  { prompt }: CodeGenToolMap[\"Agent\"],\n  toolId: string,\n): () => Promise<ToolResolution> {\n  return async () => {\n    return new Promise(async (resolve) => {\n      const position: BaseCodeGenPosition =\n        (toolContext.position as BaseCodeGenPosition) ?? \"fusion\";\n      const agentSession = new CodeGenSession({\n        sys: toolContext.sys,\n        credentials: toolContext.credentials,\n        position: `${position}-agent`,\n        mode: \"quality-v4-agent\",\n        modelOverride: \"opa5-mini\",\n        sessionOrCompletionId: toolId,\n        workingDirectory: toolContext.workingDirectory,\n        mcpServers: true,\n        fusionConfig: toolContext.fusionConfig,\n        enabledTools: [\n          \"Read\",\n          \"LS\",\n          \"Glob\",\n          \"ReadRule\",\n          \"Grep\",\n          \"WebSearch\",\n          \"SetImportantFiles\",\n        ],\n      });\n\n      // Initialize the session\n      await agentSession.initializeSession({\n        skipSessionLoading: true,\n      });\n\n      let importantFiles: SetImportantFilesToolInput = {\n        important_files: [],\n      };\n      const disconnect = agentSession.connectToEventLoop(false, (step) => {\n        if (\n          step.type === \"tool_result\" &&\n          step.result.tool_name === \"SetImportantFiles\" &&\n          typeof step.result.content === \"string\"\n        ) {\n          importantFiles = JSON.parse(\n            step.result.content,\n          ) as SetImportantFilesToolInput;\n        } else {\n          toolContext.emitter.emit(\"step\", {\n            type: \"agent\",\n            id: toolId,\n            step,\n          });\n        }\n      });\n\n      const cleanup = async () => {\n        disconnect();\n        await agentSession.close();\n      };\n\n      const abort = () => {\n        resolve({\n          isError: true,\n          toolResult: \"Agent task aborted\",\n          title: \"Agent Task Aborted\",\n        });\n        return cleanup();\n      };\n      // Send message and wait for completion\n      if (toolContext.signal.aborted) {\n        await abort();\n        return;\n      }\n\n      toolContext.signal.addEventListener(\"abort\", abort);\n\n      try {\n        await agentSession.sendMessage({\n          userPrompt: prompt,\n          user: toolContext.user,\n          maxCompletions: 50,\n          category: \"background-subagent\",\n        });\n        await agentSession.waitUntilIdle();\n\n        const lastTurn = await agentSession.getLastTurn();\n        if (!lastTurn) {\n          resolve({\n            isError: true,\n            toolResult: \"Agent task failed\",\n            title: \"Agent Task Failed\",\n          });\n          return;\n        }\n        let action = lastTurn.actions\n          .filter((a) => a.type === \"text\")\n          .map((a) => a.content)\n          .join(\"\\n\");\n\n        if (importantFiles.important_files.length > 0) {\n          toolContext.fileExists;\n          action += `\\n\\nNEXT UP!\nThe Agent found important files which content must be read. Use the \"Read\" tool to look at their content (specially if relevance is high):`;\n          for (const file of importantFiles.important_files) {\n            action += `\\n- ${file.file_path}${file.offset ? `:${file.offset + 1}` : \"\"}${file.offset && file.limit ? `-${file.limit + file.offset + 1}` : \"\"}${file.relevance ? ` (relevance: ${file.relevance})` : \"\"}`;\n          }\n        }\n\n        resolve({\n          isError: false,\n          toolResult: action,\n          title: \"Agent Task Completed\",\n        });\n        return;\n      } catch (err) {\n        resolve({\n          isError: true,\n          toolResult: \"Agent task failed\",\n          title: \"Agent Task Failed\",\n        });\n      } finally {\n        await cleanup();\n      }\n    });\n  };\n}\n\nexport function newAbortError() {\n  const err = new Error(\"AbortError\");\n  err.name = \"AbortError\";\n  return err;\n}\n", "import type { FusionConfig } from \"$/ai-utils\";\nimport path from \"path\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport const isInRemoteContainer = () => {\n  return process.env.FLY_APP_NAME !== undefined;\n};\n\nexport const getVolumePath = (fusionConfig: FusionConfig) => {\n  return path.resolve(process.cwd(), fusionConfig.workingDirectory ?? \".\");\n};\n\nfunction parseAIBranchName(branchName: string) {\n  if (branchName.startsWith(\"ai/\")) {\n    const parts = branchName.split(\"/\");\n    if (parts.length < 3) {\n      return {\n        sessionId: undefined,\n        featureBranch: branchName,\n      };\n    }\n    let sessionId = parts.pop()!;\n    parts.shift();\n    let featureBranch = parts.join(\"/\");\n    return {\n      sessionId,\n      featureBranch,\n    };\n  } else if (branchName.startsWith(\"ai_\")) {\n    const parts = branchName.split(\"_\");\n    if (parts.length < 3) {\n      return {\n        sessionId: undefined,\n        featureBranch: branchName,\n      };\n    }\n    let sessionId = parts.pop()!;\n    parts.shift();\n    let featureBranch = parts.join(\"_\");\n    return {\n      sessionId,\n      featureBranch,\n    };\n  }\n  return {\n    sessionId: undefined,\n    featureBranch: branchName,\n  };\n}\n\nexport function computeAIBranchName(\n  featureBranch: string,\n  sessionId: string,\n): string {\n  return `ai_${featureBranch}_${sessionId}`.trim();\n}\n\nexport const getAndParseGitRepoInfo = async ({\n  sys,\n  gitWorkingDirectory,\n  strict,\n}: {\n  sys: DevToolsSys;\n  gitWorkingDirectory: string;\n  strict: boolean;\n}) => {\n  const repoInfo = await sys.getRepoInfo(gitWorkingDirectory);\n  if (!repoInfo.hasGit) {\n    throw new Error(\"Git is not initialized\");\n  }\n  const currentBranch = repoInfo.currentBranch;\n  const parsed = parseAIBranchName(currentBranch);\n  if (\n    strict &&\n    parsed.featureBranch === \"\" &&\n    currentBranch.startsWith(\"ai__\")\n  ) {\n    throw new Error(\"AI branch is corrupted\");\n  }\n  return {\n    currentBranch,\n    featureBranch: parsed.featureBranch,\n    sessionId: parsed.sessionId,\n  };\n};\n", "import type {\n  WorkspaceFolder,\n  WorkspaceConfiguration,\n} from \"@builder.io/ai-utils\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport interface ResolveWorkspacePathOptions {\n  filePath: string;\n  forceWorkspace?: boolean;\n  workspace?: WorkspaceConfiguration;\n  workingDirectory: string;\n  sys: DevToolsSys;\n  canCollapseWorkspace?: boolean;\n}\n\nexport interface ResolveWorkspacePathResult {\n  resolvedPath: string;\n  workspaceFolder?: WorkspaceFolder;\n}\n\n/**\n * Resolves a workspace file path to its actual file system path.\n *\n * This function handles various workspace configurations:\n * - Single workspace named \".\" (treats paths as direct relative paths)\n * - Multiple workspaces (matches path prefixes to workspace names/folder names)\n * - No workspace configuration (falls back to working directory)\n *\n * @param options Configuration object containing all required parameters\n * @param options.filePath A file path that may include a workspace prefix (e.g., \"workspace1/path/to/file.js\")\n * @param options.forceWorkspace If true, will try the first workspace as fallback when no workspace folder is found\n * @param options.workspace Optional workspace configuration with folders\n * @param options.workingDirectory The base working directory to resolve paths against\n * @param options.sys DevToolsSys object providing path resolution functions\n * @returns Object containing the resolved file system path and matched workspace folder\n *\n * @example\n * ```typescript\n * import { createNodeSys } from '@builder.io/dev-tools/node';\n *\n * const result = resolveWorkspacePath({\n *   filePath: 'frontend/src/components/Button.tsx',\n *   workingDirectory: '/home/user/project',\n *   sys: createNodeSys(),\n *   workspace: {\n *     folders: [\n *       { name: 'frontend', path: './packages/frontend' },\n *       { name: 'backend', path: './packages/backend' }\n *     ]\n *   }\n * });\n * // Returns: {\n * //   resolvedPath: '/home/user/project/packages/frontend/src/components/Button.tsx',\n * //   workspaceFolder: { name: 'frontend', path: './packages/frontend' }\n * // }\n * ```\n */\nexport function resolveWorkspacePath(\n  options: ResolveWorkspacePathOptions,\n): ResolveWorkspacePathResult {\n  const {\n    filePath: originalFilePath,\n    forceWorkspace = false,\n    workspace,\n    workingDirectory,\n    sys,\n    canCollapseWorkspace,\n  } = options;\n\n  let filePath = originalFilePath;\n\n  // Normalize the path - remove leading \"/\" or \"./\"\n  if (filePath.startsWith(\"/\")) {\n    filePath = filePath.substring(1);\n  } else if (filePath.startsWith(\"./\")) {\n    filePath = filePath.substring(2);\n  }\n\n  // If there's no workspace configuration, just return the original path resolved against working directory\n  if (!workspace?.folders?.length) {\n    return {\n      resolvedPath: sys.resolve(workingDirectory, filePath),\n    };\n  }\n\n  // Helper function to check if we're in the special case of a single workspace named \".\"\n  const isSingleCurrentDirWorkspace = (): boolean => {\n    return workspace.folders.length === 1 && workspace.folders[0].name === \".\";\n  };\n\n  // Special case: single workspace named \".\" - treat paths as direct relative paths\n  if (isSingleCurrentDirWorkspace() || canCollapseWorkspace) {\n    const workspaceFolder = workspace.folders[0];\n    const folderPath = sys.resolve(workingDirectory, workspaceFolder.path);\n    return {\n      resolvedPath: sys.resolve(folderPath, filePath),\n      workspaceFolder,\n    };\n  }\n\n  // Find first path segment to check if it's a workspace name\n  const firstSlashIndex = filePath.indexOf(\"/\");\n  if (firstSlashIndex === -1) {\n    // No slash in path, assume it's relative to working directory\n    // But if forceWorkspace is true, try the first workspace\n    if (forceWorkspace) {\n      const firstWorkspace = workspace.folders[0];\n      const folderPath = sys.resolve(workingDirectory, firstWorkspace.path);\n      return {\n        resolvedPath: sys.resolve(folderPath, filePath),\n        workspaceFolder: firstWorkspace,\n      };\n    }\n    return {\n      resolvedPath: sys.resolve(workingDirectory, filePath),\n    };\n  }\n\n  // Extract the workspace prefix and the actual file path\n  const prefix = filePath.substring(0, firstSlashIndex);\n  const actualPath = filePath.substring(firstSlashIndex + 1);\n\n  // Find the matching workspace folder\n  let workspaceFolder = workspace.folders.find((folder) => {\n    if (folder.name) {\n      return folder.name === prefix;\n    } else {\n      return sys.basename(folder.path) === prefix;\n    }\n  });\n\n  if (!workspaceFolder) {\n    // If no matching workspace found, fall back to working directory\n    // But if forceWorkspace is true, try the first workspace\n    if (!forceWorkspace) {\n      return {\n        resolvedPath: sys.resolve(workingDirectory, filePath),\n      };\n    }\n\n    workspaceFolder = workspace.folders[0];\n    // When forcing workspace but no prefix matched, use the original filePath\n    const folderPath = sys.resolve(workingDirectory, workspaceFolder.path);\n    return {\n      resolvedPath: sys.resolve(folderPath, filePath),\n      workspaceFolder,\n    };\n  }\n\n  // Resolve the path against the workspace folder path\n  const folderPath = sys.resolve(workingDirectory, workspaceFolder.path);\n  return {\n    resolvedPath: sys.resolve(folderPath, actualPath),\n    workspaceFolder,\n  };\n}\n\nexport interface AbsolutePathToWorkspaceUrlOptions {\n  absolutePath: string;\n  workspace?: WorkspaceConfiguration;\n  workingDirectory: string;\n  sys: DevToolsSys;\n  canCollapseWorkspace?: boolean;\n}\n\n/**\n * Converts an absolute file system path to a workspace URL if possible.\n *\n * This function is the inverse of `resolveWorkspacePath`. It takes an absolute path\n * and attempts to convert it back to a workspace-relative path (e.g., \"frontend/src/file.ts\").\n *\n * @param options Configuration object containing all required parameters\n * @param options.absolutePath The absolute file system path to convert\n * @param options.workspace Optional workspace configuration with folders\n * @param options.workingDirectory The base working directory\n * @param options.sys DevToolsSys object providing path resolution functions\n * @param options.canCollapseWorkspace If true, handles collapsible workspace scenarios\n * @returns The workspace URL if the path can be converted, undefined otherwise\n *\n * @example\n * ```typescript\n * import { createNodeSys } from '@builder.io/dev-tools/node';\n *\n * const workspaceUrl = absolutePathToWorkspaceUrl({\n *   absolutePath: '/home/user/project/packages/frontend/src/components/Button.tsx',\n *   workingDirectory: '/home/user/project',\n *   sys: createNodeSys(),\n *   workspace: {\n *     folders: [\n *       { name: 'frontend', path: './packages/frontend' },\n *       { name: 'backend', path: './packages/backend' }\n *     ]\n *   }\n * });\n * // Returns: 'frontend/src/components/Button.tsx'\n * ```\n */\nexport function absolutePathToWorkspaceUrl(\n  options: AbsolutePathToWorkspaceUrlOptions,\n): string | undefined {\n  const {\n    absolutePath,\n    workspace,\n    workingDirectory,\n    sys,\n    canCollapseWorkspace,\n  } = options;\n\n  // If there's no workspace configuration, return undefined\n  if (!workspace?.folders?.length) {\n    return undefined;\n  }\n\n  // Normalize the absolute path\n  const normalizedAbsolutePath = sys.resolve(absolutePath);\n\n  // Helper function to check if we're in the special case of a single workspace named \".\"\n  const isSingleCurrentDirWorkspace = (): boolean => {\n    return workspace.folders.length === 1 && workspace.folders[0].name === \".\";\n  };\n\n  // Special case: single workspace named \".\" or canCollapseWorkspace with single workspace\n  if (isSingleCurrentDirWorkspace()) {\n    const workspaceFolder = workspace.folders[0];\n    const folderPath = sys.resolve(workingDirectory, workspaceFolder.path);\n\n    // Check if the absolute path is within this workspace folder\n    if (normalizedAbsolutePath.startsWith(folderPath)) {\n      // Remove the folder path prefix and any leading slash\n      let relativePath = normalizedAbsolutePath.substring(folderPath.length);\n      if (relativePath.startsWith(\"/\")) {\n        relativePath = relativePath.substring(1);\n      }\n\n      return relativePath;\n    }\n  }\n\n  // For canCollapseWorkspace with single workspace (but not named \".\"), return relative path without prefix\n  if (canCollapseWorkspace && workspace.folders.length === 1) {\n    const workspaceFolder = workspace.folders[0];\n    const folderPath = sys.resolve(workingDirectory, workspaceFolder.path);\n\n    if (normalizedAbsolutePath.startsWith(folderPath)) {\n      let relativePath = normalizedAbsolutePath.substring(folderPath.length);\n      if (relativePath.startsWith(\"/\")) {\n        relativePath = relativePath.substring(1);\n      }\n      return relativePath;\n    }\n  }\n\n  // Try to match the absolute path with each workspace folder\n  for (const workspaceFolder of workspace.folders) {\n    const folderPath = sys.resolve(workingDirectory, workspaceFolder.path);\n\n    // Check if the absolute path starts with this workspace folder path\n    if (normalizedAbsolutePath.startsWith(folderPath)) {\n      // Extract the relative path within the workspace\n      let relativePath = normalizedAbsolutePath.substring(folderPath.length);\n      if (relativePath.startsWith(\"/\")) {\n        relativePath = relativePath.substring(1);\n      }\n\n      // Determine the workspace prefix to use\n      const prefix = workspaceFolder.name || sys.basename(workspaceFolder.path);\n\n      // Skip the \".\" workspace in multi-workspace scenarios\n      if (prefix === \".\" && workspace.folders.length > 1) {\n        continue;\n      }\n\n      // Return the workspace URL\n      return relativePath ? `${prefix}/${relativePath}` : prefix;\n    }\n  }\n\n  // If canCollapseWorkspace and we didn't find a match, try the first workspace\n  if (canCollapseWorkspace && workspace.folders.length > 0) {\n    const workspaceFolder = workspace.folders[0];\n    const folderPath = sys.resolve(workingDirectory, workspaceFolder.path);\n\n    if (normalizedAbsolutePath.startsWith(folderPath)) {\n      let relativePath = normalizedAbsolutePath.substring(folderPath.length);\n      if (relativePath.startsWith(\"/\")) {\n        relativePath = relativePath.substring(1);\n      }\n      return relativePath;\n    }\n  }\n\n  // Path is not within any workspace folder\n  return undefined;\n}\n", "export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export {};\n", "export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[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// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?: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]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n", null, null, "import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler<UUIDComponents, URIOptions, URNComponents> = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler<URNComponents,URNOptions> = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array<string>,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\";  //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$));  //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\";  //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$);  //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$));  //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\";  //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler<MailtoComponents> =  {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;", "/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler<Components extends URIComponents = URIComponents, Options extends URIOptions = URIOptions, ParentComponents extends URIComponents = URIComponents> {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array<string>(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce<Array<{index:number,length:number}>>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = (<RegExpMatchArray>(\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else {  //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array<string> = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\");  //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\");  //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options);  //normalize base components\n\t\trelative = parse(serialize(relative, options), options);  //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(<URIComponents>uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(<URIComponents>uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(<URIComponents>uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\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-\\x7E]/; // non-ASCII chars\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, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(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 {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.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\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).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 = array => String.fromCodePoint(...array);\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 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\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\tlet 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 || 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\tlet 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\tlet 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.1.0',\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 default punycode;\n", "import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n", "import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),  //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),  //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",  //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",  //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),  //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp(                                                            subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), //                           6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp(                                                 \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), //                      \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp(                                 H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[               h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" +        H16$ + \"\\\\:\"          + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\"    h16 \":\"   ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\"                                + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\"              ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\"                                + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\"              h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"                                       ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),  //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),  //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),  //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),  //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),  //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\")  //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n", "export function merge(...sets:Array<string>):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array<any> {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}", "'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n", "'use strict';\n\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nmodule.exports = function ucs2length(str) {\n  var length = 0\n    , len = str.length\n    , pos = 0\n    , value;\n  while (pos < len) {\n    length++;\n    value = str.charCodeAt(pos++);\n    if (value >= 0xD800 && value <= 0xDBFF && pos < len) {\n      // high surrogate, and there is a next character\n      value = str.charCodeAt(pos);\n      if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate\n    }\n  }\n  return length;\n};\n", "'use strict';\n\n\nmodule.exports = {\n  copy: copy,\n  checkDataType: checkDataType,\n  checkDataTypes: checkDataTypes,\n  coerceToTypes: coerceToTypes,\n  toHash: toHash,\n  getProperty: getProperty,\n  escapeQuotes: escapeQuotes,\n  equal: require('fast-deep-equal'),\n  ucs2length: require('./ucs2length'),\n  varOccurences: varOccurences,\n  varReplace: varReplace,\n  schemaHasRules: schemaHasRules,\n  schemaHasRulesExcept: schemaHasRulesExcept,\n  schemaUnknownRules: schemaUnknownRules,\n  toQuotedString: toQuotedString,\n  getPathExpr: getPathExpr,\n  getPath: getPath,\n  getData: getData,\n  unescapeFragment: unescapeFragment,\n  unescapeJsonPointer: unescapeJsonPointer,\n  escapeFragment: escapeFragment,\n  escapeJsonPointer: escapeJsonPointer\n};\n\n\nfunction copy(o, to) {\n  to = to || {};\n  for (var key in o) to[key] = o[key];\n  return to;\n}\n\n\nfunction checkDataType(dataType, data, strictNumbers, negate) {\n  var EQUAL = negate ? ' !== ' : ' === '\n    , AND = negate ? ' || ' : ' && '\n    , OK = negate ? '!' : ''\n    , NOT = negate ? '' : '!';\n  switch (dataType) {\n    case 'null': return data + EQUAL + 'null';\n    case 'array': return OK + 'Array.isArray(' + data + ')';\n    case 'object': return '(' + OK + data + AND +\n                          'typeof ' + data + EQUAL + '\"object\"' + AND +\n                          NOT + 'Array.isArray(' + data + '))';\n    case 'integer': return '(typeof ' + data + EQUAL + '\"number\"' + AND +\n                           NOT + '(' + data + ' % 1)' +\n                           AND + data + EQUAL + data +\n                           (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n    case 'number': return '(typeof ' + data + EQUAL + '\"' + dataType + '\"' +\n                          (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';\n    default: return 'typeof ' + data + EQUAL + '\"' + dataType + '\"';\n  }\n}\n\n\nfunction checkDataTypes(dataTypes, data, strictNumbers) {\n  switch (dataTypes.length) {\n    case 1: return checkDataType(dataTypes[0], data, strictNumbers, true);\n    default:\n      var code = '';\n      var types = toHash(dataTypes);\n      if (types.array && types.object) {\n        code = types.null ? '(': '(!' + data + ' || ';\n        code += 'typeof ' + data + ' !== \"object\")';\n        delete types.null;\n        delete types.array;\n        delete types.object;\n      }\n      if (types.number) delete types.integer;\n      for (var t in types)\n        code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true);\n\n      return code;\n  }\n}\n\n\nvar COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);\nfunction coerceToTypes(optionCoerceTypes, dataTypes) {\n  if (Array.isArray(dataTypes)) {\n    var types = [];\n    for (var i=0; i<dataTypes.length; i++) {\n      var t = dataTypes[i];\n      if (COERCE_TO_TYPES[t]) types[types.length] = t;\n      else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t;\n    }\n    if (types.length) return types;\n  } else if (COERCE_TO_TYPES[dataTypes]) {\n    return [dataTypes];\n  } else if (optionCoerceTypes === 'array' && dataTypes === 'array') {\n    return ['array'];\n  }\n}\n\n\nfunction toHash(arr) {\n  var hash = {};\n  for (var i=0; i<arr.length; i++) hash[arr[i]] = true;\n  return hash;\n}\n\n\nvar IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nvar SINGLE_QUOTE = /'|\\\\/g;\nfunction getProperty(key) {\n  return typeof key == 'number'\n          ? '[' + key + ']'\n          : IDENTIFIER.test(key)\n            ? '.' + key\n            : \"['\" + escapeQuotes(key) + \"']\";\n}\n\n\nfunction escapeQuotes(str) {\n  return str.replace(SINGLE_QUOTE, '\\\\$&')\n            .replace(/\\n/g, '\\\\n')\n            .replace(/\\r/g, '\\\\r')\n            .replace(/\\f/g, '\\\\f')\n            .replace(/\\t/g, '\\\\t');\n}\n\n\nfunction varOccurences(str, dataVar) {\n  dataVar += '[^0-9]';\n  var matches = str.match(new RegExp(dataVar, 'g'));\n  return matches ? matches.length : 0;\n}\n\n\nfunction varReplace(str, dataVar, expr) {\n  dataVar += '([^0-9])';\n  expr = expr.replace(/\\$/g, '$$$$');\n  return str.replace(new RegExp(dataVar, 'g'), expr + '$1');\n}\n\n\nfunction schemaHasRules(schema, rules) {\n  if (typeof schema == 'boolean') return !schema;\n  for (var key in schema) if (rules[key]) return true;\n}\n\n\nfunction schemaHasRulesExcept(schema, rules, exceptKeyword) {\n  if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not';\n  for (var key in schema) if (key != exceptKeyword && rules[key]) return true;\n}\n\n\nfunction schemaUnknownRules(schema, rules) {\n  if (typeof schema == 'boolean') return;\n  for (var key in schema) if (!rules[key]) return key;\n}\n\n\nfunction toQuotedString(str) {\n  return '\\'' + escapeQuotes(str) + '\\'';\n}\n\n\nfunction getPathExpr(currentPath, expr, jsonPointers, isNumber) {\n  var path = jsonPointers // false by default\n              ? '\\'/\\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \\'~0\\').replace(/\\\\//g, \\'~1\\')')\n              : (isNumber ? '\\'[\\' + ' + expr + ' + \\']\\'' : '\\'[\\\\\\'\\' + ' + expr + ' + \\'\\\\\\']\\'');\n  return joinPaths(currentPath, path);\n}\n\n\nfunction getPath(currentPath, prop, jsonPointers) {\n  var path = jsonPointers // false by default\n              ? toQuotedString('/' + escapeJsonPointer(prop))\n              : toQuotedString(getProperty(prop));\n  return joinPaths(currentPath, path);\n}\n\n\nvar JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nvar RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, lvl, paths) {\n  var up, jsonPointer, data, matches;\n  if ($data === '') return 'rootData';\n  if ($data[0] == '/') {\n    if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data);\n    jsonPointer = $data;\n    data = 'rootData';\n  } else {\n    matches = $data.match(RELATIVE_JSON_POINTER);\n    if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);\n    up = +matches[1];\n    jsonPointer = matches[2];\n    if (jsonPointer == '#') {\n      if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);\n      return paths[lvl - up];\n    }\n\n    if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);\n    data = 'data' + ((lvl - up) || '');\n    if (!jsonPointer) return data;\n  }\n\n  var expr = data;\n  var segments = jsonPointer.split('/');\n  for (var i=0; i<segments.length; i++) {\n    var segment = segments[i];\n    if (segment) {\n      data += getProperty(unescapeJsonPointer(segment));\n      expr += ' && ' + data;\n    }\n  }\n  return expr;\n}\n\n\nfunction joinPaths (a, b) {\n  if (a == '\"\"') return b;\n  return (a + ' + ' + b).replace(/([^\\\\])' \\+ '/g, '$1');\n}\n\n\nfunction unescapeFragment(str) {\n  return unescapeJsonPointer(decodeURIComponent(str));\n}\n\n\nfunction escapeFragment(str) {\n  return encodeURIComponent(escapeJsonPointer(str));\n}\n\n\nfunction escapeJsonPointer(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\n\nfunction unescapeJsonPointer(str) {\n  return str.replace(/~1/g, '/').replace(/~0/g, '~');\n}\n", "'use strict';\n\nvar util = require('./util');\n\nmodule.exports = SchemaObject;\n\nfunction SchemaObject(obj) {\n  util.copy(obj, this);\n}\n", "'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n", "'use strict';\n\nvar URI = require('uri-js')\n  , equal = require('fast-deep-equal')\n  , util = require('./util')\n  , SchemaObject = require('./schema_obj')\n  , traverse = require('json-schema-traverse');\n\nmodule.exports = resolve;\n\nresolve.normalizeId = normalizeId;\nresolve.fullPath = getFullPath;\nresolve.url = resolveUrl;\nresolve.ids = resolveIds;\nresolve.inlineRef = inlineRef;\nresolve.schema = resolveSchema;\n\n/**\n * [resolve and compile the references ($ref)]\n * @this   Ajv\n * @param  {Function} compile reference to schema compilation funciton (localCompile)\n * @param  {Object} root object with information about the root schema for the current schema\n * @param  {String} ref reference to resolve\n * @return {Object|Function} schema object (if the schema can be inlined) or validation function\n */\nfunction resolve(compile, root, ref) {\n  /* jshint validthis: true */\n  var refVal = this._refs[ref];\n  if (typeof refVal == 'string') {\n    if (this._refs[refVal]) refVal = this._refs[refVal];\n    else return resolve.call(this, compile, root, refVal);\n  }\n\n  refVal = refVal || this._schemas[ref];\n  if (refVal instanceof SchemaObject) {\n    return inlineRef(refVal.schema, this._opts.inlineRefs)\n            ? refVal.schema\n            : refVal.validate || this._compile(refVal);\n  }\n\n  var res = resolveSchema.call(this, root, ref);\n  var schema, v, baseId;\n  if (res) {\n    schema = res.schema;\n    root = res.root;\n    baseId = res.baseId;\n  }\n\n  if (schema instanceof SchemaObject) {\n    v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId);\n  } else if (schema !== undefined) {\n    v = inlineRef(schema, this._opts.inlineRefs)\n        ? schema\n        : compile.call(this, schema, root, undefined, baseId);\n  }\n\n  return v;\n}\n\n\n/**\n * Resolve schema, its root and baseId\n * @this Ajv\n * @param  {Object} root root object with properties schema, refVal, refs\n * @param  {String} ref  reference to resolve\n * @return {Object} object with properties schema, root, baseId\n */\nfunction resolveSchema(root, ref) {\n  /* jshint validthis: true */\n  var p = URI.parse(ref)\n    , refPath = _getFullPath(p)\n    , baseId = getFullPath(this._getId(root.schema));\n  if (Object.keys(root.schema).length === 0 || refPath !== baseId) {\n    var id = normalizeId(refPath);\n    var refVal = this._refs[id];\n    if (typeof refVal == 'string') {\n      return resolveRecursive.call(this, root, refVal, p);\n    } else if (refVal instanceof SchemaObject) {\n      if (!refVal.validate) this._compile(refVal);\n      root = refVal;\n    } else {\n      refVal = this._schemas[id];\n      if (refVal instanceof SchemaObject) {\n        if (!refVal.validate) this._compile(refVal);\n        if (id == normalizeId(ref))\n          return { schema: refVal, root: root, baseId: baseId };\n        root = refVal;\n      } else {\n        return;\n      }\n    }\n    if (!root.schema) return;\n    baseId = getFullPath(this._getId(root.schema));\n  }\n  return getJsonPointer.call(this, p, baseId, root.schema, root);\n}\n\n\n/* @this Ajv */\nfunction resolveRecursive(root, ref, parsedRef) {\n  /* jshint validthis: true */\n  var res = resolveSchema.call(this, root, ref);\n  if (res) {\n    var schema = res.schema;\n    var baseId = res.baseId;\n    root = res.root;\n    var id = this._getId(schema);\n    if (id) baseId = resolveUrl(baseId, id);\n    return getJsonPointer.call(this, parsedRef, baseId, schema, root);\n  }\n}\n\n\nvar PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']);\n/* @this Ajv */\nfunction getJsonPointer(parsedRef, baseId, schema, root) {\n  /* jshint validthis: true */\n  parsedRef.fragment = parsedRef.fragment || '';\n  if (parsedRef.fragment.slice(0,1) != '/') return;\n  var parts = parsedRef.fragment.split('/');\n\n  for (var i = 1; i < parts.length; i++) {\n    var part = parts[i];\n    if (part) {\n      part = util.unescapeFragment(part);\n      schema = schema[part];\n      if (schema === undefined) break;\n      var id;\n      if (!PREVENT_SCOPE_CHANGE[part]) {\n        id = this._getId(schema);\n        if (id) baseId = resolveUrl(baseId, id);\n        if (schema.$ref) {\n          var $ref = resolveUrl(baseId, schema.$ref);\n          var res = resolveSchema.call(this, root, $ref);\n          if (res) {\n            schema = res.schema;\n            root = res.root;\n            baseId = res.baseId;\n          }\n        }\n      }\n    }\n  }\n  if (schema !== undefined && schema !== root.schema)\n    return { schema: schema, root: root, baseId: baseId };\n}\n\n\nvar SIMPLE_INLINED = util.toHash([\n  'type', 'format', 'pattern',\n  'maxLength', 'minLength',\n  'maxProperties', 'minProperties',\n  'maxItems', 'minItems',\n  'maximum', 'minimum',\n  'uniqueItems', 'multipleOf',\n  'required', 'enum'\n]);\nfunction inlineRef(schema, limit) {\n  if (limit === false) return false;\n  if (limit === undefined || limit === true) return checkNoRef(schema);\n  else if (limit) return countKeys(schema) <= limit;\n}\n\n\nfunction checkNoRef(schema) {\n  var item;\n  if (Array.isArray(schema)) {\n    for (var i=0; i<schema.length; i++) {\n      item = schema[i];\n      if (typeof item == 'object' && !checkNoRef(item)) return false;\n    }\n  } else {\n    for (var key in schema) {\n      if (key == '$ref') return false;\n      item = schema[key];\n      if (typeof item == 'object' && !checkNoRef(item)) return false;\n    }\n  }\n  return true;\n}\n\n\nfunction countKeys(schema) {\n  var count = 0, item;\n  if (Array.isArray(schema)) {\n    for (var i=0; i<schema.length; i++) {\n      item = schema[i];\n      if (typeof item == 'object') count += countKeys(item);\n      if (count == Infinity) return Infinity;\n    }\n  } else {\n    for (var key in schema) {\n      if (key == '$ref') return Infinity;\n      if (SIMPLE_INLINED[key]) {\n        count++;\n      } else {\n        item = schema[key];\n        if (typeof item == 'object') count += countKeys(item) + 1;\n        if (count == Infinity) return Infinity;\n      }\n    }\n  }\n  return count;\n}\n\n\nfunction getFullPath(id, normalize) {\n  if (normalize !== false) id = normalizeId(id);\n  var p = URI.parse(id);\n  return _getFullPath(p);\n}\n\n\nfunction _getFullPath(p) {\n  return URI.serialize(p).split('#')[0] + '#';\n}\n\n\nvar TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n  return id ? id.replace(TRAILING_SLASH_HASH, '') : '';\n}\n\n\nfunction resolveUrl(baseId, id) {\n  id = normalizeId(id);\n  return URI.resolve(baseId, id);\n}\n\n\n/* @this Ajv */\nfunction resolveIds(schema) {\n  var schemaId = normalizeId(this._getId(schema));\n  var baseIds = {'': schemaId};\n  var fullPaths = {'': getFullPath(schemaId, false)};\n  var localRefs = {};\n  var self = this;\n\n  traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n    if (jsonPtr === '') return;\n    var id = self._getId(sch);\n    var baseId = baseIds[parentJsonPtr];\n    var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword;\n    if (keyIndex !== undefined)\n      fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex));\n\n    if (typeof id == 'string') {\n      id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id);\n\n      var refVal = self._refs[id];\n      if (typeof refVal == 'string') refVal = self._refs[refVal];\n      if (refVal && refVal.schema) {\n        if (!equal(sch, refVal.schema))\n          throw new Error('id \"' + id + '\" resolves to more than one schema');\n      } else if (id != normalizeId(fullPath)) {\n        if (id[0] == '#') {\n          if (localRefs[id] && !equal(sch, localRefs[id]))\n            throw new Error('id \"' + id + '\" resolves to more than one schema');\n          localRefs[id] = sch;\n        } else {\n          self._refs[id] = fullPath;\n        }\n      }\n    }\n    baseIds[jsonPtr] = baseId;\n    fullPaths[jsonPtr] = fullPath;\n  });\n\n  return localRefs;\n}\n", "'use strict';\n\nvar resolve = require('./resolve');\n\nmodule.exports = {\n  Validation: errorSubclass(ValidationError),\n  MissingRef: errorSubclass(MissingRefError)\n};\n\n\nfunction ValidationError(errors) {\n  this.message = 'validation failed';\n  this.errors = errors;\n  this.ajv = this.validation = true;\n}\n\n\nMissingRefError.message = function (baseId, ref) {\n  return 'can\\'t resolve reference ' + ref + ' from id ' + baseId;\n};\n\n\nfunction MissingRefError(baseId, ref, message) {\n  this.message = message || MissingRefError.message(baseId, ref);\n  this.missingRef = resolve.url(baseId, ref);\n  this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));\n}\n\n\nfunction errorSubclass(Subclass) {\n  Subclass.prototype = Object.create(Error.prototype);\n  Subclass.prototype.constructor = Subclass;\n  return Subclass;\n}\n", "'use strict';\n\nmodule.exports = function (data, opts) {\n    if (!opts) opts = {};\n    if (typeof opts === 'function') opts = { cmp: opts };\n    var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n    var cmp = opts.cmp && (function (f) {\n        return function (node) {\n            return function (a, b) {\n                var aobj = { key: a, value: node[a] };\n                var bobj = { key: b, value: node[b] };\n                return f(aobj, bobj);\n            };\n        };\n    })(opts.cmp);\n\n    var seen = [];\n    return (function stringify (node) {\n        if (node && node.toJSON && typeof node.toJSON === 'function') {\n            node = node.toJSON();\n        }\n\n        if (node === undefined) return;\n        if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n        if (typeof node !== 'object') return JSON.stringify(node);\n\n        var i, out;\n        if (Array.isArray(node)) {\n            out = '[';\n            for (i = 0; i < node.length; i++) {\n                if (i) out += ',';\n                out += stringify(node[i]) || 'null';\n            }\n            return out + ']';\n        }\n\n        if (node === null) return 'null';\n\n        if (seen.indexOf(node) !== -1) {\n            if (cycles) return JSON.stringify('__cycle__');\n            throw new TypeError('Converting circular structure to JSON');\n        }\n\n        var seenIndex = seen.push(node) - 1;\n        var keys = Object.keys(node).sort(cmp && cmp(node));\n        out = '';\n        for (i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var value = stringify(node[key]);\n\n            if (!value) continue;\n            if (out) out += ',';\n            out += JSON.stringify(key) + ':' + value;\n        }\n        seen.splice(seenIndex, 1);\n        return '{' + out + '}';\n    })(data);\n};\n", "'use strict';\nmodule.exports = function generate_validate(it, $keyword, $ruleType) {\n  var out = '';\n  var $async = it.schema.$async === true,\n    $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'),\n    $id = it.self._getId(it.schema);\n  if (it.opts.strictKeywords) {\n    var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords);\n    if ($unknownKwd) {\n      var $keywordsMsg = 'unknown keyword: ' + $unknownKwd;\n      if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg);\n      else throw new Error($keywordsMsg);\n    }\n  }\n  if (it.isTop) {\n    out += ' var validate = ';\n    if ($async) {\n      it.async = true;\n      out += 'async ';\n    }\n    out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \\'use strict\\'; ';\n    if ($id && (it.opts.sourceCode || it.opts.processCode)) {\n      out += ' ' + ('/\\*# sourceURL=' + $id + ' */') + ' ';\n    }\n  }\n  if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) {\n    var $keyword = 'false schema';\n    var $lvl = it.level;\n    var $dataLvl = it.dataLevel;\n    var $schema = it.schema[$keyword];\n    var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n    var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n    var $breakOnError = !it.opts.allErrors;\n    var $errorKeyword;\n    var $data = 'data' + ($dataLvl || '');\n    var $valid = 'valid' + $lvl;\n    if (it.schema === false) {\n      if (it.isTop) {\n        $breakOnError = true;\n      } else {\n        out += ' var ' + ($valid) + ' = false; ';\n      }\n      var $$outStack = $$outStack || [];\n      $$outStack.push(out);\n      out = ''; /* istanbul ignore else */\n      if (it.createErrors !== false) {\n        out += ' { keyword: \\'' + ($errorKeyword || 'false schema') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n        if (it.opts.messages !== false) {\n          out += ' , message: \\'boolean schema is false\\' ';\n        }\n        if (it.opts.verbose) {\n          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n        }\n        out += ' } ';\n      } else {\n        out += ' {} ';\n      }\n      var __err = out;\n      out = $$outStack.pop();\n      if (!it.compositeRule && $breakOnError) {\n        /* istanbul ignore if */\n        if (it.async) {\n          out += ' throw new ValidationError([' + (__err) + ']); ';\n        } else {\n          out += ' validate.errors = [' + (__err) + ']; return false; ';\n        }\n      } else {\n        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n      }\n    } else {\n      if (it.isTop) {\n        if ($async) {\n          out += ' return data; ';\n        } else {\n          out += ' validate.errors = null; return true; ';\n        }\n      } else {\n        out += ' var ' + ($valid) + ' = true; ';\n      }\n    }\n    if (it.isTop) {\n      out += ' }; return validate; ';\n    }\n    return out;\n  }\n  if (it.isTop) {\n    var $top = it.isTop,\n      $lvl = it.level = 0,\n      $dataLvl = it.dataLevel = 0,\n      $data = 'data';\n    it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));\n    it.baseId = it.baseId || it.rootId;\n    delete it.isTop;\n    it.dataPathArr = [\"\"];\n    if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) {\n      var $defaultMsg = 'default is ignored in the schema root';\n      if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n      else throw new Error($defaultMsg);\n    }\n    out += ' var vErrors = null; ';\n    out += ' var errors = 0;     ';\n    out += ' if (rootData === undefined) rootData = data; ';\n  } else {\n    var $lvl = it.level,\n      $dataLvl = it.dataLevel,\n      $data = 'data' + ($dataLvl || '');\n    if ($id) it.baseId = it.resolve.url(it.baseId, $id);\n    if ($async && !it.async) throw new Error('async schema in sync schema');\n    out += ' var errs_' + ($lvl) + ' = errors;';\n  }\n  var $valid = 'valid' + $lvl,\n    $breakOnError = !it.opts.allErrors,\n    $closingBraces1 = '',\n    $closingBraces2 = '';\n  var $errorKeyword;\n  var $typeSchema = it.schema.type,\n    $typeIsArray = Array.isArray($typeSchema);\n  if ($typeSchema && it.opts.nullable && it.schema.nullable === true) {\n    if ($typeIsArray) {\n      if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null');\n    } else if ($typeSchema != 'null') {\n      $typeSchema = [$typeSchema, 'null'];\n      $typeIsArray = true;\n    }\n  }\n  if ($typeIsArray && $typeSchema.length == 1) {\n    $typeSchema = $typeSchema[0];\n    $typeIsArray = false;\n  }\n  if (it.schema.$ref && $refKeywords) {\n    if (it.opts.extendRefs == 'fail') {\n      throw new Error('$ref: validation keywords used in schema at path \"' + it.errSchemaPath + '\" (see option extendRefs)');\n    } else if (it.opts.extendRefs !== true) {\n      $refKeywords = false;\n      it.logger.warn('$ref: keywords ignored in schema at path \"' + it.errSchemaPath + '\"');\n    }\n  }\n  if (it.schema.$comment && it.opts.$comment) {\n    out += ' ' + (it.RULES.all.$comment.code(it, '$comment'));\n  }\n  if ($typeSchema) {\n    if (it.opts.coerceTypes) {\n      var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);\n    }\n    var $rulesGroup = it.RULES.types[$typeSchema];\n    if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {\n      var $schemaPath = it.schemaPath + '.type',\n        $errSchemaPath = it.errSchemaPath + '/type';\n      var $schemaPath = it.schemaPath + '.type',\n        $errSchemaPath = it.errSchemaPath + '/type',\n        $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';\n      out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { ';\n      if ($coerceToTypes) {\n        var $dataType = 'dataType' + $lvl,\n          $coerced = 'coerced' + $lvl;\n        out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; var ' + ($coerced) + ' = undefined; ';\n        if (it.opts.coerceTypes == 'array') {\n          out += ' if (' + ($dataType) + ' == \\'object\\' && Array.isArray(' + ($data) + ') && ' + ($data) + '.length == 1) { ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + '; if (' + (it.util.checkDataType(it.schema.type, $data, it.opts.strictNumbers)) + ') ' + ($coerced) + ' = ' + ($data) + '; } ';\n        }\n        out += ' if (' + ($coerced) + ' !== undefined) ; ';\n        var arr1 = $coerceToTypes;\n        if (arr1) {\n          var $type, $i = -1,\n            l1 = arr1.length - 1;\n          while ($i < l1) {\n            $type = arr1[$i += 1];\n            if ($type == 'string') {\n              out += ' else if (' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\') ' + ($coerced) + ' = \\'\\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \\'\\'; ';\n            } else if ($type == 'number' || $type == 'integer') {\n              out += ' else if (' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \\'string\\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';\n              if ($type == 'integer') {\n                out += ' && !(' + ($data) + ' % 1)';\n              }\n              out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';\n            } else if ($type == 'boolean') {\n              out += ' else if (' + ($data) + ' === \\'false\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \\'true\\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';\n            } else if ($type == 'null') {\n              out += ' else if (' + ($data) + ' === \\'\\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';\n            } else if (it.opts.coerceTypes == 'array' && $type == 'array') {\n              out += ' else if (' + ($dataType) + ' == \\'string\\' || ' + ($dataType) + ' == \\'number\\' || ' + ($dataType) + ' == \\'boolean\\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';\n            }\n          }\n        }\n        out += ' else {   ';\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n          if ($typeIsArray) {\n            out += '' + ($typeSchema.join(\",\"));\n          } else {\n            out += '' + ($typeSchema);\n          }\n          out += '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'should be ';\n            if ($typeIsArray) {\n              out += '' + ($typeSchema.join(\",\"));\n            } else {\n              out += '' + ($typeSchema);\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        out += ' } if (' + ($coerced) + ' !== undefined) {  ';\n        var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n          $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n        out += ' ' + ($data) + ' = ' + ($coerced) + '; ';\n        if (!$dataLvl) {\n          out += 'if (' + ($parentData) + ' !== undefined)';\n        }\n        out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } ';\n      } else {\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n          if ($typeIsArray) {\n            out += '' + ($typeSchema.join(\",\"));\n          } else {\n            out += '' + ($typeSchema);\n          }\n          out += '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'should be ';\n            if ($typeIsArray) {\n              out += '' + ($typeSchema.join(\",\"));\n            } else {\n              out += '' + ($typeSchema);\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n      }\n      out += ' } ';\n    }\n  }\n  if (it.schema.$ref && !$refKeywords) {\n    out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' ';\n    if ($breakOnError) {\n      out += ' } if (errors === ';\n      if ($top) {\n        out += '0';\n      } else {\n        out += 'errs_' + ($lvl);\n      }\n      out += ') { ';\n      $closingBraces2 += '}';\n    }\n  } else {\n    var arr2 = it.RULES;\n    if (arr2) {\n      var $rulesGroup, i2 = -1,\n        l2 = arr2.length - 1;\n      while (i2 < l2) {\n        $rulesGroup = arr2[i2 += 1];\n        if ($shouldUseGroup($rulesGroup)) {\n          if ($rulesGroup.type) {\n            out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { ';\n          }\n          if (it.opts.useDefaults) {\n            if ($rulesGroup.type == 'object' && it.schema.properties) {\n              var $schema = it.schema.properties,\n                $schemaKeys = Object.keys($schema);\n              var arr3 = $schemaKeys;\n              if (arr3) {\n                var $propertyKey, i3 = -1,\n                  l3 = arr3.length - 1;\n                while (i3 < l3) {\n                  $propertyKey = arr3[i3 += 1];\n                  var $sch = $schema[$propertyKey];\n                  if ($sch.default !== undefined) {\n                    var $passData = $data + it.util.getProperty($propertyKey);\n                    if (it.compositeRule) {\n                      if (it.opts.strictDefaults) {\n                        var $defaultMsg = 'default is ignored for: ' + $passData;\n                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n                        else throw new Error($defaultMsg);\n                      }\n                    } else {\n                      out += ' if (' + ($passData) + ' === undefined ';\n                      if (it.opts.useDefaults == 'empty') {\n                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n                      }\n                      out += ' ) ' + ($passData) + ' = ';\n                      if (it.opts.useDefaults == 'shared') {\n                        out += ' ' + (it.useDefault($sch.default)) + ' ';\n                      } else {\n                        out += ' ' + (JSON.stringify($sch.default)) + ' ';\n                      }\n                      out += '; ';\n                    }\n                  }\n                }\n              }\n            } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {\n              var arr4 = it.schema.items;\n              if (arr4) {\n                var $sch, $i = -1,\n                  l4 = arr4.length - 1;\n                while ($i < l4) {\n                  $sch = arr4[$i += 1];\n                  if ($sch.default !== undefined) {\n                    var $passData = $data + '[' + $i + ']';\n                    if (it.compositeRule) {\n                      if (it.opts.strictDefaults) {\n                        var $defaultMsg = 'default is ignored for: ' + $passData;\n                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);\n                        else throw new Error($defaultMsg);\n                      }\n                    } else {\n                      out += ' if (' + ($passData) + ' === undefined ';\n                      if (it.opts.useDefaults == 'empty') {\n                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \\'\\' ';\n                      }\n                      out += ' ) ' + ($passData) + ' = ';\n                      if (it.opts.useDefaults == 'shared') {\n                        out += ' ' + (it.useDefault($sch.default)) + ' ';\n                      } else {\n                        out += ' ' + (JSON.stringify($sch.default)) + ' ';\n                      }\n                      out += '; ';\n                    }\n                  }\n                }\n              }\n            }\n          }\n          var arr5 = $rulesGroup.rules;\n          if (arr5) {\n            var $rule, i5 = -1,\n              l5 = arr5.length - 1;\n            while (i5 < l5) {\n              $rule = arr5[i5 += 1];\n              if ($shouldUseRule($rule)) {\n                var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);\n                if ($code) {\n                  out += ' ' + ($code) + ' ';\n                  if ($breakOnError) {\n                    $closingBraces1 += '}';\n                  }\n                }\n              }\n            }\n          }\n          if ($breakOnError) {\n            out += ' ' + ($closingBraces1) + ' ';\n            $closingBraces1 = '';\n          }\n          if ($rulesGroup.type) {\n            out += ' } ';\n            if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {\n              out += ' else { ';\n              var $schemaPath = it.schemaPath + '.type',\n                $errSchemaPath = it.errSchemaPath + '/type';\n              var $$outStack = $$outStack || [];\n              $$outStack.push(out);\n              out = ''; /* istanbul ignore else */\n              if (it.createErrors !== false) {\n                out += ' { keyword: \\'' + ($errorKeyword || 'type') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \\'';\n                if ($typeIsArray) {\n                  out += '' + ($typeSchema.join(\",\"));\n                } else {\n                  out += '' + ($typeSchema);\n                }\n                out += '\\' } ';\n                if (it.opts.messages !== false) {\n                  out += ' , message: \\'should be ';\n                  if ($typeIsArray) {\n                    out += '' + ($typeSchema.join(\",\"));\n                  } else {\n                    out += '' + ($typeSchema);\n                  }\n                  out += '\\' ';\n                }\n                if (it.opts.verbose) {\n                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n                }\n                out += ' } ';\n              } else {\n                out += ' {} ';\n              }\n              var __err = out;\n              out = $$outStack.pop();\n              if (!it.compositeRule && $breakOnError) {\n                /* istanbul ignore if */\n                if (it.async) {\n                  out += ' throw new ValidationError([' + (__err) + ']); ';\n                } else {\n                  out += ' validate.errors = [' + (__err) + ']; return false; ';\n                }\n              } else {\n                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n              }\n              out += ' } ';\n            }\n          }\n          if ($breakOnError) {\n            out += ' if (errors === ';\n            if ($top) {\n              out += '0';\n            } else {\n              out += 'errs_' + ($lvl);\n            }\n            out += ') { ';\n            $closingBraces2 += '}';\n          }\n        }\n      }\n    }\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces2) + ' ';\n  }\n  if ($top) {\n    if ($async) {\n      out += ' if (errors === 0) return data;           ';\n      out += ' else throw new ValidationError(vErrors); ';\n    } else {\n      out += ' validate.errors = vErrors; ';\n      out += ' return errors === 0;       ';\n    }\n    out += ' }; return validate;';\n  } else {\n    out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';\n  }\n\n  function $shouldUseGroup($rulesGroup) {\n    var rules = $rulesGroup.rules;\n    for (var i = 0; i < rules.length; i++)\n      if ($shouldUseRule(rules[i])) return true;\n  }\n\n  function $shouldUseRule($rule) {\n    return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));\n  }\n\n  function $ruleImplementsSomeKeyword($rule) {\n    var impl = $rule.implements;\n    for (var i = 0; i < impl.length; i++)\n      if (it.schema[impl[i]] !== undefined) return true;\n  }\n  return out;\n}\n", "'use strict';\n\nvar resolve = require('./resolve')\n  , util = require('./util')\n  , errorClasses = require('./error_classes')\n  , stableStringify = require('fast-json-stable-stringify');\n\nvar validateGenerator = require('../dotjs/validate');\n\n/**\n * Functions below are used inside compiled validations function\n */\n\nvar ucs2length = util.ucs2length;\nvar equal = require('fast-deep-equal');\n\n// this error is thrown by async schemas to return validation errors via exception\nvar ValidationError = errorClasses.Validation;\n\nmodule.exports = compile;\n\n\n/**\n * Compiles schema to validation function\n * @this   Ajv\n * @param  {Object} schema schema object\n * @param  {Object} root object with information about the root schema for this schema\n * @param  {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution\n * @param  {String} baseId base ID for IDs in the schema\n * @return {Function} validation function\n */\nfunction compile(schema, root, localRefs, baseId) {\n  /* jshint validthis: true, evil: true */\n  /* eslint no-shadow: 0 */\n  var self = this\n    , opts = this._opts\n    , refVal = [ undefined ]\n    , refs = {}\n    , patterns = []\n    , patternsHash = {}\n    , defaults = []\n    , defaultsHash = {}\n    , customRules = [];\n\n  root = root || { schema: schema, refVal: refVal, refs: refs };\n\n  var c = checkCompiling.call(this, schema, root, baseId);\n  var compilation = this._compilations[c.index];\n  if (c.compiling) return (compilation.callValidate = callValidate);\n\n  var formats = this._formats;\n  var RULES = this.RULES;\n\n  try {\n    var v = localCompile(schema, root, localRefs, baseId);\n    compilation.validate = v;\n    var cv = compilation.callValidate;\n    if (cv) {\n      cv.schema = v.schema;\n      cv.errors = null;\n      cv.refs = v.refs;\n      cv.refVal = v.refVal;\n      cv.root = v.root;\n      cv.$async = v.$async;\n      if (opts.sourceCode) cv.source = v.source;\n    }\n    return v;\n  } finally {\n    endCompiling.call(this, schema, root, baseId);\n  }\n\n  /* @this   {*} - custom context, see passContext option */\n  function callValidate() {\n    /* jshint validthis: true */\n    var validate = compilation.validate;\n    var result = validate.apply(this, arguments);\n    callValidate.errors = validate.errors;\n    return result;\n  }\n\n  function localCompile(_schema, _root, localRefs, baseId) {\n    var isRoot = !_root || (_root && _root.schema == _schema);\n    if (_root.schema != root.schema)\n      return compile.call(self, _schema, _root, localRefs, baseId);\n\n    var $async = _schema.$async === true;\n\n    var sourceCode = validateGenerator({\n      isTop: true,\n      schema: _schema,\n      isRoot: isRoot,\n      baseId: baseId,\n      root: _root,\n      schemaPath: '',\n      errSchemaPath: '#',\n      errorPath: '\"\"',\n      MissingRefError: errorClasses.MissingRef,\n      RULES: RULES,\n      validate: validateGenerator,\n      util: util,\n      resolve: resolve,\n      resolveRef: resolveRef,\n      usePattern: usePattern,\n      useDefault: useDefault,\n      useCustomRule: useCustomRule,\n      opts: opts,\n      formats: formats,\n      logger: self.logger,\n      self: self\n    });\n\n    sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)\n                   + vars(defaults, defaultCode) + vars(customRules, customRuleCode)\n                   + sourceCode;\n\n    if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema);\n    // console.log('\\n\\n\\n *** \\n', JSON.stringify(sourceCode));\n    var validate;\n    try {\n      var makeValidate = new Function(\n        'self',\n        'RULES',\n        'formats',\n        'root',\n        'refVal',\n        'defaults',\n        'customRules',\n        'equal',\n        'ucs2length',\n        'ValidationError',\n        sourceCode\n      );\n\n      validate = makeValidate(\n        self,\n        RULES,\n        formats,\n        root,\n        refVal,\n        defaults,\n        customRules,\n        equal,\n        ucs2length,\n        ValidationError\n      );\n\n      refVal[0] = validate;\n    } catch(e) {\n      self.logger.error('Error compiling schema, function code:', sourceCode);\n      throw e;\n    }\n\n    validate.schema = _schema;\n    validate.errors = null;\n    validate.refs = refs;\n    validate.refVal = refVal;\n    validate.root = isRoot ? validate : _root;\n    if ($async) validate.$async = true;\n    if (opts.sourceCode === true) {\n      validate.source = {\n        code: sourceCode,\n        patterns: patterns,\n        defaults: defaults\n      };\n    }\n\n    return validate;\n  }\n\n  function resolveRef(baseId, ref, isRoot) {\n    ref = resolve.url(baseId, ref);\n    var refIndex = refs[ref];\n    var _refVal, refCode;\n    if (refIndex !== undefined) {\n      _refVal = refVal[refIndex];\n      refCode = 'refVal[' + refIndex + ']';\n      return resolvedRef(_refVal, refCode);\n    }\n    if (!isRoot && root.refs) {\n      var rootRefId = root.refs[ref];\n      if (rootRefId !== undefined) {\n        _refVal = root.refVal[rootRefId];\n        refCode = addLocalRef(ref, _refVal);\n        return resolvedRef(_refVal, refCode);\n      }\n    }\n\n    refCode = addLocalRef(ref);\n    var v = resolve.call(self, localCompile, root, ref);\n    if (v === undefined) {\n      var localSchema = localRefs && localRefs[ref];\n      if (localSchema) {\n        v = resolve.inlineRef(localSchema, opts.inlineRefs)\n            ? localSchema\n            : compile.call(self, localSchema, root, localRefs, baseId);\n      }\n    }\n\n    if (v === undefined) {\n      removeLocalRef(ref);\n    } else {\n      replaceLocalRef(ref, v);\n      return resolvedRef(v, refCode);\n    }\n  }\n\n  function addLocalRef(ref, v) {\n    var refId = refVal.length;\n    refVal[refId] = v;\n    refs[ref] = refId;\n    return 'refVal' + refId;\n  }\n\n  function removeLocalRef(ref) {\n    delete refs[ref];\n  }\n\n  function replaceLocalRef(ref, v) {\n    var refId = refs[ref];\n    refVal[refId] = v;\n  }\n\n  function resolvedRef(refVal, code) {\n    return typeof refVal == 'object' || typeof refVal == 'boolean'\n            ? { code: code, schema: refVal, inline: true }\n            : { code: code, $async: refVal && !!refVal.$async };\n  }\n\n  function usePattern(regexStr) {\n    var index = patternsHash[regexStr];\n    if (index === undefined) {\n      index = patternsHash[regexStr] = patterns.length;\n      patterns[index] = regexStr;\n    }\n    return 'pattern' + index;\n  }\n\n  function useDefault(value) {\n    switch (typeof value) {\n      case 'boolean':\n      case 'number':\n        return '' + value;\n      case 'string':\n        return util.toQuotedString(value);\n      case 'object':\n        if (value === null) return 'null';\n        var valueStr = stableStringify(value);\n        var index = defaultsHash[valueStr];\n        if (index === undefined) {\n          index = defaultsHash[valueStr] = defaults.length;\n          defaults[index] = value;\n        }\n        return 'default' + index;\n    }\n  }\n\n  function useCustomRule(rule, schema, parentSchema, it) {\n    if (self._opts.validateSchema !== false) {\n      var deps = rule.definition.dependencies;\n      if (deps && !deps.every(function(keyword) {\n        return Object.prototype.hasOwnProperty.call(parentSchema, keyword);\n      }))\n        throw new Error('parent schema must have all required keywords: ' + deps.join(','));\n\n      var validateSchema = rule.definition.validateSchema;\n      if (validateSchema) {\n        var valid = validateSchema(schema);\n        if (!valid) {\n          var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors);\n          if (self._opts.validateSchema == 'log') self.logger.error(message);\n          else throw new Error(message);\n        }\n      }\n    }\n\n    var compile = rule.definition.compile\n      , inline = rule.definition.inline\n      , macro = rule.definition.macro;\n\n    var validate;\n    if (compile) {\n      validate = compile.call(self, schema, parentSchema, it);\n    } else if (macro) {\n      validate = macro.call(self, schema, parentSchema, it);\n      if (opts.validateSchema !== false) self.validateSchema(validate, true);\n    } else if (inline) {\n      validate = inline.call(self, it, rule.keyword, schema, parentSchema);\n    } else {\n      validate = rule.definition.validate;\n      if (!validate) return;\n    }\n\n    if (validate === undefined)\n      throw new Error('custom keyword \"' + rule.keyword + '\"failed to compile');\n\n    var index = customRules.length;\n    customRules[index] = validate;\n\n    return {\n      code: 'customRule' + index,\n      validate: validate\n    };\n  }\n}\n\n\n/**\n * Checks if the schema is currently compiled\n * @this   Ajv\n * @param  {Object} schema schema to compile\n * @param  {Object} root root object\n * @param  {String} baseId base schema ID\n * @return {Object} object with properties \"index\" (compilation index) and \"compiling\" (boolean)\n */\nfunction checkCompiling(schema, root, baseId) {\n  /* jshint validthis: true */\n  var index = compIndex.call(this, schema, root, baseId);\n  if (index >= 0) return { index: index, compiling: true };\n  index = this._compilations.length;\n  this._compilations[index] = {\n    schema: schema,\n    root: root,\n    baseId: baseId\n  };\n  return { index: index, compiling: false };\n}\n\n\n/**\n * Removes the schema from the currently compiled list\n * @this   Ajv\n * @param  {Object} schema schema to compile\n * @param  {Object} root root object\n * @param  {String} baseId base schema ID\n */\nfunction endCompiling(schema, root, baseId) {\n  /* jshint validthis: true */\n  var i = compIndex.call(this, schema, root, baseId);\n  if (i >= 0) this._compilations.splice(i, 1);\n}\n\n\n/**\n * Index of schema compilation in the currently compiled list\n * @this   Ajv\n * @param  {Object} schema schema to compile\n * @param  {Object} root root object\n * @param  {String} baseId base schema ID\n * @return {Integer} compilation index\n */\nfunction compIndex(schema, root, baseId) {\n  /* jshint validthis: true */\n  for (var i=0; i<this._compilations.length; i++) {\n    var c = this._compilations[i];\n    if (c.schema == schema && c.root == root && c.baseId == baseId) return i;\n  }\n  return -1;\n}\n\n\nfunction patternCode(i, patterns) {\n  return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');';\n}\n\n\nfunction defaultCode(i) {\n  return 'var default' + i + ' = defaults[' + i + '];';\n}\n\n\nfunction refValCode(i, refVal) {\n  return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];';\n}\n\n\nfunction customRuleCode(i) {\n  return 'var customRule' + i + ' = customRules[' + i + '];';\n}\n\n\nfunction vars(arr, statement) {\n  if (!arr.length) return '';\n  var code = '';\n  for (var i=0; i<arr.length; i++)\n    code += statement(i, arr);\n  return code;\n}\n", "'use strict';\n\n\nvar Cache = module.exports = function Cache() {\n  this._cache = {};\n};\n\n\nCache.prototype.put = function Cache_put(key, value) {\n  this._cache[key] = value;\n};\n\n\nCache.prototype.get = function Cache_get(key) {\n  return this._cache[key];\n};\n\n\nCache.prototype.del = function Cache_del(key) {\n  delete this._cache[key];\n};\n\n\nCache.prototype.clear = function Cache_clear() {\n  this._cache = {};\n};\n", "'use strict';\n\nvar util = require('./util');\n\nvar DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nvar DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31];\nvar TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i;\nvar HOSTNAME = /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i;\nvar URI = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nvar URIREF = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\n// uri-template: https://tools.ietf.org/html/rfc6570\nvar URITEMPLATE = /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\n// For the source: https://gist.github.com/dperini/729294\n// For test cases: https://mathiasbynens.be/demo/url-regex\n// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.\n// var URL = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu;\nvar URL = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i;\nvar UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nvar JSON_POINTER = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nvar JSON_POINTER_URI_FRAGMENT = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;\nvar RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n\n\nmodule.exports = formats;\n\nfunction formats(mode) {\n  mode = mode == 'full' ? 'full' : 'fast';\n  return util.copy(formats[mode]);\n}\n\n\nformats.fast = {\n  // date: http://tools.ietf.org/html/rfc3339#section-5.6\n  date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n  time: /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n  'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n  uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n  'uri-reference': /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n  'uri-template': URITEMPLATE,\n  url: URL,\n  // email (sources from jsen validator):\n  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\n  email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n  hostname: HOSTNAME,\n  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n  // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n  ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n  regex: regex,\n  // uuid: http://tools.ietf.org/html/rfc4122\n  uuid: UUID,\n  // JSON-pointer: https://tools.ietf.org/html/rfc6901\n  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n  'json-pointer': JSON_POINTER,\n  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n  'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nformats.full = {\n  date: date,\n  time: time,\n  'date-time': date_time,\n  uri: uri,\n  'uri-reference': URIREF,\n  'uri-template': URITEMPLATE,\n  url: URL,\n  email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n  hostname: HOSTNAME,\n  ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n  ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n  regex: regex,\n  uuid: UUID,\n  'json-pointer': JSON_POINTER,\n  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,\n  'relative-json-pointer': RELATIVE_JSON_POINTER\n};\n\n\nfunction isLeapYear(year) {\n  // https://tools.ietf.org/html/rfc3339#appendix-C\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n\nfunction date(str) {\n  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n  var matches = str.match(DATE);\n  if (!matches) return false;\n\n  var year = +matches[1];\n  var month = +matches[2];\n  var day = +matches[3];\n\n  return month >= 1 && month <= 12 && day >= 1 &&\n          day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);\n}\n\n\nfunction time(str, full) {\n  var matches = str.match(TIME);\n  if (!matches) return false;\n\n  var hour = matches[1];\n  var minute = matches[2];\n  var second = matches[3];\n  var timeZone = matches[5];\n  return ((hour <= 23 && minute <= 59 && second <= 59) ||\n          (hour == 23 && minute == 59 && second == 60)) &&\n         (!full || timeZone);\n}\n\n\nvar DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n  // http://tools.ietf.org/html/rfc3339#section-5.6\n  var dateTime = str.split(DATE_TIME_SEPARATOR);\n  return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\n\n\nvar NOT_URI_FRAGMENT = /\\/|:/;\nfunction uri(str) {\n  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n  return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\n\n\nvar Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n  if (Z_ANCHOR.test(str)) return false;\n  try {\n    new RegExp(str);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n", "'use strict';\nmodule.exports = function generate_ref(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $async, $refCode;\n  if ($schema == '#' || $schema == '#/') {\n    if (it.isRoot) {\n      $async = it.async;\n      $refCode = 'validate';\n    } else {\n      $async = it.root.schema.$async === true;\n      $refCode = 'root.refVal[0]';\n    }\n  } else {\n    var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);\n    if ($refVal === undefined) {\n      var $message = it.MissingRefError.message(it.baseId, $schema);\n      if (it.opts.missingRefs == 'fail') {\n        it.logger.error($message);\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('$ref') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \\'' + (it.util.escapeQuotes($schema)) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'can\\\\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        if ($breakOnError) {\n          out += ' if (false) { ';\n        }\n      } else if (it.opts.missingRefs == 'ignore') {\n        it.logger.warn($message);\n        if ($breakOnError) {\n          out += ' if (true) { ';\n        }\n      } else {\n        throw new it.MissingRefError(it.baseId, $schema, $message);\n      }\n    } else if ($refVal.inline) {\n      var $it = it.util.copy(it);\n      $it.level++;\n      var $nextValid = 'valid' + $it.level;\n      $it.schema = $refVal.schema;\n      $it.schemaPath = '';\n      $it.errSchemaPath = $schema;\n      var $code = it.validate($it).replace(/validate\\.schema/g, $refVal.code);\n      out += ' ' + ($code) + ' ';\n      if ($breakOnError) {\n        out += ' if (' + ($nextValid) + ') { ';\n      }\n    } else {\n      $async = $refVal.$async === true || (it.async && $refVal.$async !== false);\n      $refCode = $refVal.code;\n    }\n  }\n  if ($refCode) {\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = '';\n    if (it.opts.passContext) {\n      out += ' ' + ($refCode) + '.call(this, ';\n    } else {\n      out += ' ' + ($refCode) + '( ';\n    }\n    out += ' ' + ($data) + ', (dataPath || \\'\\')';\n    if (it.errorPath != '\"\"') {\n      out += ' + ' + (it.errorPath);\n    }\n    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData)  ';\n    var __callValidate = out;\n    out = $$outStack.pop();\n    if ($async) {\n      if (!it.async) throw new Error('async schema referenced by sync schema');\n      if ($breakOnError) {\n        out += ' var ' + ($valid) + '; ';\n      }\n      out += ' try { await ' + (__callValidate) + '; ';\n      if ($breakOnError) {\n        out += ' ' + ($valid) + ' = true; ';\n      }\n      out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';\n      if ($breakOnError) {\n        out += ' ' + ($valid) + ' = false; ';\n      }\n      out += ' } ';\n      if ($breakOnError) {\n        out += ' if (' + ($valid) + ') { ';\n      }\n    } else {\n      out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';\n      if ($breakOnError) {\n        out += ' else { ';\n      }\n    }\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_allOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $currentBaseId = $it.baseId,\n    $allSchemasEmpty = true;\n  var arr1 = $schema;\n  if (arr1) {\n    var $sch, $i = -1,\n      l1 = arr1.length - 1;\n    while ($i < l1) {\n      $sch = arr1[$i += 1];\n      if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n        $allSchemasEmpty = false;\n        $it.schema = $sch;\n        $it.schemaPath = $schemaPath + '[' + $i + ']';\n        $it.errSchemaPath = $errSchemaPath + '/' + $i;\n        out += '  ' + (it.validate($it)) + ' ';\n        $it.baseId = $currentBaseId;\n        if ($breakOnError) {\n          out += ' if (' + ($nextValid) + ') { ';\n          $closingBraces += '}';\n        }\n      }\n    }\n  }\n  if ($breakOnError) {\n    if ($allSchemasEmpty) {\n      out += ' if (true) { ';\n    } else {\n      out += ' ' + ($closingBraces.slice(0, -1)) + ' ';\n    }\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_anyOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $noEmptySchema = $schema.every(function($sch) {\n    return (it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all));\n  });\n  if ($noEmptySchema) {\n    var $currentBaseId = $it.baseId;\n    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false;  ';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    var arr1 = $schema;\n    if (arr1) {\n      var $sch, $i = -1,\n        l1 = arr1.length - 1;\n      while ($i < l1) {\n        $sch = arr1[$i += 1];\n        $it.schema = $sch;\n        $it.schemaPath = $schemaPath + '[' + $i + ']';\n        $it.errSchemaPath = $errSchemaPath + '/' + $i;\n        out += '  ' + (it.validate($it)) + ' ';\n        $it.baseId = $currentBaseId;\n        out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';\n        $closingBraces += '}';\n      }\n    }\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('anyOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should match some schema in anyOf\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError(vErrors); ';\n      } else {\n        out += ' validate.errors = vErrors; return false; ';\n      }\n    }\n    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n    if (it.opts.allErrors) {\n      out += ' } ';\n    }\n  } else {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_comment(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $schema = it.schema[$keyword];\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $comment = it.util.toQuotedString($schema);\n  if (it.opts.$comment === true) {\n    out += ' console.log(' + ($comment) + ');';\n  } else if (typeof it.opts.$comment == 'function') {\n    out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_const(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!$isData) {\n    out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';\n  }\n  out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('const') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be equal to constant\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' }';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_contains(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $idx = 'i' + $lvl,\n    $dataNxt = $it.dataLevel = it.dataLevel + 1,\n    $nextData = 'data' + $dataNxt,\n    $currentBaseId = it.baseId,\n    $nonEmptySchema = (it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all));\n  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n  if ($nonEmptySchema) {\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n    var $passData = $data + '[' + $idx + ']';\n    $it.dataPathArr[$dataNxt] = $idx;\n    var $code = it.validate($it);\n    $it.baseId = $currentBaseId;\n    if (it.util.varOccurences($code, $nextData) < 2) {\n      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n    } else {\n      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n    }\n    out += ' if (' + ($nextValid) + ') break; }  ';\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';\n  } else {\n    out += ' if (' + ($data) + '.length == 0) {';\n  }\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('contains') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should contain a valid item\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' } else { ';\n  if ($nonEmptySchema) {\n    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n  }\n  if (it.opts.allErrors) {\n    out += ' } ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_dependencies(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $schemaDeps = {},\n    $propertyDeps = {},\n    $ownProperties = it.opts.ownProperties;\n  for ($property in $schema) {\n    if ($property == '__proto__') continue;\n    var $sch = $schema[$property];\n    var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;\n    $deps[$property] = $sch;\n  }\n  out += 'var ' + ($errs) + ' = errors;';\n  var $currentErrorPath = it.errorPath;\n  out += 'var missing' + ($lvl) + ';';\n  for (var $property in $propertyDeps) {\n    $deps = $propertyDeps[$property];\n    if ($deps.length) {\n      out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n      if ($ownProperties) {\n        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n      }\n      if ($breakOnError) {\n        out += ' && ( ';\n        var arr1 = $deps;\n        if (arr1) {\n          var $propertyKey, $i = -1,\n            l1 = arr1.length - 1;\n          while ($i < l1) {\n            $propertyKey = arr1[$i += 1];\n            if ($i) {\n              out += ' || ';\n            }\n            var $prop = it.util.getProperty($propertyKey),\n              $useData = $data + $prop;\n            out += ' ( ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n          }\n        }\n        out += ')) {  ';\n        var $propertyPath = 'missing' + $lvl,\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n        }\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'should have ';\n            if ($deps.length == 1) {\n              out += 'property ' + (it.util.escapeQuotes($deps[0]));\n            } else {\n              out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n            }\n            out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n      } else {\n        out += ' ) { ';\n        var arr2 = $deps;\n        if (arr2) {\n          var $propertyKey, i2 = -1,\n            l2 = arr2.length - 1;\n          while (i2 < l2) {\n            $propertyKey = arr2[i2 += 1];\n            var $prop = it.util.getProperty($propertyKey),\n              $missingProperty = it.util.escapeQuotes($propertyKey),\n              $useData = $data + $prop;\n            if (it.opts._errorDataPathProperty) {\n              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n            }\n            out += ' if ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') {  var err =   '; /* istanbul ignore else */\n            if (it.createErrors !== false) {\n              out += ' { keyword: \\'' + ('dependencies') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \\'' + (it.util.escapeQuotes($property)) + '\\', missingProperty: \\'' + ($missingProperty) + '\\', depsCount: ' + ($deps.length) + ', deps: \\'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(\", \"))) + '\\' } ';\n              if (it.opts.messages !== false) {\n                out += ' , message: \\'should have ';\n                if ($deps.length == 1) {\n                  out += 'property ' + (it.util.escapeQuotes($deps[0]));\n                } else {\n                  out += 'properties ' + (it.util.escapeQuotes($deps.join(\", \")));\n                }\n                out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\\' ';\n              }\n              if (it.opts.verbose) {\n                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n              }\n              out += ' } ';\n            } else {\n              out += ' {} ';\n            }\n            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n          }\n        }\n      }\n      out += ' }   ';\n      if ($breakOnError) {\n        $closingBraces += '}';\n        out += ' else { ';\n      }\n    }\n  }\n  it.errorPath = $currentErrorPath;\n  var $currentBaseId = $it.baseId;\n  for (var $property in $schemaDeps) {\n    var $sch = $schemaDeps[$property];\n    if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n      out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';\n      if ($ownProperties) {\n        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($property)) + '\\') ';\n      }\n      out += ') { ';\n      $it.schema = $sch;\n      $it.schemaPath = $schemaPath + it.util.getProperty($property);\n      $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);\n      out += '  ' + (it.validate($it)) + ' ';\n      $it.baseId = $currentBaseId;\n      out += ' }  ';\n      if ($breakOnError) {\n        out += ' if (' + ($nextValid) + ') { ';\n        $closingBraces += '}';\n      }\n    }\n  }\n  if ($breakOnError) {\n    out += '   ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_enum(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $i = 'i' + $lvl,\n    $vSchema = 'schema' + $lvl;\n  if (!$isData) {\n    out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';\n  }\n  out += 'var ' + ($valid) + ';';\n  if ($isData) {\n    out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n  }\n  out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';\n  if ($isData) {\n    out += '  }  ';\n  }\n  out += ' if (!' + ($valid) + ') {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('enum') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be equal to one of the allowed values\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' }';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_format(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  if (it.opts.format === false) {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n    return out;\n  }\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $unknownFormats = it.opts.unknownFormats,\n    $allowUnknown = Array.isArray($unknownFormats);\n  if ($isData) {\n    var $format = 'format' + $lvl,\n      $isObject = 'isObject' + $lvl,\n      $formatType = 'formatType' + $lvl;\n    out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \\'object\\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \\'string\\'; if (' + ($isObject) + ') { ';\n    if (it.async) {\n      out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';\n    }\n    out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if (  ';\n    if ($isData) {\n      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n    }\n    out += ' (';\n    if ($unknownFormats != 'ignore') {\n      out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';\n      if ($allowUnknown) {\n        out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';\n      }\n      out += ') || ';\n    }\n    out += ' (' + ($format) + ' && ' + ($formatType) + ' == \\'' + ($ruleType) + '\\' && !(typeof ' + ($format) + ' == \\'function\\' ? ';\n    if (it.async) {\n      out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';\n    } else {\n      out += ' ' + ($format) + '(' + ($data) + ') ';\n    }\n    out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';\n  } else {\n    var $format = it.formats[$schema];\n    if (!$format) {\n      if ($unknownFormats == 'ignore') {\n        it.logger.warn('unknown format \"' + $schema + '\" ignored in schema at path \"' + it.errSchemaPath + '\"');\n        if ($breakOnError) {\n          out += ' if (true) { ';\n        }\n        return out;\n      } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {\n        if ($breakOnError) {\n          out += ' if (true) { ';\n        }\n        return out;\n      } else {\n        throw new Error('unknown format \"' + $schema + '\" is used in schema at path \"' + it.errSchemaPath + '\"');\n      }\n    }\n    var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;\n    var $formatType = $isObject && $format.type || 'string';\n    if ($isObject) {\n      var $async = $format.async === true;\n      $format = $format.validate;\n    }\n    if ($formatType != $ruleType) {\n      if ($breakOnError) {\n        out += ' if (true) { ';\n      }\n      return out;\n    }\n    if ($async) {\n      if (!it.async) throw new Error('async format in sync schema');\n      var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';\n      out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';\n    } else {\n      out += ' if (! ';\n      var $formatRef = 'formats' + it.util.getProperty($schema);\n      if ($isObject) $formatRef += '.validate';\n      if (typeof $format == 'function') {\n        out += ' ' + ($formatRef) + '(' + ($data) + ') ';\n      } else {\n        out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';\n      }\n      out += ') { ';\n    }\n  }\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('format') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format:  ';\n    if ($isData) {\n      out += '' + ($schemaValue);\n    } else {\n      out += '' + (it.util.toQuotedString($schema));\n    }\n    out += '  } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should match format \"';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + (it.util.escapeQuotes($schema));\n      }\n      out += '\"\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + (it.util.toQuotedString($schema));\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' } ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_if(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $thenSch = it.schema['then'],\n    $elseSch = it.schema['else'],\n    $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? (typeof $thenSch == 'object' && Object.keys($thenSch).length > 0) || $thenSch === false : it.util.schemaHasRules($thenSch, it.RULES.all)),\n    $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? (typeof $elseSch == 'object' && Object.keys($elseSch).length > 0) || $elseSch === false : it.util.schemaHasRules($elseSch, it.RULES.all)),\n    $currentBaseId = $it.baseId;\n  if ($thenPresent || $elsePresent) {\n    var $ifClause;\n    $it.createErrors = false;\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true;  ';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    out += '  ' + (it.validate($it)) + ' ';\n    $it.baseId = $currentBaseId;\n    $it.createErrors = true;\n    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }  ';\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    if ($thenPresent) {\n      out += ' if (' + ($nextValid) + ') {  ';\n      $it.schema = it.schema['then'];\n      $it.schemaPath = it.schemaPath + '.then';\n      $it.errSchemaPath = it.errSchemaPath + '/then';\n      out += '  ' + (it.validate($it)) + ' ';\n      $it.baseId = $currentBaseId;\n      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n      if ($thenPresent && $elsePresent) {\n        $ifClause = 'ifClause' + $lvl;\n        out += ' var ' + ($ifClause) + ' = \\'then\\'; ';\n      } else {\n        $ifClause = '\\'then\\'';\n      }\n      out += ' } ';\n      if ($elsePresent) {\n        out += ' else { ';\n      }\n    } else {\n      out += ' if (!' + ($nextValid) + ') { ';\n    }\n    if ($elsePresent) {\n      $it.schema = it.schema['else'];\n      $it.schemaPath = it.schemaPath + '.else';\n      $it.errSchemaPath = it.errSchemaPath + '/else';\n      out += '  ' + (it.validate($it)) + ' ';\n      $it.baseId = $currentBaseId;\n      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';\n      if ($thenPresent && $elsePresent) {\n        $ifClause = 'ifClause' + $lvl;\n        out += ' var ' + ($ifClause) + ' = \\'else\\'; ';\n      } else {\n        $ifClause = '\\'else\\'';\n      }\n      out += ' } ';\n    }\n    out += ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('if') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should match \"\\' + ' + ($ifClause) + ' + \\'\" schema\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError(vErrors); ';\n      } else {\n        out += ' validate.errors = vErrors; return false; ';\n      }\n    }\n    out += ' }   ';\n    if ($breakOnError) {\n      out += ' else { ';\n    }\n  } else {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_items(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $idx = 'i' + $lvl,\n    $dataNxt = $it.dataLevel = it.dataLevel + 1,\n    $nextData = 'data' + $dataNxt,\n    $currentBaseId = it.baseId;\n  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n  if (Array.isArray($schema)) {\n    var $additionalItems = it.schema.additionalItems;\n    if ($additionalItems === false) {\n      out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';\n      var $currErrSchemaPath = $errSchemaPath;\n      $errSchemaPath = it.errSchemaPath + '/additionalItems';\n      out += '  if (!' + ($valid) + ') {   ';\n      var $$outStack = $$outStack || [];\n      $$outStack.push(out);\n      out = ''; /* istanbul ignore else */\n      if (it.createErrors !== false) {\n        out += ' { keyword: \\'' + ('additionalItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';\n        if (it.opts.messages !== false) {\n          out += ' , message: \\'should NOT have more than ' + ($schema.length) + ' items\\' ';\n        }\n        if (it.opts.verbose) {\n          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n        }\n        out += ' } ';\n      } else {\n        out += ' {} ';\n      }\n      var __err = out;\n      out = $$outStack.pop();\n      if (!it.compositeRule && $breakOnError) {\n        /* istanbul ignore if */\n        if (it.async) {\n          out += ' throw new ValidationError([' + (__err) + ']); ';\n        } else {\n          out += ' validate.errors = [' + (__err) + ']; return false; ';\n        }\n      } else {\n        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n      }\n      out += ' } ';\n      $errSchemaPath = $currErrSchemaPath;\n      if ($breakOnError) {\n        $closingBraces += '}';\n        out += ' else { ';\n      }\n    }\n    var arr1 = $schema;\n    if (arr1) {\n      var $sch, $i = -1,\n        l1 = arr1.length - 1;\n      while ($i < l1) {\n        $sch = arr1[$i += 1];\n        if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n          out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';\n          var $passData = $data + '[' + $i + ']';\n          $it.schema = $sch;\n          $it.schemaPath = $schemaPath + '[' + $i + ']';\n          $it.errSchemaPath = $errSchemaPath + '/' + $i;\n          $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);\n          $it.dataPathArr[$dataNxt] = $i;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          out += ' }  ';\n          if ($breakOnError) {\n            out += ' if (' + ($nextValid) + ') { ';\n            $closingBraces += '}';\n          }\n        }\n      }\n    }\n    if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? (typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0) || $additionalItems === false : it.util.schemaHasRules($additionalItems, it.RULES.all))) {\n      $it.schema = $additionalItems;\n      $it.schemaPath = it.schemaPath + '.additionalItems';\n      $it.errSchemaPath = it.errSchemaPath + '/additionalItems';\n      out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') {  for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n      $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n      var $passData = $data + '[' + $idx + ']';\n      $it.dataPathArr[$dataNxt] = $idx;\n      var $code = it.validate($it);\n      $it.baseId = $currentBaseId;\n      if (it.util.varOccurences($code, $nextData) < 2) {\n        out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n      } else {\n        out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n      }\n      if ($breakOnError) {\n        out += ' if (!' + ($nextValid) + ') break; ';\n      }\n      out += ' } }  ';\n      if ($breakOnError) {\n        out += ' if (' + ($nextValid) + ') { ';\n        $closingBraces += '}';\n      }\n    }\n  } else if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += '  for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';\n    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);\n    var $passData = $data + '[' + $idx + ']';\n    $it.dataPathArr[$dataNxt] = $idx;\n    var $code = it.validate($it);\n    $it.baseId = $currentBaseId;\n    if (it.util.varOccurences($code, $nextData) < 2) {\n      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n    } else {\n      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n    }\n    if ($breakOnError) {\n      out += ' if (!' + ($nextValid) + ') break; ';\n    }\n    out += ' }';\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate__limit(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $isMax = $keyword == 'maximum',\n    $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',\n    $schemaExcl = it.schema[$exclusiveKeyword],\n    $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,\n    $op = $isMax ? '<' : '>',\n    $notOp = $isMax ? '>' : '<',\n    $errorKeyword = undefined;\n  if (!($isData || typeof $schema == 'number' || $schema === undefined)) {\n    throw new Error($keyword + ' must be number');\n  }\n  if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) {\n    throw new Error($exclusiveKeyword + ' must be number or boolean');\n  }\n  if ($isDataExcl) {\n    var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\n      $exclusive = 'exclusive' + $lvl,\n      $exclType = 'exclType' + $lvl,\n      $exclIsNumber = 'exclIsNumber' + $lvl,\n      $opExpr = 'op' + $lvl,\n      $opStr = '\\' + ' + $opExpr + ' + \\'';\n    out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';\n    $schemaValueExcl = 'schemaExcl' + $lvl;\n    out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \\'boolean\\' && ' + ($exclType) + ' != \\'undefined\\' && ' + ($exclType) + ' != \\'number\\') { ';\n    var $errorKeyword = $exclusiveKeyword;\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ($errorKeyword || '_exclusiveLimit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'' + ($exclusiveKeyword) + ' should be boolean\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    out += ' } else if ( ';\n    if ($isData) {\n      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n    }\n    out += ' ' + ($exclType) + ' == \\'number\\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \\'' + ($op) + '\\' : \\'' + ($op) + '=\\'; ';\n    if ($schema === undefined) {\n      $errorKeyword = $exclusiveKeyword;\n      $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n      $schemaValue = $schemaValueExcl;\n      $isData = $isDataExcl;\n    }\n  } else {\n    var $exclIsNumber = typeof $schemaExcl == 'number',\n      $opStr = $op;\n    if ($exclIsNumber && $isData) {\n      var $opExpr = '\\'' + $opStr + '\\'';\n      out += ' if ( ';\n      if ($isData) {\n        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n      }\n      out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';\n    } else {\n      if ($exclIsNumber && $schema === undefined) {\n        $exclusive = true;\n        $errorKeyword = $exclusiveKeyword;\n        $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n        $schemaValue = $schemaExcl;\n        $notOp += '=';\n      } else {\n        if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);\n        if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {\n          $exclusive = true;\n          $errorKeyword = $exclusiveKeyword;\n          $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;\n          $notOp += '=';\n        } else {\n          $exclusive = false;\n          $opStr += '=';\n        }\n      }\n      var $opExpr = '\\'' + $opStr + '\\'';\n      out += ' if ( ';\n      if ($isData) {\n        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n      }\n      out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';\n    }\n  }\n  $errorKeyword = $errorKeyword || $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limit') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be ' + ($opStr) + ' ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue);\n      } else {\n        out += '' + ($schemaValue) + '\\'';\n      }\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += ' } ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate__limitItems(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  var $op = $keyword == 'maxItems' ? '>' : '<';\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n  }\n  out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n  var $errorKeyword = $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limitItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should NOT have ';\n      if ($keyword == 'maxItems') {\n        out += 'more';\n      } else {\n        out += 'fewer';\n      }\n      out += ' than ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + ($schema);\n      }\n      out += ' items\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate__limitLength(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  var $op = $keyword == 'maxLength' ? '>' : '<';\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n  }\n  if (it.opts.unicode === false) {\n    out += ' ' + ($data) + '.length ';\n  } else {\n    out += ' ucs2length(' + ($data) + ') ';\n  }\n  out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';\n  var $errorKeyword = $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limitLength') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should NOT be ';\n      if ($keyword == 'maxLength') {\n        out += 'longer';\n      } else {\n        out += 'shorter';\n      }\n      out += ' than ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + ($schema);\n      }\n      out += ' characters\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate__limitProperties(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  var $op = $keyword == 'maxProperties' ? '>' : '<';\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'number\\') || ';\n  }\n  out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';\n  var $errorKeyword = $keyword;\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ($errorKeyword || '_limitProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should NOT have ';\n      if ($keyword == 'maxProperties') {\n        out += 'more';\n      } else {\n        out += 'fewer';\n      }\n      out += ' than ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + ($schema);\n      }\n      out += ' properties\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_multipleOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (!($isData || typeof $schema == 'number')) {\n    throw new Error($keyword + ' must be number');\n  }\n  out += 'var division' + ($lvl) + ';if (';\n  if ($isData) {\n    out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \\'number\\' || ';\n  }\n  out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';\n  if (it.opts.multipleOfPrecision) {\n    out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';\n  } else {\n    out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';\n  }\n  out += ' ) ';\n  if ($isData) {\n    out += '  )  ';\n  }\n  out += ' ) {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('multipleOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should be multiple of ';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue);\n      } else {\n        out += '' + ($schemaValue) + '\\'';\n      }\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + ($schema);\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_not(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    out += ' var ' + ($errs) + ' = errors;  ';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    $it.createErrors = false;\n    var $allErrorsOption;\n    if ($it.opts.allErrors) {\n      $allErrorsOption = $it.opts.allErrors;\n      $it.opts.allErrors = false;\n    }\n    out += ' ' + (it.validate($it)) + ' ';\n    $it.createErrors = true;\n    if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' if (' + ($nextValid) + ') {   ';\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should NOT be valid\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';\n    if (it.opts.allErrors) {\n      out += ' } ';\n    }\n  } else {\n    out += '  var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('not') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should NOT be valid\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if ($breakOnError) {\n      out += ' if (false) { ';\n    }\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_oneOf(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $currentBaseId = $it.baseId,\n    $prevValid = 'prevValid' + $lvl,\n    $passingSchemas = 'passingSchemas' + $lvl;\n  out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';\n  var $wasComposite = it.compositeRule;\n  it.compositeRule = $it.compositeRule = true;\n  var arr1 = $schema;\n  if (arr1) {\n    var $sch, $i = -1,\n      l1 = arr1.length - 1;\n    while ($i < l1) {\n      $sch = arr1[$i += 1];\n      if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n        $it.schema = $sch;\n        $it.schemaPath = $schemaPath + '[' + $i + ']';\n        $it.errSchemaPath = $errSchemaPath + '/' + $i;\n        out += '  ' + (it.validate($it)) + ' ';\n        $it.baseId = $currentBaseId;\n      } else {\n        out += ' var ' + ($nextValid) + ' = true; ';\n      }\n      if ($i) {\n        out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';\n        $closingBraces += '}';\n      }\n      out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';\n    }\n  }\n  it.compositeRule = $it.compositeRule = $wasComposite;\n  out += '' + ($closingBraces) + 'if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('oneOf') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should match exactly one schema in oneOf\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError(vErrors); ';\n    } else {\n      out += ' validate.errors = vErrors; return false; ';\n    }\n  }\n  out += '} else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';\n  if (it.opts.allErrors) {\n    out += ' } ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_pattern(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);\n  out += 'if ( ';\n  if ($isData) {\n    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \\'string\\') || ';\n  }\n  out += ' !' + ($regexp) + '.test(' + ($data) + ') ) {   ';\n  var $$outStack = $$outStack || [];\n  $$outStack.push(out);\n  out = ''; /* istanbul ignore else */\n  if (it.createErrors !== false) {\n    out += ' { keyword: \\'' + ('pattern') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern:  ';\n    if ($isData) {\n      out += '' + ($schemaValue);\n    } else {\n      out += '' + (it.util.toQuotedString($schema));\n    }\n    out += '  } ';\n    if (it.opts.messages !== false) {\n      out += ' , message: \\'should match pattern \"';\n      if ($isData) {\n        out += '\\' + ' + ($schemaValue) + ' + \\'';\n      } else {\n        out += '' + (it.util.escapeQuotes($schema));\n      }\n      out += '\"\\' ';\n    }\n    if (it.opts.verbose) {\n      out += ' , schema:  ';\n      if ($isData) {\n        out += 'validate.schema' + ($schemaPath);\n      } else {\n        out += '' + (it.util.toQuotedString($schema));\n      }\n      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n    }\n    out += ' } ';\n  } else {\n    out += ' {} ';\n  }\n  var __err = out;\n  out = $$outStack.pop();\n  if (!it.compositeRule && $breakOnError) {\n    /* istanbul ignore if */\n    if (it.async) {\n      out += ' throw new ValidationError([' + (__err) + ']); ';\n    } else {\n      out += ' validate.errors = [' + (__err) + ']; return false; ';\n    }\n  } else {\n    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n  }\n  out += '} ';\n  if ($breakOnError) {\n    out += ' else { ';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_properties(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  var $key = 'key' + $lvl,\n    $idx = 'idx' + $lvl,\n    $dataNxt = $it.dataLevel = it.dataLevel + 1,\n    $nextData = 'data' + $dataNxt,\n    $dataProperties = 'dataProperties' + $lvl;\n  var $schemaKeys = Object.keys($schema || {}).filter(notProto),\n    $pProperties = it.schema.patternProperties || {},\n    $pPropertyKeys = Object.keys($pProperties).filter(notProto),\n    $aProperties = it.schema.additionalProperties,\n    $someProperties = $schemaKeys.length || $pPropertyKeys.length,\n    $noAdditional = $aProperties === false,\n    $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,\n    $removeAdditional = it.opts.removeAdditional,\n    $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,\n    $ownProperties = it.opts.ownProperties,\n    $currentBaseId = it.baseId;\n  var $required = it.schema.required;\n  if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) {\n    var $requiredHash = it.util.toHash($required);\n  }\n\n  function notProto(p) {\n    return p !== '__proto__';\n  }\n  out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';\n  if ($ownProperties) {\n    out += ' var ' + ($dataProperties) + ' = undefined;';\n  }\n  if ($checkAdditional) {\n    if ($ownProperties) {\n      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n    } else {\n      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n    }\n    if ($someProperties) {\n      out += ' var isAdditional' + ($lvl) + ' = !(false ';\n      if ($schemaKeys.length) {\n        if ($schemaKeys.length > 8) {\n          out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';\n        } else {\n          var arr1 = $schemaKeys;\n          if (arr1) {\n            var $propertyKey, i1 = -1,\n              l1 = arr1.length - 1;\n            while (i1 < l1) {\n              $propertyKey = arr1[i1 += 1];\n              out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';\n            }\n          }\n        }\n      }\n      if ($pPropertyKeys.length) {\n        var arr2 = $pPropertyKeys;\n        if (arr2) {\n          var $pProperty, $i = -1,\n            l2 = arr2.length - 1;\n          while ($i < l2) {\n            $pProperty = arr2[$i += 1];\n            out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';\n          }\n        }\n      }\n      out += ' ); if (isAdditional' + ($lvl) + ') { ';\n    }\n    if ($removeAdditional == 'all') {\n      out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n    } else {\n      var $currentErrorPath = it.errorPath;\n      var $additionalProperty = '\\' + ' + $key + ' + \\'';\n      if (it.opts._errorDataPathProperty) {\n        it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n      }\n      if ($noAdditional) {\n        if ($removeAdditional) {\n          out += ' delete ' + ($data) + '[' + ($key) + ']; ';\n        } else {\n          out += ' ' + ($nextValid) + ' = false; ';\n          var $currErrSchemaPath = $errSchemaPath;\n          $errSchemaPath = it.errSchemaPath + '/additionalProperties';\n          var $$outStack = $$outStack || [];\n          $$outStack.push(out);\n          out = ''; /* istanbul ignore else */\n          if (it.createErrors !== false) {\n            out += ' { keyword: \\'' + ('additionalProperties') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \\'' + ($additionalProperty) + '\\' } ';\n            if (it.opts.messages !== false) {\n              out += ' , message: \\'';\n              if (it.opts._errorDataPathProperty) {\n                out += 'is an invalid additional property';\n              } else {\n                out += 'should NOT have additional properties';\n              }\n              out += '\\' ';\n            }\n            if (it.opts.verbose) {\n              out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n            }\n            out += ' } ';\n          } else {\n            out += ' {} ';\n          }\n          var __err = out;\n          out = $$outStack.pop();\n          if (!it.compositeRule && $breakOnError) {\n            /* istanbul ignore if */\n            if (it.async) {\n              out += ' throw new ValidationError([' + (__err) + ']); ';\n            } else {\n              out += ' validate.errors = [' + (__err) + ']; return false; ';\n            }\n          } else {\n            out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n          }\n          $errSchemaPath = $currErrSchemaPath;\n          if ($breakOnError) {\n            out += ' break; ';\n          }\n        }\n      } else if ($additionalIsSchema) {\n        if ($removeAdditional == 'failing') {\n          out += ' var ' + ($errs) + ' = errors;  ';\n          var $wasComposite = it.compositeRule;\n          it.compositeRule = $it.compositeRule = true;\n          $it.schema = $aProperties;\n          $it.schemaPath = it.schemaPath + '.additionalProperties';\n          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n          var $passData = $data + '[' + $key + ']';\n          $it.dataPathArr[$dataNxt] = $key;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; }  ';\n          it.compositeRule = $it.compositeRule = $wasComposite;\n        } else {\n          $it.schema = $aProperties;\n          $it.schemaPath = it.schemaPath + '.additionalProperties';\n          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';\n          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n          var $passData = $data + '[' + $key + ']';\n          $it.dataPathArr[$dataNxt] = $key;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          if ($breakOnError) {\n            out += ' if (!' + ($nextValid) + ') break; ';\n          }\n        }\n      }\n      it.errorPath = $currentErrorPath;\n    }\n    if ($someProperties) {\n      out += ' } ';\n    }\n    out += ' }  ';\n    if ($breakOnError) {\n      out += ' if (' + ($nextValid) + ') { ';\n      $closingBraces += '}';\n    }\n  }\n  var $useDefaults = it.opts.useDefaults && !it.compositeRule;\n  if ($schemaKeys.length) {\n    var arr3 = $schemaKeys;\n    if (arr3) {\n      var $propertyKey, i3 = -1,\n        l3 = arr3.length - 1;\n      while (i3 < l3) {\n        $propertyKey = arr3[i3 += 1];\n        var $sch = $schema[$propertyKey];\n        if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n          var $prop = it.util.getProperty($propertyKey),\n            $passData = $data + $prop,\n            $hasDefault = $useDefaults && $sch.default !== undefined;\n          $it.schema = $sch;\n          $it.schemaPath = $schemaPath + $prop;\n          $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);\n          $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);\n          $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            $code = it.util.varReplace($code, $nextData, $passData);\n            var $useData = $passData;\n          } else {\n            var $useData = $nextData;\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';\n          }\n          if ($hasDefault) {\n            out += ' ' + ($code) + ' ';\n          } else {\n            if ($requiredHash && $requiredHash[$propertyKey]) {\n              out += ' if ( ' + ($useData) + ' === undefined ';\n              if ($ownProperties) {\n                out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n              }\n              out += ') { ' + ($nextValid) + ' = false; ';\n              var $currentErrorPath = it.errorPath,\n                $currErrSchemaPath = $errSchemaPath,\n                $missingProperty = it.util.escapeQuotes($propertyKey);\n              if (it.opts._errorDataPathProperty) {\n                it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n              }\n              $errSchemaPath = it.errSchemaPath + '/required';\n              var $$outStack = $$outStack || [];\n              $$outStack.push(out);\n              out = ''; /* istanbul ignore else */\n              if (it.createErrors !== false) {\n                out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n                if (it.opts.messages !== false) {\n                  out += ' , message: \\'';\n                  if (it.opts._errorDataPathProperty) {\n                    out += 'is a required property';\n                  } else {\n                    out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n                  }\n                  out += '\\' ';\n                }\n                if (it.opts.verbose) {\n                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n                }\n                out += ' } ';\n              } else {\n                out += ' {} ';\n              }\n              var __err = out;\n              out = $$outStack.pop();\n              if (!it.compositeRule && $breakOnError) {\n                /* istanbul ignore if */\n                if (it.async) {\n                  out += ' throw new ValidationError([' + (__err) + ']); ';\n                } else {\n                  out += ' validate.errors = [' + (__err) + ']; return false; ';\n                }\n              } else {\n                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n              }\n              $errSchemaPath = $currErrSchemaPath;\n              it.errorPath = $currentErrorPath;\n              out += ' } else { ';\n            } else {\n              if ($breakOnError) {\n                out += ' if ( ' + ($useData) + ' === undefined ';\n                if ($ownProperties) {\n                  out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n                }\n                out += ') { ' + ($nextValid) + ' = true; } else { ';\n              } else {\n                out += ' if (' + ($useData) + ' !== undefined ';\n                if ($ownProperties) {\n                  out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n                }\n                out += ' ) { ';\n              }\n            }\n            out += ' ' + ($code) + ' } ';\n          }\n        }\n        if ($breakOnError) {\n          out += ' if (' + ($nextValid) + ') { ';\n          $closingBraces += '}';\n        }\n      }\n    }\n  }\n  if ($pPropertyKeys.length) {\n    var arr4 = $pPropertyKeys;\n    if (arr4) {\n      var $pProperty, i4 = -1,\n        l4 = arr4.length - 1;\n      while (i4 < l4) {\n        $pProperty = arr4[i4 += 1];\n        var $sch = $pProperties[$pProperty];\n        if ((it.opts.strictKeywords ? (typeof $sch == 'object' && Object.keys($sch).length > 0) || $sch === false : it.util.schemaHasRules($sch, it.RULES.all))) {\n          $it.schema = $sch;\n          $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);\n          $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);\n          if ($ownProperties) {\n            out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n          } else {\n            out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n          }\n          out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';\n          $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);\n          var $passData = $data + '[' + $key + ']';\n          $it.dataPathArr[$dataNxt] = $key;\n          var $code = it.validate($it);\n          $it.baseId = $currentBaseId;\n          if (it.util.varOccurences($code, $nextData) < 2) {\n            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n          } else {\n            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n          }\n          if ($breakOnError) {\n            out += ' if (!' + ($nextValid) + ') break; ';\n          }\n          out += ' } ';\n          if ($breakOnError) {\n            out += ' else ' + ($nextValid) + ' = true; ';\n          }\n          out += ' }  ';\n          if ($breakOnError) {\n            out += ' if (' + ($nextValid) + ') { ';\n            $closingBraces += '}';\n          }\n        }\n      }\n    }\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_propertyNames(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $errs = 'errs__' + $lvl;\n  var $it = it.util.copy(it);\n  var $closingBraces = '';\n  $it.level++;\n  var $nextValid = 'valid' + $it.level;\n  out += 'var ' + ($errs) + ' = errors;';\n  if ((it.opts.strictKeywords ? (typeof $schema == 'object' && Object.keys($schema).length > 0) || $schema === false : it.util.schemaHasRules($schema, it.RULES.all))) {\n    $it.schema = $schema;\n    $it.schemaPath = $schemaPath;\n    $it.errSchemaPath = $errSchemaPath;\n    var $key = 'key' + $lvl,\n      $idx = 'idx' + $lvl,\n      $i = 'i' + $lvl,\n      $invalidName = '\\' + ' + $key + ' + \\'',\n      $dataNxt = $it.dataLevel = it.dataLevel + 1,\n      $nextData = 'data' + $dataNxt,\n      $dataProperties = 'dataProperties' + $lvl,\n      $ownProperties = it.opts.ownProperties,\n      $currentBaseId = it.baseId;\n    if ($ownProperties) {\n      out += ' var ' + ($dataProperties) + ' = undefined; ';\n    }\n    if ($ownProperties) {\n      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';\n    } else {\n      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';\n    }\n    out += ' var startErrs' + ($lvl) + ' = errors; ';\n    var $passData = $key;\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    var $code = it.validate($it);\n    $it.baseId = $currentBaseId;\n    if (it.util.varOccurences($code, $nextData) < 2) {\n      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';\n    } else {\n      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';\n    }\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; }   var err =   '; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('propertyNames') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \\'' + ($invalidName) + '\\' } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'property name \\\\\\'' + ($invalidName) + '\\\\\\' is invalid\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError(vErrors); ';\n      } else {\n        out += ' validate.errors = vErrors; return false; ';\n      }\n    }\n    if ($breakOnError) {\n      out += ' break; ';\n    }\n    out += ' } }';\n  }\n  if ($breakOnError) {\n    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_required(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $vSchema = 'schema' + $lvl;\n  if (!$isData) {\n    if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {\n      var $required = [];\n      var arr1 = $schema;\n      if (arr1) {\n        var $property, i1 = -1,\n          l1 = arr1.length - 1;\n        while (i1 < l1) {\n          $property = arr1[i1 += 1];\n          var $propertySch = it.schema.properties[$property];\n          if (!($propertySch && (it.opts.strictKeywords ? (typeof $propertySch == 'object' && Object.keys($propertySch).length > 0) || $propertySch === false : it.util.schemaHasRules($propertySch, it.RULES.all)))) {\n            $required[$required.length] = $property;\n          }\n        }\n      }\n    } else {\n      var $required = $schema;\n    }\n  }\n  if ($isData || $required.length) {\n    var $currentErrorPath = it.errorPath,\n      $loopRequired = $isData || $required.length >= it.opts.loopRequired,\n      $ownProperties = it.opts.ownProperties;\n    if ($breakOnError) {\n      out += ' var missing' + ($lvl) + '; ';\n      if ($loopRequired) {\n        if (!$isData) {\n          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n        }\n        var $i = 'i' + $lvl,\n          $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n        }\n        out += ' var ' + ($valid) + ' = true; ';\n        if ($isData) {\n          out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';\n        }\n        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';\n        if ($ownProperties) {\n          out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n        }\n        out += '; if (!' + ($valid) + ') break; } ';\n        if ($isData) {\n          out += '  }  ';\n        }\n        out += '  if (!' + ($valid) + ') {   ';\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'';\n            if (it.opts._errorDataPathProperty) {\n              out += 'is a required property';\n            } else {\n              out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        out += ' } else { ';\n      } else {\n        out += ' if ( ';\n        var arr2 = $required;\n        if (arr2) {\n          var $propertyKey, $i = -1,\n            l2 = arr2.length - 1;\n          while ($i < l2) {\n            $propertyKey = arr2[$i += 1];\n            if ($i) {\n              out += ' || ';\n            }\n            var $prop = it.util.getProperty($propertyKey),\n              $useData = $data + $prop;\n            out += ' ( ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';\n          }\n        }\n        out += ') {  ';\n        var $propertyPath = 'missing' + $lvl,\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;\n        }\n        var $$outStack = $$outStack || [];\n        $$outStack.push(out);\n        out = ''; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'';\n            if (it.opts._errorDataPathProperty) {\n              out += 'is a required property';\n            } else {\n              out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        var __err = out;\n        out = $$outStack.pop();\n        if (!it.compositeRule && $breakOnError) {\n          /* istanbul ignore if */\n          if (it.async) {\n            out += ' throw new ValidationError([' + (__err) + ']); ';\n          } else {\n            out += ' validate.errors = [' + (__err) + ']; return false; ';\n          }\n        } else {\n          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n        }\n        out += ' } else { ';\n      }\n    } else {\n      if ($loopRequired) {\n        if (!$isData) {\n          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';\n        }\n        var $i = 'i' + $lvl,\n          $propertyPath = 'schema' + $lvl + '[' + $i + ']',\n          $missingProperty = '\\' + ' + $propertyPath + ' + \\'';\n        if (it.opts._errorDataPathProperty) {\n          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);\n        }\n        if ($isData) {\n          out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) {  var err =   '; /* istanbul ignore else */\n          if (it.createErrors !== false) {\n            out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n            if (it.opts.messages !== false) {\n              out += ' , message: \\'';\n              if (it.opts._errorDataPathProperty) {\n                out += 'is a required property';\n              } else {\n                out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n              }\n              out += '\\' ';\n            }\n            if (it.opts.verbose) {\n              out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n            }\n            out += ' } ';\n          } else {\n            out += ' {} ';\n          }\n          out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';\n        }\n        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';\n        if ($ownProperties) {\n          out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';\n        }\n        out += ') {  var err =   '; /* istanbul ignore else */\n        if (it.createErrors !== false) {\n          out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n          if (it.opts.messages !== false) {\n            out += ' , message: \\'';\n            if (it.opts._errorDataPathProperty) {\n              out += 'is a required property';\n            } else {\n              out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n            }\n            out += '\\' ';\n          }\n          if (it.opts.verbose) {\n            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n          }\n          out += ' } ';\n        } else {\n          out += ' {} ';\n        }\n        out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';\n        if ($isData) {\n          out += '  }  ';\n        }\n      } else {\n        var arr3 = $required;\n        if (arr3) {\n          var $propertyKey, i3 = -1,\n            l3 = arr3.length - 1;\n          while (i3 < l3) {\n            $propertyKey = arr3[i3 += 1];\n            var $prop = it.util.getProperty($propertyKey),\n              $missingProperty = it.util.escapeQuotes($propertyKey),\n              $useData = $data + $prop;\n            if (it.opts._errorDataPathProperty) {\n              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);\n            }\n            out += ' if ( ' + ($useData) + ' === undefined ';\n            if ($ownProperties) {\n              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \\'' + (it.util.escapeQuotes($propertyKey)) + '\\') ';\n            }\n            out += ') {  var err =   '; /* istanbul ignore else */\n            if (it.createErrors !== false) {\n              out += ' { keyword: \\'' + ('required') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \\'' + ($missingProperty) + '\\' } ';\n              if (it.opts.messages !== false) {\n                out += ' , message: \\'';\n                if (it.opts._errorDataPathProperty) {\n                  out += 'is a required property';\n                } else {\n                  out += 'should have required property \\\\\\'' + ($missingProperty) + '\\\\\\'';\n                }\n                out += '\\' ';\n              }\n              if (it.opts.verbose) {\n                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n              }\n              out += ' } ';\n            } else {\n              out += ' {} ';\n            }\n            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';\n          }\n        }\n      }\n    }\n    it.errorPath = $currentErrorPath;\n  } else if ($breakOnError) {\n    out += ' if (true) {';\n  }\n  return out;\n}\n", "'use strict';\nmodule.exports = function generate_uniqueItems(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  if (($schema || $isData) && it.opts.uniqueItems !== false) {\n    if ($isData) {\n      out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \\'boolean\\') ' + ($valid) + ' = false; else { ';\n    }\n    out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';\n    var $itemType = it.schema.items && it.schema.items.type,\n      $typeIsArray = Array.isArray($itemType);\n    if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {\n      out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';\n    } else {\n      out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';\n      var $method = 'checkDataType' + ($typeIsArray ? 's' : '');\n      out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; ';\n      if ($typeIsArray) {\n        out += ' if (typeof item == \\'string\\') item = \\'\"\\' + item; ';\n      }\n      out += ' if (typeof itemIndices[item] == \\'number\\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';\n    }\n    out += ' } ';\n    if ($isData) {\n      out += '  }  ';\n    }\n    out += ' if (!' + ($valid) + ') {   ';\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ('uniqueItems') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should NOT have duplicate items (items ## \\' + j + \\' and \\' + i + \\' are identical)\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema:  ';\n        if ($isData) {\n          out += 'validate.schema' + ($schemaPath);\n        } else {\n          out += '' + ($schema);\n        }\n        out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    out += ' } ';\n    if ($breakOnError) {\n      out += ' else { ';\n    }\n  } else {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  }\n  return out;\n}\n", "'use strict';\n\n//all requires must be explicit because browserify won't work with dynamic requires\nmodule.exports = {\n  '$ref': require('./ref'),\n  allOf: require('./allOf'),\n  anyOf: require('./anyOf'),\n  '$comment': require('./comment'),\n  const: require('./const'),\n  contains: require('./contains'),\n  dependencies: require('./dependencies'),\n  'enum': require('./enum'),\n  format: require('./format'),\n  'if': require('./if'),\n  items: require('./items'),\n  maximum: require('./_limit'),\n  minimum: require('./_limit'),\n  maxItems: require('./_limitItems'),\n  minItems: require('./_limitItems'),\n  maxLength: require('./_limitLength'),\n  minLength: require('./_limitLength'),\n  maxProperties: require('./_limitProperties'),\n  minProperties: require('./_limitProperties'),\n  multipleOf: require('./multipleOf'),\n  not: require('./not'),\n  oneOf: require('./oneOf'),\n  pattern: require('./pattern'),\n  properties: require('./properties'),\n  propertyNames: require('./propertyNames'),\n  required: require('./required'),\n  uniqueItems: require('./uniqueItems'),\n  validate: require('./validate')\n};\n", "'use strict';\n\nvar ruleModules = require('../dotjs')\n  , toHash = require('./util').toHash;\n\nmodule.exports = function rules() {\n  var RULES = [\n    { type: 'number',\n      rules: [ { 'maximum': ['exclusiveMaximum'] },\n               { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },\n    { type: 'string',\n      rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },\n    { type: 'array',\n      rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },\n    { type: 'object',\n      rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',\n               { 'properties': ['additionalProperties', 'patternProperties'] } ] },\n    { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }\n  ];\n\n  var ALL = [ 'type', '$comment' ];\n  var KEYWORDS = [\n    '$schema', '$id', 'id', '$data', '$async', 'title',\n    'description', 'default', 'definitions',\n    'examples', 'readOnly', 'writeOnly',\n    'contentMediaType', 'contentEncoding',\n    'additionalItems', 'then', 'else'\n  ];\n  var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];\n  RULES.all = toHash(ALL);\n  RULES.types = toHash(TYPES);\n\n  RULES.forEach(function (group) {\n    group.rules = group.rules.map(function (keyword) {\n      var implKeywords;\n      if (typeof keyword == 'object') {\n        var key = Object.keys(keyword)[0];\n        implKeywords = keyword[key];\n        keyword = key;\n        implKeywords.forEach(function (k) {\n          ALL.push(k);\n          RULES.all[k] = true;\n        });\n      }\n      ALL.push(keyword);\n      var rule = RULES.all[keyword] = {\n        keyword: keyword,\n        code: ruleModules[keyword],\n        implements: implKeywords\n      };\n      return rule;\n    });\n\n    RULES.all.$comment = {\n      keyword: '$comment',\n      code: ruleModules.$comment\n    };\n\n    if (group.type) RULES.types[group.type] = group;\n  });\n\n  RULES.keywords = toHash(ALL.concat(KEYWORDS));\n  RULES.custom = {};\n\n  return RULES;\n};\n", "'use strict';\n\nvar KEYWORDS = [\n  'multipleOf',\n  'maximum',\n  'exclusiveMaximum',\n  'minimum',\n  'exclusiveMinimum',\n  'maxLength',\n  'minLength',\n  'pattern',\n  'additionalItems',\n  'maxItems',\n  'minItems',\n  'uniqueItems',\n  'maxProperties',\n  'minProperties',\n  'required',\n  'additionalProperties',\n  'enum',\n  'format',\n  'const'\n];\n\nmodule.exports = function (metaSchema, keywordsJsonPointers) {\n  for (var i=0; i<keywordsJsonPointers.length; i++) {\n    metaSchema = JSON.parse(JSON.stringify(metaSchema));\n    var segments = keywordsJsonPointers[i].split('/');\n    var keywords = metaSchema;\n    var j;\n    for (j=1; j<segments.length; j++)\n      keywords = keywords[segments[j]];\n\n    for (j=0; j<KEYWORDS.length; j++) {\n      var key = KEYWORDS[j];\n      var schema = keywords[key];\n      if (schema) {\n        keywords[key] = {\n          anyOf: [\n            schema,\n            { $ref: 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n          ]\n        };\n      }\n    }\n  }\n\n  return metaSchema;\n};\n", "'use strict';\n\nvar MissingRefError = require('./error_classes').MissingRef;\n\nmodule.exports = compileAsync;\n\n\n/**\n * Creates validating function for passed schema with asynchronous loading of missing schemas.\n * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n * @this  Ajv\n * @param {Object}   schema schema object\n * @param {Boolean}  meta optional true to compile meta-schema; this parameter can be skipped\n * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function.\n * @return {Promise} promise that resolves with a validating function.\n */\nfunction compileAsync(schema, meta, callback) {\n  /* eslint no-shadow: 0 */\n  /* global Promise */\n  /* jshint validthis: true */\n  var self = this;\n  if (typeof this._opts.loadSchema != 'function')\n    throw new Error('options.loadSchema should be a function');\n\n  if (typeof meta == 'function') {\n    callback = meta;\n    meta = undefined;\n  }\n\n  var p = loadMetaSchemaOf(schema).then(function () {\n    var schemaObj = self._addSchema(schema, undefined, meta);\n    return schemaObj.validate || _compileAsync(schemaObj);\n  });\n\n  if (callback) {\n    p.then(\n      function(v) { callback(null, v); },\n      callback\n    );\n  }\n\n  return p;\n\n\n  function loadMetaSchemaOf(sch) {\n    var $schema = sch.$schema;\n    return $schema && !self.getSchema($schema)\n            ? compileAsync.call(self, { $ref: $schema }, true)\n            : Promise.resolve();\n  }\n\n\n  function _compileAsync(schemaObj) {\n    try { return self._compile(schemaObj); }\n    catch(e) {\n      if (e instanceof MissingRefError) return loadMissingSchema(e);\n      throw e;\n    }\n\n\n    function loadMissingSchema(e) {\n      var ref = e.missingSchema;\n      if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved');\n\n      var schemaPromise = self._loadingSchemas[ref];\n      if (!schemaPromise) {\n        schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref);\n        schemaPromise.then(removePromise, removePromise);\n      }\n\n      return schemaPromise.then(function (sch) {\n        if (!added(ref)) {\n          return loadMetaSchemaOf(sch).then(function () {\n            if (!added(ref)) self.addSchema(sch, ref, undefined, meta);\n          });\n        }\n      }).then(function() {\n        return _compileAsync(schemaObj);\n      });\n\n      function removePromise() {\n        delete self._loadingSchemas[ref];\n      }\n\n      function added(ref) {\n        return self._refs[ref] || self._schemas[ref];\n      }\n    }\n  }\n}\n", "'use strict';\nmodule.exports = function generate_custom(it, $keyword, $ruleType) {\n  var out = ' ';\n  var $lvl = it.level;\n  var $dataLvl = it.dataLevel;\n  var $schema = it.schema[$keyword];\n  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;\n  var $breakOnError = !it.opts.allErrors;\n  var $errorKeyword;\n  var $data = 'data' + ($dataLvl || '');\n  var $valid = 'valid' + $lvl;\n  var $errs = 'errs__' + $lvl;\n  var $isData = it.opts.$data && $schema && $schema.$data,\n    $schemaValue;\n  if ($isData) {\n    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';\n    $schemaValue = 'schema' + $lvl;\n  } else {\n    $schemaValue = $schema;\n  }\n  var $rule = this,\n    $definition = 'definition' + $lvl,\n    $rDef = $rule.definition,\n    $closingBraces = '';\n  var $compile, $inline, $macro, $ruleValidate, $validateCode;\n  if ($isData && $rDef.$data) {\n    $validateCode = 'keywordValidate' + $lvl;\n    var $validateSchema = $rDef.validateSchema;\n    out += ' var ' + ($definition) + ' = RULES.custom[\\'' + ($keyword) + '\\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;';\n  } else {\n    $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);\n    if (!$ruleValidate) return;\n    $schemaValue = 'validate.schema' + $schemaPath;\n    $validateCode = $ruleValidate.code;\n    $compile = $rDef.compile;\n    $inline = $rDef.inline;\n    $macro = $rDef.macro;\n  }\n  var $ruleErrs = $validateCode + '.errors',\n    $i = 'i' + $lvl,\n    $ruleErr = 'ruleErr' + $lvl,\n    $asyncKeyword = $rDef.async;\n  if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');\n  if (!($inline || $macro)) {\n    out += '' + ($ruleErrs) + ' = null;';\n  }\n  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';\n  if ($isData && $rDef.$data) {\n    $closingBraces += '}';\n    out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { ';\n    if ($validateSchema) {\n      $closingBraces += '}';\n      out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { ';\n    }\n  }\n  if ($inline) {\n    if ($rDef.statements) {\n      out += ' ' + ($ruleValidate.validate) + ' ';\n    } else {\n      out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; ';\n    }\n  } else if ($macro) {\n    var $it = it.util.copy(it);\n    var $closingBraces = '';\n    $it.level++;\n    var $nextValid = 'valid' + $it.level;\n    $it.schema = $ruleValidate.validate;\n    $it.schemaPath = '';\n    var $wasComposite = it.compositeRule;\n    it.compositeRule = $it.compositeRule = true;\n    var $code = it.validate($it).replace(/validate\\.schema/g, $validateCode);\n    it.compositeRule = $it.compositeRule = $wasComposite;\n    out += ' ' + ($code);\n  } else {\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = '';\n    out += '  ' + ($validateCode) + '.call( ';\n    if (it.opts.passContext) {\n      out += 'this';\n    } else {\n      out += 'self';\n    }\n    if ($compile || $rDef.schema === false) {\n      out += ' , ' + ($data) + ' ';\n    } else {\n      out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';\n    }\n    out += ' , (dataPath || \\'\\')';\n    if (it.errorPath != '\"\"') {\n      out += ' + ' + (it.errorPath);\n    }\n    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',\n      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';\n    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData )  ';\n    var def_callRuleValidate = out;\n    out = $$outStack.pop();\n    if ($rDef.errors === false) {\n      out += ' ' + ($valid) + ' = ';\n      if ($asyncKeyword) {\n        out += 'await ';\n      }\n      out += '' + (def_callRuleValidate) + '; ';\n    } else {\n      if ($asyncKeyword) {\n        $ruleErrs = 'customErrors' + $lvl;\n        out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';\n      } else {\n        out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; ';\n      }\n    }\n  }\n  if ($rDef.modifying) {\n    out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];';\n  }\n  out += '' + ($closingBraces);\n  if ($rDef.valid) {\n    if ($breakOnError) {\n      out += ' if (true) { ';\n    }\n  } else {\n    out += ' if ( ';\n    if ($rDef.valid === undefined) {\n      out += ' !';\n      if ($macro) {\n        out += '' + ($nextValid);\n      } else {\n        out += '' + ($valid);\n      }\n    } else {\n      out += ' ' + (!$rDef.valid) + ' ';\n    }\n    out += ') { ';\n    $errorKeyword = $rule.keyword;\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = '';\n    var $$outStack = $$outStack || [];\n    $$outStack.push(out);\n    out = ''; /* istanbul ignore else */\n    if (it.createErrors !== false) {\n      out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n      if (it.opts.messages !== false) {\n        out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n      }\n      if (it.opts.verbose) {\n        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n      }\n      out += ' } ';\n    } else {\n      out += ' {} ';\n    }\n    var __err = out;\n    out = $$outStack.pop();\n    if (!it.compositeRule && $breakOnError) {\n      /* istanbul ignore if */\n      if (it.async) {\n        out += ' throw new ValidationError([' + (__err) + ']); ';\n      } else {\n        out += ' validate.errors = [' + (__err) + ']; return false; ';\n      }\n    } else {\n      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n    }\n    var def_customError = out;\n    out = $$outStack.pop();\n    if ($inline) {\n      if ($rDef.errors) {\n        if ($rDef.errors != 'full') {\n          out += '  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n          if (it.opts.verbose) {\n            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n          }\n          out += ' } ';\n        }\n      } else {\n        if ($rDef.errors === false) {\n          out += ' ' + (def_customError) + ' ';\n        } else {\n          out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else {  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\"; } ';\n          if (it.opts.verbose) {\n            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n          }\n          out += ' } } ';\n        }\n      }\n    } else if ($macro) {\n      out += '   var err =   '; /* istanbul ignore else */\n      if (it.createErrors !== false) {\n        out += ' { keyword: \\'' + ($errorKeyword || 'custom') + '\\' , dataPath: (dataPath || \\'\\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \\'' + ($rule.keyword) + '\\' } ';\n        if (it.opts.messages !== false) {\n          out += ' , message: \\'should pass \"' + ($rule.keyword) + '\" keyword validation\\' ';\n        }\n        if (it.opts.verbose) {\n          out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';\n        }\n        out += ' } ';\n      } else {\n        out += ' {} ';\n      }\n      out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';\n      if (!it.compositeRule && $breakOnError) {\n        /* istanbul ignore if */\n        if (it.async) {\n          out += ' throw new ValidationError(vErrors); ';\n        } else {\n          out += ' validate.errors = vErrors; return false; ';\n        }\n      }\n    } else {\n      if ($rDef.errors === false) {\n        out += ' ' + (def_customError) + ' ';\n      } else {\n        out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length;  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \\'\\') + ' + (it.errorPath) + ';  ' + ($ruleErr) + '.schemaPath = \"' + ($errSchemaPath) + '\";  ';\n        if (it.opts.verbose) {\n          out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';\n        }\n        out += ' } } else { ' + (def_customError) + ' } ';\n      }\n    }\n    out += ' } ';\n    if ($breakOnError) {\n      out += ' else { ';\n    }\n  }\n  return out;\n}\n", "{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"$id\": \"http://json-schema.org/draft-07/schema#\",\n    \"title\": \"Core schema meta-schema\",\n    \"definitions\": {\n        \"schemaArray\": {\n            \"type\": \"array\",\n            \"minItems\": 1,\n            \"items\": { \"$ref\": \"#\" }\n        },\n        \"nonNegativeInteger\": {\n            \"type\": \"integer\",\n            \"minimum\": 0\n        },\n        \"nonNegativeIntegerDefault0\": {\n            \"allOf\": [\n                { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n                { \"default\": 0 }\n            ]\n        },\n        \"simpleTypes\": {\n            \"enum\": [\n                \"array\",\n                \"boolean\",\n                \"integer\",\n                \"null\",\n                \"number\",\n                \"object\",\n                \"string\"\n            ]\n        },\n        \"stringArray\": {\n            \"type\": \"array\",\n            \"items\": { \"type\": \"string\" },\n            \"uniqueItems\": true,\n            \"default\": []\n        }\n    },\n    \"type\": [\"object\", \"boolean\"],\n    \"properties\": {\n        \"$id\": {\n            \"type\": \"string\",\n            \"format\": \"uri-reference\"\n        },\n        \"$schema\": {\n            \"type\": \"string\",\n            \"format\": \"uri\"\n        },\n        \"$ref\": {\n            \"type\": \"string\",\n            \"format\": \"uri-reference\"\n        },\n        \"$comment\": {\n            \"type\": \"string\"\n        },\n        \"title\": {\n            \"type\": \"string\"\n        },\n        \"description\": {\n            \"type\": \"string\"\n        },\n        \"default\": true,\n        \"readOnly\": {\n            \"type\": \"boolean\",\n            \"default\": false\n        },\n        \"examples\": {\n            \"type\": \"array\",\n            \"items\": true\n        },\n        \"multipleOf\": {\n            \"type\": \"number\",\n            \"exclusiveMinimum\": 0\n        },\n        \"maximum\": {\n            \"type\": \"number\"\n        },\n        \"exclusiveMaximum\": {\n            \"type\": \"number\"\n        },\n        \"minimum\": {\n            \"type\": \"number\"\n        },\n        \"exclusiveMinimum\": {\n            \"type\": \"number\"\n        },\n        \"maxLength\": { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n        \"minLength\": { \"$ref\": \"#/definitions/nonNegativeIntegerDefault0\" },\n        \"pattern\": {\n            \"type\": \"string\",\n            \"format\": \"regex\"\n        },\n        \"additionalItems\": { \"$ref\": \"#\" },\n        \"items\": {\n            \"anyOf\": [\n                { \"$ref\": \"#\" },\n                { \"$ref\": \"#/definitions/schemaArray\" }\n            ],\n            \"default\": true\n        },\n        \"maxItems\": { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n        \"minItems\": { \"$ref\": \"#/definitions/nonNegativeIntegerDefault0\" },\n        \"uniqueItems\": {\n            \"type\": \"boolean\",\n            \"default\": false\n        },\n        \"contains\": { \"$ref\": \"#\" },\n        \"maxProperties\": { \"$ref\": \"#/definitions/nonNegativeInteger\" },\n        \"minProperties\": { \"$ref\": \"#/definitions/nonNegativeIntegerDefault0\" },\n        \"required\": { \"$ref\": \"#/definitions/stringArray\" },\n        \"additionalProperties\": { \"$ref\": \"#\" },\n        \"definitions\": {\n            \"type\": \"object\",\n            \"additionalProperties\": { \"$ref\": \"#\" },\n            \"default\": {}\n        },\n        \"properties\": {\n            \"type\": \"object\",\n            \"additionalProperties\": { \"$ref\": \"#\" },\n            \"default\": {}\n        },\n        \"patternProperties\": {\n            \"type\": \"object\",\n            \"additionalProperties\": { \"$ref\": \"#\" },\n            \"propertyNames\": { \"format\": \"regex\" },\n            \"default\": {}\n        },\n        \"dependencies\": {\n            \"type\": \"object\",\n            \"additionalProperties\": {\n                \"anyOf\": [\n                    { \"$ref\": \"#\" },\n                    { \"$ref\": \"#/definitions/stringArray\" }\n                ]\n            }\n        },\n        \"propertyNames\": { \"$ref\": \"#\" },\n        \"const\": true,\n        \"enum\": {\n            \"type\": \"array\",\n            \"items\": true,\n            \"minItems\": 1,\n            \"uniqueItems\": true\n        },\n        \"type\": {\n            \"anyOf\": [\n                { \"$ref\": \"#/definitions/simpleTypes\" },\n                {\n                    \"type\": \"array\",\n                    \"items\": { \"$ref\": \"#/definitions/simpleTypes\" },\n                    \"minItems\": 1,\n                    \"uniqueItems\": true\n                }\n            ]\n        },\n        \"format\": { \"type\": \"string\" },\n        \"contentMediaType\": { \"type\": \"string\" },\n        \"contentEncoding\": { \"type\": \"string\" },\n        \"if\": {\"$ref\": \"#\"},\n        \"then\": {\"$ref\": \"#\"},\n        \"else\": {\"$ref\": \"#\"},\n        \"allOf\": { \"$ref\": \"#/definitions/schemaArray\" },\n        \"anyOf\": { \"$ref\": \"#/definitions/schemaArray\" },\n        \"oneOf\": { \"$ref\": \"#/definitions/schemaArray\" },\n        \"not\": { \"$ref\": \"#\" }\n    },\n    \"default\": true\n}\n", "'use strict';\n\nvar metaSchema = require('./refs/json-schema-draft-07.json');\n\nmodule.exports = {\n  $id: 'https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js',\n  definitions: {\n    simpleTypes: metaSchema.definitions.simpleTypes\n  },\n  type: 'object',\n  dependencies: {\n    schema: ['validate'],\n    $data: ['validate'],\n    statements: ['inline'],\n    valid: {not: {required: ['macro']}}\n  },\n  properties: {\n    type: metaSchema.properties.type,\n    schema: {type: 'boolean'},\n    statements: {type: 'boolean'},\n    dependencies: {\n      type: 'array',\n      items: {type: 'string'}\n    },\n    metaSchema: {type: 'object'},\n    modifying: {type: 'boolean'},\n    valid: {type: 'boolean'},\n    $data: {type: 'boolean'},\n    async: {type: 'boolean'},\n    errors: {\n      anyOf: [\n        {type: 'boolean'},\n        {const: 'full'}\n      ]\n    }\n  }\n};\n", "'use strict';\n\nvar IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;\nvar customRuleCode = require('./dotjs/custom');\nvar definitionSchema = require('./definition_schema');\n\nmodule.exports = {\n  add: addKeyword,\n  get: getKeyword,\n  remove: removeKeyword,\n  validate: validateKeyword\n};\n\n\n/**\n * Define custom keyword\n * @this  Ajv\n * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords).\n * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.\n * @return {Ajv} this for method chaining\n */\nfunction addKeyword(keyword, definition) {\n  /* jshint validthis: true */\n  /* eslint no-shadow: 0 */\n  var RULES = this.RULES;\n  if (RULES.keywords[keyword])\n    throw new Error('Keyword ' + keyword + ' is already defined');\n\n  if (!IDENTIFIER.test(keyword))\n    throw new Error('Keyword ' + keyword + ' is not a valid identifier');\n\n  if (definition) {\n    this.validateKeyword(definition, true);\n\n    var dataType = definition.type;\n    if (Array.isArray(dataType)) {\n      for (var i=0; i<dataType.length; i++)\n        _addRule(keyword, dataType[i], definition);\n    } else {\n      _addRule(keyword, dataType, definition);\n    }\n\n    var metaSchema = definition.metaSchema;\n    if (metaSchema) {\n      if (definition.$data && this._opts.$data) {\n        metaSchema = {\n          anyOf: [\n            metaSchema,\n            { '$ref': 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }\n          ]\n        };\n      }\n      definition.validateSchema = this.compile(metaSchema, true);\n    }\n  }\n\n  RULES.keywords[keyword] = RULES.all[keyword] = true;\n\n\n  function _addRule(keyword, dataType, definition) {\n    var ruleGroup;\n    for (var i=0; i<RULES.length; i++) {\n      var rg = RULES[i];\n      if (rg.type == dataType) {\n        ruleGroup = rg;\n        break;\n      }\n    }\n\n    if (!ruleGroup) {\n      ruleGroup = { type: dataType, rules: [] };\n      RULES.push(ruleGroup);\n    }\n\n    var rule = {\n      keyword: keyword,\n      definition: definition,\n      custom: true,\n      code: customRuleCode,\n      implements: definition.implements\n    };\n    ruleGroup.rules.push(rule);\n    RULES.custom[keyword] = rule;\n  }\n\n  return this;\n}\n\n\n/**\n * Get keyword\n * @this  Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise.\n */\nfunction getKeyword(keyword) {\n  /* jshint validthis: true */\n  var rule = this.RULES.custom[keyword];\n  return rule ? rule.definition : this.RULES.keywords[keyword] || false;\n}\n\n\n/**\n * Remove keyword\n * @this  Ajv\n * @param {String} keyword pre-defined or custom keyword.\n * @return {Ajv} this for method chaining\n */\nfunction removeKeyword(keyword) {\n  /* jshint validthis: true */\n  var RULES = this.RULES;\n  delete RULES.keywords[keyword];\n  delete RULES.all[keyword];\n  delete RULES.custom[keyword];\n  for (var i=0; i<RULES.length; i++) {\n    var rules = RULES[i].rules;\n    for (var j=0; j<rules.length; j++) {\n      if (rules[j].keyword == keyword) {\n        rules.splice(j, 1);\n        break;\n      }\n    }\n  }\n  return this;\n}\n\n\n/**\n * Validate keyword definition\n * @this  Ajv\n * @param {Object} definition keyword definition object.\n * @param {Boolean} throwError true to throw exception if definition is invalid\n * @return {boolean} validation result\n */\nfunction validateKeyword(definition, throwError) {\n  validateKeyword.errors = null;\n  var v = this._validateKeyword = this._validateKeyword\n                                  || this.compile(definitionSchema, true);\n\n  if (v(definition)) return true;\n  validateKeyword.errors = v.errors;\n  if (throwError)\n    throw new Error('custom keyword definition is invalid: '  + this.errorsText(v.errors));\n  else\n    return false;\n}\n", "{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n    \"description\": \"Meta-schema for $data reference (JSON Schema extension proposal)\",\n    \"type\": \"object\",\n    \"required\": [ \"$data\" ],\n    \"properties\": {\n        \"$data\": {\n            \"type\": \"string\",\n            \"anyOf\": [\n                { \"format\": \"relative-json-pointer\" }, \n                { \"format\": \"json-pointer\" }\n            ]\n        }\n    },\n    \"additionalProperties\": false\n}\n", "'use strict';\n\nvar compileSchema = require('./compile')\n  , resolve = require('./compile/resolve')\n  , Cache = require('./cache')\n  , SchemaObject = require('./compile/schema_obj')\n  , stableStringify = require('fast-json-stable-stringify')\n  , formats = require('./compile/formats')\n  , rules = require('./compile/rules')\n  , $dataMetaSchema = require('./data')\n  , util = require('./compile/util');\n\nmodule.exports = Ajv;\n\nAjv.prototype.validate = validate;\nAjv.prototype.compile = compile;\nAjv.prototype.addSchema = addSchema;\nAjv.prototype.addMetaSchema = addMetaSchema;\nAjv.prototype.validateSchema = validateSchema;\nAjv.prototype.getSchema = getSchema;\nAjv.prototype.removeSchema = removeSchema;\nAjv.prototype.addFormat = addFormat;\nAjv.prototype.errorsText = errorsText;\n\nAjv.prototype._addSchema = _addSchema;\nAjv.prototype._compile = _compile;\n\nAjv.prototype.compileAsync = require('./compile/async');\nvar customKeyword = require('./keyword');\nAjv.prototype.addKeyword = customKeyword.add;\nAjv.prototype.getKeyword = customKeyword.get;\nAjv.prototype.removeKeyword = customKeyword.remove;\nAjv.prototype.validateKeyword = customKeyword.validate;\n\nvar errorClasses = require('./compile/error_classes');\nAjv.ValidationError = errorClasses.Validation;\nAjv.MissingRefError = errorClasses.MissingRef;\nAjv.$dataMetaSchema = $dataMetaSchema;\n\nvar META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';\n\nvar META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ];\nvar META_SUPPORT_DATA = ['/properties'];\n\n/**\n * Creates validator instance.\n * Usage: `Ajv(opts)`\n * @param {Object} opts optional options\n * @return {Object} ajv instance\n */\nfunction Ajv(opts) {\n  if (!(this instanceof Ajv)) return new Ajv(opts);\n  opts = this._opts = util.copy(opts) || {};\n  setLogger(this);\n  this._schemas = {};\n  this._refs = {};\n  this._fragments = {};\n  this._formats = formats(opts.format);\n\n  this._cache = opts.cache || new Cache;\n  this._loadingSchemas = {};\n  this._compilations = [];\n  this.RULES = rules();\n  this._getId = chooseGetId(opts);\n\n  opts.loopRequired = opts.loopRequired || Infinity;\n  if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;\n  if (opts.serialize === undefined) opts.serialize = stableStringify;\n  this._metaOpts = getMetaSchemaOptions(this);\n\n  if (opts.formats) addInitialFormats(this);\n  if (opts.keywords) addInitialKeywords(this);\n  addDefaultMetaSchema(this);\n  if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);\n  if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});\n  addInitialSchemas(this);\n}\n\n\n\n/**\n * Validate data using schema\n * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.\n * @this   Ajv\n * @param  {String|Object} schemaKeyRef key, ref or schema object\n * @param  {Any} data to be validated\n * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).\n */\nfunction validate(schemaKeyRef, data) {\n  var v;\n  if (typeof schemaKeyRef == 'string') {\n    v = this.getSchema(schemaKeyRef);\n    if (!v) throw new Error('no schema with key or ref \"' + schemaKeyRef + '\"');\n  } else {\n    var schemaObj = this._addSchema(schemaKeyRef);\n    v = schemaObj.validate || this._compile(schemaObj);\n  }\n\n  var valid = v(data);\n  if (v.$async !== true) this.errors = v.errors;\n  return valid;\n}\n\n\n/**\n * Create validating function for passed schema.\n * @this   Ajv\n * @param  {Object} schema schema object\n * @param  {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.\n * @return {Function} validating function\n */\nfunction compile(schema, _meta) {\n  var schemaObj = this._addSchema(schema, undefined, _meta);\n  return schemaObj.validate || this._compile(schemaObj);\n}\n\n\n/**\n * Adds schema to the instance.\n * @this   Ajv\n * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.\n * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.\n * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n * @return {Ajv} this for method chaining\n */\nfunction addSchema(schema, key, _skipValidation, _meta) {\n  if (Array.isArray(schema)){\n    for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta);\n    return this;\n  }\n  var id = this._getId(schema);\n  if (id !== undefined && typeof id != 'string')\n    throw new Error('schema id must be string');\n  key = resolve.normalizeId(key || id);\n  checkUnique(this, key);\n  this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);\n  return this;\n}\n\n\n/**\n * Add schema that will be used to validate other schemas\n * options in META_IGNORE_OPTIONS are alway set to false\n * @this   Ajv\n * @param {Object} schema schema object\n * @param {String} key optional schema key\n * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema\n * @return {Ajv} this for method chaining\n */\nfunction addMetaSchema(schema, key, skipValidation) {\n  this.addSchema(schema, key, skipValidation, true);\n  return this;\n}\n\n\n/**\n * Validate schema\n * @this   Ajv\n * @param {Object} schema schema to validate\n * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid\n * @return {Boolean} true if schema is valid\n */\nfunction validateSchema(schema, throwOrLogError) {\n  var $schema = schema.$schema;\n  if ($schema !== undefined && typeof $schema != 'string')\n    throw new Error('$schema must be a string');\n  $schema = $schema || this._opts.defaultMeta || defaultMeta(this);\n  if (!$schema) {\n    this.logger.warn('meta-schema not available');\n    this.errors = null;\n    return true;\n  }\n  var valid = this.validate($schema, schema);\n  if (!valid && throwOrLogError) {\n    var message = 'schema is invalid: ' + this.errorsText();\n    if (this._opts.validateSchema == 'log') this.logger.error(message);\n    else throw new Error(message);\n  }\n  return valid;\n}\n\n\nfunction defaultMeta(self) {\n  var meta = self._opts.meta;\n  self._opts.defaultMeta = typeof meta == 'object'\n                            ? self._getId(meta) || meta\n                            : self.getSchema(META_SCHEMA_ID)\n                              ? META_SCHEMA_ID\n                              : undefined;\n  return self._opts.defaultMeta;\n}\n\n\n/**\n * Get compiled schema from the instance by `key` or `ref`.\n * @this   Ajv\n * @param  {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).\n * @return {Function} schema validating function (with property `schema`).\n */\nfunction getSchema(keyRef) {\n  var schemaObj = _getSchemaObj(this, keyRef);\n  switch (typeof schemaObj) {\n    case 'object': return schemaObj.validate || this._compile(schemaObj);\n    case 'string': return this.getSchema(schemaObj);\n    case 'undefined': return _getSchemaFragment(this, keyRef);\n  }\n}\n\n\nfunction _getSchemaFragment(self, ref) {\n  var res = resolve.schema.call(self, { schema: {} }, ref);\n  if (res) {\n    var schema = res.schema\n      , root = res.root\n      , baseId = res.baseId;\n    var v = compileSchema.call(self, schema, root, undefined, baseId);\n    self._fragments[ref] = new SchemaObject({\n      ref: ref,\n      fragment: true,\n      schema: schema,\n      root: root,\n      baseId: baseId,\n      validate: v\n    });\n    return v;\n  }\n}\n\n\nfunction _getSchemaObj(self, keyRef) {\n  keyRef = resolve.normalizeId(keyRef);\n  return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef];\n}\n\n\n/**\n * Remove cached schema(s).\n * If no parameter is passed all schemas but meta-schemas are removed.\n * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n * @this   Ajv\n * @param  {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object\n * @return {Ajv} this for method chaining\n */\nfunction removeSchema(schemaKeyRef) {\n  if (schemaKeyRef instanceof RegExp) {\n    _removeAllSchemas(this, this._schemas, schemaKeyRef);\n    _removeAllSchemas(this, this._refs, schemaKeyRef);\n    return this;\n  }\n  switch (typeof schemaKeyRef) {\n    case 'undefined':\n      _removeAllSchemas(this, this._schemas);\n      _removeAllSchemas(this, this._refs);\n      this._cache.clear();\n      return this;\n    case 'string':\n      var schemaObj = _getSchemaObj(this, schemaKeyRef);\n      if (schemaObj) this._cache.del(schemaObj.cacheKey);\n      delete this._schemas[schemaKeyRef];\n      delete this._refs[schemaKeyRef];\n      return this;\n    case 'object':\n      var serialize = this._opts.serialize;\n      var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef;\n      this._cache.del(cacheKey);\n      var id = this._getId(schemaKeyRef);\n      if (id) {\n        id = resolve.normalizeId(id);\n        delete this._schemas[id];\n        delete this._refs[id];\n      }\n  }\n  return this;\n}\n\n\nfunction _removeAllSchemas(self, schemas, regex) {\n  for (var keyRef in schemas) {\n    var schemaObj = schemas[keyRef];\n    if (!schemaObj.meta && (!regex || regex.test(keyRef))) {\n      self._cache.del(schemaObj.cacheKey);\n      delete schemas[keyRef];\n    }\n  }\n}\n\n\n/* @this   Ajv */\nfunction _addSchema(schema, skipValidation, meta, shouldAddSchema) {\n  if (typeof schema != 'object' && typeof schema != 'boolean')\n    throw new Error('schema should be object or boolean');\n  var serialize = this._opts.serialize;\n  var cacheKey = serialize ? serialize(schema) : schema;\n  var cached = this._cache.get(cacheKey);\n  if (cached) return cached;\n\n  shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;\n\n  var id = resolve.normalizeId(this._getId(schema));\n  if (id && shouldAddSchema) checkUnique(this, id);\n\n  var willValidate = this._opts.validateSchema !== false && !skipValidation;\n  var recursiveMeta;\n  if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))\n    this.validateSchema(schema, true);\n\n  var localRefs = resolve.ids.call(this, schema);\n\n  var schemaObj = new SchemaObject({\n    id: id,\n    schema: schema,\n    localRefs: localRefs,\n    cacheKey: cacheKey,\n    meta: meta\n  });\n\n  if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj;\n  this._cache.put(cacheKey, schemaObj);\n\n  if (willValidate && recursiveMeta) this.validateSchema(schema, true);\n\n  return schemaObj;\n}\n\n\n/* @this   Ajv */\nfunction _compile(schemaObj, root) {\n  if (schemaObj.compiling) {\n    schemaObj.validate = callValidate;\n    callValidate.schema = schemaObj.schema;\n    callValidate.errors = null;\n    callValidate.root = root ? root : callValidate;\n    if (schemaObj.schema.$async === true)\n      callValidate.$async = true;\n    return callValidate;\n  }\n  schemaObj.compiling = true;\n\n  var currentOpts;\n  if (schemaObj.meta) {\n    currentOpts = this._opts;\n    this._opts = this._metaOpts;\n  }\n\n  var v;\n  try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); }\n  catch(e) {\n    delete schemaObj.validate;\n    throw e;\n  }\n  finally {\n    schemaObj.compiling = false;\n    if (schemaObj.meta) this._opts = currentOpts;\n  }\n\n  schemaObj.validate = v;\n  schemaObj.refs = v.refs;\n  schemaObj.refVal = v.refVal;\n  schemaObj.root = v.root;\n  return v;\n\n\n  /* @this   {*} - custom context, see passContext option */\n  function callValidate() {\n    /* jshint validthis: true */\n    var _validate = schemaObj.validate;\n    var result = _validate.apply(this, arguments);\n    callValidate.errors = _validate.errors;\n    return result;\n  }\n}\n\n\nfunction chooseGetId(opts) {\n  switch (opts.schemaId) {\n    case 'auto': return _get$IdOrId;\n    case 'id': return _getId;\n    default: return _get$Id;\n  }\n}\n\n/* @this   Ajv */\nfunction _getId(schema) {\n  if (schema.$id) this.logger.warn('schema $id ignored', schema.$id);\n  return schema.id;\n}\n\n/* @this   Ajv */\nfunction _get$Id(schema) {\n  if (schema.id) this.logger.warn('schema id ignored', schema.id);\n  return schema.$id;\n}\n\n\nfunction _get$IdOrId(schema) {\n  if (schema.$id && schema.id && schema.$id != schema.id)\n    throw new Error('schema $id is different from id');\n  return schema.$id || schema.id;\n}\n\n\n/**\n * Convert array of error message objects to string\n * @this   Ajv\n * @param  {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.\n * @param  {Object} options optional options with properties `separator` and `dataVar`.\n * @return {String} human readable string with all errors descriptions\n */\nfunction errorsText(errors, options) {\n  errors = errors || this.errors;\n  if (!errors) return 'No errors';\n  options = options || {};\n  var separator = options.separator === undefined ? ', ' : options.separator;\n  var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;\n\n  var text = '';\n  for (var i=0; i<errors.length; i++) {\n    var e = errors[i];\n    if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;\n  }\n  return text.slice(0, -separator.length);\n}\n\n\n/**\n * Add custom format\n * @this   Ajv\n * @param {String} name format name\n * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)\n * @return {Ajv} this for method chaining\n */\nfunction addFormat(name, format) {\n  if (typeof format == 'string') format = new RegExp(format);\n  this._formats[name] = format;\n  return this;\n}\n\n\nfunction addDefaultMetaSchema(self) {\n  var $dataSchema;\n  if (self._opts.$data) {\n    $dataSchema = require('./refs/data.json');\n    self.addMetaSchema($dataSchema, $dataSchema.$id, true);\n  }\n  if (self._opts.meta === false) return;\n  var metaSchema = require('./refs/json-schema-draft-07.json');\n  if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);\n  self.addMetaSchema(metaSchema, META_SCHEMA_ID, true);\n  self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;\n}\n\n\nfunction addInitialSchemas(self) {\n  var optsSchemas = self._opts.schemas;\n  if (!optsSchemas) return;\n  if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas);\n  else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key);\n}\n\n\nfunction addInitialFormats(self) {\n  for (var name in self._opts.formats) {\n    var format = self._opts.formats[name];\n    self.addFormat(name, format);\n  }\n}\n\n\nfunction addInitialKeywords(self) {\n  for (var name in self._opts.keywords) {\n    var keyword = self._opts.keywords[name];\n    self.addKeyword(name, keyword);\n  }\n}\n\n\nfunction checkUnique(self, id) {\n  if (self._schemas[id] || self._refs[id])\n    throw new Error('schema with key or id \"' + id + '\" already exists');\n}\n\n\nfunction getMetaSchemaOptions(self) {\n  var metaOpts = util.copy(self._opts);\n  for (var i=0; i<META_IGNORE_OPTIONS.length; i++)\n    delete metaOpts[META_IGNORE_OPTIONS[i]];\n  return metaOpts;\n}\n\n\nfunction setLogger(self) {\n  var logger = self._opts.logger;\n  if (logger === false) {\n    self.logger = {log: noop, warn: noop, error: noop};\n  } else {\n    if (logger === undefined) logger = console;\n    if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error))\n      throw new Error('logger must implement log, warn and error methods');\n    self.logger = logger;\n  }\n}\n\n\nfunction noop() {}\n", null, "module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction checkPathExt (path, options) {\n  var pathext = options.pathExt !== undefined ?\n    options.pathExt : process.env.PATHEXT\n\n  if (!pathext) {\n    return true\n  }\n\n  pathext = pathext.split(';')\n  if (pathext.indexOf('') !== -1) {\n    return true\n  }\n  for (var i = 0; i < pathext.length; i++) {\n    var p = pathext[i].toLowerCase()\n    if (p && path.substr(-p.length).toLowerCase() === p) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction checkStat (stat, path, options) {\n  if (!stat.isSymbolicLink() && !stat.isFile()) {\n    return false\n  }\n  return checkPathExt(path, options)\n}\n\nfunction isexe (path, options, cb) {\n  fs.stat(path, function (er, stat) {\n    cb(er, er ? false : checkStat(stat, path, options))\n  })\n}\n\nfunction sync (path, options) {\n  return checkStat(fs.statSync(path), path, options)\n}\n", "module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction isexe (path, options, cb) {\n  fs.stat(path, function (er, stat) {\n    cb(er, er ? false : checkStat(stat, options))\n  })\n}\n\nfunction sync (path, options) {\n  return checkStat(fs.statSync(path), options)\n}\n\nfunction checkStat (stat, options) {\n  return stat.isFile() && checkMode(stat, options)\n}\n\nfunction checkMode (stat, options) {\n  var mod = stat.mode\n  var uid = stat.uid\n  var gid = stat.gid\n\n  var myUid = options.uid !== undefined ?\n    options.uid : process.getuid && process.getuid()\n  var myGid = options.gid !== undefined ?\n    options.gid : process.getgid && process.getgid()\n\n  var u = parseInt('100', 8)\n  var g = parseInt('010', 8)\n  var o = parseInt('001', 8)\n  var ug = u | g\n\n  var ret = (mod & o) ||\n    (mod & g) && gid === myGid ||\n    (mod & u) && uid === myUid ||\n    (mod & ug) && myUid === 0\n\n  return ret\n}\n", "var fs = require('fs')\nvar core\nif (process.platform === 'win32' || global.TESTING_WINDOWS) {\n  core = require('./windows.js')\n} else {\n  core = require('./mode.js')\n}\n\nmodule.exports = isexe\nisexe.sync = sync\n\nfunction isexe (path, options, cb) {\n  if (typeof options === 'function') {\n    cb = options\n    options = {}\n  }\n\n  if (!cb) {\n    if (typeof Promise !== 'function') {\n      throw new TypeError('callback not provided')\n    }\n\n    return new Promise(function (resolve, reject) {\n      isexe(path, options || {}, function (er, is) {\n        if (er) {\n          reject(er)\n        } else {\n          resolve(is)\n        }\n      })\n    })\n  }\n\n  core(path, options || {}, function (er, is) {\n    // ignore EACCES because that just means we aren't allowed to run it\n    if (er) {\n      if (er.code === 'EACCES' || options && options.ignoreErrors) {\n        er = null\n        is = false\n      }\n    }\n    cb(er, is)\n  })\n}\n\nfunction sync (path, options) {\n  // my kingdom for a filtered catch\n  try {\n    return core.sync(path, options || {})\n  } catch (er) {\n    if (options && options.ignoreErrors || er.code === 'EACCES') {\n      return false\n    } else {\n      throw er\n    }\n  }\n}\n", "const isWindows = process.platform === 'win32' ||\n    process.env.OSTYPE === 'cygwin' ||\n    process.env.OSTYPE === 'msys'\n\nconst path = require('path')\nconst COLON = isWindows ? ';' : ':'\nconst isexe = require('isexe')\n\nconst getNotFoundError = (cmd) =>\n  Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })\n\nconst getPathInfo = (cmd, opt) => {\n  const colon = opt.colon || COLON\n\n  // If it has a slash, then we don't bother searching the pathenv.\n  // just check the file itself, and that's it.\n  const pathEnv = cmd.match(/\\//) || isWindows && cmd.match(/\\\\/) ? ['']\n    : (\n      [\n        // windows always checks the cwd first\n        ...(isWindows ? [process.cwd()] : []),\n        ...(opt.path || process.env.PATH ||\n          /* istanbul ignore next: very unusual */ '').split(colon),\n      ]\n    )\n  const pathExtExe = isWindows\n    ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'\n    : ''\n  const pathExt = isWindows ? pathExtExe.split(colon) : ['']\n\n  if (isWindows) {\n    if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')\n      pathExt.unshift('')\n  }\n\n  return {\n    pathEnv,\n    pathExt,\n    pathExtExe,\n  }\n}\n\nconst which = (cmd, opt, cb) => {\n  if (typeof opt === 'function') {\n    cb = opt\n    opt = {}\n  }\n  if (!opt)\n    opt = {}\n\n  const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n  const found = []\n\n  const step = i => new Promise((resolve, reject) => {\n    if (i === pathEnv.length)\n      return opt.all && found.length ? resolve(found)\n        : reject(getNotFoundError(cmd))\n\n    const ppRaw = pathEnv[i]\n    const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n    const pCmd = path.join(pathPart, cmd)\n    const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n      : pCmd\n\n    resolve(subStep(p, i, 0))\n  })\n\n  const subStep = (p, i, ii) => new Promise((resolve, reject) => {\n    if (ii === pathExt.length)\n      return resolve(step(i + 1))\n    const ext = pathExt[ii]\n    isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {\n      if (!er && is) {\n        if (opt.all)\n          found.push(p + ext)\n        else\n          return resolve(p + ext)\n      }\n      return resolve(subStep(p, i, ii + 1))\n    })\n  })\n\n  return cb ? step(0).then(res => cb(null, res), cb) : step(0)\n}\n\nconst whichSync = (cmd, opt) => {\n  opt = opt || {}\n\n  const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n  const found = []\n\n  for (let i = 0; i < pathEnv.length; i ++) {\n    const ppRaw = pathEnv[i]\n    const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n    const pCmd = path.join(pathPart, cmd)\n    const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n      : pCmd\n\n    for (let j = 0; j < pathExt.length; j ++) {\n      const cur = p + pathExt[j]\n      try {\n        const is = isexe.sync(cur, { pathExt: pathExtExe })\n        if (is) {\n          if (opt.all)\n            found.push(cur)\n          else\n            return cur\n        }\n      } catch (ex) {}\n    }\n  }\n\n  if (opt.all && found.length)\n    return found\n\n  if (opt.nothrow)\n    return null\n\n  throw getNotFoundError(cmd)\n}\n\nmodule.exports = which\nwhich.sync = whichSync\n", "'use strict';\n\nconst pathKey = (options = {}) => {\n\tconst environment = options.env || process.env;\n\tconst platform = options.platform || process.platform;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n};\n\nmodule.exports = pathKey;\n// TODO: Remove this for the next major release\nmodule.exports.default = pathKey;\n", "'use strict';\n\nconst path = require('path');\nconst which = require('which');\nconst getPathKey = require('path-key');\n\nfunction resolveCommandAttempt(parsed, withoutPathExt) {\n    const env = parsed.options.env || process.env;\n    const cwd = process.cwd();\n    const hasCustomCwd = parsed.options.cwd != null;\n    // Worker threads do not have process.chdir()\n    const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;\n\n    // If a custom `cwd` was specified, we need to change the process cwd\n    // because `which` will do stat calls but does not support a custom cwd\n    if (shouldSwitchCwd) {\n        try {\n            process.chdir(parsed.options.cwd);\n        } catch (err) {\n            /* Empty */\n        }\n    }\n\n    let resolved;\n\n    try {\n        resolved = which.sync(parsed.command, {\n            path: env[getPathKey({ env })],\n            pathExt: withoutPathExt ? path.delimiter : undefined,\n        });\n    } catch (e) {\n        /* Empty */\n    } finally {\n        if (shouldSwitchCwd) {\n            process.chdir(cwd);\n        }\n    }\n\n    // If we successfully resolved, ensure that an absolute path is returned\n    // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it\n    if (resolved) {\n        resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);\n    }\n\n    return resolved;\n}\n\nfunction resolveCommand(parsed) {\n    return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n\nmodule.exports = resolveCommand;\n", "'use strict';\n\n// See http://www.robvanderwoude.com/escapechars.php\nconst metaCharsRegExp = /([()\\][%!^\"`<>&|;, *?])/g;\n\nfunction escapeCommand(arg) {\n    // Escape meta chars\n    arg = arg.replace(metaCharsRegExp, '^$1');\n\n    return arg;\n}\n\nfunction escapeArgument(arg, doubleEscapeMetaChars) {\n    // Convert to string\n    arg = `${arg}`;\n\n    // Algorithm below is based on https://qntm.org/cmd\n    // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input\n    // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information\n\n    // Sequence of backslashes followed by a double quote:\n    // double up all the backslashes and escape the double quote\n    arg = arg.replace(/(?=(\\\\+?)?)\\1\"/g, '$1$1\\\\\"');\n\n    // Sequence of backslashes followed by the end of the string\n    // (which will become a double quote later):\n    // double up all the backslashes\n    arg = arg.replace(/(?=(\\\\+?)?)\\1$/, '$1$1');\n\n    // All other backslashes occur literally\n\n    // Quote the whole thing:\n    arg = `\"${arg}\"`;\n\n    // Escape meta chars\n    arg = arg.replace(metaCharsRegExp, '^$1');\n\n    // Double escape meta chars if necessary\n    if (doubleEscapeMetaChars) {\n        arg = arg.replace(metaCharsRegExp, '^$1');\n    }\n\n    return arg;\n}\n\nmodule.exports.command = escapeCommand;\nmodule.exports.argument = escapeArgument;\n", "'use strict';\nmodule.exports = /^#!(.*)/;\n", "'use strict';\nconst shebangRegex = require('shebang-regex');\n\nmodule.exports = (string = '') => {\n\tconst match = string.match(shebangRegex);\n\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tconst [path, argument] = match[0].replace(/#! ?/, '').split(' ');\n\tconst binary = path.split('/').pop();\n\n\tif (binary === 'env') {\n\t\treturn argument;\n\t}\n\n\treturn argument ? `${binary} ${argument}` : binary;\n};\n", "'use strict';\n\nconst fs = require('fs');\nconst shebangCommand = require('shebang-command');\n\nfunction readShebang(command) {\n    // Read the first 150 bytes from the file\n    const size = 150;\n    const buffer = Buffer.alloc(size);\n\n    let fd;\n\n    try {\n        fd = fs.openSync(command, 'r');\n        fs.readSync(fd, buffer, 0, size, 0);\n        fs.closeSync(fd);\n    } catch (e) { /* Empty */ }\n\n    // Attempt to extract shebang (null is returned if not a shebang)\n    return shebangCommand(buffer.toString());\n}\n\nmodule.exports = readShebang;\n", "'use strict';\n\nconst path = require('path');\nconst resolveCommand = require('./util/resolveCommand');\nconst escape = require('./util/escape');\nconst readShebang = require('./util/readShebang');\n\nconst isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\nfunction detectShebang(parsed) {\n    parsed.file = resolveCommand(parsed);\n\n    const shebang = parsed.file && readShebang(parsed.file);\n\n    if (shebang) {\n        parsed.args.unshift(parsed.file);\n        parsed.command = shebang;\n\n        return resolveCommand(parsed);\n    }\n\n    return parsed.file;\n}\n\nfunction parseNonShell(parsed) {\n    if (!isWin) {\n        return parsed;\n    }\n\n    // Detect & add support for shebangs\n    const commandFile = detectShebang(parsed);\n\n    // We don't need a shell if the command filename is an executable\n    const needsShell = !isExecutableRegExp.test(commandFile);\n\n    // If a shell is required, use cmd.exe and take care of escaping everything correctly\n    // Note that `forceShell` is an hidden option used only in tests\n    if (parsed.options.forceShell || needsShell) {\n        // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`\n        // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument\n        // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,\n        // we need to double escape them\n        const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);\n\n        // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\\bar)\n        // This is necessary otherwise it will always fail with ENOENT in those cases\n        parsed.command = path.normalize(parsed.command);\n\n        // Escape command & arguments\n        parsed.command = escape.command(parsed.command);\n        parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));\n\n        const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n        parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n        parsed.command = process.env.comspec || 'cmd.exe';\n        parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n    }\n\n    return parsed;\n}\n\nfunction parse(command, args, options) {\n    // Normalize arguments, similar to nodejs\n    if (args && !Array.isArray(args)) {\n        options = args;\n        args = null;\n    }\n\n    args = args ? args.slice(0) : []; // Clone array to avoid changing the original\n    options = Object.assign({}, options); // Clone object to avoid changing the original\n\n    // Build our parsed object\n    const parsed = {\n        command,\n        args,\n        options,\n        file: undefined,\n        original: {\n            command,\n            args,\n        },\n    };\n\n    // Delegate further parsing to shell or non-shell\n    return options.shell ? parsed : parseNonShell(parsed);\n}\n\nmodule.exports = parse;\n", "'use strict';\n\nconst isWin = process.platform === 'win32';\n\nfunction notFoundError(original, syscall) {\n    return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {\n        code: 'ENOENT',\n        errno: 'ENOENT',\n        syscall: `${syscall} ${original.command}`,\n        path: original.command,\n        spawnargs: original.args,\n    });\n}\n\nfunction hookChildProcess(cp, parsed) {\n    if (!isWin) {\n        return;\n    }\n\n    const originalEmit = cp.emit;\n\n    cp.emit = function (name, arg1) {\n        // If emitting \"exit\" event and exit code is 1, we need to check if\n        // the command exists and emit an \"error\" instead\n        // See https://github.com/IndigoUnited/node-cross-spawn/issues/16\n        if (name === 'exit') {\n            const err = verifyENOENT(arg1, parsed);\n\n            if (err) {\n                return originalEmit.call(cp, 'error', err);\n            }\n        }\n\n        return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params\n    };\n}\n\nfunction verifyENOENT(status, parsed) {\n    if (isWin && status === 1 && !parsed.file) {\n        return notFoundError(parsed.original, 'spawn');\n    }\n\n    return null;\n}\n\nfunction verifyENOENTSync(status, parsed) {\n    if (isWin && status === 1 && !parsed.file) {\n        return notFoundError(parsed.original, 'spawnSync');\n    }\n\n    return null;\n}\n\nmodule.exports = {\n    hookChildProcess,\n    verifyENOENT,\n    verifyENOENTSync,\n    notFoundError,\n};\n", "'use strict';\n\nconst cp = require('child_process');\nconst parse = require('./lib/parse');\nconst enoent = require('./lib/enoent');\n\nfunction spawn(command, args, options) {\n    // Parse the arguments\n    const parsed = parse(command, args, options);\n\n    // Spawn the child process\n    const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n\n    // Hook into child process \"exit\" event to emit an error if the command\n    // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n    enoent.hookChildProcess(spawned, parsed);\n\n    return spawned;\n}\n\nfunction spawnSync(command, args, options) {\n    // Parse the arguments\n    const parsed = parse(command, args, options);\n\n    // Spawn the child process\n    const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);\n\n    // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n    result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);\n\n    return result;\n}\n\nmodule.exports = spawn;\nmodule.exports.spawn = spawn;\nmodule.exports.sync = spawnSync;\n\nmodule.exports._parse = parse;\nmodule.exports._enoent = enoent;\n", null, null, "{\n  \"name\": \"dotenv\",\n  \"version\": \"16.3.2\",\n  \"description\": \"Loads environment variables from .env file\",\n  \"main\": \"lib/main.js\",\n  \"types\": \"lib/main.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./lib/main.d.ts\",\n      \"require\": \"./lib/main.js\",\n      \"default\": \"./lib/main.js\"\n    },\n    \"./config\": \"./config.js\",\n    \"./config.js\": \"./config.js\",\n    \"./lib/env-options\": \"./lib/env-options.js\",\n    \"./lib/env-options.js\": \"./lib/env-options.js\",\n    \"./lib/cli-options\": \"./lib/cli-options.js\",\n    \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n    \"lint\": \"standard\",\n    \"lint-readme\": \"standard-markdown\",\n    \"pretest\": \"npm run lint && npm run dts-check\",\n    \"test\": \"tap tests/*.js --100 -Rspec\",\n    \"prerelease\": \"npm test\",\n    \"release\": \"standard-version\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/motdotla/dotenv.git\"\n  },\n  \"funding\": \"https://github.com/motdotla/dotenv?sponsor=1\",\n  \"keywords\": [\n    \"dotenv\",\n    \"env\",\n    \".env\",\n    \"environment\",\n    \"variables\",\n    \"config\",\n    \"settings\"\n  ],\n  \"readmeFilename\": \"README.md\",\n  \"license\": \"BSD-2-Clause\",\n  \"devDependencies\": {\n    \"@definitelytyped/dtslint\": \"^0.0.133\",\n    \"@types/node\": \"^18.11.3\",\n    \"decache\": \"^4.6.1\",\n    \"sinon\": \"^14.0.1\",\n    \"standard\": \"^17.0.0\",\n    \"standard-markdown\": \"^7.1.0\",\n    \"standard-version\": \"^9.5.0\",\n    \"tap\": \"^16.3.0\",\n    \"tar\": \"^6.1.11\",\n    \"typescript\": \"^4.8.4\"\n  },\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"browser\": {\n    \"fs\": false\n  }\n}\n", "const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n  const obj = {}\n\n  // Convert buffer to string\n  let lines = src.toString()\n\n  // Convert line breaks to same format\n  lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n  let match\n  while ((match = LINE.exec(lines)) != null) {\n    const key = match[1]\n\n    // Default undefined or null to empty string\n    let value = (match[2] || '')\n\n    // Remove whitespace\n    value = value.trim()\n\n    // Check if double quoted\n    const maybeQuote = value[0]\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, '\\n')\n      value = value.replace(/\\\\r/g, '\\r')\n    }\n\n    // Add to object\n    obj[key] = value\n  }\n\n  return obj\n}\n\nfunction _parseVault (options) {\n  const vaultPath = _vaultPath(options)\n\n  // Parse .env.vault\n  const result = DotenvModule.configDotenv({ path: vaultPath })\n  if (!result.parsed) {\n    throw new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n  }\n\n  // handle scenario for comma separated keys - for use with key rotation\n  // example: DOTENV_KEY=\"dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenv.org/vault/.env.vault?environment=prod\"\n  const keys = _dotenvKey(options).split(',')\n  const length = keys.length\n\n  let decrypted\n  for (let i = 0; i < length; i++) {\n    try {\n      // Get full key\n      const key = keys[i].trim()\n\n      // Get instructions for decrypt\n      const attrs = _instructions(result, key)\n\n      // Decrypt\n      decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n      break\n    } catch (error) {\n      // last key\n      if (i + 1 >= length) {\n        throw error\n      }\n      // try next key\n    }\n  }\n\n  // Parse decrypted .env string\n  return DotenvModule.parse(decrypted)\n}\n\nfunction _log (message) {\n  console.log(`[dotenv@${version}][INFO] ${message}`)\n}\n\nfunction _warn (message) {\n  console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n  console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n  // prioritize developer directly setting options.DOTENV_KEY\n  if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n    return options.DOTENV_KEY\n  }\n\n  // secondary infra already contains a DOTENV_KEY environment variable\n  if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n    return process.env.DOTENV_KEY\n  }\n\n  // fallback to empty string\n  return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n  // Parse DOTENV_KEY. Format is a URI\n  let uri\n  try {\n    uri = new URL(dotenvKey)\n  } catch (error) {\n    if (error.code === 'ERR_INVALID_URL') {\n      throw new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development')\n    }\n\n    throw error\n  }\n\n  // Get decrypt key\n  const key = uri.password\n  if (!key) {\n    throw new Error('INVALID_DOTENV_KEY: Missing key part')\n  }\n\n  // Get environment\n  const environment = uri.searchParams.get('environment')\n  if (!environment) {\n    throw new Error('INVALID_DOTENV_KEY: Missing environment part')\n  }\n\n  // Get ciphertext payload\n  const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n  const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n  if (!ciphertext) {\n    throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n  }\n\n  return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n  let dotenvPath = path.resolve(process.cwd(), '.env')\n\n  if (options && options.path && options.path.length > 0) {\n    dotenvPath = options.path\n  }\n\n  // Locate .env.vault\n  return dotenvPath.endsWith('.vault') ? dotenvPath : `${dotenvPath}.vault`\n}\n\nfunction _resolveHome (envPath) {\n  return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n  _log('Loading env from encrypted .env.vault')\n\n  const parsed = DotenvModule._parseVault(options)\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsed, options)\n\n  return { parsed }\n}\n\nfunction configDotenv (options) {\n  let dotenvPath = path.resolve(process.cwd(), '.env')\n  let encoding = 'utf8'\n  const debug = Boolean(options && options.debug)\n\n  if (options) {\n    if (options.path != null) {\n      dotenvPath = _resolveHome(options.path)\n    }\n    if (options.encoding != null) {\n      encoding = options.encoding\n    } else {\n      if (debug) {\n        _debug('No encoding is specified. UTF-8 is used by default')\n      }\n    }\n  }\n\n  try {\n    // Specifying an encoding returns a string instead of a buffer\n    const parsed = DotenvModule.parse(fs.readFileSync(dotenvPath, { encoding }))\n\n    let processEnv = process.env\n    if (options && options.processEnv != null) {\n      processEnv = options.processEnv\n    }\n\n    DotenvModule.populate(processEnv, parsed, options)\n\n    return { parsed }\n  } catch (e) {\n    if (debug) {\n      _debug(`Failed to load ${dotenvPath} ${e.message}`)\n    }\n\n    return { error: e }\n  }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n  const vaultPath = _vaultPath(options)\n\n  // fallback to original dotenv if DOTENV_KEY is not set\n  if (_dotenvKey(options).length === 0) {\n    return DotenvModule.configDotenv(options)\n  }\n\n  // dotenvKey exists but .env.vault file does not exist\n  if (!fs.existsSync(vaultPath)) {\n    _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n    return DotenvModule.configDotenv(options)\n  }\n\n  return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n  const key = Buffer.from(keyStr.slice(-64), 'hex')\n  let ciphertext = Buffer.from(encrypted, 'base64')\n\n  const nonce = ciphertext.subarray(0, 12)\n  const authTag = ciphertext.subarray(-16)\n  ciphertext = ciphertext.subarray(12, -16)\n\n  try {\n    const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n    aesgcm.setAuthTag(authTag)\n    return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n  } catch (error) {\n    const isRange = error instanceof RangeError\n    const invalidKeyLength = error.message === 'Invalid key length'\n    const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n    if (isRange || invalidKeyLength) {\n      const msg = 'INVALID_DOTENV_KEY: It must be 64 characters long (or more)'\n      throw new Error(msg)\n    } else if (decryptionFailed) {\n      const msg = 'DECRYPTION_FAILED: Please check your DOTENV_KEY'\n      throw new Error(msg)\n    } else {\n      console.error('Error: ', error.code)\n      console.error('Error: ', error.message)\n      throw error\n    }\n  }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n  const debug = Boolean(options && options.debug)\n  const override = Boolean(options && options.override)\n\n  if (typeof parsed !== 'object') {\n    throw new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n  }\n\n  // Set process.env\n  for (const key of Object.keys(parsed)) {\n    if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n      if (override === true) {\n        processEnv[key] = parsed[key]\n      }\n\n      if (debug) {\n        if (override === true) {\n          _debug(`\"${key}\" is already defined and WAS overwritten`)\n        } else {\n          _debug(`\"${key}\" is already defined and was NOT overwritten`)\n        }\n      }\n    } else {\n      processEnv[key] = parsed[key]\n    }\n  }\n}\n\nconst DotenvModule = {\n  configDotenv,\n  _configVault,\n  _parseVault,\n  config,\n  decrypt,\n  parse,\n  populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n", "/**\n * Local MCP (Model Context Protocol) Client Manager for stdio transport\n *\n * This module manages local MCP servers that run as child processes using stdio transport.\n * Local MCP servers are defined in mcp.json configuration file in the working directory.\n *\n * Tool naming follows the same convention as remote MCPs:\n * - Tools are prefixed with server name: `mcp__servername__toolname`\n * - This prevents conflicts with built-in tools and other MCP tools\n */\n\nimport type { MCPClientStatus } from \"$/ai-utils\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport type { DevToolsSys } from \"../core\";\nimport { spawn, type ChildProcess } from \"child_process\";\nimport * as Sentry from \"@sentry/node\";\nimport { getFigmaComponentName } from \"$/vcp-common/figma-component\";\nimport { config as dotenvConfig } from \"dotenv\";\nimport { killProcess } from \"./utils/process-tracker\";\n\nexport interface MCPServerStdioDefinition {\n  name: string;\n  command: string;\n  args?: string[];\n  env?: Record<string, string>;\n  envFile?: string;\n}\n\nexport interface MCPConfig {\n  mcpServers: Record<string, Omit<MCPServerStdioDefinition, \"name\">>;\n}\n\nexport interface LocalMCPClient {\n  client: Client | undefined;\n  process: ChildProcess | undefined;\n  status: MCPClientStatus;\n  serverName: string;\n  command: string;\n  resources?: {\n    uri: string;\n    name?: string;\n    description?: string;\n    mimeType?: string;\n  }[];\n}\n\nexport interface LocalMCPClientManager {\n  clients: LocalMCPClient[];\n  listTools: () => {\n    name: string;\n    description?: string;\n    inputSchema?: any;\n    serverName: string;\n  }[];\n  callTool: (\n    name: string,\n    args?: any,\n    signal?: AbortSignal,\n  ) => Promise<{\n    content: Array<{\n      type: string;\n      text?: string;\n      data?: any;\n    }>;\n    isError?: boolean;\n  }>;\n  getResources: (serverName?: string) => Array<{\n    uri: string;\n    name?: string;\n    description?: string;\n    mimeType?: string;\n    serverName: string;\n    text?: string;\n  }>;\n  getStatus: () => Record<string, MCPClientStatus>;\n  cleanup: () => Promise<void>;\n}\n\n/**\n * Substitute environment variables in a string\n * Supports ${VAR_NAME} syntax\n */\nfunction substituteEnvVars(\n  str: string,\n  env: Record<string, string | undefined>,\n): string {\n  return str.replace(/\\$\\{([^}]+)\\}/g, (match, varName) => {\n    return env[varName] ?? match;\n  });\n}\n\n/**\n * Load environment variables from a .env file using dotenv\n */\nasync function loadEnvFile(\n  sys: DevToolsSys,\n  envFilePath: string,\n  workingDirectory: string,\n): Promise<Record<string, string>> {\n  const path = await import(\"node:path\");\n  const absolutePath = path.isAbsolute(envFilePath)\n    ? envFilePath\n    : path.join(workingDirectory, envFilePath);\n\n  try {\n    if (!sys.existsSync(absolutePath)) {\n      return {};\n    }\n\n    const result = dotenvConfig({ path: absolutePath });\n\n    if (result.error) {\n      throw result.error;\n    }\n\n    return result.parsed || {};\n  } catch (error) {\n    Sentry.captureException(error, {\n      level: \"warning\",\n      tags: {\n        operation: \"load-env-file\",\n        envFilePath: absolutePath,\n      },\n    });\n    return {};\n  }\n}\n\n/**\n * Get built-in tool names to check for conflicts\n * Note: This is imported from the service side, we'll need to ensure these are available\n */\nfunction getBuiltInToolNames(): Set<string> {\n  // TODO: Import from service or replicate the list\n  // For now, we'll create an empty set and rely on server-side validation\n  return new Set<string>();\n}\n\n/**\n * Create a prefixed tool name following MCP naming convention\n */\nfunction createPrefixedToolName(serverName: string, toolName: string): string {\n  return `mcp__${getFigmaComponentName(serverName).toLowerCase()}__${toolName}`;\n}\n\n/**\n * Safely disconnect and clean up an MCP client\n */\nasync function cleanupClient(\n  sys: DevToolsSys,\n  client: Client,\n  process?: ChildProcess,\n): Promise<void> {\n  try {\n    await client.close();\n  } catch (error) {\n    Sentry.captureException(error, {\n      level: \"warning\",\n      tags: {\n        operation: \"local-mcp-client-cleanup\",\n      },\n    });\n  }\n\n  if (process) {\n    // Use the shared killProcess utility\n    await killProcess(sys, process);\n  }\n}\n\n/**\n * Create a local MCP client manager from server definitions\n */\nexport async function createLocalMCPClientManager(\n  servers: MCPServerStdioDefinition[],\n  sys: DevToolsSys,\n  workingDirectory: string,\n  signal?: AbortSignal,\n): Promise<LocalMCPClientManager> {\n  const builtInToolNames = getBuiltInToolNames();\n  const clients: LocalMCPClient[] = [];\n\n  // Tools cache for fast lookup\n  const toolsCache = new Map<\n    string,\n    {\n      client: LocalMCPClient;\n      tool: {\n        name: string;\n        description?: string;\n        inputSchema?: any;\n      };\n      originalName: string;\n    }\n  >();\n\n  const allTools: Array<{\n    name: string;\n    description?: string;\n    inputSchema?: any;\n    serverName: string;\n  }> = [];\n\n  const allResources: Array<{\n    uri: string;\n    name?: string;\n    description?: string;\n    mimeType?: string;\n    serverName: string;\n    text?: string;\n  }> = [];\n\n  const usedToolNames = new Set(builtInToolNames);\n\n  // Create clients for each server\n  for (const server of servers) {\n    const start = performance.now();\n    let client: Client | undefined;\n    let childProcess: ChildProcess | undefined;\n\n    try {\n      // Spawn the child process\n      childProcess = spawn(server.command, server.args || [], {\n        cwd: workingDirectory,\n        env: {\n          ...process.env,\n          ...server.env,\n        },\n        stdio: [\"pipe\", \"pipe\", \"pipe\"],\n      });\n\n      // Create MCP client with stdio transport\n      client = new Client({\n        name: \"builderio-devtools\",\n        version: \"1.0.0\",\n      });\n\n      const transport = new StdioClientTransport({\n        command: server.command,\n        args: server.args || [],\n        env: {\n          ...(process.env as Record<string, string>),\n          ...server.env,\n        },\n      });\n\n      // Connect with timeout\n      const timeoutSignal = AbortSignal.timeout(5_000);\n      const composedSignal = signal\n        ? AbortSignal.any([signal, timeoutSignal])\n        : timeoutSignal;\n\n      await client.connect(transport, { signal: composedSignal });\n\n      clients.push({\n        client,\n        process: childProcess,\n        status: {\n          status: \"ok\",\n          protocol: \"stdio\" as const,\n          connectionDurationMs: performance.now() - start,\n          resolutionDurationMs: 0,\n        },\n        serverName: server.name,\n        command: server.command,\n      });\n    } catch (error) {\n      // Cleanup on failure\n      if (client) {\n        await cleanupClient(sys, client, childProcess);\n      } else if (childProcess) {\n        await killProcess(sys, childProcess);\n      }\n\n      clients.push({\n        client: undefined,\n        process: undefined,\n        status: {\n          status: \"error\",\n          message: error instanceof Error ? error.message : \"Unknown error\",\n          connectionDurationMs: performance.now() - start,\n          resolutionDurationMs: 0,\n        },\n        serverName: server.name,\n        command: server.command,\n      });\n\n      Sentry.captureException(error, {\n        level: \"warning\",\n        tags: {\n          operation: \"local-mcp-connect\",\n          serverName: server.name,\n          command: server.command,\n        },\n      });\n    }\n  }\n\n  // Fetch tools and resources from all connected clients\n  await Promise.all(\n    clients.map(async (mcpClient) => {\n      if (!mcpClient.client) return;\n\n      const start = performance.now();\n      try {\n        const mcpClientClient = mcpClient.client;\n        const serverCapabilities =\n          await mcpClientClient.getServerCapabilities();\n\n        if (serverCapabilities?.tools) {\n          const toolsResult = await mcpClientClient.listTools(undefined, {\n            signal,\n          });\n\n          if (toolsResult.tools) {\n            for (const tool of toolsResult.tools) {\n              const originalName = tool.name;\n              let toolName = createPrefixedToolName(\n                mcpClient.serverName,\n                originalName,\n              );\n\n              // Handle conflicts with counter suffix\n              let counter = 1;\n              let prefixedName = toolName;\n              while (usedToolNames.has(prefixedName)) {\n                prefixedName = `${toolName}_${counter}`;\n                counter++;\n              }\n              toolName = prefixedName;\n\n              usedToolNames.add(toolName);\n\n              toolsCache.set(toolName, {\n                client: mcpClient,\n                tool: {\n                  ...tool,\n                  name: toolName,\n                },\n                originalName,\n              });\n\n              allTools.push({\n                ...tool,\n                name: toolName,\n                serverName: mcpClient.serverName,\n              });\n            }\n          }\n        }\n\n        if (serverCapabilities?.resources) {\n          const resourcesResult = await mcpClientClient.listResources(\n            undefined,\n            { signal },\n          );\n\n          if (resourcesResult.resources) {\n            const clientResources = await Promise.all(\n              resourcesResult.resources.map(async (resource) => {\n                if (resource.mimeType !== \"text/plain\") {\n                  return null;\n                }\n                const text = await mcpClientClient.readResource(resource, {\n                  signal,\n                });\n                return {\n                  uri: resource.uri,\n                  name: resource.name,\n                  description: resource.description,\n                  mimeType: resource.mimeType,\n                  text: text.contents[0]?.text as string,\n                  serverName: mcpClient.serverName,\n                };\n              }),\n            );\n\n            const filteredClientResources = clientResources.filter(\n              (resource) => resource !== null,\n            );\n            mcpClient.resources = filteredClientResources;\n\n            for (const resource of filteredClientResources) {\n              allResources.push(resource);\n            }\n          }\n        }\n      } catch (error) {\n        mcpClient.status.message =\n          error instanceof Error ? error.message : \"Unknown error\";\n        mcpClient.status.status = \"error\";\n        Sentry.captureException(error, {\n          level: \"warning\",\n          tags: {\n            operation: \"local-mcp-list-tools-resources\",\n            serverName: mcpClient.serverName,\n          },\n        });\n      } finally {\n        mcpClient.status.resolutionDurationMs = performance.now() - start;\n      }\n    }),\n  );\n\n  // Sort tools and resources\n  allTools.sort((a, b) => a.name.localeCompare(b.name));\n  allResources.sort((a, b) => {\n    const aName = `${a.serverName}__${a.name}`;\n    const bName = `${b.serverName}__${b.name}`;\n    return aName.localeCompare(bName);\n  });\n\n  return {\n    clients,\n\n    listTools: () => {\n      return allTools;\n    },\n\n    callTool: async (name: string, args?: any, signal?: AbortSignal) => {\n      const toolInfo = toolsCache.get(name);\n\n      if (!toolInfo || !toolInfo.client.client) {\n        throw new Error(\n          `Tool \"${name}\" not found in any connected local MCP server`,\n        );\n      }\n\n      try {\n        const result = await toolInfo.client.client.callTool(\n          {\n            name: toolInfo.originalName,\n            arguments: args,\n          },\n          undefined,\n          { signal },\n        );\n\n        return {\n          content: Array.isArray(result.content) ? result.content : [],\n          isError: result.isError === true,\n        };\n      } catch (error) {\n        Sentry.captureException(error, {\n          level: \"warning\",\n          tags: {\n            operation: \"local-mcp-call-tool\",\n            toolName: name,\n            originalToolName: toolInfo.originalName,\n            serverName: toolInfo.client.serverName,\n          },\n        });\n        throw error;\n      }\n    },\n\n    getResources: (serverName?: string) => {\n      if (serverName) {\n        return allResources.filter(\n          (resource) => resource.serverName === serverName,\n        );\n      }\n      return allResources;\n    },\n\n    getStatus: () => {\n      const status: Record<string, MCPClientStatus> = {};\n      for (const client of clients) {\n        status[client.serverName] = client.status;\n      }\n      return status;\n    },\n\n    cleanup: async () => {\n      await Promise.all(\n        clients.map(async (mcpClient) => {\n          if (mcpClient.client) {\n            await cleanupClient(sys, mcpClient.client, mcpClient.process);\n          } else if (mcpClient.process) {\n            await killProcess(sys, mcpClient.process);\n          }\n        }),\n      );\n    },\n  };\n}\n\n/**\n * Apply environment variable substitution to MCP server configuration\n * This is separated from loadMCPConfig to allow easy unit testing\n */\nexport function applyEnvSubstitution(\n  serverConfig: Omit<MCPServerStdioDefinition, \"name\">,\n  name: string,\n  baseEnv: Record<string, string | undefined>,\n  envFileVars: Record<string, string>,\n): MCPServerStdioDefinition {\n  // Merge environments for substitution (process.env + envFile)\n  // Do NOT include serverConfig.env yet - those values need to be substituted first\n  const envForSubstitution = {\n    ...baseEnv,\n    ...envFileVars,\n  };\n\n  // Perform environment variable substitution on command and args\n  const substitutedCommand = substituteEnvVars(\n    serverConfig.command,\n    envForSubstitution,\n  );\n  const substitutedArgs = (serverConfig.args || []).map((arg) =>\n    substituteEnvVars(arg, envForSubstitution),\n  );\n\n  // Substitute env values from config\n  const substitutedExplicitEnv: Record<string, string> = {};\n  for (const [key, value] of Object.entries(serverConfig.env || {})) {\n    if (value !== undefined) {\n      substitutedExplicitEnv[key] = substituteEnvVars(\n        value,\n        envForSubstitution,\n      );\n    }\n  }\n\n  // Final env: envFile < substituted explicit env\n  const finalEnv: Record<string, string> = {\n    ...envFileVars,\n    ...substitutedExplicitEnv,\n  };\n\n  // Substitute envFile path if present\n  const substitutedEnvFile = serverConfig.envFile\n    ? substituteEnvVars(serverConfig.envFile, baseEnv)\n    : undefined;\n\n  return {\n    name,\n    command: substitutedCommand,\n    args: substitutedArgs,\n    env: finalEnv,\n    envFile: substitutedEnvFile,\n  };\n}\n\n/**\n * Discover and load MCP configuration from working directory and fusionConfig\n * Servers from fusionConfig will be merged with servers from mcp.json\n * If a server with the same name exists in both, fusionConfig takes precedence\n */\nexport async function loadMCPConfig(\n  sys: DevToolsSys,\n  workingDirectory: string,\n  fusionConfig?: {\n    mcpServers?: Record<string, Omit<MCPServerStdioDefinition, \"name\">>;\n  },\n): Promise<MCPServerStdioDefinition[]> {\n  const path = await import(\"node:path\");\n  const configPath = path.join(workingDirectory, \"mcp.json\");\n\n  // Build environment for substitution (process.env + any loaded envFiles)\n  const baseEnv = { ...process.env };\n\n  // Collect servers from both sources\n  const serverConfigMap = new Map<\n    string,\n    Omit<MCPServerStdioDefinition, \"name\">\n  >();\n\n  // First, load from mcp.json\n  try {\n    if (sys.existsSync(configPath)) {\n      const configContent = await sys.readFile(configPath);\n      if (configContent) {\n        const config: MCPConfig = JSON.parse(configContent);\n\n        if (config.mcpServers && typeof config.mcpServers === \"object\") {\n          for (const [name, serverConfig] of Object.entries(\n            config.mcpServers,\n          )) {\n            if (serverConfig.command) {\n              serverConfigMap.set(name, serverConfig);\n            }\n          }\n        }\n      }\n    }\n  } catch (error) {\n    Sentry.captureException(error, {\n      level: \"warning\",\n      tags: {\n        operation: \"load-mcp-config-file\",\n        workingDirectory,\n      },\n    });\n  }\n\n  // Then, merge/override with fusionConfig.mcpServers\n  if (fusionConfig?.mcpServers) {\n    for (const [name, serverConfig] of Object.entries(\n      fusionConfig.mcpServers,\n    )) {\n      if (serverConfig.command) {\n        serverConfigMap.set(name, serverConfig);\n      }\n    }\n  }\n\n  // Process all collected servers\n  const servers: MCPServerStdioDefinition[] = [];\n  for (const [name, serverConfig] of serverConfigMap.entries()) {\n    try {\n      // Load envFile if specified (substitute envFile path first)\n      let envFileVars: Record<string, string> = {};\n      if (serverConfig.envFile) {\n        const substitutedEnvFilePath = substituteEnvVars(\n          serverConfig.envFile,\n          baseEnv,\n        );\n        envFileVars = await loadEnvFile(\n          sys,\n          substitutedEnvFilePath,\n          workingDirectory,\n        );\n      }\n\n      // Apply environment variable substitution\n      const server = applyEnvSubstitution(\n        serverConfig,\n        name,\n        baseEnv,\n        envFileVars,\n      );\n\n      servers.push(server);\n    } catch (error) {\n      Sentry.captureException(error, {\n        level: \"warning\",\n        tags: {\n          operation: \"load-mcp-config-server\",\n          serverName: name,\n          workingDirectory,\n        },\n      });\n    }\n  }\n\n  return servers;\n}\n", "import type { ApplyActionsResult } from \"../../../ai-utils/src/codegen\";\n\n/**\n * Clean file path by removing git diff prefixes (a/, b/)\n * @param filePath - The file path from git diff\n * @returns Clean file path without prefixes\n */\nfunction cleanFilePath(filePath: string): string {\n  // Remove a/ and b/ prefixes from git diff file paths\n  return filePath.replace(/^[ab]\\//, \"\");\n}\n\n/**\n * Parse git diff --name-status output for files only mode (only extract filePath and action)\n * @param diff - The git diff --name-status output string\n * @returns Array of ApplyActionsResult objects with only filePath and action populated\n */\nfunction parseGitDiffFilesOnly(diff: string): ApplyActionsResult[] {\n  const results: ApplyActionsResult[] = [];\n  const lines = diff.split(\"\\n\").filter((line) => line.trim() !== \"\");\n\n  // Parse --name-status format: \"M\\tfile.txt\" or \"A\\tfile.txt\" or \"D\\tfile.txt\"\n  for (const line of lines) {\n    const trimmed = line.trim();\n    if (trimmed === \"\") continue;\n\n    const parts = trimmed.split(/\\s+/);\n    if (parts.length >= 2) {\n      const statusCode = parts[0];\n      const filePath = parts.slice(1).join(\" \"); // Handle file paths with spaces\n\n      let action: \"create\" | \"update\" | \"delete\";\n      switch (statusCode[0]) {\n        case \"A\":\n          action = \"create\";\n          break;\n        case \"D\":\n          action = \"delete\";\n          break;\n        case \"M\":\n        case \"R\":\n        case \"C\":\n        case \"T\":\n        default:\n          action = \"update\";\n          break;\n      }\n\n      results.push({\n        filePath,\n        addedLines: 0,\n        removedLines: 0,\n        action,\n        content: undefined,\n        oldContent: undefined,\n      });\n    }\n  }\n\n  return results;\n}\n\n/**\n * Parse git diff output and convert it to ApplyActionsResult array\n * @param diff - The git diff output string\n * @param includeFilesOnly - If true, only populate action and filePath properties\n * @returns Array of ApplyActionsResult objects\n */\nexport function parseGitDiffToApplyActions(\n  diff: string,\n  includeFilesOnly: boolean = false,\n): ApplyActionsResult[] {\n  const results: ApplyActionsResult[] = [];\n  const lines = diff.split(\"\\n\");\n  let currentFile: string | null = null;\n  let originalFile: string | null = null; // Track the original file path for deleted files\n  let currentAction: \"create\" | \"update\" | \"delete\" | null = null;\n  let addedLines = 0;\n  let removedLines = 0;\n  let content: string[] = [];\n  let oldContent: string[] = [];\n  let isNewFile = false;\n  let isDeletedFile = false;\n\n  // If includeFilesOnly is true, we can use a simpler parsing approach\n  if (includeFilesOnly) {\n    return parseGitDiffFilesOnly(diff);\n  }\n\n  for (let i = 0; i < lines.length; i++) {\n    const line = lines[i];\n\n    // Check for file header (--- or +++)\n    if (line.startsWith(\"--- \") || line.startsWith(\"+++ \")) {\n      // If we have a previous file, save it\n      if (currentFile && currentAction) {\n        let finalAction: \"create\" | \"update\" | \"delete\";\n        if (isNewFile) {\n          finalAction = \"create\";\n        } else if (isDeletedFile) {\n          finalAction = \"delete\";\n        } else {\n          finalAction = \"update\";\n        }\n\n        // Use original file path for deleted files, otherwise use current file path\n        const filePath =\n          finalAction === \"delete\" && originalFile ? originalFile : currentFile;\n\n        results.push({\n          filePath: filePath!,\n          addedLines,\n          removedLines,\n          action: finalAction,\n          content: content.length > 0 ? content.join(\"\\n\") : undefined,\n          oldContent: oldContent.length > 0 ? oldContent.join(\"\\n\") : undefined,\n        });\n      }\n\n      // Extract file path\n      const filePath = line.substring(4).split(\"\\t\")[0];\n      const cleanPath = cleanFilePath(filePath);\n      if (line.startsWith(\"--- \")) {\n        // This is the old file\n        originalFile = cleanPath; // Store the original file path\n        currentFile = cleanPath;\n        // Reset counters for new file\n        addedLines = 0;\n        removedLines = 0;\n        content = [];\n        oldContent = [];\n        currentAction = null;\n        isNewFile = filePath === \"/dev/null\";\n        isDeletedFile = false;\n      } else if (line.startsWith(\"+++ \")) {\n        // This is the new file\n        isDeletedFile = filePath === \"/dev/null\";\n        // For deleted files, this will be /dev/null, but we keep the original file path\n        if (filePath === \"/dev/null\") {\n          // Keep the original file path for deleted files\n          currentFile = originalFile;\n        } else {\n          currentFile = cleanPath;\n        }\n      }\n      continue;\n    }\n\n    // Check for hunk header (@@)\n    else if (line.startsWith(\"@@\")) {\n      // This is a hunk header, continue to next line\n      continue;\n    }\n    // Check for added lines (+)\n    else if (line.startsWith(\"+\")) {\n      addedLines++;\n      content.push(line.substring(1));\n      if (currentAction === null) {\n        currentAction = \"update\";\n      }\n    }\n    // Check for removed lines (-)\n    else if (line.startsWith(\"-\")) {\n      removedLines++;\n      oldContent.push(line.substring(1));\n      if (currentAction === null) {\n        currentAction = \"update\";\n      }\n    }\n    // Regular lines (space or no prefix)\n    else if (line.startsWith(\" \") || line === \"\") {\n      content.push(line.substring(1));\n      oldContent.push(line.substring(1));\n    }\n  }\n\n  // Handle the last file\n  if (currentFile && currentAction) {\n    // Determine action based on git diff headers, not just line counts\n    let finalAction: \"create\" | \"update\" | \"delete\";\n    if (isNewFile) {\n      finalAction = \"create\";\n    } else if (isDeletedFile) {\n      finalAction = \"delete\";\n    } else {\n      finalAction = \"update\";\n    }\n\n    // Use original file path for deleted files, otherwise use current file path\n    const filePath =\n      finalAction === \"delete\" && originalFile ? originalFile : currentFile;\n\n    results.push({\n      filePath: filePath!,\n      addedLines,\n      removedLines,\n      action: finalAction,\n      content: content.length > 0 ? content.join(\"\\n\") : undefined,\n      oldContent: oldContent.length > 0 ? oldContent.join(\"\\n\") : undefined,\n    });\n  }\n\n  return results;\n}\n", "export const generateKey = async () => {\n  // generate a random AES-GCM key (256-bit, non-extractable)\n  const aesKey = await crypto.subtle.generateKey(\n    { name: \"AES-GCM\", length: 256 },\n    true, // extractable\n    [\"encrypt\", \"decrypt\"],\n  );\n  const jwk = await crypto.subtle.exportKey(\"jwk\", aesKey);\n  return JSON.stringify(jwk);\n};\n\nexport const generateIV = async () => {\n  return crypto.getRandomValues(new Uint8Array(16));\n};\n\nexport const loadKey = async (key: string) => {\n  const jwk = JSON.parse(key);\n  return await crypto.subtle.importKey(\n    \"jwk\",\n    jwk,\n    {\n      name: \"AES-GCM\",\n      length: 256,\n    },\n    true,\n    [\"encrypt\", \"decrypt\"],\n  );\n};\n\nexport const encrypt = async (\n  key: CryptoKey,\n  iv: Uint8Array<ArrayBuffer>,\n  data: string | Uint8Array<ArrayBuffer>,\n) => {\n  const encrypted = await crypto.subtle.encrypt(\n    {\n      name: \"AES-GCM\",\n      iv,\n      tagLength: 128,\n    },\n    key,\n    typeof data === \"string\" ? new TextEncoder().encode(data) : data,\n  );\n  return Buffer.from(encrypted);\n};\n\nexport const decryptString = async (\n  key: CryptoKey,\n  iv: Uint8Array<ArrayBuffer>,\n  data: Uint8Array<ArrayBuffer>,\n) => {\n  const decrypted = await crypto.subtle.decrypt(\n    {\n      name: \"AES-GCM\",\n      iv: iv as any,\n      tagLength: 128,\n    },\n    key,\n    data,\n  );\n  return new TextDecoder().decode(decrypted);\n};\n", "let flags: Record<string, boolean> = {};\n\nexport function setFeatureFlags(featureFlags: Record<string, boolean>) {\n  Object.assign(flags, featureFlags);\n}\n\nexport function getFeatureFlag(featureFlag: string) {\n  return !!flags[featureFlag];\n}\n", "import { existsSync, readFileSync } from \"node:fs\";\n\n/**\n * Safely read a JSON file\n */\nexport function safeReadJSON(filePath: string): any | null {\n  try {\n    if (existsSync(filePath)) {\n      const content = readFileSync(filePath, \"utf-8\");\n      return JSON.parse(content);\n    }\n  } catch (err) {\n    // Ignore errors\n  }\n  return null;\n}\n\n/**\n * Safely read a text file\n */\nexport function safeReadFile(filePath: string): string | null {\n  try {\n    if (existsSync(filePath)) {\n      return readFileSync(filePath, \"utf-8\");\n    }\n  } catch (err) {\n    // Ignore errors\n  }\n  return null;\n}\n\n/**\n * Package manager information\n */\nexport interface PackageManagerInfo {\n  manager: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\";\n  setupCommand: string;\n}\n\n/**\n * Detect the package manager at the root level based on lock files\n * Returns the specific package manager command for setup\n */\nexport function detectRootPackageManager(\n  files: string[],\n): PackageManagerInfo | null {\n  // Check for lock files at the root level (not in subdirectories)\n  const rootFiles = files.filter((f) => !f.includes(\"/\"));\n\n  if (rootFiles.some((f) => f === \"pnpm-lock.yaml\")) {\n    return { manager: \"pnpm\", setupCommand: \"pnpm install\" };\n  }\n  if (rootFiles.some((f) => f === \"yarn.lock\")) {\n    return { manager: \"yarn\", setupCommand: \"yarn\" };\n  }\n  if (rootFiles.some((f) => f === \"bun.lockb\")) {\n    return { manager: \"bun\", setupCommand: \"bun install\" };\n  }\n  if (rootFiles.some((f) => f === \"package-lock.json\")) {\n    return { manager: \"npm\", setupCommand: \"npm install\" };\n  }\n\n  return null;\n}\n\n/**\n * Check if a file exists at the root level\n */\nexport function hasRootFile(files: string[], fileName: string): boolean {\n  return files.some((f) => f === fileName);\n}\n\n/**\n * Check if any file matches a pattern at the root level\n */\nexport function hasRootFileMatching(\n  files: string[],\n  predicate: (fileName: string) => boolean,\n): boolean {\n  const rootFiles = files.filter((f) => !f.includes(\"/\"));\n  return rootFiles.some(predicate);\n}\n\n/**\n * Check if a directory exists at the root level\n */\nexport function hasRootDirectory(\n  files: string[],\n  directoryName: string,\n): boolean {\n  return files.some((f) => f.startsWith(`${directoryName}/`));\n}\n", "import type { GuessedSettings } from \"$/ai-utils\";\nimport { join } from \"node:path\";\nimport {\n  detectRootPackageManager,\n  hasRootDirectory,\n  hasRootFileMatching,\n  safeReadJSON,\n} from \"../repo-metrics-utils\";\n\n/**\n * Detect Next.js project settings with high confidence\n * Only returns settings if we can detect all required components\n *\n * Detection criteria:\n * 1. Package manager (npm/yarn/pnpm) detected via lock file at root\n * 2. Next.js config file (next.config.js/ts/mjs) at root\n * 3. app/ directory exists (Next.js 13+ App Router)\n * 4. package.json has a \"dev\" script\n * 5. The dev script includes \"next dev\"\n */\nexport async function detectNextJsSettings(\n  basePath: string,\n  files: string[],\n): Promise<GuessedSettings | null> {\n  try {\n    // Step 1: Detect package manager at root\n    const packageManagerInfo = detectRootPackageManager(files);\n    if (!packageManagerInfo) {\n      return null; // No clear package manager found\n    }\n\n    // Step 2: Check for Next.js config file at root\n    const hasNextConfig = hasRootFileMatching(files, (f) =>\n      /^next\\.config\\.(js|ts|mjs)$/.test(f),\n    );\n\n    if (!hasNextConfig) {\n      return null; // Not a Next.js project\n    }\n\n    // Step 3: Check for app/ folder (Next.js 13+ App Router)\n    // Note: We could also check for pages/ for older Next.js projects\n    const hasAppFolder = hasRootDirectory(files, \"app\");\n\n    if (!hasAppFolder) {\n      return null; // No app folder found\n    }\n\n    // Step 4: Read package.json and check for dev script\n    const packageJsonPath = join(basePath, \"package.json\");\n    const packageJson = safeReadJSON(packageJsonPath);\n\n    if (!packageJson?.scripts?.dev) {\n      return null; // No dev script found\n    }\n\n    const devScript = packageJson.scripts.dev;\n\n    // Step 5: Verify the dev script uses \"next dev\"\n    if (!devScript.includes(\"next dev\")) {\n      return null; // Dev script doesn't use next dev\n    }\n\n    // All checks passed - return guessed settings with high confidence\n    return {\n      id: \"nextjs\",\n      setupCommand: packageManagerInfo.setupCommand,\n      devCommand: devScript,\n      setupDependencies: [\n        {\n          tool: \"node\",\n          version: \"22\",\n          key: \"node\",\n          type: \"mise\",\n        },\n      ],\n      autoDetectDevServer: true,\n    };\n  } catch (err) {\n    // If anything fails, return null\n    return null;\n  }\n}\n", "import type { GuessedSettings } from \"$/ai-utils\";\nimport { join } from \"node:path\";\nimport {\n  detectRootPackageManager,\n  hasRootDirectory,\n  hasRootFileMatching,\n  safeReadJSON,\n  safeReadFile,\n} from \"../repo-metrics-utils\";\n\n/**\n * Detect Vue.js project settings with high confidence\n * Only returns settings if we can detect all required components\n *\n * Detection criteria:\n * 1. Package manager (npm/yarn/pnpm) detected via lock file at root\n * 2. Vue config file (vite.config.js/ts with Vue, or vue.config.js) at root\n * 3. src/ directory exists (standard Vue project structure)\n * 4. package.json has a \"dev\" script\n * 5. The dev script uses \"vite\" or \"vue-cli-service serve\"\n * 6. Vue is listed as a dependency\n *\n * Note: This detector focuses on standard Vue projects (Vue 3 + Vite or Vue 2 + CLI).\n * Nuxt projects are handled separately as a different framework.\n */\nexport async function detectVueSettings(\n  basePath: string,\n  files: string[],\n): Promise<GuessedSettings | null> {\n  try {\n    // Step 1: Detect package manager at root\n    const packageManagerInfo = detectRootPackageManager(files);\n    if (!packageManagerInfo) {\n      return null; // No clear package manager found\n    }\n\n    // Step 2: Check for Vue config files at root\n    const hasVueCliConfig = hasRootFileMatching(\n      files,\n      (f) => f === \"vue.config.js\" || f === \"vue.config.ts\",\n    );\n\n    const hasViteConfig = hasRootFileMatching(files, (f) =>\n      /^vite\\.config\\.(js|ts|mjs)$/.test(f),\n    );\n\n    // Must have either Vue CLI config or Vite config\n    if (!hasVueCliConfig && !hasViteConfig) {\n      return null; // No Vue config found\n    }\n\n    // Step 3: If using Vite, verify it's configured for Vue\n    if (hasViteConfig && !hasVueCliConfig) {\n      // Read the vite config to check for Vue plugin\n      const viteConfigFiles = files.filter((f) =>\n        /^vite\\.config\\.(js|ts|mjs)$/.test(f),\n      );\n\n      if (viteConfigFiles.length > 0) {\n        const viteConfigPath = join(basePath, viteConfigFiles[0]);\n        const viteConfigContent = safeReadFile(viteConfigPath);\n\n        // Check if the config imports/uses Vue plugin\n        if (\n          !viteConfigContent ||\n          (!viteConfigContent.includes(\"@vitejs/plugin-vue\") &&\n            !viteConfigContent.includes(\"vite-plugin-vue\"))\n        ) {\n          return null; // Vite config doesn't use Vue plugin\n        }\n      }\n    }\n\n    // Step 4: Check for src/ directory (standard Vue project structure)\n    const hasSrcFolder = hasRootDirectory(files, \"src\");\n\n    if (!hasSrcFolder) {\n      return null; // No src folder found\n    }\n\n    // Step 5: Read package.json and verify Vue dependency\n    const packageJsonPath = join(basePath, \"package.json\");\n    const packageJson = safeReadJSON(packageJsonPath);\n\n    if (!packageJson) {\n      return null; // No package.json found\n    }\n\n    // Check if Vue is a dependency\n    const hasVueDependency =\n      packageJson.dependencies?.vue || packageJson.devDependencies?.vue;\n\n    if (!hasVueDependency) {\n      return null; // Vue not listed as dependency\n    }\n\n    // Step 6: Check for dev script\n    if (!packageJson.scripts?.dev) {\n      return null; // No dev script found\n    }\n\n    const devScript = packageJson.scripts.dev;\n\n    // Step 7: Verify the dev script uses Vue tooling\n    const isViteProject = devScript.includes(\"vite\");\n    const isVueCliProject = devScript.includes(\"vue-cli-service\");\n\n    if (!isViteProject && !isVueCliProject) {\n      return null; // Dev script doesn't use known Vue tooling\n    }\n\n    // All checks passed - return guessed settings with high confidence\n    return {\n      id: \"vue-vite\",\n      setupCommand: packageManagerInfo.setupCommand,\n      devCommand: devScript,\n      setupDependencies: [\n        {\n          tool: \"node\",\n          version: \"22\",\n          key: \"node\",\n          type: \"mise\",\n        },\n      ],\n      autoDetectDevServer: true,\n    };\n  } catch (err) {\n    // If anything fails, return null\n    return null;\n  }\n}\n", "import type { GuessedSettings } from \"$/ai-utils\";\nimport { join } from \"node:path\";\nimport {\n  detectRootPackageManager,\n  hasRootDirectory,\n  hasRootFile,\n  safeReadJSON,\n  safeReadFile,\n} from \"../repo-metrics-utils\";\n\n/**\n * Detect Svelte/SvelteKit project settings with high confidence\n * Only returns settings if we can detect all required components\n *\n * Detection criteria:\n * 1. Package manager (npm/yarn/pnpm/bun) detected via lock file at root\n * 2. Svelte config file (svelte.config.js) at root\n * 3. src/ directory exists (standard Svelte project structure)\n * 4. package.json has a \"dev\" script\n * 5. The dev script uses \"vite\" or \"@sveltejs/kit\"\n * 6. Svelte is listed as a dependency\n * 7. Either @sveltejs/kit or @sveltejs/vite-plugin-svelte is a dependency\n */\nexport async function detectSvelteSettings(\n  basePath: string,\n  files: string[],\n): Promise<GuessedSettings | null> {\n  try {\n    // Step 1: Detect package manager at root\n    const packageManagerInfo = detectRootPackageManager(files);\n    if (!packageManagerInfo) {\n      return null; // No clear package manager found\n    }\n\n    // Step 2: Check for Svelte config file at root\n    const hasSvelteConfig = hasRootFile(files, \"svelte.config.js\");\n\n    if (!hasSvelteConfig) {\n      return null; // Not a Svelte project\n    }\n\n    // Step 3: Check for src/ directory (standard Svelte project structure)\n    const hasSrcFolder = hasRootDirectory(files, \"src\");\n\n    if (!hasSrcFolder) {\n      return null; // No src folder found\n    }\n\n    // Step 4: Read package.json and verify dependencies\n    const packageJsonPath = join(basePath, \"package.json\");\n    const packageJson = safeReadJSON(packageJsonPath);\n\n    if (!packageJson) {\n      return null; // No package.json found\n    }\n\n    // Step 5: Check if Svelte is a dependency\n    const hasSvelteDependency =\n      packageJson.dependencies?.svelte || packageJson.devDependencies?.svelte;\n\n    if (!hasSvelteDependency) {\n      return null; // Svelte not listed as dependency\n    }\n\n    // Step 6: Check if it's SvelteKit or plain Svelte\n    const isSvelteKit =\n      packageJson.dependencies?.[\"@sveltejs/kit\"] ||\n      packageJson.devDependencies?.[\"@sveltejs/kit\"];\n\n    const hasSvelteVitePlugin =\n      packageJson.dependencies?.[\"@sveltejs/vite-plugin-svelte\"] ||\n      packageJson.devDependencies?.[\"@sveltejs/vite-plugin-svelte\"];\n\n    if (!isSvelteKit && !hasSvelteVitePlugin) {\n      return null; // Neither SvelteKit nor Svelte Vite plugin found\n    }\n\n    // Step 7: Check for dev script\n    if (!packageJson.scripts?.dev) {\n      return null; // No dev script found\n    }\n\n    const devScript = packageJson.scripts.dev;\n\n    // Step 8: Verify the dev script uses Vite or SvelteKit\n    const usesVite = devScript.includes(\"vite\");\n    const usesSvelteKit = devScript.includes(\"svelte-kit\");\n\n    if (!usesVite && !usesSvelteKit) {\n      return null; // Dev script doesn't use known Svelte tooling\n    }\n\n    // Step 9: If using Vite, verify the config includes Svelte plugin\n    if (usesVite && !isSvelteKit) {\n      const viteConfigFiles = files.filter((f) =>\n        /^vite\\.config\\.(js|ts|mjs)$/.test(f),\n      );\n\n      if (viteConfigFiles.length > 0) {\n        const viteConfigPath = join(basePath, viteConfigFiles[0]);\n        const viteConfigContent = safeReadFile(viteConfigPath);\n\n        // Check if the config imports/uses Svelte plugin\n        if (\n          !viteConfigContent ||\n          !viteConfigContent.includes(\"@sveltejs/vite-plugin-svelte\")\n        ) {\n          return null; // Vite config doesn't use Svelte plugin\n        }\n      }\n    }\n\n    // All checks passed - return guessed settings with high confidence\n    return {\n      id: \"svelte-vite\",\n      setupCommand: packageManagerInfo.setupCommand,\n      devCommand: devScript,\n      setupDependencies: [\n        {\n          tool: \"node\",\n          version: \"22\",\n          key: \"node\",\n          type: \"mise\",\n        },\n      ],\n      autoDetectDevServer: true,\n    };\n  } catch (err) {\n    // If anything fails, return null\n    return null;\n  }\n}\n", "import type {\n  EnvVariableInfo,\n  FrameworkInfo,\n  GuessedSettings,\n  RepoMetrics,\n} from \"$/ai-utils\";\nimport type { DevToolsSys } from \"../types\";\nimport { getAllProjectFiles } from \"./sync-utils\";\nimport { safeReadJSON, safeReadFile } from \"./repo-metrics-utils\";\nimport { detectNextJsSettings } from \"./detectors/nextjs\";\nimport { detectVueSettings } from \"./detectors/vue\";\nimport { detectSvelteSettings } from \"./detectors/svelte\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\n/**\n * Check if the repository is empty (no source code files, framework configs, or project structure)\n */\nfunction isEmptyRepo(files: string[]): boolean {\n  // Source code file extensions\n  const sourceCodeExtensions = [\n    \".ts\",\n    \".tsx\",\n    \".js\",\n    \".jsx\",\n    \".py\",\n    \".rb\",\n    \".go\",\n    \".rs\",\n    \".java\",\n    \".c\",\n    \".cpp\",\n    \".cs\",\n    \".php\",\n    \".swift\",\n    \".kt\",\n    \".scala\",\n    \".vue\",\n    \".svelte\",\n    \".astro\",\n    \".qwik\",\n  ];\n\n  // Common framework and project configuration files\n  const configFiles = [\n    \"package.json\",\n    \"Cargo.toml\",\n    \"go.mod\",\n    \"pyproject.toml\",\n    \"requirements.txt\",\n    \"Gemfile\",\n    \"pom.xml\",\n    \"build.gradle\",\n    // Frontend frameworks\n    \"next.config.js\",\n    \"next.config.ts\",\n    \"next.config.mjs\",\n    \"nuxt.config.js\",\n    \"nuxt.config.ts\",\n    \"gatsby-config.js\",\n    \"gatsby-config.ts\",\n    \"svelte.config.js\",\n    \"vite.config.js\",\n    \"vite.config.ts\",\n    \"webpack.config.js\",\n    \"webpack.config.ts\",\n    \"rollup.config.js\",\n    \"astro.config.mjs\",\n    \"remix.config.js\",\n    \"angular.json\",\n    // Web Components\n    \"stencil.config.ts\",\n    \"stencil.config.js\",\n    \"web-dev-server.config.js\",\n    \"web-dev-server.config.mjs\",\n    \"custom-elements.json\",\n    // Static site generators\n    \"hugo.toml\",\n    \"hugo.yaml\",\n    \"config.toml\",\n    \"config.yaml\",\n    \"_config.yml\", // Jekyll\n    \"jekyll-config.yml\",\n    \"docusaurus.config.js\",\n    \"mkdocs.yml\",\n    // Backend frameworks\n    \"nest-cli.json\",\n    \"tsconfig.json\",\n    \"jsconfig.json\",\n    // Mobile\n    \"ios/Podfile\",\n    \"android/build.gradle\",\n    \"pubspec.yaml\", // Flutter\n  ];\n\n  // Common project directories that indicate a non-empty repository\n  const projectDirectories = [\n    \"src/\",\n    \"app/\",\n    \"pages/\",\n    \"components/\",\n    \"public/\",\n    \"static/\",\n    \"assets/\",\n    \"lib/\",\n    \"pkg/\",\n    \"cmd/\",\n    \"internal/\",\n    \"views/\",\n    \"templates/\",\n    \"content/\", // Hugo, Docusaurus\n    \"layouts/\", // Hugo\n    \"archetypes/\", // Hugo\n  ];\n\n  // Check if any file has a source code extension\n  const hasSourceCode = files.some((file) =>\n    sourceCodeExtensions.some((ext) => file.toLowerCase().endsWith(ext)),\n  );\n\n  if (hasSourceCode) {\n    return false;\n  }\n\n  // Check for framework configuration files\n  const hasConfigFile = files.some((file) => {\n    const normalizedPath = file.replace(/\\\\/g, \"/\");\n    const fileName = normalizedPath.split(\"/\").pop() || \"\";\n    return (\n      configFiles.includes(fileName) || configFiles.includes(normalizedPath)\n    );\n  });\n\n  if (hasConfigFile) {\n    return false;\n  }\n\n  // Check for common project directories\n  const hasProjectDirectory = files.some((file) => {\n    const normalizedPath = file.replace(/\\\\/g, \"/\");\n    return projectDirectories.some((dir) => normalizedPath.includes(dir));\n  });\n\n  if (hasProjectDirectory) {\n    return false;\n  }\n\n  // If none of the above checks passed, consider the repo empty\n  return true;\n}\n\n/**\n * Validate if a version string is an exact version (not a range or constraint).\n * Returns true only for exact versions like \"18.0.0\", \"3.10\", \"1.21\", \"stable\", \"nightly\".\n * Returns false for semver ranges like \">=18.0.0\", \"^18.0.0\", \"~18.0.0\", \"16.x\", \"*\", etc.\n *\n * @param version - The version string to validate\n * @returns true if the version is exact, false otherwise\n */\nexport function isExactVersion(version: string | undefined): boolean {\n  if (!version) {\n    return false;\n  }\n\n  const trimmedVersion = version.trim();\n\n  // Empty string is not exact\n  if (trimmedVersion === \"\") {\n    return false;\n  }\n\n  // Check for semver range operators\n  const rangeOperators = [\">\", \"<\", \">=\", \"<=\", \"^\", \"~\", \"=\", \"*\"];\n  for (const operator of rangeOperators) {\n    if (trimmedVersion.includes(operator)) {\n      return false;\n    }\n  }\n\n  // Check for logical operators (space indicates range like \">=16.0.0 <19.0.0\")\n  if (trimmedVersion.includes(\" \")) {\n    return false;\n  }\n\n  // Check for wildcards like \"16.x\", \"16.*\", \"v16.x\", \"18.X\"\n  if (/\\.x$/i.test(trimmedVersion) || /\\.\\*$/.test(trimmedVersion)) {\n    return false;\n  }\n\n  // Check for \"latest\" keyword\n  if (trimmedVersion.toLowerCase() === \"latest\") {\n    return false;\n  }\n\n  // If it passed all checks, consider it exact\n  // This includes:\n  // - Exact semver: \"18.0.0\", \"3.10.5\", \"1.21\"\n  // - Partial versions: \"18\", \"3.10\", \"1.21\"\n  // - Channel names: \"stable\", \"nightly\", \"beta\"\n  // - Versions with v prefix: \"v18.0.0\", \"v1.21\"\n  return true;\n}\n\n/**\n * Check if the repository is a monorepo\n * Also detects possible monorepo roots for better understanding of project structure\n */\nasync function detectMonorepo(\n  basePath: string,\n  files: string[],\n): Promise<{\n  isMonorepo: boolean;\n  type?: RepoMetrics[\"monorepoType\"];\n  possibleRoots?: string[];\n}> {\n  try {\n    // Check for npm/yarn/pnpm workspaces in any package.json\n    const packageJsonFiles = files.filter((f) => f.endsWith(\"package.json\"));\n    const rootPackageJson = safeReadJSON(join(basePath, \"package.json\"));\n\n    if (rootPackageJson?.workspaces) {\n      const pnpmWorkspace = files.some((f) =>\n        f.includes(\"pnpm-workspace.yaml\"),\n      );\n      const yarnLock = files.some((f) => f.includes(\"yarn.lock\"));\n\n      // Detect possible roots for workspace-based monorepos\n      const possibleRoots = await detectPossibleMonorepoRoots(files);\n\n      if (pnpmWorkspace) {\n        return { isMonorepo: true, type: \"pnpm-workspaces\", possibleRoots };\n      }\n      if (yarnLock) {\n        return { isMonorepo: true, type: \"yarn-workspaces\", possibleRoots };\n      }\n      return { isMonorepo: true, type: \"npm-workspaces\", possibleRoots };\n    }\n\n    // Check for Lerna\n    const hasLerna = files.some((f) => f.includes(\"lerna.json\"));\n    if (hasLerna) {\n      const possibleRoots = await detectPossibleMonorepoRoots(files);\n      return { isMonorepo: true, type: \"lerna\", possibleRoots };\n    }\n\n    // Check for Nx\n    const hasNx = files.some((f) => f.includes(\"nx.json\"));\n    if (hasNx) {\n      const possibleRoots = await detectPossibleMonorepoRoots(files);\n      return { isMonorepo: true, type: \"nx\", possibleRoots };\n    }\n\n    // Check for Turborepo\n    const hasTurbo = files.some((f) => f.includes(\"turbo.json\"));\n    if (hasTurbo) {\n      const possibleRoots = await detectPossibleMonorepoRoots(files);\n      return { isMonorepo: true, type: \"turborepo\", possibleRoots };\n    }\n\n    // Check for Cargo workspaces\n    const cargoContent = safeReadFile(join(basePath, \"Cargo.toml\"));\n    if (cargoContent?.includes(\"[workspace]\")) {\n      const possibleRoots = await detectPossibleMonorepoRoots(files);\n      return { isMonorepo: true, type: \"cargo-workspaces\", possibleRoots };\n    }\n\n    // Detect possible roots to use in heuristics\n    const possibleRoots = await detectPossibleMonorepoRoots(files);\n\n    // Heuristic: multiple possible roots suggests a monorepo\n    // (at least 3 different project roots beyond the main one)\n    if (possibleRoots.length >= 3) {\n      return { isMonorepo: true, type: \"other\", possibleRoots };\n    }\n\n    // Heuristic: multiple package.json files (more than 3 suggests monorepo)\n    if (packageJsonFiles.length > 3) {\n      return { isMonorepo: true, type: \"other\", possibleRoots };\n    }\n\n    // Heuristic: multiple Cargo.toml files\n    const cargoFiles = files.filter((f) => f.endsWith(\"Cargo.toml\"));\n    if (cargoFiles.length > 3) {\n      return { isMonorepo: true, type: \"other\", possibleRoots };\n    }\n\n    // Not a monorepo, but still return possible roots if found\n    return {\n      isMonorepo: false,\n      possibleRoots: possibleRoots.length > 0 ? possibleRoots : undefined,\n    };\n  } catch (err) {\n    // If detection fails, assume not a monorepo\n    return { isMonorepo: false };\n  }\n}\n\n/**\n * Detect frameworks used in the repository\n */\nasync function detectFrameworks(\n  basePath: string,\n  files: string[],\n): Promise<FrameworkInfo[]> {\n  try {\n    const frameworks: FrameworkInfo[] = [];\n\n    // Get all package.json files (for monorepo support)\n    const packageJsonFiles = files.filter((f) => f.endsWith(\"package.json\"));\n    const allDeps: Record<string, string> = {};\n\n    // Collect dependencies from all package.json files\n    for (const pkgFile of packageJsonFiles) {\n      const fullPath = join(basePath, pkgFile);\n      const packageJson = safeReadJSON(fullPath);\n      if (packageJson) {\n        Object.assign(allDeps, packageJson.dependencies || {});\n        Object.assign(allDeps, packageJson.devDependencies || {});\n      }\n    }\n\n    // JavaScript/TypeScript frameworks\n    const jsFrameworks: Record<\n      string,\n      { deps: string[]; files?: string[]; configFiles?: string[] }\n    > = {\n      React: { deps: [\"react\", \"react-dom\"], files: [\"jsx\", \"tsx\"] },\n      \"Next.js\": {\n        deps: [\"next\"],\n        files: [\"pages/\", \"app/\"],\n        configFiles: [\"next.config.js\", \"next.config.mjs\", \"next.config.ts\"],\n      },\n      Vue: { deps: [\"vue\"], files: [\"vue\"] },\n      Nuxt: {\n        deps: [\"nuxt\"],\n        configFiles: [\"nuxt.config.js\", \"nuxt.config.ts\"],\n      },\n      Angular: { deps: [\"@angular/core\"], configFiles: [\"angular.json\"] },\n      Svelte: { deps: [\"svelte\"], files: [\"svelte\"] },\n      SvelteKit: { deps: [\"@sveltejs/kit\"], configFiles: [\"svelte.config.js\"] },\n      Qwik: { deps: [\"@builder.io/qwik\"], files: [\"qwik\"] },\n      Solid: { deps: [\"solid-js\"] },\n      // Web Components\n      Stencil: {\n        deps: [\"@stencil/core\"],\n        configFiles: [\"stencil.config.ts\", \"stencil.config.js\"],\n      },\n      Lit: { deps: [\"lit\", \"lit-element\", \"lit-html\"] },\n      Polymer: { deps: [\"@polymer/polymer\"] },\n      \"FAST (Microsoft)\": { deps: [\"@microsoft/fast-element\"] },\n      Haunted: { deps: [\"haunted\"] },\n      Hybrids: { deps: [\"hybrids\"] },\n      // Backend frameworks\n      Express: { deps: [\"express\"] },\n      Fastify: { deps: [\"fastify\"] },\n      NestJS: { deps: [\"@nestjs/core\"], configFiles: [\"nest-cli.json\"] },\n      // Meta frameworks\n      Remix: { deps: [\"@remix-run/react\"], configFiles: [\"remix.config.js\"] },\n      Gatsby: { deps: [\"gatsby\"], configFiles: [\"gatsby-config.js\"] },\n      Astro: { deps: [\"astro\"], configFiles: [\"astro.config.mjs\"] },\n    };\n\n    for (const [name, config] of Object.entries(jsFrameworks)) {\n      const indicators: string[] = [];\n      let confidence: \"high\" | \"medium\" | \"low\" = \"low\";\n\n      // Check dependencies\n      const hasDep = config.deps.some((dep) => allDeps?.[dep]);\n      if (hasDep) {\n        indicators.push(`dependency: ${config.deps.find((d) => allDeps?.[d])}`);\n        confidence = \"high\";\n      }\n\n      // Check config files\n      if (config.configFiles) {\n        const hasConfig = config.configFiles.some((cf) =>\n          files.some((f) => f.includes(cf)),\n        );\n        if (hasConfig) {\n          indicators.push(\n            `config: ${config.configFiles.find((cf) => files.some((f) => f.includes(cf)))}`,\n          );\n          confidence = \"high\";\n        }\n      }\n\n      // Check file extensions\n      if (config.files && !hasDep) {\n        const hasFileType = config.files.some((ext) =>\n          files.some((f) => f.includes(ext)),\n        );\n        if (hasFileType) {\n          indicators.push(\n            `files: ${config.files.find((ext) => files.some((f) => f.includes(ext)))}`,\n          );\n          confidence = confidence === \"high\" ? \"high\" : \"medium\";\n        }\n      }\n\n      if (indicators.length > 0) {\n        frameworks.push({ name, confidence, indicators });\n      }\n    }\n\n    // Python frameworks\n    const pythonFrameworks: Record<\n      string,\n      { files: string[]; imports?: string[] }\n    > = {\n      Django: {\n        files: [\"manage.py\", \"settings.py\"],\n        imports: [\"django\"],\n      },\n      Flask: { files: [\"app.py\"], imports: [\"flask\"] },\n      FastAPI: { files: [], imports: [\"fastapi\"] },\n    };\n\n    for (const [name, config] of Object.entries(pythonFrameworks)) {\n      const indicators: string[] = [];\n      let confidence: \"high\" | \"medium\" | \"low\" = \"low\";\n\n      const hasFiles = config.files.some((file) =>\n        files.some((f) => f.includes(file)),\n      );\n      if (hasFiles) {\n        indicators.push(\n          `file: ${config.files.find((file) => files.some((f) => f.includes(file)))}`,\n        );\n        confidence = \"high\";\n      }\n\n      // Check all requirements.txt and pyproject.toml files (monorepo support)\n      if (config.imports) {\n        const requirementsFiles = files.filter((f) =>\n          f.includes(\"requirements.txt\"),\n        );\n        const pyprojectFiles = files.filter((f) =>\n          f.includes(\"pyproject.toml\"),\n        );\n\n        for (const reqFile of requirementsFiles) {\n          const content = safeReadFile(join(basePath, reqFile));\n          if (content) {\n            const hasImport = config.imports.some((imp) =>\n              content.includes(imp),\n            );\n            if (hasImport) {\n              indicators.push(`requirements.txt`);\n              confidence = \"high\";\n              break;\n            }\n          }\n        }\n\n        for (const pyFile of pyprojectFiles) {\n          const content = safeReadFile(join(basePath, pyFile));\n          if (content) {\n            const hasImport = config.imports.some((imp) =>\n              content.includes(imp),\n            );\n            if (hasImport) {\n              indicators.push(`pyproject.toml`);\n              confidence = \"high\";\n              break;\n            }\n          }\n        }\n      }\n\n      if (indicators.length > 0) {\n        frameworks.push({ name, confidence, indicators });\n      }\n    }\n\n    // Rust frameworks - check all Cargo.toml files\n    const cargoFiles = files.filter((f) => f.endsWith(\"Cargo.toml\"));\n    const rustFrameworks = [\n      { name: \"Actix\", dep: \"actix-web\" },\n      { name: \"Rocket\", dep: \"rocket\" },\n      { name: \"Axum\", dep: \"axum\" },\n      { name: \"Warp\", dep: \"warp\" },\n    ];\n\n    for (const cargoFile of cargoFiles) {\n      const cargoContent = safeReadFile(join(basePath, cargoFile));\n      if (cargoContent) {\n        for (const { name, dep } of rustFrameworks) {\n          if (\n            cargoContent.includes(dep) &&\n            !frameworks.some((f) => f.name === name)\n          ) {\n            frameworks.push({\n              name,\n              confidence: \"high\",\n              indicators: [`Cargo.toml: ${dep}`],\n            });\n          }\n        }\n      }\n    }\n\n    // Go frameworks - check all go.mod files\n    const goModFiles = files.filter((f) => f.endsWith(\"go.mod\"));\n    const goFrameworks = [\n      { name: \"Gin\", dep: \"github.com/gin-gonic/gin\" },\n      { name: \"Echo\", dep: \"github.com/labstack/echo\" },\n      { name: \"Fiber\", dep: \"github.com/gofiber/fiber\" },\n    ];\n\n    for (const goModFile of goModFiles) {\n      const goModContent = safeReadFile(join(basePath, goModFile));\n      if (goModContent) {\n        for (const { name, dep } of goFrameworks) {\n          if (\n            goModContent.includes(dep) &&\n            !frameworks.some((f) => f.name === name)\n          ) {\n            frameworks.push({\n              name,\n              confidence: \"high\",\n              indicators: [`go.mod: ${dep}`],\n            });\n          }\n        }\n      }\n    }\n\n    return frameworks;\n  } catch (err) {\n    // If framework detection fails, return empty array\n    return [];\n  }\n}\n\n/**\n * Detect setup requirements for the repository\n * Returns an array of tools/dependencies with optional version information\n */\nasync function detectSetupRequirements(\n  basePath: string,\n  files: string[],\n): Promise<RepoMetrics[\"setupRequirements\"]> {\n  const requirements: RepoMetrics[\"setupRequirements\"] = [];\n\n  try {\n    // Check for .npmrc and private packages\n    const npmrcPath = join(basePath, \".npmrc\");\n    if (existsSync(npmrcPath)) {\n      requirements.push({ tool: \".npmrc\" });\n      const content = readFileSync(npmrcPath, \"utf-8\");\n      if (content.includes(\"@\") || content.includes(\"registry\")) {\n        requirements.push({ tool: \"private-packages\" });\n      }\n    }\n\n    // Check for .env files\n    const hasEnvFile = files.some(\n      (f) =>\n        f.includes(\".env\") ||\n        f.includes(\".env.example\") ||\n        f.includes(\".env.template\"),\n    );\n    if (hasEnvFile) {\n      requirements.push({ tool: \"env-file\" });\n    }\n\n    // Check for Node version\n    const nvmrcPath = join(basePath, \".nvmrc\");\n    const nodeVersionPath = join(basePath, \".node-version\");\n    if (existsSync(nvmrcPath)) {\n      const version = readFileSync(nvmrcPath, \"utf-8\").trim();\n      if (isExactVersion(version)) {\n        requirements.push({ tool: \"node\", version });\n      } else {\n        requirements.push({ tool: \"node\" });\n      }\n    } else if (existsSync(nodeVersionPath)) {\n      const version = readFileSync(nodeVersionPath, \"utf-8\").trim();\n      if (isExactVersion(version)) {\n        requirements.push({ tool: \"node\", version });\n      } else {\n        requirements.push({ tool: \"node\" });\n      }\n    } else {\n      // Check package.json engines\n      const packageJsonPath = join(basePath, \"package.json\");\n      if (existsSync(packageJsonPath)) {\n        try {\n          const packageJson = JSON.parse(\n            readFileSync(packageJsonPath, \"utf-8\"),\n          );\n          if (packageJson.engines?.node) {\n            const version = packageJson.engines.node;\n            if (isExactVersion(version)) {\n              requirements.push({ tool: \"node\", version });\n            } else {\n              requirements.push({ tool: \"node\" });\n            }\n          }\n        } catch (err) {\n          // Ignore\n        }\n      }\n    }\n\n    // Check for Rust toolchain\n    const rustToolchainPath = join(basePath, \"rust-toolchain\");\n    const rustToolchainTomlPath = join(basePath, \"rust-toolchain.toml\");\n    if (existsSync(rustToolchainPath)) {\n      const version = readFileSync(rustToolchainPath, \"utf-8\").trim();\n      if (isExactVersion(version)) {\n        requirements.push({ tool: \"rust\", version });\n      } else {\n        requirements.push({ tool: \"rust\" });\n      }\n    } else if (existsSync(rustToolchainTomlPath)) {\n      const content = readFileSync(rustToolchainTomlPath, \"utf-8\");\n      const match = content.match(/channel\\s*=\\s*\"(.+?)\"/);\n      const version = match?.[1];\n      if (isExactVersion(version)) {\n        requirements.push({ tool: \"rust\", version });\n      } else {\n        requirements.push({ tool: \"rust\" });\n      }\n    }\n\n    // Check for Python version\n    const pythonVersionPath = join(basePath, \".python-version\");\n    if (existsSync(pythonVersionPath)) {\n      const version = readFileSync(pythonVersionPath, \"utf-8\").trim();\n      if (isExactVersion(version)) {\n        requirements.push({ tool: \"python\", version });\n      } else {\n        requirements.push({ tool: \"python\" });\n      }\n    } else {\n      const pyprojectPath = join(basePath, \"pyproject.toml\");\n      if (existsSync(pyprojectPath)) {\n        const content = readFileSync(pyprojectPath, \"utf-8\");\n        const match = content.match(/requires-python\\s*=\\s*\"(.+?)\"/);\n        if (match) {\n          const version = match[1];\n          if (isExactVersion(version)) {\n            requirements.push({ tool: \"python\", version });\n          } else {\n            requirements.push({ tool: \"python\" });\n          }\n        }\n      }\n    }\n\n    // Check for Go version\n    const goVersionPath = join(basePath, \".go-version\");\n    if (existsSync(goVersionPath)) {\n      const version = readFileSync(goVersionPath, \"utf-8\").trim();\n      if (isExactVersion(version)) {\n        requirements.push({ tool: \"go\", version });\n      } else {\n        requirements.push({ tool: \"go\" });\n      }\n    } else {\n      const goModPath = join(basePath, \"go.mod\");\n      if (existsSync(goModPath)) {\n        const content = readFileSync(goModPath, \"utf-8\");\n        const match = content.match(/go\\s+(\\d+\\.\\d+)/);\n        if (match) {\n          const version = match[1];\n          if (isExactVersion(version)) {\n            requirements.push({ tool: \"go\", version });\n          } else {\n            requirements.push({ tool: \"go\" });\n          }\n        }\n      }\n    }\n\n    // Check for Ruby version\n    const rubyVersionPath = join(basePath, \".ruby-version\");\n    if (existsSync(rubyVersionPath)) {\n      const version = readFileSync(rubyVersionPath, \"utf-8\").trim();\n      if (isExactVersion(version)) {\n        requirements.push({ tool: \"ruby\", version });\n      } else {\n        requirements.push({ tool: \"ruby\" });\n      }\n    }\n\n    // Check for Docker Compose\n    const hasDockerCompose = files.some(\n      (f) =>\n        f.includes(\"docker-compose.yml\") ||\n        f.includes(\"docker-compose.yaml\") ||\n        f.includes(\"compose.yml\") ||\n        f.includes(\"compose.yaml\"),\n    );\n    if (hasDockerCompose) {\n      requirements.push({ tool: \"docker-compose\" });\n    }\n\n    // Check for database requirements\n    const databaseIndicators = [\n      { type: \"postgresql\", indicators: [\"postgresql\", \"postgres\", \"psql\"] },\n      { type: \"mysql\", indicators: [\"mysql\"] },\n      { type: \"mongodb\", indicators: [\"mongodb\", \"mongo\"] },\n      { type: \"redis\", indicators: [\"redis\"] },\n      { type: \"sqlite\", indicators: [\"sqlite\"] },\n    ];\n\n    for (const { type, indicators } of databaseIndicators) {\n      const hasDb = files.some((f) =>\n        indicators.some((ind) => f.toLowerCase().includes(ind)),\n      );\n      if (hasDb) {\n        requirements.push({ tool: type });\n      }\n    }\n\n    return requirements;\n  } catch (err) {\n    // If detection fails, return empty array\n    return [];\n  }\n}\n\n/**\n * Detect package managers\n */\nasync function detectPackageManagers(files: string[]): Promise<string[]> {\n  try {\n    const managers: string[] = [];\n\n    if (files.some((f) => f.includes(\"package-lock.json\"))) {\n      managers.push(\"npm\");\n    }\n    if (files.some((f) => f.includes(\"yarn.lock\"))) {\n      managers.push(\"yarn\");\n    }\n    if (files.some((f) => f.includes(\"pnpm-lock.yaml\"))) {\n      managers.push(\"pnpm\");\n    }\n    if (files.some((f) => f.includes(\"bun.lockb\"))) {\n      managers.push(\"bun\");\n    }\n    if (files.some((f) => f.includes(\"Cargo.lock\"))) {\n      managers.push(\"cargo\");\n    }\n    if (files.some((f) => f.includes(\"go.sum\"))) {\n      managers.push(\"go\");\n    }\n    if (files.some((f) => f.includes(\"Gemfile.lock\"))) {\n      managers.push(\"bundler\");\n    }\n    if (\n      files.some(\n        (f) => f.includes(\"requirements.txt\") || f.includes(\"pyproject.toml\"),\n      )\n    ) {\n      managers.push(\"pip/poetry\");\n    }\n\n    return managers;\n  } catch (err) {\n    return [];\n  }\n}\n\n/**\n * Detect build tools\n */\nasync function detectBuildTools(files: string[]): Promise<string[]> {\n  try {\n    const tools: string[] = [];\n\n    const buildToolIndicators = [\n      {\n        name: \"Webpack\",\n        indicators: [\"webpack.config.js\", \"webpack.config.ts\"],\n      },\n      { name: \"Vite\", indicators: [\"vite.config.js\", \"vite.config.ts\"] },\n      { name: \"esbuild\", indicators: [\"esbuild.config.js\"] },\n      { name: \"Rollup\", indicators: [\"rollup.config.js\"] },\n      { name: \"Parcel\", indicators: [\".parcelrc\"] },\n      { name: \"Turbopack\", indicators: [\"turbo.json\"] },\n      { name: \"Make\", indicators: [\"Makefile\"] },\n      { name: \"CMake\", indicators: [\"CMakeLists.txt\"] },\n      { name: \"Gradle\", indicators: [\"build.gradle\", \"build.gradle.kts\"] },\n      { name: \"Maven\", indicators: [\"pom.xml\"] },\n    ];\n\n    for (const { name, indicators } of buildToolIndicators) {\n      const hasTool = indicators.some((ind) =>\n        files.some((f) => f.includes(ind)),\n      );\n      if (hasTool) {\n        tools.push(name);\n      }\n    }\n\n    return tools;\n  } catch (err) {\n    return [];\n  }\n}\n\n/**\n * Parse a .env file and extract environment variables\n */\nfunction parseEnvFile(content: string, filePath: string): EnvVariableInfo[] {\n  const envVars: EnvVariableInfo[] = [];\n\n  // Split by lines and process each line\n  const lines = content.split(\"\\n\");\n\n  for (const line of lines) {\n    // Skip empty lines and comments\n    const trimmed = line.trim();\n    if (!trimmed || trimmed.startsWith(\"#\")) {\n      continue;\n    }\n\n    // Match KEY=VALUE pattern (including quoted values)\n    // Supports: KEY=value, KEY=\"value\", KEY='value', KEY=\n    const match = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/);\n\n    if (match) {\n      const key = match[1];\n      let value = match[2].trim();\n\n      // Remove quotes if present\n      if (\n        (value.startsWith('\"') && value.endsWith('\"')) ||\n        (value.startsWith(\"'\") && value.endsWith(\"'\"))\n      ) {\n        value = value.slice(1, -1);\n      }\n\n      envVars.push({\n        key,\n        placeholderValue: value || undefined,\n        source: filePath,\n        type: \"env\",\n      });\n    }\n  }\n\n  return envVars;\n}\n\n/**\n * Parse a .npmrc file and extract environment variable references\n * Looks for ${VAR_NAME} patterns in .npmrc files\n */\nfunction parseNpmrcFile(content: string, filePath: string): EnvVariableInfo[] {\n  const envVars: EnvVariableInfo[] = [];\n\n  // Regular expression to match ${VAR_NAME} patterns\n  // Matches: ${NPM_TOKEN}, ${REGISTRY_URL}, etc.\n  const envVarPattern = /\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g;\n\n  let match: RegExpExecArray | null;\n  const seenKeys = new Set<string>();\n\n  while ((match = envVarPattern.exec(content)) !== null) {\n    const key = match[1];\n\n    // Avoid duplicates within the same file\n    if (!seenKeys.has(key)) {\n      seenKeys.add(key);\n      envVars.push({\n        key,\n        source: filePath,\n        type: \"npmrc\",\n        // No placeholder value for .npmrc since it's a reference, not a definition\n      });\n    }\n  }\n\n  return envVars;\n}\n\n/**\n * Detect and collect environment variables from .env files\n * Note: This uses pure in-memory filtering of the files array - no additional file system operations\n */\nasync function detectEnvironmentVariables(\n  basePath: string,\n  files: string[],\n): Promise<EnvVariableInfo[]> {\n  try {\n    const envVars: EnvVariableInfo[] = [];\n    const seenKeys = new Set<string>();\n\n    // Priority order for .env files (prioritize example/template files first)\n    const envFilePatterns = [\n      \".env.example\",\n      \".env.template\",\n      \".env.sample\",\n      \".env.local.example\",\n      \".env.development.example\",\n      \".env.production.example\",\n      \".env.test.example\",\n      \".env.staging.example\",\n      \".env\",\n      \".env.local\",\n      \".env.development\",\n      \".env.production\",\n      \".env.test\",\n      \".env.staging\",\n    ];\n\n    // Filter the files array (in-memory) to find .env files\n    // Maintains priority order to prefer example files over actual env files\n    const envFiles: string[] = [];\n    const envFilesSet = new Set<string>();\n\n    // Parse .npmrc files for environment variable references (${VAR_NAME} format)\n    const npmrcFiles: string[] = [];\n    for (const file of files) {\n      const normalizedPath = file.replace(/\\\\/g, \"/\");\n\n      // Match .npmrc files at any depth\n      if (normalizedPath === \".npmrc\" || normalizedPath.endsWith(\"/.npmrc\")) {\n        npmrcFiles.push(file);\n      }\n    }\n\n    // Read and parse each .npmrc file\n    for (const npmrcFile of npmrcFiles) {\n      const fullPath = join(basePath, npmrcFile);\n      const content = safeReadFile(fullPath);\n\n      if (content) {\n        const parsedVars = parseNpmrcFile(content, npmrcFile);\n\n        // Add variables, but skip duplicates (vars from .env files take precedence)\n        for (const envVar of parsedVars) {\n          if (!seenKeys.has(envVar.key)) {\n            seenKeys.add(envVar.key);\n            envVars.push(envVar);\n          }\n        }\n      }\n    }\n\n    for (const pattern of envFilePatterns) {\n      // Pure in-memory filter - no file system operations\n      for (const file of files) {\n        const normalizedPath = file.replace(/\\\\/g, \"/\");\n\n        // Match files at any depth: .env.example, packages/app/.env.example, etc.\n        const isMatch =\n          normalizedPath === pattern || // Root level: .env.example\n          normalizedPath.endsWith(`/${pattern}`); // Subdirectories: packages/app/.env.example\n\n        if (isMatch && !envFilesSet.has(file)) {\n          envFilesSet.add(file);\n          envFiles.push(file);\n        }\n      }\n    }\n\n    // Read and parse each discovered .env file\n    for (const envFile of envFiles) {\n      const fullPath = join(basePath, envFile);\n      const content = safeReadFile(fullPath);\n\n      if (content) {\n        // Pass the relative path as the source so users know where it was found\n        const parsedVars = parseEnvFile(content, envFile);\n\n        // Add variables, but skip duplicates (first occurrence wins based on priority)\n        for (const envVar of parsedVars) {\n          if (!seenKeys.has(envVar.key)) {\n            seenKeys.add(envVar.key);\n            envVars.push(envVar);\n          }\n        }\n      }\n    }\n\n    return envVars;\n  } catch (err) {\n    // If detection fails, return empty array\n    return [];\n  }\n}\n\n/**\n * Detect guessed settings for common project types\n * Only returns settings when we have high confidence\n */\nasync function detectGuessedSettings(\n  basePath: string,\n  files: string[],\n): Promise<GuessedSettings | null> {\n  try {\n    // Try Next.js detection first\n    const nextJsSettings = await detectNextJsSettings(basePath, files);\n    if (nextJsSettings) {\n      return nextJsSettings;\n    }\n\n    // Try Vue detection\n    const vueSettings = await detectVueSettings(basePath, files);\n    if (vueSettings) {\n      return vueSettings;\n    }\n\n    // Try Svelte detection\n    const svelteSettings = await detectSvelteSettings(basePath, files);\n    if (svelteSettings) {\n      return svelteSettings;\n    }\n\n    // Add more detectors here in the future (React, Angular, etc.)\n\n    return null;\n  } catch (err) {\n    return null;\n  }\n}\n\n/**\n * Detect possible monorepo roots based on configuration file heuristics\n * Looks for project configuration files that indicate a potential project root\n * Filters out test/example directories that are unlikely to be actual subprojects\n */\nasync function detectPossibleMonorepoRoots(files: string[]): Promise<string[]> {\n  try {\n    const possibleRoots = new Set<string>();\n\n    // Directories to exclude (test/example directories)\n    const excludedDirectoryPatterns = [\n      \"__tests__\",\n      \"__test__\",\n      \"__examples__\",\n      \"__example__\",\n      \"__fixtures__\",\n      \"__mocks__\",\n      \"test\",\n      \"tests\",\n      \"testing\",\n      \"spec\",\n      \"specs\",\n      \"example\",\n      \"examples\",\n      \"sample\",\n      \"samples\",\n      \"demo\",\n      \"demos\",\n      \"fixture\",\n      \"fixtures\",\n      \"mock\",\n      \"mocks\",\n      \".test\",\n      \".spec\",\n    ];\n\n    // Configuration files that indicate a project root\n    const rootIndicatorFiles = [\n      // JavaScript/TypeScript\n      \"package.json\",\n      \"tsconfig.json\",\n      \"jsconfig.json\",\n      // Python\n      \"pyproject.toml\",\n      \"setup.py\",\n      \"setup.cfg\",\n      \"Pipfile\",\n      \"requirements.txt\",\n      \"poetry.lock\",\n      // Go\n      \"go.mod\",\n      // Rust\n      \"Cargo.toml\",\n      // Ruby\n      \"Gemfile\",\n      \"Rakefile\",\n      // Java/Kotlin\n      \"pom.xml\",\n      \"build.gradle\",\n      \"build.gradle.kts\",\n      \"settings.gradle\",\n      \"settings.gradle.kts\",\n      // PHP\n      \"composer.json\",\n      // .NET\n      // (handled separately due to wildcards)\n      // Elixir\n      \"mix.exs\",\n      // Swift\n      \"Package.swift\",\n      // Dart/Flutter\n      \"pubspec.yaml\",\n      // Haskell\n      \"stack.yaml\",\n      \"cabal.project\",\n      // Scala\n      \"build.sbt\",\n      // Clojure\n      \"project.clj\",\n      \"deps.edn\",\n      // CMake\n      \"CMakeLists.txt\",\n      // Makefile (common in many projects)\n      \"Makefile\",\n      // Dockerfile (sometimes indicates a deployable unit)\n      \"Dockerfile\",\n    ];\n\n    /**\n     * Check if a path should be excluded based on excluded directory patterns\n     */\n    const shouldExclude = (path: string): boolean => {\n      const pathParts = path.split(\"/\");\n      return pathParts.some((part) =>\n        excludedDirectoryPatterns.some(\n          (pattern) => part === pattern || part.startsWith(pattern + \".\"),\n        ),\n      );\n    };\n\n    for (const file of files) {\n      const normalizedPath = file.replace(/\\\\/g, \"/\");\n\n      // Check for standard config files\n      const fileName = normalizedPath.split(\"/\").pop() || \"\";\n      if (rootIndicatorFiles.includes(fileName)) {\n        // Extract the directory containing this file\n        const dirPath = normalizedPath.substring(\n          0,\n          normalizedPath.lastIndexOf(\"/\"),\n        );\n\n        // Skip if it's in an excluded directory\n        if (dirPath && shouldExclude(dirPath)) {\n          continue;\n        }\n\n        if (dirPath) {\n          possibleRoots.add(dirPath);\n        } else {\n          // File is at root\n          possibleRoots.add(\".\");\n        }\n      }\n\n      // Check for .NET project files (*.csproj, *.fsproj, *.vbproj)\n      if (\n        fileName.endsWith(\".csproj\") ||\n        fileName.endsWith(\".fsproj\") ||\n        fileName.endsWith(\".vbproj\") ||\n        fileName.endsWith(\".sln\")\n      ) {\n        const dirPath = normalizedPath.substring(\n          0,\n          normalizedPath.lastIndexOf(\"/\"),\n        );\n\n        // Skip if it's in an excluded directory\n        if (dirPath && shouldExclude(dirPath)) {\n          continue;\n        }\n\n        if (dirPath) {\n          possibleRoots.add(dirPath);\n        } else {\n          possibleRoots.add(\".\");\n        }\n      }\n    }\n\n    // Convert Set to Array and sort for consistent ordering\n    const rootsArray = Array.from(possibleRoots).sort();\n\n    // Filter out the root directory if there are other roots\n    // (root is often present but we want subdirectory roots)\n    const filteredRoots = rootsArray.filter((root) => root !== \".\");\n\n    return filteredRoots.length > 0 ? filteredRoots : rootsArray;\n  } catch (err) {\n    // If detection fails, return empty array\n    return [];\n  }\n}\n\n/**\n * Collect comprehensive repository metrics\n * @param sys - DevTools system interface\n * @param basePath - Absolute path to the repository root\n * @param rootPath - Relative path within the repository to analyze (default: \"/\" for entire repo)\n */\nexport async function collectRepoMetrics(\n  sys: DevToolsSys,\n  basePath: string,\n): Promise<RepoMetrics> {\n  const errors: string[] = [];\n\n  try {\n    // Get all files in the repository\n    const files = await getAllProjectFiles({\n      sys,\n      basePath,\n      globPattern: \"**/*\",\n      dot: true,\n    });\n\n    // Check if repo is empty\n    const isEmpty = isEmptyRepo(files);\n\n    // Detect monorepo\n    const monorepoInfo = await detectMonorepo(basePath, files);\n\n    // Detect frameworks\n    const frameworks = await detectFrameworks(basePath, files);\n\n    // Detect setup requirements\n    const setupRequirements = await detectSetupRequirements(basePath, files);\n\n    // Detect package managers\n    const packageManagers = await detectPackageManagers(files);\n\n    // Detect build tools\n    const buildTools = await detectBuildTools(files);\n\n    // Detect environment variables\n    const environmentVariables = await detectEnvironmentVariables(\n      basePath,\n      files,\n    );\n\n    // Detect guessed settings (only when we have high confidence)\n    const guessedSettings = await detectGuessedSettings(basePath, files);\n\n    const result: RepoMetrics = {\n      languages: [],\n      isEmpty,\n      isMonorepo: monorepoInfo.isMonorepo,\n      monorepoType: monorepoInfo.type,\n      frameworks,\n      setupRequirements,\n      packageManagers,\n      buildTools,\n      environmentVariables:\n        environmentVariables.length > 0 ? environmentVariables : undefined,\n      possibleMonorepoRoots: monorepoInfo.possibleRoots,\n      guessedSettings: guessedSettings || undefined,\n    };\n\n    if (errors.length > 0) {\n      result.errors = errors;\n    }\n\n    return result;\n  } catch (err) {\n    // If everything fails, return a minimal metrics object\n    return {\n      languages: [],\n      isEmpty: false,\n      isMonorepo: false,\n      frameworks: [],\n      setupRequirements: [],\n      packageManagers: [],\n      buildTools: [],\n      errors: [\n        `Fatal error: ${err instanceof Error ? err.message : String(err)}`,\n      ],\n    };\n  }\n}\n", "import type { DevToolsSys, RepoInfo } from \"../types\";\nimport { filterNonImportantFiles, getAllProjectFiles } from \"./sync-utils\";\nimport { diffLines } from \"diff\";\nimport { type Credentials } from \"./credentials\";\nimport { track } from \"./track\";\nimport { apiAirV2Host } from \"./constants\";\nimport { safeFetch } from \"./fetch\";\nimport os from \"node:os\";\nimport fs from \"node:fs\";\n\nimport { createCustomInstructionFromMdc } from \"../../vcp-common/mdc-parser\";\nimport { exponentialBackoff } from \"../../vcp-common/backoff\";\nimport {\n  PrivateError,\n  displayNetworkError,\n  NetworkError,\n} from \"../common/errors\";\n\nimport { transformStream } from \"$/vcp-common/stream\";\nimport { backupGitRepo, computeBackupRef } from \"./backup\";\n\nimport type {\n  CodebaseSearchResponse,\n  CodegenFeedback,\n  CodeGenHealthStatus,\n  CodeGenInputOptions,\n  CodegenSetLastCompletion,\n  CodeGenToolMap,\n  CodegenTurn,\n  CustomInstruction,\n  DevCommandState,\n  FusionConfig,\n  GenerateCodeEvent,\n  GenerateCodeEventDone,\n  GenerateCodeEventMCPStatus,\n  GenerateCompletionState,\n  GenerateCompletionStep,\n  GenerateCompletionStepGit,\n  GenerateUserMessage,\n  GetSessionTurnsResult,\n  HttpServerState,\n  ProjectFile,\n  SessionMode,\n  SetupCommandState,\n  SuggestedAction,\n  UserContext,\n  UserInput,\n  WorkspaceConfiguration,\n  WorkspaceFolder,\n  LoadWholeSessionOptions,\n  LoadWholeSessionResult,\n  LoadHistoryResult,\n  GitConfigs,\n  UserSourceAgent,\n  CodeGenMode,\n  ApplyActionsResult,\n  PrivacyMode,\n  CodeGenErrorCodes,\n  CodeGenPosition,\n  BackupGitRepoResult,\n  SuggestedActionBuildError,\n  Permission,\n  EnvironmentVariable,\n  CodegenFinalize,\n  CodeGenCategory,\n  PushChangesArgs,\n  CodegenApiResult,\n  CodegenApiTerminal,\n  ConfigureDevOrchestratorOpts,\n  ConfigureDevOrchestratorUpdates,\n  RepoMetrics,\n} from \"$/ai-utils\";\nimport prettier from \"prettier\";\n\nimport {\n  resolveToolCalls,\n  type LLMToolCalls,\n  type FusionContext,\n  type ToolContext,\n  type ToolResolution,\n  newAbortError,\n} from \"./code-tools\";\nimport { log } from \"@clack/prompts\";\nimport EventEmitter, { once } from \"node:events\";\nimport { prettierFormat } from \"./prettier\";\nimport { abortSignalAny } from \"./abort-signal-any\";\nimport { randomUUID } from \"node:crypto\";\nimport { computeAIBranchName, getAndParseGitRepoInfo } from \"./launch/helpers\";\nimport {\n  resolveWorkspacePath,\n  absolutePathToWorkspaceUrl,\n} from \"./utils/workspace-path-resolver\";\nimport {\n  evaluateAccess,\n  extractListPatterns,\n  filterFilesByListPatterns,\n} from \"$/vcp-common/acl\";\nimport { compilePatterns } from \"$/vcp-common/command-security\";\nimport {\n  CodeGenError,\n  filterSecrets,\n  filterWorkingDirectory,\n  normalizeRelativePath,\n} from \"$/vcp-common/codegen\";\nimport {\n  loadMCPConfig,\n  createLocalMCPClientManager,\n  type LocalMCPClientManager,\n} from \"./mcp-local\";\nimport {\n  runCommand,\n  type RunCommandOptions,\n  fetchGitConfigs,\n} from \"./utils/git\";\nimport { parseGitDiffToApplyActions } from \"./utils/parseGitDiff\";\nimport { readdir } from \"node:fs/promises\";\nimport { generateKey } from \"$/vcp-common/crypto\";\nimport { getFeatureFlag } from \"./utils/feature-flags\";\nimport { truncateLines, truncateString } from \"$/vcp-common/normalize-text\";\nimport { importPty } from \"./launch/dev-server-orchestrator\";\nimport type { IPty } from \"@lydell/node-pty\";\n\nconst DEFAULT_MAX_COMPLETIONS = 30;\n\nconst NOT_BAD_ERRORS: CodeGenErrorCodes[] = [\n  \"ask-to-continue\",\n  \"credits-limit-daily\",\n  \"credits-limit-monthly\",\n  \"credits-limit-other\",\n  \"invalid-last-message\",\n];\nconst NORMAL_STATES: GenerateCompletionState[] = [\n  \"initial-with-url\",\n  \"initial-without-url\",\n  \"success\",\n];\n\nexport interface SessionContext {\n  sessionId: string;\n  turns: CodegenTurn[];\n  customInstructions: CustomInstruction[];\n  userContext: UserContext;\n  prettierConfig: prettier.Config | null;\n  state: GenerateCompletionState;\n  title: string | undefined;\n  beforeCommit: string | undefined;\n  createdUnixTime: number;\n  updatedUnixTime: number;\n  canLoadMore: boolean;\n  sessionMode: SessionMode;\n}\n\nexport interface CodeGenSessionOptionsBase {\n  sys: DevToolsSys;\n  credentials: Credentials;\n  position: CodeGenPosition;\n  maxTokens?: number;\n  mode: CodeGenMode;\n  privacyMode?: PrivacyMode;\n\n  builtInCustomInstructions?: CustomInstruction[];\n  fusionContext?: FusionContext;\n  fusionConfig?: FusionConfig; // Fusion configuration with ACL policy\n  workingDirectory?: string;\n  mcpServers?: boolean;\n  enabledTools?: (keyof CodeGenToolMap)[];\n  modelOverride?: string;\n}\n\nexport interface CodeGenSessionOptionsSession\n  extends CodeGenSessionOptionsBase {\n  sessionOrCompletionId?: string;\n}\n\nexport interface CodeGenSessionOptionsInitialUrl\n  extends CodeGenSessionOptionsBase {\n  initialUrl: string;\n}\n\nexport type CodeGenSessionOptions =\n  | CodeGenSessionOptionsSession\n  | CodeGenSessionOptionsInitialUrl;\n\nexport type CodeGenEventEmitter = EventEmitter<{\n  step: [GenerateCompletionStep];\n  idle: [];\n}>;\nexport class CodeGenSession {\n  #sessionContext: SessionContext | undefined;\n\n  #abortController: AbortController | undefined;\n  #setNextMessage: (() => void) | undefined;\n  #scheduledMessage: GenerateUserMessage | undefined;\n  #currentMessage: GenerateUserMessage | undefined;\n  #sys: DevToolsSys;\n  #credentials: Credentials;\n  #initialUrl: string | undefined;\n  #position: CodeGenPosition;\n  #eventLoopAbortController: AbortController | undefined;\n  #debug = false;\n  #emitter: CodeGenEventEmitter = new EventEmitter();\n  #mode: CodeGenMode;\n  #featureBranch?: string;\n  #aiBranch?: string; // The AI branch name for this session\n  #lastGitStatus: GenerateCompletionStepGit | undefined = undefined;\n  #lastMCPStatus: GenerateCodeEventMCPStatus | undefined = undefined;\n  #gitCommandPromise: Promise<any | undefined> = Promise.resolve(undefined);\n  #runningToolCalls: LLMToolCalls[] = [];\n  #privacyMode?: PrivacyMode;\n  #encryptKey?: string;\n  #waitingToolFulfilment: Map<string, (result: ToolResolution) => void> =\n    new Map();\n  #disposeFunctions: (() => void)[] = [];\n  #startLoopPromise: Promise<void> | undefined;\n  #eventLoops = 0;\n  #lastSuggestedAction: SuggestedAction | undefined;\n  #sessionOrCompletionId?: string;\n  #fusionContext: FusionContext | undefined;\n  #initializePromise: Promise<void> | undefined;\n  #loadMoreTurnsPromise: Promise<CodegenTurn[]> | undefined;\n  #onGoingArtifacts: GenerateCodeEvent[] | undefined = undefined;\n  #builtInCustomInstructions: CustomInstruction[];\n  #workingDirectory: string;\n  #gitWorkingDirectory: string;\n  #bashWorkingDirectory: string;\n  #maxTokens: number | undefined;\n  #workspace?: WorkspaceConfiguration;\n  #mcpServers: boolean;\n  #localMCPManager: LocalMCPClientManager | undefined;\n  #isCheckingGitStatus: number = 0;\n  #currentGitCommand: string | undefined;\n  #enabledTools?: Array<keyof CodeGenToolMap>;\n  #fusionConfig?: FusionConfig;\n  #projectId?: string;\n  #branchName?: string;\n  #modelOverride?: string;\n  #dirtyEnvironmentVariables: boolean = false;\n  #closed = false;\n  #lastGitUpdateTime: number = 0;\n  #userTurnCreditsUsed: number = 0;\n  #hasPlanToApply: boolean = false;\n  #pendingPromises: Promise<any>[] = [];\n  #lastSuccessfulBackupRef: string | undefined;\n  #pendingFormating = new Set<string>();\n  #terminals: Map<\n    string,\n    CodegenApiTerminal & {\n      pty: IPty;\n      onDataListeners: Set<(chunk: string) => void>;\n      onExitListeners: Set<(code?: number) => void>;\n      disposeFns: (() => void)[];\n      env?: Record<string, string | undefined>;\n      shell?: string;\n      createdBy?: string;\n    }\n  > = new Map();\n\n  constructor(options: CodeGenSessionOptions) {\n    this.#sys = options.sys;\n    this.#modelOverride = options.modelOverride;\n    this.#credentials = options.credentials;\n    if (\"initialUrl\" in options) {\n      const completionId = parseCLIURL(options.initialUrl).id;\n      if (completionId) {\n        this.#sessionOrCompletionId = completionId;\n      } else {\n        this.#initialUrl = options.initialUrl;\n      }\n    }\n    if (\"sessionOrCompletionId\" in options) {\n      this.#sessionOrCompletionId = options.sessionOrCompletionId;\n    } else {\n      this.#sessionOrCompletionId = options.fusionConfig?.sessionId;\n    }\n    const workingDirectory =\n      options.workingDirectory ?? options.fusionConfig?.workingDirectory;\n    this.#workingDirectory = workingDirectory\n      ? options.sys.resolve(options.sys.cwd(), workingDirectory)\n      : options.sys.getCwdDir();\n\n    this.#position = options.position;\n    this.#mode = options.mode;\n    this.#privacyMode = options.privacyMode;\n    this.#fusionContext = options.fusionContext;\n    this.#fusionConfig = options.fusionConfig;\n\n    this.#projectId = options.fusionConfig?.projectId;\n    this.#branchName = options.fusionConfig?.branchName;\n    this.#featureBranch = options.fusionConfig?.featureBranch;\n    this.#aiBranch = options.fusionConfig?.aiBranch;\n\n    // Helper function to filter out disabled tools\n    const filterDisabledTools = (\n      tools: (keyof CodeGenToolMap)[],\n    ): (keyof CodeGenToolMap)[] => {\n      return tools.filter(\n        (tool) => !this.#fusionConfig?.disabledTools?.includes(tool),\n      );\n    };\n    if (options.enabledTools) {\n      this.#enabledTools = filterDisabledTools(options.enabledTools);\n    } else if (this.#mode === \"quality-v3\") {\n      const tools: (keyof CodeGenToolMap)[] = [\n        \"write_file\",\n        \"search_replace_file\",\n        \"view_path\",\n        \"get_rule\",\n        \"get_style_inspiration\",\n        \"grep_search\",\n        \"web_search\",\n        \"find_media\",\n        // Add OS-appropriate shell tool\n        process.platform === \"win32\" ? \"powershell\" : \"bash\",\n      ];\n\n      if (options.fusionContext?.devServerOrchestrator) {\n        tools.push(\"dev_server_control\");\n      }\n\n      this.#enabledTools = filterDisabledTools(tools);\n    } else if (this.#mode === \"quality-v4\") {\n      let tools: (keyof CodeGenToolMap)[] = [\n        \"Write\",\n        \"Edit\",\n        \"Read\",\n        \"MultiEdit\",\n        \"Grep\",\n        \"Glob\",\n        \"ReadRule\",\n        \"WebSearch\",\n        \"Agent\",\n        \"FindMedia\",\n        // Add OS-appropriate shell tool\n        process.platform === \"win32\" ? \"PowerShell\" : \"Bash\",\n      ];\n\n      const isPrivacyModeEnabled = !!(\n        this.#privacyMode?.encrypt ||\n        this.#privacyMode?.redactUserMessages ||\n        this.#privacyMode?.redactLLMMessages\n      );\n      // Add Memory tool if not in privacy mode\n      if (!isPrivacyModeEnabled) {\n        tools.push(\"Memory\");\n      }\n\n      // Conditionally add tools\n      if (!getFeatureFlag(\"fusion-disable-todo-tool\")) {\n        tools.push(\"TodoRead\", \"TodoWrite\");\n      }\n      if (getFeatureFlag(\"fusion-webfetch-tool\")) {\n        tools.push(\"WebFetch\");\n      }\n      if (getFeatureFlag(\"fusion-plan-mode\")) {\n        tools.push(\"AskUserQuestion\", \"ExitPlanMode\");\n      }\n      if (options.fusionContext?.git && !isPrivacyModeEnabled) {\n        tools.push(\"GetScreenshot\", \"Revert\");\n      }\n      if (options.fusionContext?.devServerOrchestrator) {\n        tools.push(\"DevServerControl\");\n      }\n\n      this.#enabledTools = filterDisabledTools(tools);\n    }\n\n    this.#maxTokens = options.maxTokens;\n    this.#builtInCustomInstructions = options.builtInCustomInstructions ?? [];\n    this.#workspace = options.fusionConfig?.workspace;\n    this.#mcpServers = options.mcpServers ?? false;\n    this.#bashWorkingDirectory = this.#workingDirectory;\n    this.#gitWorkingDirectory = this.#workingDirectory;\n    if (this.#workspace?.folders.length) {\n      const foundGitEnabled = this.#workspace.folders.filter(\n        (a) => a.enableGit,\n      );\n      if (foundGitEnabled.length === 1) {\n        const gitEnabledFolder = foundGitEnabled[0];\n        this.#gitWorkingDirectory = this.#sys.resolve(\n          this.#workingDirectory,\n          gitEnabledFolder.path,\n        );\n        const backup = gitEnabledFolder.backupMetadata?.check.backup;\n        this.#lastSuccessfulBackupRef = computeBackupRef({\n          version: backup?.version,\n          originalRepoUrl: backup?.repoUrl,\n          commitHash: backup?.lastCommitHash,\n        });\n      } else if (foundGitEnabled.length > 1) {\n        this.#sys.Sentry?.captureException(\n          new Error(\"Multiple git enabled folders found\"),\n        );\n      }\n    }\n    if (this.#workspace?.folders[0] && this.#canCollapseWorkspace()) {\n      this.#bashWorkingDirectory = this.#sys.resolve(\n        this.#workingDirectory,\n        this.#workspace.folders[0].path,\n      );\n    }\n  }\n\n  get fusionConfig() {\n    return this.#fusionConfig;\n  }\n\n  get gitEnabledFolder() {\n    return this.#workspace?.folders.find((a) => a.enableGit);\n  }\n\n  get workingDirectory() {\n    return this.#workingDirectory;\n  }\n\n  getSessionMode(): SessionMode {\n    return this.#sessionContext?.sessionMode ?? \"normal\";\n  }\n\n  async switchSessionMode(newMode: SessionMode) {\n    const sessionContext = this.getSessionContext();\n    if (sessionContext.sessionMode !== newMode) {\n      sessionContext.sessionMode = newMode;\n      this.#hasPlanToApply = false;\n      await this.#emitWaitForInput();\n    }\n  }\n\n  async setPrivacyMode(privacyMode: PrivacyMode | undefined) {\n    if (privacyMode && privacyMode.encrypt) {\n      if (!privacyMode.encryptKey && !this.#encryptKey) {\n        this.#encryptKey = await generateKey();\n      } else if (privacyMode.encryptKey) {\n        this.#encryptKey = privacyMode.encryptKey;\n      }\n    } else {\n      this.#encryptKey = undefined;\n    }\n    this.#privacyMode = privacyMode;\n  }\n\n  async initializeSession(opts: { skipSessionLoading?: boolean } = {}) {\n    if (!this.#initializePromise) {\n      this.#initializePromise = this.#initializeSession(opts);\n    }\n    return await this.#initializePromise;\n  }\n\n  async loadHistory(): Promise<LoadHistoryResult> {\n    const sessionContext = this.getSessionContext();\n\n    const sessionMetadata = await getTurnsBySessionId(\n      this.#sys,\n      this.#credentials,\n      sessionContext.sessionId,\n      false,\n    );\n\n    // Collect all the unique commits in the session\n    const commits = new Set<string>();\n    for (const turn of sessionMetadata.turns) {\n      if (turn.beforeCommit) {\n        commits.add(turn.beforeCommit);\n      }\n      if (turn.afterCommit) {\n        commits.add(turn.afterCommit);\n      }\n      if (turn.lastCommit) {\n        commits.add(turn.lastCommit);\n      }\n    }\n\n    if (commits.size > 0) {\n      try {\n        // Check if the commits exist in the repo\n        const result = await this.git(\n          [\"cat-file\", \"--batch-check\", \"--buffer\"],\n          {\n            sys: this.#sys,\n            cwd: this.#gitWorkingDirectory,\n            stdin: Array.from(commits)\n              .map((sha) => `${sha}^{commit}`)\n              .join(\"\\n\"),\n          },\n        );\n        const lines = result.trim().split(\"\\n\");\n        for (const line of lines) {\n          if (line.includes(\"missing\")) {\n            const sha = line.split(/\\s+/)[0].replace(\"^{commit}\", \"\");\n            commits.delete(sha);\n          }\n        }\n      } catch (e) {\n        this.#sys.Sentry?.captureException(e);\n      }\n    }\n\n    // Now, filter the turns to only keep the ones that are in the commits\n    const filteredTurns = sessionMetadata.turns.filter((turn) => {\n      if (turn.beforeCommit && !commits.has(turn.beforeCommit)) {\n        return false;\n      }\n      if (turn.afterCommit && !commits.has(turn.afterCommit)) {\n        return false;\n      }\n      if (turn.lastCommit && !commits.has(turn.lastCommit)) {\n        return false;\n      }\n      return true;\n    });\n\n    return {\n      sessionId: sessionContext.sessionId,\n      title: sessionContext.title,\n      beforeCommit: sessionContext.beforeCommit,\n      createdUnixTime: sessionContext.createdUnixTime,\n      updatedUnixTime: sessionContext.updatedUnixTime,\n      turns: filteredTurns,\n    };\n  }\n\n  async loadWholeSession(\n    opts: LoadWholeSessionOptions = {},\n  ): Promise<LoadWholeSessionResult> {\n    const { getAll = true } = opts;\n    const sessionContext = this.getSessionContext();\n\n    let addedTurns = 0;\n    while (sessionContext.canLoadMore) {\n      if (sessionContext.canLoadMore) {\n        const added = await this.loadMoreTurns();\n        addedTurns += added.length;\n      } else {\n        break;\n      }\n    }\n    return {\n      sessionId: sessionContext.sessionId,\n      title: sessionContext.title,\n      beforeCommit: sessionContext.beforeCommit,\n      createdUnixTime: sessionContext.createdUnixTime,\n      updatedUnixTime: sessionContext.updatedUnixTime,\n      addedTurns,\n      turns: getAll\n        ? sessionContext.turns\n        : sessionContext.turns.slice(0, addedTurns),\n    };\n  }\n  async loadMoreTurns(): Promise<CodegenTurn[]> {\n    if (!this.#loadMoreTurnsPromise) {\n      this.#loadMoreTurnsPromise = this.#loadMoreTurns().then((turns) => {\n        this.#loadMoreTurnsPromise = undefined;\n        return turns;\n      });\n    }\n    return this.#loadMoreTurnsPromise;\n  }\n\n  async #loadMoreTurns(): Promise<CodegenTurn[]> {\n    const sessionContext = this.getSessionContext();\n    if (sessionContext.canLoadMore) {\n      const firstCompletionId = sessionContext.turns[0]?.completionId;\n      const sessionMetadata = await getTurnsBySessionId(\n        this.#sys,\n        this.#credentials,\n        sessionContext.sessionId,\n        true,\n        firstCompletionId,\n      );\n      if (sessionMetadata.turns.length > 0) {\n        sessionContext.turns.unshift(...sessionMetadata.turns);\n      }\n      sessionContext.canLoadMore = sessionMetadata.canLoadMore;\n      return sessionMetadata.turns;\n    }\n    return [];\n  }\n\n  async #getPrettierConfig() {\n    try {\n      const mockFile = this.#sys.join(this.#gitWorkingDirectory, \"file.tsx\");\n      const prettierConfig = await prettier.resolveConfig(\n        this.#sys.join(mockFile, \"file.tsx\"),\n      );\n      return prettierConfig;\n    } catch (e) {\n      return null;\n    }\n  }\n\n  async setCustomInstructions(instructions: CustomInstruction[]) {\n    this.#builtInCustomInstructions = instructions;\n    // Update the session context immediately if session is already initialized\n    if (this.#sessionContext) {\n      this.#sessionContext.customInstructions =\n        await this.#getCustomInstructions();\n    }\n  }\n\n  async #getCustomInstructions() {\n    return [\n      ...(await getCustomInstructions({\n        sys: this.#sys,\n        projectDir: this.#workingDirectory,\n        currentDir: this.#gitWorkingDirectory,\n        rootDir: \"/\",\n      })),\n      ...(this.#builtInCustomInstructions ?? []),\n    ];\n  }\n\n  async #initializeSession(opts: { skipSessionLoading?: boolean }) {\n    try {\n      if (this.#closed) {\n        throw new Error(\"Code session already closed\");\n      }\n      if (this.#sessionContext) {\n        throw new Error(\"Session context already initialized\");\n      }\n      if (this.#debug) {\n        console.log(\n          `\uD83D\uDCC1 Current AI working directory: ${this.#workingDirectory}`,\n        );\n      }\n      // Recalculate the encryptiong key if not provided\n      await this.setPrivacyMode(this.#privacyMode);\n\n      const gitLocation = await this.#initializeGit();\n      const prettierConfig = await this.#getPrettierConfig();\n\n      let sessionId: string;\n      let sessionMetadata: GetSessionTurnsResult | undefined;\n      if (!this.#sessionOrCompletionId) {\n        this.#sessionOrCompletionId = gitLocation?.sessionId;\n      }\n      if (this.#sessionOrCompletionId) {\n        if (!opts.skipSessionLoading) {\n          sessionMetadata = await getTurnsBySessionId(\n            this.#sys,\n            this.#credentials,\n            this.#sessionOrCompletionId,\n            true,\n          );\n          sessionId = sessionMetadata.sessionId;\n          if (this.#debug) {\n            console.log(\n              \"SESSION recovered\",\n              sessionId,\n              sessionMetadata.turns.length,\n            );\n          }\n        } else {\n          sessionId = this.#sessionOrCompletionId;\n        }\n      } else {\n        sessionId = randomUUID();\n      }\n      if (!this.#featureBranch) {\n        this.#featureBranch = gitLocation?.featureBranch?.trim();\n      }\n      const sessionContext: SessionContext = {\n        turns: sessionMetadata?.turns ?? [],\n        sessionId,\n        customInstructions: await this.#getCustomInstructions(),\n        title: sessionMetadata?.title,\n        beforeCommit: sessionMetadata?.beforeCommit,\n        createdUnixTime: sessionMetadata?.createdUnixTime ?? Date.now(),\n        updatedUnixTime: sessionMetadata?.updatedUnixTime ?? Date.now(),\n        userContext: await getUserContext(this.#sys, this.#gitWorkingDirectory),\n        prettierConfig,\n        canLoadMore: sessionMetadata?.canLoadMore ?? false,\n        state: sessionMetadata?.turns.length\n          ? \"success\"\n          : this.#initialUrl\n            ? \"initial-with-url\"\n            : \"initial-without-url\",\n        sessionMode: sessionMetadata?.sessionMode ?? \"normal\",\n      };\n      if (sessionMetadata) {\n        const lastTurn = getLastOne(sessionMetadata.turns);\n        if (lastTurn?.completionId !== sessionMetadata.lastCompletionId) {\n          this.#sys.Sentry?.captureException(\n            new Error(`Last completion id mismatch`),\n            {\n              tags: {\n                operation: \"codegen-initialize-session\",\n              },\n              extra: {\n                lastTurn,\n                sessionMetadata,\n              },\n            },\n          );\n        }\n      }\n\n      if (this.#debug) {\n        this.#emitter.on(\"step\", (step) => {\n          if (step.type !== \"delta\") {\n            console.log(`Event: ${JSON.stringify(step)}`);\n          }\n        });\n      }\n      await this.#checkoutGit(sessionContext);\n      this.#sessionContext = sessionContext;\n\n      // Initialize local MCP servers (stdio transport)\n      try {\n        const mcpServers = await loadMCPConfig(\n          this.#sys,\n          this.#workingDirectory,\n          this.#fusionConfig,\n        );\n        if (mcpServers.length > 0) {\n          if (this.#debug) {\n            console.log(\n              `\uD83D\uDD0C Initializing ${mcpServers.length} local MCP server(s)...`,\n            );\n          }\n          this.#localMCPManager = await createLocalMCPClientManager(\n            mcpServers,\n            this.#sys,\n            this.#workingDirectory,\n          );\n          const status = this.#localMCPManager.getStatus();\n          const successfulClients = Object.values(status).filter(\n            (s) => s.status === \"ok\",\n          ).length;\n          if (this.#debug) {\n            console.log(\n              `\u2713 Connected to ${successfulClients}/${mcpServers.length} local MCP server(s)`,\n            );\n          }\n        }\n      } catch (error) {\n        // Log error but don't fail session initialization\n        this.#sys.Sentry?.captureException(error, {\n          level: \"warning\",\n          tags: {\n            operation: \"local-mcp-init\",\n          },\n        });\n        if (this.#debug) {\n          console.error(\"Failed to initialize local MCP servers:\", error);\n        }\n      }\n\n      const commandCtx = this.#fusionContext?.devServerOrchestrator;\n      if (commandCtx) {\n        const setupStateListener = (state: SetupCommandState) => {\n          this.#emitter.emit(\"step\", {\n            type: \"dev-server\",\n            devServerState: commandCtx.devState,\n            setupState: state,\n            httpServerState: commandCtx.httpServerState,\n            devCommand: commandCtx.devCommand,\n            setupCommand: commandCtx.setupCommand,\n            proxyServer: commandCtx.proxyTarget,\n          });\n          this.#emitWaitForInput();\n        };\n\n        const devStateListener = (state: DevCommandState) => {\n          this.#emitter.emit(\"step\", {\n            type: \"dev-server\",\n            devServerState: state,\n            setupState: commandCtx.setupState,\n            httpServerState: commandCtx.httpServerState,\n            devCommand: commandCtx.devCommand,\n            setupCommand: commandCtx.setupCommand,\n            proxyServer: commandCtx.proxyTarget,\n          });\n          this.#emitWaitForInput();\n        };\n\n        const httpServerStateListener = (state: HttpServerState) => {\n          this.#emitter.emit(\"step\", {\n            type: \"dev-server\",\n            devServerState: commandCtx.devState,\n            setupState: commandCtx.setupState,\n            httpServerState: state,\n            devCommand: commandCtx.devCommand,\n            setupCommand: commandCtx.setupCommand,\n            proxyServer: commandCtx.proxyTarget,\n          });\n          if (state === \"ok-2xx\") {\n            this.requestRefresh();\n          }\n          this.#emitWaitForInput();\n        };\n\n        const stdoutListener = (data: string) => {\n          this.#emitter.emit(\"step\", {\n            type: \"stdio\",\n            id: \"devServer\",\n            command: commandCtx.devCommand,\n            stream: \"stdout\",\n            source: \"run-command\",\n            content: data,\n          });\n        };\n\n        const stderrListener = (data: string) => {\n          this.#emitter.emit(\"step\", {\n            type: \"stdio\",\n            id: \"devServer\",\n            command: commandCtx.devCommand,\n            stream: \"stderr\",\n            source: \"run-command\",\n            content: data,\n          });\n        };\n\n        const installStdoutListener = (data: string) => {\n          this.#emitter.emit(\"step\", {\n            type: \"stdio\",\n            id: \"setupCommand\",\n            command: commandCtx.setupCommand ?? \"\",\n            stream: \"stdout\",\n            source: \"setup-command\",\n            content: data,\n          });\n        };\n\n        const installStderrListener = (data: string) => {\n          this.#emitter.emit(\"step\", {\n            type: \"stdio\",\n            id: \"setupCommand\",\n            command: commandCtx.setupCommand ?? \"\",\n            stream: \"stderr\",\n            source: \"setup-command\",\n            content: data,\n          });\n        };\n\n        commandCtx.emitter.on(\"setupState\", setupStateListener);\n        commandCtx.emitter.on(\"devState\", devStateListener);\n        commandCtx.emitter.on(\"httpServerState\", httpServerStateListener);\n        commandCtx.emitter.on(\"stdout\", stdoutListener);\n        commandCtx.emitter.on(\"stderr\", stderrListener);\n        commandCtx.emitter.on(\"installStdout\", installStdoutListener);\n        commandCtx.emitter.on(\"installStderr\", installStderrListener);\n\n        this.#disposeFunctions.push(() => {\n          commandCtx.emitter.off(\"setupState\", setupStateListener);\n          commandCtx.emitter.off(\"devState\", devStateListener);\n          commandCtx.emitter.off(\"httpServerState\", httpServerStateListener);\n          commandCtx.emitter.off(\"stdout\", stdoutListener);\n          commandCtx.emitter.off(\"stderr\", stderrListener);\n          commandCtx.emitter.off(\"installStdout\", installStdoutListener);\n          commandCtx.emitter.off(\"installStderr\", installStderrListener);\n        });\n      }\n    } catch (err) {\n      console.error(err);\n      this.#sys.Sentry?.captureException(err, {\n        tags: {\n          operation: \"codegen-initialize-session\",\n        },\n      });\n      throw err;\n    }\n  }\n\n  async #computeHealthSuggestion(\n    sessionContext: SessionContext,\n  ): Promise<SuggestedActionBuildError | undefined> {\n    const devServerOrchestrator = this.#fusionContext?.devServerOrchestrator;\n    if (!devServerOrchestrator) {\n      return undefined;\n    }\n    const setupState = devServerOrchestrator.setupState;\n    if (setupState === \"installing\") {\n      return undefined;\n    }\n\n    // Wait for the dev server logs to settle\n    await devServerOrchestrator.waitUntilIdle(500, 500);\n\n    const hasMergeConflict = await this.#hasMergeConflict();\n    const devServerCommand = devServerOrchestrator.devCommand;\n    const devServerState = devServerOrchestrator.devState;\n\n    const state = devServerOrchestrator.state;\n    const setupCommand = devServerOrchestrator.setupCommand;\n    const devServerOpenPorts = await devServerOrchestrator.getOpenPorts();\n    const devServerProxyTarget = devServerOrchestrator.proxyTarget;\n\n    const httpServerState = devServerOrchestrator.httpServerState;\n    const httpServerStatus = devServerOrchestrator.lastServerStatus;\n    const isHttpFetchError = httpServerState === \"error-fetch\";\n    let badBranch = false;\n    if (this.#fusionContext?.git) {\n      const currentBranch = await this.getCurrentBranch();\n      badBranch = currentBranch !== this.getAiBranch();\n    }\n    const isRuntimeHTTPError =\n      httpServerState === \"error-5xx\" ||\n      (httpServerState === \"error-4xx\" &&\n        httpServerStatus !== 401 &&\n        httpServerStatus !== 404);\n    let logs = \"\";\n    let hasErrorInLogs = false;\n\n    if (state === \"install-failed\" || state === \"install-aborted\") {\n      logs = devServerOrchestrator.getSetupOutput();\n    } else {\n      logs = devServerOrchestrator.getCheckpoints(\n        1,\n        devServerState !== \"running\" ? \"err\" : \"all\",\n      );\n      hasErrorInLogs = hasBuildError(logs ?? \"\");\n    }\n\n    let message = \"\";\n    let prompt = \"\";\n    let level: \"error\" | \"warning\" = \"error\";\n    let actionButtonText = \"Try to fix\";\n    let category: CodeGenCategory = \"repair-unknown\";\n    if (\n      state === \"not-installed\" ||\n      state === \"install-failed\" ||\n      state === \"install-aborted\" ||\n      state === \"failed\" ||\n      state === \"unset\" ||\n      badBranch ||\n      isHttpFetchError ||\n      isRuntimeHTTPError ||\n      hasErrorInLogs ||\n      hasMergeConflict\n    ) {\n      if (badBranch) {\n        category = \"repair-bad-branch\";\n        prompt += `- The current branch is not the AI branch (${this.getAiBranch()}).\\n`;\n        prompt += `- Please switch to the AI branch using the 'git' tool.\\n`;\n        message = `The current branch is not the AI branch (${this.getAiBranch()}).`;\n      }\n      if (hasMergeConflict) {\n        category = \"repair-merge-conflict\";\n        actionButtonText = \"Resolve conflict\";\n        prompt =\n          \"Merge conflict detected, please resolve the conflict before continuing\";\n        message =\n          \"Merge conflict detected - changes from different sources need to be combined\";\n        try {\n          const diff = await this.git([\n            \"diff\",\n            \"--cc\",\n            \"--no-color\",\n            \"--unified=0\",\n            \"--no-ext-diff\",\n          ]);\n          logs = diff;\n          const gitWorkspace = this.gitEnabledFolder;\n          if (gitWorkspace && !this.#canCollapseWorkspace()) {\n            prompt = `Notice that all the relative paths in <merge_conflict>, are inside \"${gitWorkspace.name}/\", remember that when using Read/Write/Edit tools:\\n`;\n          }\n\n          prompt += `<merge_conflict>\\n${diff}\\n</merge_conflict>\\n\nPlease go ahead and resolve all the merge conflicts in all the listed files. Do not worry about calling any git command, focus on updating ONLY the files with conflicts.`;\n        } catch (e) {\n          this.#sys.Sentry?.captureException(\n            new Error(\"Error getting merge conflict diff\"),\n          );\n          prompt += `- There was an error getting the merge conflict diff, please review the changed files and resolve the conflicts (maybe use git status).`;\n        }\n      } else {\n        prompt =\n          \"The app seems to be in a non-functional state, please fix and debug. Here's some information we already know:\\n\";\n        prompt += `- The setup command is: \"${setupCommand}\" [state=${setupState}]\\n  (You can use the 'DevServerControl' tool to 'set_and_run_setup_command' to change it.)\\n`;\n        prompt += `- The dev server command is: \"${devServerCommand}\" [state=${devServerState}]\\n  (You can use the 'DevServerControl' tool to 'set_dev_command' to change it.)\\n`;\n        prompt += `- The dev server proxy target is: ${devServerProxyTarget} [state=${httpServerState}]\\n  (You can use the 'DevServerControl' tool to 'set_proxy_port' to change it.)\\n`;\n\n        if (state === \"not-installed\" || state === \"install-failed\") {\n          category = \"repair-not-installed\";\n          message = `The setup command failed (${setupCommand}). Please review the logs and fix.`;\n          prompt += `- The setup command failed, more information could be in the logs below. Please use the 'DevServerControl' tool to 'set_and_run_setup_command' to set/re-run the setup command.\\n`;\n\n          // Add specific guidance for 'ni' command not found errors\n          if (setupCommand === \"ni\" && logs.includes(\"ni: command not found\")) {\n            prompt += `- HINT: The 'ni' package manager command was not found. This might be due to a Docker image issue. Try changing the setup command to 'npm install' instead.\\n`;\n          }\n        } else if (state === \"install-aborted\") {\n          category = \"repair-install-aborted\";\n          message = `The setup command was aborted (${setupCommand}) by the user`;\n          prompt += `- The setup command was aborted by the user. Review the \"setupCommand\" it could be taking too long or never finish, ask the user if you need clarifications. Then you can  use the 'DevServerControl' tool to 'set_and_run_setup_command' to set/re-run the setup command.\\n`;\n        } else if (state === \"stopped\" || state === \"failed\") {\n          category = \"repair-stopped\";\n          message = \"The dev server seems to be crashing or misconfigured.\";\n          prompt += `- The dev server command seems to be crashing. Pay attention to the logs and the setup command (a wrong setup command could explain the dev command failing).\\n`;\n        } else if (state === \"unset\") {\n          category = \"repair-unset\";\n          message =\n            \"The dev server command is not configured, ie it is not known which dev command to execute.\";\n          prompt +=\n            \"- The dev server command is not configured, you will need to use the 'DevServerControl' tool to 'set_dev_command'.\\n\";\n        } else if (hasErrorInLogs) {\n          category = \"repair-error-in-logs\";\n          message = \"The dev command logs seem to contain some errors.\";\n        } else if (state === \"running\" && isHttpFetchError) {\n          category = \"repair-port\";\n          actionButtonText = \"Fix port\";\n          prompt += `- The dev server proxy target ${devServerProxyTarget} is not responding successfully (status: ${httpServerState}).\\n`;\n          if (devServerOpenPorts.length > 0) {\n            prompt += `- However, the dev server process is exposing the following http ports: ${devServerOpenPorts.join(\", \")}.\\n`;\n          }\n          prompt +=\n            \"Since the dev command is running, this could mean the port is wrong or the dev server is taking too long to start serving. Before deciding to change the port, validate if the port is the correct one.\";\n          if (devServerOrchestrator.lastServerBody) {\n            prompt += `<error>\\n${devServerOrchestrator.lastServerBody}\\n</error>\\n`;\n          }\n          message = `Dev command is running, however we can not connect to ${devServerProxyTarget}. This can mean that the server url is wrong or the dev command is taking too long to start serving. Wait a bit or fix the port. ${devServerOrchestrator.lastServerBody ? `ERROR: ${devServerOrchestrator.lastServerBody}` : \"\"}`;\n        } else if (state === \"running\" && isRuntimeHTTPError) {\n          category = `repair-${httpServerState}`;\n          if (httpServerState === \"error-4xx\") {\n            level = \"warning\";\n          }\n          prompt += `- The dev server is running and accessible on ${devServerProxyTarget}, but it's returning a ${httpServerStatus ?? \"non-200\"} status code (server error).\\n`;\n          prompt += `- This indicates the app is working and the port is correct, but there's a server-side issue (compilation error, runtime error, or other logic problems).\\n`;\n          if (devServerOrchestrator.lastServerBody) {\n            prompt += `- Here's the HTTP body of the failed request:\\n\\n<http_body>\\n${truncateLines(devServerOrchestrator.lastServerBody, 500, 2000)}\\n</http_body>\\n`;\n          }\n          prompt += `- Also, check the logs below for compilation errors, runtime exceptions, or other server-side issues that need to be fixed.\\n`;\n          message = `Server is returning ${httpServerStatus ?? \"non-200\"} status code`;\n        }\n\n        if (\n          setupState === \"install-failed\" ||\n          setupState === \"install-aborted\"\n        ) {\n          prompt += `- Here are the logs from the setup command (${setupCommand}):\\n${devServerOrchestrator.getSetupOutput().slice(-8000)}\\n`;\n        } else {\n          if (logs) {\n            prompt += `- Here are the logs from the dev server command (${devServerCommand}):\\n<logs>\\n${logs}\\n</logs>\\n`;\n          }\n        }\n      }\n      const healthStatus: CodeGenHealthStatus = {\n        devServerState: devServerState,\n        setupState: setupState,\n        httpServerState: httpServerState,\n        proxyServer: devServerProxyTarget,\n        devCommand: devServerCommand,\n        setupCommand: setupCommand,\n        hasMergeConflict,\n        logs,\n        prompt,\n        message,\n      };\n\n      const canAutoApply =\n        !this.#scheduledMessage && NORMAL_STATES.includes(sessionContext.state);\n\n      return {\n        actionButtonText,\n        type: \"build-error\",\n        level,\n        canAutoApply,\n        healthStatus,\n        message: healthStatus.message,\n        userMessage: {\n          userPrompt: healthStatus.prompt,\n          skipSearch: true,\n          repair: true,\n          category,\n          displayPrompt: healthStatus.message,\n        },\n      };\n    }\n    return undefined;\n  }\n\n  /**\n   * Initializes a Fusion session for side-car AI branch workflow\n   * Following the pattern described in fusion.md\n   */\n  async #initializeGit() {\n    let repoInfo: RepoInfo | undefined;\n    if (this.#fusionContext?.git) {\n      try {\n        log.info(\n          \"\uD83D\uDD04 Initializing Fusion session for AI side-car branch workflow...\",\n        );\n\n        // 1. Check if we're in a git repository\n        repoInfo = await this.#sys.getRepoInfo(this.#gitWorkingDirectory);\n\n        // If not in a git repository, initialize one if autoInitGit is enabled\n        if (!repoInfo.hasGit) {\n          if (this.#fusionContext.gitAutoInit) {\n            log.warn(\n              \"\uD83D\uDEE0\uFE0F No git repository detected. Initializing a new git repository...\",\n            );\n            try {\n              // Initialize git repo\n              await this.git([\"init\"]);\n              await this.git([\"add\", \".\"]);\n              await this.git([\"branch\", \"-M\", \"main\"]);\n              await this.git([\n                \"commit\",\n                \"--allow-empty\",\n                \"--quiet\",\n                \"--no-verify\",\n                \"-m\",\n                \"Initial commit for Fusion workflow\",\n              ]);\n\n              log.info(\"\u2705 Successfully initialized a new git repository\");\n            } catch (error) {\n              console.error(\"\u274C Failed to initialize git repository:\", error);\n              return;\n            }\n          } else {\n            log.error(\n              \"\u274C Error: Not in a git repository. Fusion requires a git repository.\",\n            );\n            return;\n          }\n        }\n\n        return await getAndParseGitRepoInfo({\n          sys: this.#sys,\n          gitWorkingDirectory: this.#gitWorkingDirectory,\n          strict: true,\n        });\n      } catch (error) {\n        log.error(`\u274C Error initializing Fusion session: ${error}`);\n        const err = new Error(\"Initialize Git failed\", { cause: error });\n        this.#sys.Sentry?.captureException(err, {\n          level: \"fatal\",\n          tags: {\n            operation: \"codegen-initialize-session\",\n          },\n          extra: {\n            repoInfo,\n          },\n        });\n        throw err;\n      }\n    }\n    return {\n      featureBranch: undefined,\n      sessionId: undefined,\n      currentCommitHash: undefined,\n    };\n  }\n\n  async #checkoutIntoBranch(branchName: string) {\n    try {\n      // try to move\n      await this.git([\"checkout\", branchName]);\n    } catch (e) {\n      // If the branch doesn't exist, create it from the feature branch\n      await this.git([\"checkout\", \"-b\", branchName]);\n    }\n  }\n\n  async #checkoutGit(sessionContext: SessionContext) {\n    if (this.#fusionContext?.git) {\n      if (!this.#aiBranch) {\n        const targetBranch = computeAIBranchName(\n          this.getFeatureBranch(),\n          sessionContext.sessionId,\n        );\n        this.#aiBranch = targetBranch;\n      }\n\n      const currentBranch = await this.getCurrentBranch();\n      const aiBranch = this.getAiBranch();\n      if (currentBranch !== aiBranch) {\n        await this.#checkoutIntoBranch(aiBranch);\n      }\n\n      // Set the upstream branch before even doing git push\n      try {\n        await this.git([\n          \"branch\",\n          \"--set-upstream-to\",\n          `refs/remotes/origin/${this.#getRemoteBranch()}`,\n        ]);\n      } catch (e) {\n        // ignore\n      }\n\n      const lastTurn = getLastOne(sessionContext.turns);\n      const targetCommit = lastTurn?.afterCommit ?? lastTurn?.lastCommit;\n      if (targetCommit) {\n        const currentCommitHash = await this.getCurrentCommitHash();\n        if (currentCommitHash !== targetCommit) {\n          this.#sys.Sentry?.captureException(\n            new Error(`Init: After commit mismatch`),\n            {\n              tags: {\n                operation: \"codegen-initialize-session\",\n              },\n              extra: {\n                sessionId: sessionContext.sessionId,\n                targetCommit,\n                lastTurn,\n                currentCommitHash,\n              },\n            },\n          );\n        }\n      }\n      if (sessionContext.beforeCommit) {\n        // Check if the before commit exists\n        try {\n          await this.git([\n            \"rev-parse\",\n            \"--quiet\",\n            \"--verify\",\n            sessionContext.beforeCommit,\n          ]);\n        } catch (e) {\n          this.#sys.Sentry?.captureException(\n            new Error(`Init: Before commit not found`, {\n              cause: e,\n            }),\n            {\n              tags: {\n                operation: \"codegen-initialize-session\",\n              },\n              extra: {\n                sessionId: sessionContext.sessionId,\n                beforeCommit: sessionContext.beforeCommit,\n                turnStates: sessionContext.turns.length,\n                lastCompletionId: getLastOne(sessionContext.turns)\n                  ?.completionId,\n              },\n            },\n          );\n        }\n      }\n    }\n  }\n\n  async #setRemoteUrl(url: string, cwd?: string) {\n    // Check if the remote origin is already set to the correct url\n    let currentOriginUrl: string | undefined;\n    try {\n      currentOriginUrl = (\n        await this.git([\"remote\", \"get-url\", \"origin\"], cwd)\n      ).trim();\n    } catch (e) {\n      // ignore\n    }\n\n    try {\n      new URL(url);\n    } catch (error) {\n      this.#sys.Sentry?.captureException(\n        new Error(\"Provided remote url is invalid\"),\n        {\n          tags: {\n            operation: \"codegen-git\",\n          },\n          extra: { url, currentOriginUrl },\n        },\n      );\n      throw new Error(\"Provided remote url is invalid\");\n    }\n\n    if (currentOriginUrl === url) {\n      return;\n    }\n    this.#lastSuccessfulBackupRef = undefined;\n    // If the remote origin is already set to the correct url, we need to set it to the new url\n    if (currentOriginUrl) {\n      await this.git([\"remote\", \"set-url\", \"origin\", url], cwd);\n    } else {\n      // If the remote origin is not set, we need to add it\n      await this.git([\"remote\", \"add\", \"origin\", url], cwd);\n    }\n  }\n\n  async pushRepoV2(repoInfo: {\n    repoFullName: string;\n    repoUrl: string;\n  }): Promise<CodegenApiResult> {\n    const output = await this.pushChanges({\n      pullFirst: false,\n      updateRepo: repoInfo,\n      refreshRemote: true,\n    });\n    return output;\n  }\n\n  async #updateGitUrls(): Promise<CodegenApiResult> {\n    let gitConfigs: GitConfigs | undefined;\n    try {\n      const mainRepo = this.gitEnabledFolder;\n\n      if (!mainRepo) {\n        throw new Error(\"Main repo not found\");\n      }\n\n      const doesNotNeedGitUrls =\n        mainRepo.initializationCommand ||\n        mainRepo.repoUrl?.startsWith(\"ssh://\");\n\n      if (doesNotNeedGitUrls) {\n        return {\n          success: true,\n          message: \"Git remote URLs update not needed\",\n        };\n      }\n\n      if (!this.#projectId) {\n        throw new Error(\"Project ID is required to update git URLs\");\n      }\n      const gitConfigsResult = await fetchGitConfigs(\n        this.#credentials,\n        this.#projectId,\n      );\n      if (!gitConfigsResult.success) {\n        throw gitConfigsResult.error;\n      }\n      gitConfigs = gitConfigsResult.gitConfigs;\n\n      if (!mainRepo.repoName) {\n        throw new Error(\"Main repo not found\");\n      }\n      const config = gitConfigs?.[mainRepo.repoName];\n      if (config?.url) {\n        const resolvedPath = this.#sys.resolve(\n          this.#workingDirectory,\n          mainRepo.path,\n        );\n        await this.#setRemoteUrl(config.url, resolvedPath);\n      }\n      await this.emitGitStatus();\n      return {\n        success: true,\n        message: \"Git remote URLs updated\",\n      };\n    } catch (error) {\n      const message = `Failed to update git remote URLs: ${getErrorMessage(error)}`;\n      if (this.#debug) {\n        console.error(message);\n      }\n      // let the app know that the git remote URLs could not be updated\n      // this will happen often in case if enteprise git providers\n      // app should refresh access token automatically, enteprise git providers might not be accessible outside the user network\n      this.#emitter.emit(\"step\", {\n        type: \"error\",\n        message: message,\n        code: \"git-update-error\",\n      });\n      // Capture the error in Sentry\n      this.#sys.Sentry?.captureException(error, {\n        tags: {\n          operation: \"codegen-git\",\n          endpoint: \"updateGitUrls\",\n        },\n        extra: {\n          projectId: this.#projectId,\n          workspaceFolders: this.#workspace?.folders,\n          gitConfigs,\n        },\n      });\n      return {\n        success: false,\n        message,\n        error: error instanceof Error ? error : new Error(message),\n      };\n    }\n  }\n\n  async zipFolder(folderName: string) {\n    const { resolvedPath } = this.resolveWorkspacePath(folderName, false);\n    const timestamp = Date.now();\n    const randomId = Math.random().toString(36).substring(2, 8);\n\n    const zipFileName = `zip-${timestamp}-${randomId}.zip`;\n    const zipFolder = \"/tmp\";\n    const zipPath = this.#sys.join(zipFolder, zipFileName);\n    fs.mkdirSync(zipFolder, { recursive: true });\n    await runCommand(\"zip\", [\"-r\", zipPath, \".\", \"-x\", \"**/node_modules/**\"], {\n      cwd: resolvedPath,\n      debug: this.#debug,\n      sys: this.#sys,\n    });\n    return zipPath;\n  }\n\n  async archiveProject() {\n    if (!this.#fusionContext?.git) {\n      throw new Error(\"Can not archive project in non git mode\");\n    }\n\n    try {\n      const timestamp = Date.now();\n      const randomId = Math.random().toString(36).substring(2, 8);\n      const zipFileName = `project-${timestamp}-${randomId}.zip`;\n      const zipFolder = \"/tmp\";\n      const zipPath = this.#sys.join(zipFolder, zipFileName);\n      fs.mkdirSync(zipFolder, { recursive: true });\n      await this.git([\"archive\", \"--format=zip\", \"-o\", zipPath, \"HEAD\"]);\n      return zipPath;\n    } catch (error) {\n      throw new Error(`Failed to archive project`, {\n        cause: error,\n      });\n    }\n  }\n\n  isIdle() {\n    const sessionContext = this.getSessionContext();\n    const isRunningStates: GenerateCompletionState[] = [\"generating\", \"replay\"];\n    if (\n      !this.#currentGitCommand &&\n      !isRunningStates.includes(sessionContext.state) &&\n      this.#pendingPromises.length === 0\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  async needsBackup() {\n    if (!this.#fusionContext?.git) {\n      return false;\n    }\n    if (!this.#projectId) {\n      return false;\n    }\n    if (!this.#branchName) {\n      return false;\n    }\n    const lastCommitHash = await this.getCurrentCommitHash();\n    if (!lastCommitHash) {\n      return false;\n    }\n    const originalRepoUrl = this.gitEnabledFolder?.originalRepoUrl;\n    if (!originalRepoUrl) {\n      return false;\n    }\n    const currentBackupRef = computeBackupRef({\n      version: \"v2\",\n      originalRepoUrl,\n      commitHash: lastCommitHash,\n    });\n    if (this.#lastSuccessfulBackupRef === currentBackupRef) {\n      return false;\n    }\n    return true;\n  }\n\n  async uploadBackup(\n    forcedFullBackup: boolean = false,\n  ): Promise<BackupGitRepoResult | { success: false; error: Error }> {\n    try {\n      const projectId = this.#projectId;\n      const branchName = this.#branchName;\n      if (!this.#fusionContext?.git) {\n        throw new Error(\"Cannot upload backup in non-git mode\");\n      }\n\n      if (!projectId) {\n        throw new Error(\"Project ID is required for backup upload\");\n      }\n\n      if (!branchName) {\n        throw new Error(\"Branch ID is required for backup upload\");\n      }\n      const aiBranch = this.getAiBranch();\n      const featureBranch = this.getFeatureBranch();\n\n      const result = await this.#queueCommand(() =>\n        backupGitRepo({\n          sys: this.#sys,\n          credentials: this.#credentials,\n          projectId,\n          branchName,\n          repoPath: this.#gitWorkingDirectory,\n          aiBranch,\n          featureBranch,\n          workspace: this.#workspace,\n          debug: this.#debug,\n          isConnectedToProvider: true,\n          forcedFullBackup,\n          canAbortMerge: this.#closed,\n        }),\n      );\n      if (result.success) {\n        this.#lastSuccessfulBackupRef = result.backupRef;\n      }\n      return result;\n    } catch (error) {\n      console.error(\"Failed to upload backup\", error);\n      this.#lastSuccessfulBackupRef = undefined;\n      this.#sys.Sentry?.captureException(error, {\n        tags: {\n          operation: \"codegen-backup\",\n          backupError: \"\",\n        },\n      });\n      // Only block progression when commits are not found on remote\n      const isCommitNotFound =\n        error instanceof Error &&\n        error.message.includes(\"Commit(s) not found on remote\");\n\n      if (isCommitNotFound) {\n        throw error instanceof Error ? error : new Error(String(error));\n      }\n\n      return {\n        success: false,\n        error: error instanceof Error ? error : new Error(String(error)),\n      };\n    }\n  }\n\n  getCommitMode() {\n    return this.#fusionConfig?.commitMode ?? \"prs\";\n  }\n\n  #getRemoteBranch() {\n    const commitMode = this.getCommitMode();\n\n    if (commitMode === \"commits\") {\n      return `${this.getFeatureBranch()}`;\n    } else {\n      return `${this.getAiBranch()}`;\n    }\n  }\n\n  async #getPushChangesCommand(forcePush: boolean) {\n    const commitMode = this.getCommitMode();\n    const remoteBranch = this.#getRemoteBranch();\n    const currentBranch = await this.getCurrentBranch();\n\n    if (commitMode === \"commits\") {\n      return [\n        \"push\",\n        \"--no-verify\",\n        \"--set-upstream\",\n        ...(forcePush ? [\"-f\"] : []),\n        \"origin\",\n        `${currentBranch}:${remoteBranch}`,\n      ];\n    } else {\n      return [\n        \"push\",\n        \"--no-verify\",\n        \"--set-upstream\",\n        ...(forcePush ? [\"-f\"] : []),\n        \"origin\",\n        remoteBranch,\n      ];\n    }\n  }\n\n  async #formatPendingFiles() {\n    try {\n      const sessionContext = this.getSessionContext();\n      const pendingFiles = Array.from(this.#pendingFormating);\n      this.#pendingFormating.clear();\n      if (pendingFiles.length === 0 || !sessionContext.prettierConfig) {\n        return false;\n      }\n\n      for (const filePath of pendingFiles) {\n        const content = await this.#sys.readFile(filePath);\n        if (!content) {\n          continue;\n        }\n        const formattedContent = await prettierFormat(\n          this.#workingDirectory,\n          content,\n          undefined,\n          filePath,\n        );\n        await this.#sys.writeFile(filePath, formattedContent);\n      }\n\n      if (this.#fusionContext?.git) {\n        if (await this.isCleanWorkTree()) {\n          return false;\n        }\n\n        await this.manualCommit({\n          add: \".\",\n          commitMessage: \"Prettier format pending files\",\n        });\n      }\n      return true;\n    } catch (e) {\n      this.#sys.Sentry?.captureException(\n        new Error(\"Failed to format pending files\", {\n          cause: e,\n        }),\n      );\n      return false;\n    }\n  }\n  async pushChanges(opts: PushChangesArgs): Promise<CodegenApiResult> {\n    const { pullFirst, updateRepo, actor, refreshRemote, forcePush } =\n      processPushChangesArgs(opts);\n    try {\n      if (!this.#fusionContext?.git) {\n        throw new Error(\"Can not push changes in non-git mode\");\n      }\n\n      if (updateRepo) {\n        const mainRepo = this.#workspace?.folders.find(\n          (folder) => folder.enableGit,\n        );\n        if (mainRepo) {\n          mainRepo.repoName = updateRepo.repoFullName;\n          mainRepo.originalRepoUrl = updateRepo.repoUrl;\n        }\n      }\n\n      if (refreshRemote || updateRepo) {\n        const result = await this.#updateGitUrls();\n        if (!result.success) {\n          throw result.error;\n        }\n      }\n\n      if (await this.#hasMergeConflict()) {\n        await this.emitGitStatus();\n        throw new Error(\n          \"Merge conflict detected, please resolve the conflict and try again\",\n        );\n      }\n\n      // Format pending files before pushing\n      await this.#formatPendingFiles();\n\n      if (pullFirst) {\n        await this.pullLatestFromRemote({ requestRefresh: false });\n      }\n\n      const command = await this.#getPushChangesCommand(\n        forcePush ?? !pullFirst,\n      );\n      await this.git(command);\n      const status = await this.emitGitStatus();\n      await this.#completionFinalize({\n        lastCommit: status?.currentCommit,\n      });\n      return {\n        success: true,\n      };\n    } catch (err) {\n      this.#sys.Sentry?.captureException(err, {\n        tags: {\n          operation: \"codegen-git\",\n          endpoint: \"pushChanges\",\n          actor,\n        },\n        extra: {\n          pullFirst,\n          commitMode: this.getCommitMode(),\n          updateRepo,\n          refreshRemote,\n        },\n      });\n      const message = getErrorMessage(err);\n      return {\n        success: false,\n        message,\n        error: err instanceof Error ? err : new Error(message),\n      };\n    }\n  }\n\n  async pullLatestFromRemote(opts?: {\n    requestRefresh?: boolean;\n  }): Promise<CodegenApiResult> {\n    const remoteBranchPair = this.#getRemoteBranch();\n    const result = await this.#syncChangesFromBranches({\n      branches: [remoteBranchPair],\n      allowUnrelatedHistory: false,\n      canPush: false,\n      uncommittedChanges: \"stash\",\n      fastForward: this.getCommitMode() === \"commits\" ? \"auto\" : \"never\",\n      requestRefresh: opts?.requestRefresh ?? true,\n    });\n    return result;\n  }\n\n  async abortMerge(emitStatus = true): Promise<CodegenApiResult> {\n    try {\n      await this.git([\"merge\", \"--abort\"]);\n      if (emitStatus) {\n        await this.emitGitStatus();\n      }\n      this.requestRefresh();\n      return {\n        success: true,\n        message: \"Merge aborted\",\n      };\n    } catch (e) {\n      await this.emitGitStatus();\n      const message = getErrorMessage(e);\n      return {\n        success: false,\n        message,\n        error: e instanceof Error ? e : new Error(message),\n      };\n    }\n  }\n\n  async syncChangesFromRemote(opts?: {\n    remoteBranches?: \"both\" | \"main\" | \"ai\";\n    fastForward?: \"never\" | \"required\" | \"auto\";\n    canPush?: boolean;\n    uncommittedChanges?: \"stash\" | \"commit\" | \"fail\";\n    allowUnrelatedHistory?: boolean;\n  }): Promise<CodegenApiResult> {\n    const branches: string[] = [];\n    const remoteBranches = opts?.remoteBranches ?? \"both\";\n    if (remoteBranches === \"both\") {\n      branches.push(this.getAiBranch(), this.getFeatureBranch());\n    } else if (remoteBranches === \"main\") {\n      branches.push(this.getFeatureBranch());\n    } else if (remoteBranches === \"ai\") {\n      branches.push(this.getAiBranch());\n    }\n    const result = await this.#syncChangesFromBranches({\n      branches,\n      allowUnrelatedHistory: opts?.allowUnrelatedHistory ?? true,\n      canPush: opts?.canPush ?? false,\n      uncommittedChanges: opts?.uncommittedChanges ?? \"stash\",\n      fastForward:\n        opts?.fastForward ??\n        (this.getCommitMode() === \"commits\" ? \"auto\" : \"never\"),\n    });\n    return result;\n  }\n\n  async #hasMergeConflict() {\n    try {\n      await this.git([\"rev-parse\", \"-q\", \"--verify\", \"MERGE_HEAD\"]);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  async #syncChangesFromBranches({\n    branches,\n    allowUnrelatedHistory,\n    canPush,\n    fastForward,\n    uncommittedChanges,\n    requestRefresh = true,\n  }: {\n    canPush: boolean;\n    branches: string[];\n    uncommittedChanges: \"stash\" | \"commit\" | \"fail\";\n    allowUnrelatedHistory: boolean;\n    fastForward: \"never\" | \"required\" | \"auto\";\n    requestRefresh?: boolean;\n  }): Promise<CodegenApiResult> {\n    try {\n      if (!this.#fusionContext?.git) {\n        throw new Error(\"Can not pull changes in non-git mode\");\n      }\n\n      if (!branches.length) {\n        throw new Error(\"At least one branch name is required\");\n      }\n\n      const currentBranch = await this.getCurrentBranch();\n      const aiBranch = this.getAiBranch();\n      if (currentBranch !== aiBranch) {\n        throw new Error(\n          `Sync failed, we are not in AI branch, current branch: ${currentBranch} != ${aiBranch}`,\n        );\n      }\n\n      const hasMergeConflict = await this.#hasMergeConflict();\n      if (hasMergeConflict) {\n        await this.emitGitStatus();\n        throw new Error(\n          \"Merge conflict detected, please resolve the conflict and try again\",\n        );\n      }\n\n      const isCleanWorkTree = await this.isCleanWorkTree();\n      if (!isCleanWorkTree) {\n        switch (uncommittedChanges) {\n          case \"stash\":\n            await this.git([\"stash\", \"--include-untracked\"]);\n            break;\n          case \"commit\":\n            await this.git([\"add\", \".\"]);\n            await this.git([\n              \"commit\",\n              \"-m\",\n              \"Uncommited changes made outside Fusion\",\n            ]);\n            break;\n          default:\n            throw new Error(\n              \"Uncommitted changes detected, please commit or stash them before syncing\",\n            );\n        }\n      }\n\n      await this.git([\"fetch\", \"origin\", \"--prune\"]);\n\n      const allRemoteRefs = await this.git([\n        \"for-each-ref\",\n        \"refs/remotes/origin\",\n      ]);\n\n      const branchesPresentInRemote = branches.filter((branch) => {\n        return allRemoteRefs.includes(`refs/remotes/origin/${branch}`);\n      });\n\n      for (const branchName of branchesPresentInRemote) {\n        if (branchName !== aiBranch && !branchName.startsWith(\"ai_\")) {\n          // we dont update branches other than ai branch so we can have the pointer ref\n          await this.git([\n            \"update-ref\",\n            `refs/heads/${branchName}`,\n            `refs/remotes/origin/${branchName}`,\n          ]);\n        }\n        await this.git([\n          \"merge\",\n          ...(fastForward === \"never\" ? [\"--no-ff\"] : []),\n          ...(fastForward === \"required\" ? [\"--ff-only\"] : []),\n          ...(allowUnrelatedHistory ? [\"--allow-unrelated-histories\"] : []),\n          `refs/remotes/origin/${branchName}`,\n        ]);\n        if (await this.#hasMergeConflict()) {\n          await this.emitGitStatus();\n          throw new Error(\n            \"Merge conflict detected, please resolve the conflict and try again\",\n          );\n        }\n      }\n\n      if (canPush) {\n        const result = await this.pushChanges(false);\n        if (!result.success) {\n          throw result.error;\n        }\n      } else {\n        const gitStatus = await this.emitGitStatus();\n        await this.#completionFinalize({\n          lastCommit: gitStatus?.currentCommit,\n        });\n      }\n      if (requestRefresh) {\n        this.requestRefresh();\n      }\n      return {\n        success: true,\n        message: `Successfully merged ${branches.join(\", \")} into current branch`,\n      };\n    } catch (e) {\n      await this.emitGitStatus();\n      this.#sys.Sentry?.captureException(e, {\n        tags: {\n          operation: \"codegen-git\",\n          endpoint: \"syncChangesFromBranches\",\n        },\n        extra: {\n          branches,\n          allowUnrelatedHistory,\n        },\n      });\n      const message = getErrorMessage(e);\n      return {\n        success: false,\n        message,\n        error: e instanceof Error ? e : new Error(message),\n      };\n    }\n  }\n  /**\n   * Get the current commit hash\n   */\n  public async getCurrentCommitHash(branchName = \"HEAD\") {\n    if (!this.#fusionContext?.git) {\n      return undefined;\n    }\n    // Get the commit hash\n    try {\n      const commitHash = await this.git([\"rev-parse\", branchName]);\n      return commitHash.trim();\n    } catch (e) {\n      return undefined;\n    }\n  }\n\n  public async getCurrentBranch() {\n    const currentBranch = await this.git([\"branch\", \"--show-current\"]);\n    return currentBranch.trim();\n  }\n\n  /**\n   * Get the feature branch name\n   */\n  public getFeatureBranch() {\n    if (!this.#featureBranch) {\n      throw new Error(\"Feature branch is missing\");\n    }\n    return this.#featureBranch;\n  }\n\n  /**\n   * Get the AI branch name\n   */\n  public getAiBranch() {\n    if (!this.#aiBranch) {\n      throw new Error(\"AI branch is missing\");\n    }\n    return this.#aiBranch;\n  }\n\n  async git(args: string[], opts?: string | RunCommandOptions) {\n    if (!this.#fusionContext?.git) {\n      throw new Error(`Can not execute git command in non-git mode.`);\n    }\n    /**\n     * These commands do not require a valid auth token in the remote-url, or indicate that the repo is not in a state\n     * that allows us to update the remote-url.\n     */\n    const subCommand = args[0];\n    const gitCommandRequiresValidToken =\n      subCommand === \"push\" || subCommand === \"fetch\" || subCommand === \"pull\";\n\n    const timestamp = Date.now();\n    const timeSinceLastGitUpdate = timestamp - this.#lastGitUpdateTime;\n    const SECOND = 1000;\n    const MINUTES = SECOND * 60;\n    if (gitCommandRequiresValidToken && timeSinceLastGitUpdate > 10 * MINUTES) {\n      this.#lastGitUpdateTime = timestamp;\n      await this.#updateGitUrls();\n    }\n\n    const result = await this.#queueCommand(() =>\n      this.#executeGitCommand(args, opts),\n    );\n    return result;\n  }\n\n  #queueCommand<T>(command: () => Promise<T>): Promise<T> {\n    const promise = this.#gitCommandPromise.then(() => command());\n    this.#gitCommandPromise = promise.catch(() => undefined);\n    return promise;\n  }\n\n  /**\n   * Helper to run git commands\n   */\n  async #executeGitCommand(\n    args: string[],\n    opts?: string | RunCommandOptions,\n  ): Promise<string> {\n    if (!this.#fusionContext?.git) {\n      throw new Error(\n        `Can not execute git command in non-git mode: git ${args.join(\" \")}`,\n      );\n    }\n    const command = `git ${args.join(\" \")}`;\n\n    if (this.#currentGitCommand) {\n      this.#sys.Sentry?.captureException(\n        new Error(\n          `currentGitCommand is not finished yet. Current command: ${this.#currentGitCommand}, New command Received: ${command}`,\n        ),\n        {\n          tags: {\n            operation: \"codegen-git\",\n          },\n          extra: { oldCommand: this.#currentGitCommand, newCommand: command },\n        },\n      );\n    }\n    try {\n      this.#currentGitCommand = command;\n\n      const result = await runCommand(\"git\", args, {\n        cwd: typeof opts === \"string\" ? opts : this.#gitWorkingDirectory,\n        debug: this.#debug,\n        sys: this.#sys,\n        timeout: 60 * 1000,\n        ...(typeof opts === \"object\" ? opts : undefined),\n      });\n      return result;\n    } finally {\n      this.#currentGitCommand = undefined;\n    }\n  }\n\n  setDebug(debug: boolean) {\n    this.#debug = debug;\n  }\n\n  async createTerminal(options?: {\n    terminalId?: string;\n    title?: string;\n    cwd?: string;\n    env?: Record<string, string | undefined>;\n    cols?: number;\n    rows?: number;\n    shell?: string;\n    createdBy?: string;\n    emitTerminals?: boolean;\n  }): Promise<CodegenApiTerminal> {\n    const devServer = this.#fusionContext?.devServerOrchestrator;\n    const id = options?.terminalId || `pty_${Date.now()}_${randomUUID()}`;\n    const existingTerminal = this.#getTerminals().find(\n      (t) => t.terminalId === id,\n    );\n    if (existingTerminal) {\n      return existingTerminal;\n    }\n    const ptyLib = importPty(this.#sys);\n    if (!ptyLib) {\n      throw new Error(\"Could not import node-pty\");\n    }\n\n    const shell =\n      options?.shell ||\n      (process.platform === \"win32\"\n        ? \"powershell.exe\"\n        : process.env.SHELL || \"/bin/bash\");\n\n    const cols = options?.cols ?? 120;\n    const rows = options?.rows ?? 30;\n    const env = {\n      ...process.env,\n      ...devServer?.envVars,\n      ...options?.env,\n    } as Record<string, string>;\n\n    const cwd = options?.cwd || this.#bashWorkingDirectory;\n    const pty = ptyLib.spawn(shell, [], {\n      name: \"xterm-color\",\n      cwd,\n      cols,\n      rows,\n      env,\n    });\n\n    const onDataListeners = new Set<(chunk: string) => void>();\n    const onExitListeners = new Set<(code?: number) => void>();\n    const disposeFns: (() => void)[] = [];\n\n    const onData = (chunk: string) => {\n      for (const cb of onDataListeners) cb(chunk);\n    };\n    const dataSub = pty.onData(onData);\n    disposeFns.push(() => {\n      try {\n        dataSub?.dispose?.();\n      } catch {}\n    });\n\n    const onExit = ({ exitCode }: { exitCode: number }) => {\n      for (const cb of onExitListeners) {\n        cb(exitCode);\n      }\n      this.#terminals.delete(id);\n      disposeFns.forEach((fn) => fn());\n    };\n\n    const exitSub = pty.onExit(onExit);\n    disposeFns.push(() => {\n      try {\n        exitSub?.dispose?.();\n      } catch {}\n    });\n\n    const now = Date.now();\n    const meta: CodegenApiTerminal = {\n      terminalId: id,\n      title: options?.title || `Terminal ${this.#terminals.size + 1}`,\n      cwd,\n      createdAt: now,\n      lastWrittenAt: now,\n      createdBy: options?.createdBy || \"unknown\",\n      readonly: false,\n      builtIn: false,\n    };\n\n    this.#terminals.set(id, {\n      ...meta,\n      pty,\n      onDataListeners,\n      onExitListeners,\n      disposeFns,\n      env: options?.env,\n      shell,\n    });\n    if (options?.emitTerminals ?? true) {\n      this.emitTerminals();\n    }\n    return meta;\n  }\n\n  #getTerminals(): CodegenApiTerminal[] {\n    const sessionContext = this.getSessionContext();\n    const terminals: CodegenApiTerminal[] = Array.from(\n      this.#terminals.values(),\n    ).map((a) => {\n      return {\n        terminalId: a.terminalId,\n        title: a.title,\n        cwd: a.cwd,\n        createdAt: a.createdAt,\n        lastWrittenAt: a.lastWrittenAt,\n        createdBy: a.createdBy,\n        readonly: a.readonly,\n        builtIn: a.builtIn,\n      };\n    });\n    if (this.#enabledTools?.includes(\"Bash\")) {\n      terminals.unshift({\n        terminalId: \"bash-tools\",\n        title: \"Bash\",\n        cwd: this.#bashWorkingDirectory,\n        createdAt: sessionContext.createdUnixTime,\n        lastWrittenAt: Date.now(),\n        createdBy: \"fusion\",\n        readonly: true,\n        builtIn: true,\n      });\n    }\n    const devServer = this.#fusionContext?.devServerOrchestrator;\n    if (devServer) {\n      devServer;\n      terminals.unshift(\n        {\n          terminalId: \"dev-command\",\n          title: \"Dev Command\",\n          cwd: this.#bashWorkingDirectory,\n          createdAt: sessionContext.createdUnixTime,\n          lastWrittenAt: Date.now(),\n          createdBy: \"fusion\",\n          readonly: !devServer.devCommandProcess?.write,\n          builtIn: true,\n        },\n        {\n          terminalId: \"setup-command\",\n          title: \"Setup Command\",\n          cwd: this.#bashWorkingDirectory,\n          createdAt: sessionContext.createdUnixTime,\n          lastWrittenAt: Date.now(),\n          createdBy: \"fusion\",\n          readonly: true,\n          builtIn: true,\n        },\n      );\n    }\n\n    return terminals;\n  }\n\n  emitTerminals() {\n    this.#emitter.emit(\"step\", {\n      type: \"terminals\",\n      terminals: this.#getTerminals(),\n    });\n  }\n\n  updateTerminal({\n    terminalId,\n    cols,\n    rows,\n    title,\n  }: {\n    terminalId: string;\n    cols?: number;\n    rows?: number;\n    title?: string;\n  }) {\n    if (terminalId === \"dev-command\") {\n      if (cols || rows) {\n        const devServer = this.#fusionContext?.devServerOrchestrator;\n        if (devServer?.devCommandProcess?.resize) {\n          devServer.devCommandProcess.resize(cols, rows);\n          return true;\n        }\n      }\n      return false;\n    }\n    const t = this.#terminals.get(terminalId);\n    if (!t) {\n      return false;\n    }\n    if (cols || rows) {\n      t.pty.resize(cols ?? t.pty.cols, rows ?? t.pty.rows);\n    }\n    if (title) {\n      t.title = title;\n      this.emitTerminals();\n    }\n    return true;\n  }\n\n  writeTerminal({ terminalId, data }: { terminalId: string; data: string }) {\n    if (terminalId === \"dev-command\") {\n      const devServer = this.#fusionContext?.devServerOrchestrator;\n      if (devServer?.devCommandProcess?.write) {\n        devServer.devCommandProcess.write(data);\n        return true;\n      }\n      return false;\n    }\n    const t = this.#terminals.get(terminalId);\n    if (!t) {\n      return false;\n    }\n    if (t.readonly) {\n      return false;\n    }\n    t.pty.write(data);\n    t.lastWrittenAt = Date.now();\n    return true;\n  }\n\n  signalTerminal({\n    terminalId,\n    signal,\n  }: {\n    terminalId: string;\n    signal: \"SIGINT\" | \"SIGTERM\" | \"SIGKILL\";\n  }) {\n    if (terminalId === \"dev-command\") {\n      const devServer = this.#fusionContext?.devServerOrchestrator;\n      if (devServer?.devCommandProcess?.kill) {\n        devServer.devCommandProcess.kill(signal);\n        return true;\n      }\n      return false;\n    }\n    const t = this.#terminals.get(terminalId);\n    if (!t) {\n      return false;\n    }\n    if (t.readonly) {\n      return false;\n    }\n    try {\n      const isWindows = process.platform === \"win32\";\n      if (isWindows) {\n        // On Windows, node-pty does not support passing a signal argument\n        t.pty.kill();\n      } else if (signal === \"SIGINT\") {\n        t.pty.write(\"\\x03\");\n        t.pty.kill(signal);\n      } else {\n        t.pty.kill(signal);\n      }\n    } catch {}\n    return true;\n  }\n\n  disposeTerminal({\n    terminalId,\n    emitTerminals = true,\n  }: {\n    terminalId: string;\n    emitTerminals?: boolean;\n  }) {\n    const t = this.#terminals.get(terminalId);\n    if (!t) {\n      return false;\n    }\n    try {\n      t.pty.kill();\n    } catch {}\n    t.disposeFns.forEach((fn) => {\n      try {\n        fn();\n      } catch {}\n    });\n    t.onDataListeners.clear();\n    t.onExitListeners.clear();\n    t.disposeFns = [];\n    this.#terminals.delete(terminalId);\n    if (emitTerminals) {\n      this.emitTerminals();\n    }\n    return true;\n  }\n\n  async restartTerminal({ terminalId }: { terminalId: string }) {\n    // Handle dev-command terminal\n    if (terminalId === \"dev-command\") {\n      const devServer = this.#fusionContext?.devServerOrchestrator;\n      if (devServer) {\n        try {\n          await devServer.restart();\n          return true;\n        } catch (err) {\n          this.#sys.Sentry?.captureException(err);\n          return false;\n        }\n      }\n      return false;\n    }\n\n    // Handle setup-command terminal\n    if (terminalId === \"setup-command\") {\n      const devServer = this.#fusionContext?.devServerOrchestrator;\n      if (devServer) {\n        try {\n          await devServer.runSetupCommand();\n          return true;\n        } catch (err) {\n          this.#sys.Sentry?.captureException(err);\n          return false;\n        }\n      }\n      return false;\n    }\n\n    // Handle bash-tools terminal (read-only, cannot restart)\n    if (terminalId === \"bash-tools\") {\n      return false;\n    }\n\n    // Handle normal terminals\n    const t = this.#terminals.get(terminalId);\n    if (!t) {\n      return false;\n    }\n\n    // Preserve existing state\n    const savedListeners = {\n      onDataListeners: new Set(t.onDataListeners),\n      onExitListeners: new Set(t.onExitListeners),\n    };\n    const savedOptions = {\n      terminalId: terminalId,\n      title: t.title,\n      cwd: t.cwd,\n      env: t.env,\n      shell: t.shell,\n      cols: t.pty.cols,\n      rows: t.pty.rows,\n      createdBy: t.createdBy,\n      emitTerminals: false,\n    };\n\n    // Dispose the old terminal (this removes it from the map)\n    this.disposeTerminal({ terminalId, emitTerminals: false });\n\n    // Create new terminal with the same ID using createTerminal\n    await this.createTerminal(savedOptions);\n\n    // Restore the listeners to the new terminal\n    const newTerminal = this.#terminals.get(terminalId);\n    if (newTerminal) {\n      // Replace the new empty listener sets with the saved ones\n      savedListeners.onDataListeners.forEach((listener) => {\n        newTerminal.onDataListeners.add(listener);\n      });\n      savedListeners.onExitListeners.forEach((listener) => {\n        newTerminal.onExitListeners.add(listener);\n      });\n      this.emitTerminals();\n      return true;\n    }\n\n    return false;\n  }\n\n  subscribeTerminal({\n    terminalId,\n    onData,\n    onExit,\n  }: {\n    terminalId: string;\n    onData: (chunk: string) => void;\n    onExit?: (code?: number) => void;\n  }) {\n    if (terminalId === \"dev-command\") {\n      const devServer = this.#fusionContext?.devServerOrchestrator;\n      if (devServer) {\n        const currentContent = devServer.getDevWrite();\n        if (currentContent) {\n          onData(currentContent);\n        }\n      }\n      this.#emitter.on(\"step\", (step) => {\n        if (step.type === \"stdio\" && step.source === \"run-command\") {\n          onData(step.content);\n        }\n      });\n      return true;\n    }\n    if (terminalId === \"setup-command\") {\n      const devServer = this.#fusionContext?.devServerOrchestrator;\n      if (devServer) {\n        const currentContent = devServer.getSetupOutput();\n        if (currentContent) {\n          onData(currentContent);\n        }\n      }\n      this.#emitter.on(\"step\", (step) => {\n        if (step.type === \"stdio\" && step.source === \"setup-command\") {\n          onData(step.content);\n        }\n      });\n      return true;\n    }\n    if (terminalId === \"bash-tools\") {\n      this.#emitter.on(\"step\", (step) => {\n        if (step.type === \"stdio\" && step.source === \"tool-command\") {\n          onData(step.content);\n        }\n      });\n      return true;\n    }\n\n    const t = this.#terminals.get(terminalId);\n    if (!t) {\n      throw new Error(\"Terminal not found\");\n    }\n    t.onDataListeners.add(onData);\n    if (onExit) {\n      t.onExitListeners.add(onExit);\n    }\n    t.pty.write(\"clear\\n\");\n    return true;\n  }\n\n  async getAllFiles(\n    options: {\n      getDotFiles?: boolean;\n      globbyPattern?: string;\n      includePattern?: string;\n      gitignore?: boolean;\n    } = {},\n  ): Promise<string[]> {\n    const {\n      getDotFiles = false,\n      globbyPattern = \"**/*\",\n      includePattern,\n      gitignore,\n    } = options;\n\n    /**\n     * If we are explicitly allowing the LLM to have list access to specific\n     * resources, make sure those resources show up in the file tree.\n     */\n    const policy = this.#fusionConfig?.accessControl;\n    const allowPatterns =\n      policy?.entries\n        ?.filter((e) => e.action === \"allow\" && e.permissions.includes(\"list\"))\n        .map((e) => e.resource) ?? [];\n\n    if (!this.#workspace?.folders?.length) {\n      return getAllProjectFiles({\n        basePath: this.#workingDirectory,\n        globPattern: [includePattern ?? globbyPattern, ...allowPatterns],\n        extraIgnorePatterns: extractListPatterns(policy).deny,\n        dot: getDotFiles,\n        gitignore,\n        sys: this.#sys,\n        /**\n         * Avoid sending large quantities of files in big monorepos otherwise this will\n         * cause server performance issues which results in HTTPStreamBroke errors.\n         */\n        deep: 3,\n      });\n    }\n\n    const allFiles: string[] = [];\n\n    const files = await this.#sys.readdir(this.#workingDirectory);\n    for (const file of files) {\n      if (isAGENTSFile(file)) {\n        allFiles.push(file);\n      }\n    }\n    if (!allFiles.includes(\"AGENTS.md\") && this.#workspace.agentsMD) {\n      allFiles.push(\"AGENTS.md\");\n    }\n    // Process each workspace folder\n    for (const folder of this.#workspace.folders) {\n      // Resolve the folder path - it could be relative to working directory\n      const folderPath = this.#sys.resolve(this.#workingDirectory, folder.path);\n\n      // Get all files from this folder\n      const folderFiles = await getAllProjectFiles({\n        basePath: folderPath,\n        globPattern: [globbyPattern, ...allowPatterns],\n        dot: getDotFiles,\n        gitignore,\n        sys: this.#sys,\n        /**\n         * Avoid sending large quantities of files in big monorepos otherwise this will\n         * cause server performance issues which results in HTTPStreamBroke errors.\n         */\n        deep: 3,\n      });\n\n      // Add a prefix to indicate which workspace folder each file belongs to\n      // We'll use the folder name if provided, otherwise the folder path\n      const folderPrefix = this.#canCollapseWorkspace()\n        ? \".\"\n        : folder.name || this.#sys.basename(folderPath);\n\n      // Add the files to our collection with workspace prefix\n      for (const file of folderFiles) {\n        // Store the file with a prefix that indicates which workspace it belongs to\n        // Format: workspaceName/path/to/file.js\n        if (folderPrefix !== \".\") {\n          allFiles.push(this.#sys.join(folderPrefix, file));\n        } else {\n          allFiles.push(file);\n        }\n      }\n    }\n    return filterFilesByListPatterns({\n      files: allFiles,\n      policy,\n      filterPattern: includePattern,\n      getDotFiles,\n    });\n  }\n\n  async collectRepoMetrics(\n    opts: { rootPath?: string } = {},\n  ): Promise<RepoMetrics> {\n    const { collectRepoMetrics } = await import(\"./repo-metrics\");\n    let rootPath = this.#gitWorkingDirectory;\n    if (opts.rootPath) {\n      rootPath = this.#sys.join(this.#gitWorkingDirectory, opts.rootPath);\n    }\n    return collectRepoMetrics(this.#sys, rootPath);\n  }\n\n  getSessionId() {\n    const sessionContext = this.getSessionContext();\n    return sessionContext.sessionId;\n  }\n\n  getSpaceId() {\n    return this.#credentials.builderPublicKey;\n  }\n\n  async revertToCommitHash(commitHash: string) {\n    this.#hasPlanToApply = false;\n    await this.abortMerge(false);\n    await this.git([\"revert\", \"--no-commit\", `${commitHash}..HEAD`]);\n    await this.git([\n      \"commit\",\n      \"--allow-empty\",\n      \"--quiet\",\n      \"--no-verify\",\n      \"-m\",\n      \"Revert changes\",\n    ]);\n    const status = await this.emitGitStatus();\n    const currentCommitHash = status?.currentCommit;\n    if (!currentCommitHash) {\n      this.#sys.Sentry?.captureException(\n        new Error(`Failed to get current commit hash after revert`),\n        {\n          tags: {\n            operation: \"codegen-git\",\n            endpoint: \"revertToCommitHash\",\n          },\n        },\n      );\n      return;\n    }\n\n    this.requestRefresh();\n    await this.#completionFinalize({\n      lastCommit: currentCommitHash,\n    });\n  }\n\n  async resetToCommitHash(commitHash: string) {\n    this.#hasPlanToApply = false;\n    await this.abortMerge(false);\n    await this.git([\"reset\", \"--quiet\", \"--hard\", commitHash]);\n    const status = await this.emitGitStatus();\n    const currentCommitHash = status?.currentCommit;\n    if (currentCommitHash !== commitHash) {\n      throw new Error(`Failed to reset commit hash`);\n    }\n    this.requestRefresh();\n  }\n  /**\n   * Core function to restore the codebase to a state that matches a predicate.\n   * This is the main function that handles both git-based and file-based restoration.\n   *\n   * @param predicate Function that takes a turn and its index and returns true if we should restore up to that turn\n   * @param dryRun If true, only simulate the restoration without making changes\n   * @returns Array of file paths that were changed\n   */\n  async restore({\n    location,\n    predicate,\n    revert = false,\n    dryRun = false,\n    forceReplay = false,\n    debug,\n  }: {\n    location: \"before\" | \"after\";\n    predicate: (turn: CodegenTurn | null, index: number) => boolean;\n    dryRun?: boolean;\n    revert?: boolean;\n    forceReplay?: boolean;\n    debug?: string;\n  }): Promise<{\n    undone: string[] | null;\n    message: string;\n  }> {\n    const sessionContext = this.getSessionContext();\n    const currentTurnsCount = sessionContext.turns.length;\n\n    // Find the target turn index by evaluating the predicate\n    let targetIndex: number | null = null;\n    for (let i = currentTurnsCount - 1; i >= -1; i--) {\n      if (predicate(i >= 0 ? sessionContext.turns[i] : null, i)) {\n        targetIndex = i;\n        break;\n      }\n    }\n\n    // If no match found or nothing to restore\n    if (targetIndex === null) {\n      return {\n        undone: null,\n        message:\n          \"Could not find the target to restore to, the completion id could be wrong\",\n      };\n    }\n\n    if (!revert) {\n      await this.abort(true);\n    }\n\n    // Fall back to file-based approach for dry run or if git fails\n    const replacements = new Map<string, string | Uint8Array | null>();\n    const gitModeEnabled = !!this.#fusionContext?.git;\n    const turnStates = sessionContext.turns;\n    const realTargetIndex = Math.max(\n      0,\n      location === \"before\" ? targetIndex : targetIndex + 1,\n    );\n\n    for (let i = turnStates.length - 1; i >= realTargetIndex; i--) {\n      const turn = turnStates[i];\n      for (const file of turn.applyResults) {\n        replacements.set(file.filePath, file.oldContent ?? \"\");\n      }\n    }\n\n    if (!dryRun) {\n      let commitHash: string | undefined;\n\n      if (gitModeEnabled) {\n        if (targetIndex === -1) {\n          if (sessionContext.beforeCommit) {\n            commitHash = sessionContext.beforeCommit;\n          } else if (turnStates.length > 0) {\n            commitHash = turnStates[0].beforeCommit;\n          }\n        } else if (targetIndex < turnStates.length) {\n          if (location === \"after\") {\n            commitHash = turnStates[targetIndex].afterCommit;\n            // If the afterCommit is not set, try to use the next turn's beforeCommit\n            if (!commitHash && targetIndex + 1 < turnStates.length) {\n              commitHash = turnStates[targetIndex + 1].beforeCommit;\n            }\n          } else {\n            commitHash = turnStates[targetIndex].beforeCommit;\n          }\n        }\n\n        const restoreContext = {\n          commitHash,\n          sessionId: sessionContext.sessionId,\n          sessionBeforeCommit: sessionContext.beforeCommit,\n          turnsLength: turnStates.length,\n          targetIndex,\n          currentTurn: turnStates[turnStates.length - 1],\n          targetTurn: turnStates[targetIndex],\n          targetTurnNext: turnStates[targetIndex + 1],\n          location,\n          forceReplay,\n          dryRun,\n          debug,\n        };\n\n        if (!commitHash) {\n          this.#sys.Sentry?.captureException(\n            new Error(`No commit hash found for restore`),\n            {\n              tags: {\n                operation: \"codegen-git\",\n                endpoint: \"revertToCommitHash\",\n              },\n              contexts: {\n                restore: restoreContext,\n              },\n            },\n          );\n          return {\n            undone: null,\n            message:\n              \"Could not find the target to restore to, the git history is missing\",\n          };\n        }\n\n        try {\n          if (revert) {\n            await this.revertToCommitHash(commitHash);\n          } else {\n            await this.resetToCommitHash(commitHash);\n          }\n        } catch (e) {\n          this.#sys.Sentry?.captureException(\n            new Error(`Error resetting git`, {\n              cause: e,\n            }),\n            {\n              tags: {\n                operation: \"codegen-git\",\n                endpoint: \"resetToCommitHash\",\n              },\n              contexts: {\n                restore: restoreContext,\n              },\n            },\n          );\n          return {\n            undone: null,\n            message: \"Failed to reset/restore, the file history is missing\",\n          };\n        }\n      } else {\n        // Apply changes\n        for (const [path, content] of replacements.entries()) {\n          try {\n            if (content) {\n              await this.writeFile(path, content);\n            } else {\n              await this.deleteFile(path);\n            }\n          } catch (e) {\n            // silent access control errors\n          }\n        }\n      }\n\n      if (revert) {\n        return {\n          undone: [],\n          message: \"The revert operation was successful\",\n        };\n      }\n\n      // Remove all turns after the target index\n      const removedTurns = turnStates.splice(\n        realTargetIndex,\n        turnStates.length - realTargetIndex,\n      );\n\n      const lastTurn = getLastOne(turnStates);\n      if (lastTurn && lastTurn?.afterCommit !== commitHash) {\n        this.#sys.Sentry?.captureException(\n          new Error(`Reset After commit hash mismatch`),\n          {\n            tags: {\n              operation: \"codegen-git\",\n              endpoint: \"resetToCommitHash\",\n            },\n            extra: {\n              lastTurn,\n              commitHash,\n            },\n          },\n        );\n        lastTurn.lastCommit = commitHash;\n        await this.#completionFinalize({\n          completionId: lastTurn.completionId,\n          lastCommit: commitHash,\n        });\n      }\n\n      const targetCompletionId = lastTurn?.completionId;\n\n      // Update the session context\n      if (removedTurns.length > 0) {\n        await setLastCompletionOfSession(\n          this.#sys,\n          this.#credentials,\n          {\n            lastCompletionId: targetCompletionId,\n            sessionId: sessionContext.sessionId,\n          },\n          !!this.#debug,\n        );\n        sessionContext.updatedUnixTime = Date.now();\n      }\n\n      if (forceReplay) {\n        const currentState = sessionContext.state;\n        this.#emitter.emit(\"step\", {\n          type: \"batch\",\n          steps: [\n            {\n              type: \"state\",\n              newState: \"replay\",\n              abortable: false,\n              previousState: currentState,\n            },\n            ...this.#replayTurns(),\n            {\n              type: \"restore\",\n              files: Array.from(replacements.keys()),\n              lastCompletionId: targetCompletionId,\n              location,\n            },\n            {\n              type: \"state\",\n              newState: currentState,\n              abortable: false,\n              previousState: \"replay\",\n            },\n          ],\n        });\n      } else if (removedTurns.length > 0) {\n        this.#emitter.emit(\"step\", {\n          type: \"restore\",\n          files: Array.from(replacements.keys()),\n          lastCompletionId: targetCompletionId,\n          location,\n        });\n      }\n    }\n\n    await this.#ensureDevServerRunning();\n    return {\n      undone: Array.from(replacements.keys()),\n      message: \"The restore operation was successful\",\n    };\n  }\n\n  async #ensureDevServerRunning(abortSignal?: AbortSignal) {\n    const didRestart =\n      await this.#fusionContext?.devServerOrchestrator?.ensureDevCommand(\n        abortSignal,\n      );\n    return didRestart;\n  }\n\n  async restoreFromCompletionId({\n    location,\n    completionId,\n    forceReplay,\n  }: {\n    location: \"before\" | \"after\";\n    completionId: string;\n    forceReplay?: boolean;\n  }): Promise<{\n    undone: string[] | null;\n    message: string;\n  }> {\n    const sessionContext = this.getSessionContext();\n    const turn = sessionContext.turns.find(\n      (turn) => turn.completionId === completionId,\n    );\n\n    if (!turn) {\n      await this.#loadMoreTurnsPromise;\n      sessionContext.turns = [];\n      sessionContext.canLoadMore = true;\n      await setLastCompletionOfSession(\n        this.#sys,\n        this.#credentials,\n        {\n          sessionId: sessionContext.sessionId,\n          lastCompletionId: completionId,\n        },\n        !!this.#debug,\n      );\n      await this.loadMoreTurns();\n      return this.restore({\n        location,\n        predicate: () => true,\n        forceReplay: true,\n        debug: \"restore after history\",\n      });\n    }\n    return this.restore({\n      location,\n      predicate: (turn) => turn?.completionId === completionId,\n      forceReplay,\n      debug: `restore to: ${completionId}`,\n    });\n  }\n\n  async restoreBeforeCompletionId(completionId: string): Promise<{\n    undone: string[] | null;\n    message: string;\n  }> {\n    return this.restoreFromCompletionId({\n      location: \"before\",\n      completionId,\n      forceReplay: false,\n    });\n  }\n\n  /**\n   * Undo all changes back to the last user message\n   */\n  async undoLastUserMessage(dryRun: boolean = false): Promise<{\n    undone: string[] | null;\n    message: string;\n  }> {\n    return this.restore({\n      location: \"before\",\n      predicate: (turn) => {\n        if (turn?.user.role === \"user\") {\n          return true;\n        }\n        return false;\n      },\n      dryRun,\n    });\n  }\n\n  getLastUserCompletionId() {\n    const sessionContext = this.getSessionContext();\n    return getLastUserTurn(sessionContext)?.completionId;\n  }\n\n  getLastCompletionId() {\n    const sessionContext = this.getSessionContext();\n    return getLastGoodTurn(sessionContext)?.completionId;\n  }\n\n  getCurrentState(): GenerateCompletionState {\n    const sessionContext = this.getSessionContext();\n    return sessionContext.state;\n  }\n\n  getLastApplyResultsTurn() {\n    const sessionContext = this.getSessionContext();\n    return getLastApplyResultsTurn(sessionContext);\n  }\n\n  getLastTurn() {\n    const sessionContext = this.getSessionContext();\n    return getLastGoodTurn(sessionContext);\n  }\n\n  getNextUrl() {\n    const lastTurn = this.getLastTurn();\n    return lastTurn?.nextUrl;\n  }\n\n  getScheduledMessage() {\n    const scheduledMessage = this.#scheduledMessage;\n    if (!scheduledMessage) {\n      return undefined;\n    }\n    this.#scheduledMessage = undefined;\n    this.#currentMessage = scheduledMessage;\n    return scheduledMessage;\n  }\n\n  getNextMessage() {\n    const promise = new Promise<void>((resolve) => {\n      if (this.#scheduledMessage) {\n        resolve();\n      } else {\n        this.#setNextMessage = resolve;\n      }\n    }).then(() => {\n      let message = this.#scheduledMessage;\n      if (!message) {\n        return;\n      }\n      if (!message.dropAbortedPrompt && this.#currentMessage) {\n        message = mergeUserMessages(this.#currentMessage, message);\n      }\n      this.#scheduledMessage = undefined;\n      this.#currentMessage = message;\n      return message;\n    });\n\n    return {\n      shouldWait: !this.#scheduledMessage,\n      promise,\n    };\n  }\n\n  async sendFeedback(feedback: Partial<CodegenFeedback>) {\n    if (process.env.NODE_ENV === \"test\") {\n      return;\n    }\n    track(\"quality code feedback given\", {\n      spaceId: this.#credentials.builderPublicKey,\n      sentiment: feedback.feedbackSentiment,\n      mode: \"cli\",\n    });\n    const lastCompletionId = feedback.id ?? this.getLastCompletionId();\n    if (lastCompletionId) {\n      await this.#completionFeedback({\n        ...feedback,\n        id: lastCompletionId,\n      });\n    }\n  }\n\n  #completionFinalize(\n    feedback: Omit<\n      CodegenFinalize,\n      \"sessionId\" | \"userCompletionId\" | \"projectId\" | \"branchName\"\n    >,\n  ) {\n    let completionId = feedback.completionId;\n    if (!completionId) {\n      const lastTurn = this.getLastTurn();\n      if (lastTurn && feedback.lastCommit) {\n        lastTurn.lastCommit = feedback.lastCommit;\n      }\n      completionId = lastTurn?.completionId;\n    }\n\n    const promise = codegenEndpoint(\n      this.#sys,\n      this.#credentials,\n      \"/codegen/finalize\",\n      {\n        completionId,\n        projectId: this.#fusionConfig?.projectId,\n        branchName: this.#fusionConfig?.branchName,\n        userCompletionId: this.getLastUserCompletionId(),\n        sessionId: this.getSessionId(),\n        ...feedback,\n      } satisfies CodegenFinalize,\n    );\n    this.#pendingPromises.push(promise);\n    promise.finally(() => {\n      const index = this.#pendingPromises.indexOf(promise);\n      if (index !== -1) {\n        this.#pendingPromises.splice(index, 1);\n      }\n    });\n    return promise;\n  }\n\n  #completionFeedback(feedback: CodegenFeedback) {\n    const promise = codegenEndpoint(\n      this.#sys,\n      this.#credentials,\n      \"/codegen/feedback\",\n      feedback,\n    );\n    this.#pendingPromises.push(promise);\n    promise.finally(() => {\n      const index = this.#pendingPromises.indexOf(promise);\n      if (index !== -1) {\n        this.#pendingPromises.splice(index, 1);\n      }\n    });\n    return promise;\n  }\n\n  async lastTurnHasChanges() {\n    const revertFiles = await this.undoLastUserMessage(true);\n    if (!revertFiles.undone) {\n      return false;\n    }\n    return revertFiles.undone.length > 0;\n  }\n\n  #setState(newState: GenerateCompletionState) {\n    const sessionContext = this.getSessionContext();\n    const prevState = sessionContext.state;\n    if (prevState !== newState) {\n      sessionContext.state = newState;\n      this.#emitter.emit(\"step\", {\n        type: \"state\",\n        abortable: newState === \"generating\",\n        previousState: prevState,\n        newState: newState,\n      });\n    }\n  }\n\n  waitUntilState(state: GenerateCompletionState, timeout: number = 10000) {\n    return new Promise<void>((resolve) => {\n      const sessionContext = this.getSessionContext();\n      if (sessionContext.state === state) {\n        resolve();\n        return;\n      }\n      let timeoutId: any;\n      const onEvent = (step: GenerateCompletionStep) => {\n        if (step.type === \"state\" && step.newState === state) {\n          clearTimeout(timeoutId);\n          this.#emitter.removeListener(\"step\", onEvent);\n          resolve();\n        }\n      };\n      timeoutId = setTimeout(() => {\n        this.#emitter.removeListener(\"step\", onEvent);\n        resolve();\n      }, timeout);\n\n      this.#emitter.on(\"step\", onEvent);\n    });\n  }\n\n  async clearSession() {\n    const sessionContext = this.getSessionContext();\n    sessionContext.turns = [];\n    sessionContext.customInstructions = await this.#getCustomInstructions();\n    this.#dirtyEnvironmentVariables = true;\n    this.#hasPlanToApply = false;\n  }\n\n  async sendMessage(message: GenerateUserMessage) {\n    if (!message.dropAbortedPrompt && this.#scheduledMessage) {\n      message = mergeUserMessages(this.#scheduledMessage, message);\n    }\n    this.#scheduledMessage = message;\n\n    // Reset plan flag on new messages\n    this.#hasPlanToApply = false;\n    this.cancelAllPendingToolFulfilments();\n\n    if (!message.queue) {\n      await this.abort();\n    }\n    if (this.#setNextMessage) {\n      this.#setNextMessage();\n    }\n  }\n\n  getTurns() {\n    const sessionContext = this.getSessionContext();\n    return structuredClone(sessionContext.turns);\n  }\n\n  getSessionContext() {\n    if (!this.#sessionContext) {\n      throw new Error(\"Session context not initialized\");\n    }\n    return this.#sessionContext;\n  }\n\n  async runSetupCommand() {\n    const output =\n      await this.#fusionContext?.devServerOrchestrator?.runSetupCommand();\n    return output;\n  }\n\n  abortSetupCommand() {\n    this.#fusionContext?.devServerOrchestrator?.abortSetupCommand();\n  }\n\n  toolsRunning() {\n    return this.#runningToolCalls.length > 0;\n  }\n\n  abortAllTools() {\n    for (const toolCall of this.#runningToolCalls) {\n      toolCall.abortController.abort();\n    }\n  }\n\n  /**\n   * Fulfil a pending tool call (usually AskUser or any passThrough tool)\n   * Exposed via websocket as `toolFullfilment` for the Builder UI to send back\n   * the user's response.\n   */\n  toolFullfilment(id: string, result: ToolResolution | string) {\n    if (typeof result === \"string\") {\n      result = { toolResult: result, isError: false } as ToolResolution;\n    }\n    return this.fulfillToolCall(id, result);\n  }\n\n  cancelAllPendingToolFulfilments() {\n    for (const id of Array.from(this.#waitingToolFulfilment.keys())) {\n      this.fulfillToolCall(id, {\n        toolResult: \"Aborted by the user. So the task could not be completed.\",\n        isError: true,\n        title: \"Aborted by the user.\",\n      });\n    }\n    this.#waitingToolFulfilment.clear();\n  }\n\n  fulfillToolCall(id: string, result: ToolResolution) {\n    const resolver = this.#waitingToolFulfilment.get(id);\n    if (resolver) {\n      resolver(result);\n      this.#waitingToolFulfilment.delete(id);\n      return true;\n    }\n    return false;\n  }\n\n  abortToolCall(id: string) {\n    const toolCall = this.#runningToolCalls.find((t) => t.id === id);\n    if (toolCall) {\n      toolCall.abortController.abort();\n      return true;\n    } else if (this.#runningToolCalls.length === 0) {\n      const controller = new AbortController();\n      controller.abort();\n      this.#runningToolCalls.push({\n        id,\n        abortController: controller,\n        input: { id },\n        name: \"bash\",\n      });\n      return true;\n    }\n    return false;\n  }\n\n  async acceptCode() {\n    // send feed back with num lines added\n    if (this.#hasChanges()) {\n      const numAddedLines = this.getLinesStats();\n\n      await this.sendFeedback({\n        position: this.#position,\n        acceptedLines: numAddedLines.net,\n        linesOfCodeAdded: numAddedLines.added,\n        linesOfCodeRemoved: numAddedLines.removed,\n      });\n    }\n  }\n\n  async abort(cleanCurrentMessage: boolean = false) {\n    if (cleanCurrentMessage) {\n      this.#currentMessage = undefined;\n      this.#scheduledMessage = undefined;\n    }\n    // For now we don't restore credits when aborting\n    this.#userTurnCreditsUsed = 0;\n    if (this.#abortController) {\n      this.#abortController.abort();\n      this.#abortController = undefined;\n\n      return true;\n    }\n    return false;\n  }\n\n  async stopEventLoop() {\n    await this.abort(true);\n    this.#eventLoopAbortController?.abort();\n    this.#eventLoopAbortController = undefined;\n    if (this.#setNextMessage) {\n      this.#setNextMessage();\n    }\n  }\n\n  requestRefresh() {\n    this.#emitter.emit(\"step\", {\n      type: \"builder-action\",\n      action: \"refresh\",\n      metadata: {},\n    });\n  }\n\n  async configureDevOrchestrator(opts: ConfigureDevOrchestratorOpts) {\n    const devServer = this.#fusionContext?.devServerOrchestrator;\n    const updates: ConfigureDevOrchestratorUpdates = {\n      devCommand: false,\n      hosts: false,\n      setupCommand: false,\n      proxyServer: false,\n      env: false,\n      setupResult: undefined,\n      devResult: undefined,\n    };\n    if (devServer) {\n      const promises: Promise<any>[] = [];\n      if (opts.env) {\n        this.#dirtyEnvironmentVariables = true;\n        if (opts.replaceEnvs) {\n          devServer.clearEnvVariables();\n        }\n        Object.entries(opts.env).forEach(([key, value]) => {\n          const changed = devServer.setEnvVariable(key, value ?? undefined);\n          if (changed) {\n            updates.env = true;\n          }\n        });\n      }\n      if (opts.proxyServer) {\n        promises.push(\n          devServer?.setProxyServer(opts.proxyServer).then((a) => {\n            updates.proxyServer = a.updatedProxyServer;\n            updates.hosts = a.updatedHosts;\n          }),\n        );\n      } else if (opts.proxyPort) {\n        promises.push(\n          devServer\n            ?.setPort(opts.proxyPort)\n            .then((a) => (updates.proxyServer = a)),\n        );\n      }\n      if (\n        opts.setupCommand !== undefined ||\n        opts.setupDependencies !== undefined\n      ) {\n        promises.push(\n          devServer\n            .setSetupCommand({\n              setupDependencies: opts.setupDependencies,\n              setupCommand: opts.setupCommand,\n              forceRestart: opts.forceSetupCommand,\n            })\n            .then((a) => {\n              updates.setupCommand = !!a;\n              updates.setupResult = a ?? undefined;\n            }),\n        );\n      } else if (\n        opts.forceSetupCommand ||\n        (updates.env && devServer.setupState !== \"installed\")\n      ) {\n        promises.push(\n          devServer?.runSetupCommand().then((a) => {\n            updates.setupCommand = !!a;\n            updates.setupResult = a ?? undefined;\n          }),\n        );\n      }\n      if (opts.devCommand !== undefined) {\n        promises.push(\n          devServer\n            .setDevCommand(opts.devCommand ?? undefined, opts.forceDevCommand)\n            .then((a) => {\n              updates.devCommand = a.status === \"success\";\n              updates.devResult = a ?? undefined;\n            }),\n        );\n      } else if (opts.forceDevCommand || updates.env) {\n        promises.push(\n          devServer?.restart().then((a) => {\n            updates.devCommand = true;\n            updates.devResult = a ?? undefined;\n          }),\n        );\n      }\n      if (opts.autoDetectDevServer !== undefined) {\n        promises.push(\n          devServer\n            .setAutoDetectSettings(\n              opts.autoDetectDevServer,\n              opts.autoDetectDevServerPatterns,\n            )\n            .then((a) => (updates.proxyServer = updates.proxyServer || a)),\n        );\n      }\n\n      await Promise.allSettled(promises);\n    }\n    return updates;\n  }\n\n  #disposeAllTerminals() {\n    for (const id of Array.from(this.#terminals.keys())) {\n      try {\n        this.disposeTerminal({ terminalId: id });\n      } catch {}\n    }\n    this.#terminals.clear();\n  }\n\n  async close(uploadGitBackup: boolean = false) {\n    if (this.#closed) {\n      return;\n    }\n    this.#closed = true;\n\n    this.#disposeFunctions.forEach((dispose) => dispose());\n    this.#disposeAllTerminals();\n\n    // Cleanup local MCP servers\n    if (this.#localMCPManager) {\n      try {\n        if (this.#debug) {\n          console.log(\"\uD83D\uDD0C Cleaning up local MCP servers...\");\n        }\n        await this.#localMCPManager.cleanup();\n      } catch (error) {\n        this.#sys.Sentry?.captureException(error, {\n          level: \"warning\",\n          tags: {\n            operation: \"local-mcp-cleanup\",\n          },\n        });\n      }\n    }\n\n    await this.stopEventLoop();\n    await this.waitUntilState(\"close\", 5000);\n    this.#emitter.removeAllListeners();\n    await Promise.allSettled(this.#pendingPromises);\n    const needsBackup = await this.needsBackup();\n    if (this.#debug) {\n      console.log(\n        `\uD83D\uDD0D Closing code gen server: ${JSON.stringify({\n          uploadGitBackup,\n          needsBackup,\n        })}`,\n      );\n    }\n    if (uploadGitBackup && needsBackup) {\n      await this.uploadBackup();\n    }\n  }\n\n  async emitGitStatus() {\n    const gitStatus = await this.#getGitStatus();\n    if (gitStatus) {\n      this.#lastGitStatus = gitStatus;\n      this.#emitter.emit(\"step\", gitStatus);\n      if (gitStatus.hasMergeConflict) {\n        this.#emitWaitForInput();\n      } else {\n        if (this.#lastGitStatus.hasMergeConflict) {\n          this.#emitWaitForInput();\n        }\n      }\n    }\n    return gitStatus;\n  }\n\n  async manualCommit(options: { add: string; commitMessage: string }) {\n    const sessionContext = this.getSessionContext();\n\n    // Set beforeCommit if this is the first commit in the session\n    if (!sessionContext.beforeCommit) {\n      const currentCommit = await this.getCurrentCommitHash();\n      if (currentCommit) {\n        sessionContext.beforeCommit = currentCommit;\n      }\n    }\n\n    await this.git([\"add\", options.add]);\n    await this.git([\n      \"commit\",\n      \"--quiet\",\n      \"--no-verify\",\n      \"-m\",\n      options.commitMessage,\n    ]);\n\n    const commitHash = await this.getCurrentCommitHash();\n    await this.#completionFinalize({\n      lastCommit: commitHash,\n    });\n    await this.emitGitStatus();\n  }\n\n  async #emitWaitForInput() {\n    const sessionContext = this.getSessionContext();\n    if (\n      sessionContext.state === \"generating\" ||\n      sessionContext.state === \"close\"\n    ) {\n      this.#lastSuggestedAction = undefined;\n      return false;\n    }\n    const suggestion = await this.#computeHealthSuggestion(sessionContext);\n    this.#lastSuggestedAction = suggestion;\n    this.#emitter.emit(\"step\", {\n      type: \"wait-for-input\",\n      state: sessionContext.state,\n      suggestion,\n      sessionMode: sessionContext.sessionMode,\n      hasPlanToApply: this.#hasPlanToApply,\n    });\n    return true;\n  }\n\n  async #getGitStatus(): Promise<GenerateCompletionStepGit | null> {\n    if (!this.#fusionContext?.git) {\n      return null;\n    }\n\n    this.#isCheckingGitStatus++;\n    const isSessionDirty = this.#hasChanges();\n    const commitMode = this.getCommitMode();\n    const remoteBranch = this.#getRemoteBranch();\n\n    // First try to fetch the remote branch\n    let remoteBranchExists = false;\n    let fetchOutput = \"\";\n    let fetchHeadFilePath: string | null = null;\n\n    try {\n      const dotGitDirPath = await this.git([\"rev-parse\", \"--absolute-git-dir\"]);\n      fetchHeadFilePath = this.#sys.join(dotGitDirPath, \"FETCH_HEAD\");\n      if (fs.existsSync(fetchHeadFilePath)) {\n        fs.unlinkSync(fetchHeadFilePath);\n      }\n    } catch (e) {\n      this.#sys.Sentry?.captureException(e, {\n        tags: {\n          operation: \"codegen-git\",\n          endpoint: \"getGitStatus\",\n        },\n        extra: {\n          fetchHeadFilePath,\n          isCheckingGitStatus: this.#isCheckingGitStatus,\n        },\n      });\n      fetchHeadFilePath = null;\n    }\n\n    try {\n      fetchOutput = await this.git([\n        \"fetch\",\n        \"--no-tags\",\n        \"origin\",\n        remoteBranch,\n      ]);\n      remoteBranchExists = true;\n    } catch (e) {\n      remoteBranchExists = false;\n    }\n\n    const git = await this.#sys.getRepoInfo(this.#gitWorkingDirectory);\n    const initialCommit = this.getSessionContext().beforeCommit;\n    let ahead = isSessionDirty ? 1 : 0;\n    let behind = 0;\n    if (remoteBranchExists) {\n      try {\n        const gitStatus = parseAheadBehind(\n          await this.git([\n            \"rev-list\",\n            \"--left-right\",\n            \"--count\",\n            \"HEAD...FETCH_HEAD\",\n          ]),\n        );\n        ahead = gitStatus.ahead;\n        behind = gitStatus.behind;\n      } catch (e) {\n        let fetchHead: string | null = null;\n        if (fetchHeadFilePath) {\n          try {\n            fetchHead = await this.#sys.readFile(\n              this.#sys.join(this.#gitWorkingDirectory, \".git/FETCH_HEAD\"),\n            );\n            fetchHead = `FETCH_HEAD: ${fetchHead}`;\n          } catch (e) {\n            fetchHead = `FETCH_HEAD FAILED: ${String(e)}`;\n          }\n        } else {\n          fetchHead = `FETCH_HEAD MISSING`;\n        }\n        this.#sys.Sentry?.captureException(e, {\n          tags: {\n            operation: \"codegen-git\",\n            endpoint: \"getGitStatus\",\n          },\n          extra: {\n            fetchOutput,\n            fetchHead,\n            remoteBranch,\n            currentBranch: git.currentBranch,\n            currentCommit: git.commit,\n            isCheckingGitStatus: this.#isCheckingGitStatus,\n          },\n        });\n      }\n    } else if (!remoteBranchExists && commitMode !== \"commits\") {\n      // When remote doesn't exist, check if we have committed changes to push\n      if (initialCommit && initialCommit !== git.commit) {\n        ahead = Math.max(ahead, 1);\n      }\n    }\n    const hasMergeConflict = await this.#hasMergeConflict();\n    this.#isCheckingGitStatus--;\n    return {\n      type: \"git\",\n      remoteBranchExists,\n      hasGeneratingPlaceholder: await this.#hasGeneratingPlaceholder(),\n      isSessionDirty:\n        isSessionDirty || (!!initialCommit && initialCommit !== git.commit),\n      canSync: (ahead > 0 || behind > 0) && !hasMergeConflict,\n      canPush: (ahead > 0 || behind > 0) && !hasMergeConflict,\n      canPull: behind > 0 && remoteBranchExists,\n      ahead: ahead,\n      hasMergeConflict,\n      commitMode,\n      behind: behind,\n      currentCommit: git.commit,\n      currentBranch: git.currentBranch,\n      remoteBranch,\n    };\n  }\n\n  #replayTurns() {\n    const sessionContext = this.getSessionContext();\n    const turns = sessionContext.turns;\n    const steps: GenerateCompletionStep[] = [];\n    steps.push({\n      type: \"session\",\n      title: sessionContext.title,\n      beforeCommit: sessionContext.beforeCommit,\n      createdUnixTime: sessionContext.createdUnixTime,\n      updatedUnixTime: sessionContext.updatedUnixTime,\n      turns: sessionContext.turns.length,\n      id: sessionContext.sessionId,\n      lastCompletionId: this.getLastCompletionId(),\n      sessionMode: sessionContext.sessionMode,\n    });\n    for (const turn of turns) {\n      steps.push({\n        type: \"user\",\n        displayPrompt: turn.userMessage\n          ? (turn.userMessage.displayPrompt ?? turn.userMessage.userPrompt)\n          : undefined,\n        attachments: turn.userMessage?.attachments,\n        id: turn.completionId,\n        user: turn.user,\n        role: turn.user.role,\n        compacting: false,\n      });\n      for (const action of turn.actions) {\n        if (\n          action.type === \"tool\" ||\n          action.type === \"text\" ||\n          action.type === \"thinking\"\n        ) {\n          steps.push({\n            type: \"start\",\n            name: action.type,\n            content: \"\",\n            id: action.id ?? \"\",\n            filePath: action.filePath ?? \"\",\n            title:\n              action.actionTitle ??\n              action.artifactTitle ??\n              action.filePath ??\n              \"\",\n          });\n          steps.push({\n            type: \"delta\",\n            name: action.type,\n            delta: action.content,\n          });\n          if (action.type === \"tool\") {\n            steps.push({\n              type: action.type,\n              id: action.id!,\n              name: action.filePath!,\n              content: action.content,\n            });\n          } else if (action.type === \"thinking\") {\n            steps.push({\n              type: \"planning\",\n              content: action.content,\n            });\n          } else if (action.type === \"text\") {\n            steps.push({\n              type: \"text\",\n              content: action.content,\n            });\n          }\n        }\n      }\n    }\n\n    return steps;\n  }\n\n  connectToEventLoop(\n    shouldReplay: boolean,\n    onStep: (step: GenerateCompletionStep) => void,\n  ) {\n    if (shouldReplay) {\n      const steps: GenerateCompletionStep[] = [];\n      const sessionContext = this.getSessionContext();\n      steps.push({\n        type: \"state\",\n        newState: \"replay\",\n        abortable: false,\n        previousState: sessionContext.state,\n      });\n\n      if (this.#lastMCPStatus) {\n        steps.push(this.#lastMCPStatus);\n      }\n      if (this.#lastGitStatus) {\n        steps.push(this.#lastGitStatus);\n      }\n      steps.push(...this.#replayTurns());\n      const lastArtifact = this.#onGoingArtifacts\n        ? getLastOne(this.#onGoingArtifacts)\n        : undefined;\n      if (lastArtifact) {\n        switch (lastArtifact.type) {\n          case \"file\":\n          case \"diff\":\n          case \"text\":\n          case \"thinking\":\n          case \"suggestion\":\n          case \"tool\":\n            steps.push({\n              type: \"start\",\n              id: lastArtifact.id,\n              name: lastArtifact.type,\n              filePath: lastArtifact.filePath ?? \"\",\n              title:\n                lastArtifact.actionTitle ?? lastArtifact.artifactTitle ?? \"\",\n              content: \"\",\n            });\n            steps.push({\n              type: \"delta\",\n              name: lastArtifact.type,\n              delta: lastArtifact.content,\n            });\n            break;\n        }\n      }\n\n      steps.push({\n        type: \"terminals\",\n        terminals: this.#getTerminals(),\n      });\n\n      const devServer = this.#fusionContext?.devServerOrchestrator;\n      if (devServer) {\n        steps.push({\n          type: \"dev-server\",\n          devServerState: devServer.devState,\n          setupState: devServer.setupState,\n          httpServerState: devServer.httpServerState,\n          devCommand: devServer.devCommand,\n          setupCommand: devServer.setupCommand,\n          proxyServer: devServer.proxyTarget,\n        });\n        if (devServer.setupState !== \"installed\") {\n          steps.push({\n            type: \"stdio\",\n            id: \"setupCommand\",\n            command: devServer.setupCommand ?? \"\",\n            content: devServer.getSetupWrite(),\n            source: \"run-command\",\n            stream: \"stdout\",\n          });\n        }\n        steps.push({\n          type: \"stdio\",\n          id: \"devServer\",\n          command: devServer.devCommand,\n          content: devServer.getDevWrite(),\n          source: \"run-command\",\n          stream: \"stdout\",\n        });\n      } else {\n        // if devServer is not available, assume installed and running\n        onStep({\n          type: \"dev-server\",\n          devServerState: \"running\",\n          setupState: \"installed\",\n          httpServerState: \"ok-2xx\",\n          devCommand: this.#fusionConfig?.devCommand,\n          setupCommand: this.#fusionConfig?.setupCommand,\n          proxyServer: this.#fusionConfig?.serverUrl,\n        });\n      }\n      steps.push({\n        type: \"state\",\n        newState: sessionContext.state,\n        abortable: sessionContext.state === \"generating\",\n        previousState: \"replay\",\n      });\n\n      if (this.#startLoopPromise && sessionContext.state !== \"generating\") {\n        steps.push({\n          type: \"wait-for-input\",\n          state: sessionContext.state,\n          suggestion: this.#lastSuggestedAction,\n          sessionMode: sessionContext.sessionMode,\n          hasPlanToApply: this.#hasPlanToApply,\n        });\n      }\n      onStep({\n        type: \"batch\",\n        steps,\n      });\n    }\n    this.#emitter.on(\"step\", onStep);\n    this.waitForEventLoop();\n    return () => {\n      this.#emitter.off(\"step\", onStep);\n    };\n  }\n\n  waitUntilIdle(): Promise<void> {\n    this.waitForEventLoop();\n    return once(this.#emitter, \"idle\")\n      .then(() => {\n        return Promise.allSettled(this.#pendingPromises);\n      })\n      .then(() => {\n        return;\n      });\n  }\n\n  waitForEventLoop() {\n    if (this.#startLoopPromise) {\n      return this.#startLoopPromise;\n    }\n    return (this.#startLoopPromise = this.#startEventLoop());\n  }\n\n  async #startEventLoop() {\n    if (this.#startLoopPromise || this.#eventLoopAbortController) {\n      throw new Error(\"Event loop already started\");\n    }\n    const endLoop = keepAlive();\n    const onStep = (step: GenerateCompletionStep) => {\n      if (step.type === \"error\" && this.#userTurnCreditsUsed > 0) {\n        if (!NOT_BAD_ERRORS.includes(step.code)) {\n          step.restoreCredits = this.#userTurnCreditsUsed;\n          this.#userTurnCreditsUsed = 0;\n          restoreConsumedCredit(\n            this.#sys,\n            this.#credentials,\n            sessionContext.sessionId,\n            step.restoreCredits,\n          ).catch((err) => {\n            this.#sys.Sentry?.captureException(err);\n          });\n        }\n      }\n      this.#emitter.emit(\"step\", step);\n    };\n    this.#eventLoopAbortController = new AbortController();\n    const eventLoopSignal = this.#eventLoopAbortController.signal;\n    const devServer = this.#fusionContext?.devServerOrchestrator;\n    const sessionContext = this.getSessionContext();\n    const getCompletionId = () => this.getLastCompletionId();\n    this.#sys.Sentry?.setContext(\"codeGen\", {\n      sessionId: sessionContext.sessionId,\n      get completionId() {\n        return getCompletionId();\n      },\n    });\n    await this.emitGitStatus();\n\n    if (devServer?.setupState === \"not-installed\") {\n      this.runSetupCommand();\n    }\n\n    try {\n      while (!eventLoopSignal.aborted) {\n        this.#abortController = undefined;\n\n        const nextMessage = this.getNextMessage();\n        if (nextMessage.shouldWait) {\n          const emitted = await this.#emitWaitForInput();\n          if (emitted) {\n            this.#emitter.emit(\"idle\");\n          }\n        }\n\n        const answer = await nextMessage.promise;\n        if (eventLoopSignal.aborted) {\n          break;\n        }\n        if (!answer) {\n          continue;\n        }\n        try {\n          this.#lastSuggestedAction = undefined;\n          if (answer.logsCheckpoint) {\n            devServer?.addCheckpoint();\n          }\n          this.#abortController = new AbortController();\n          const signal = abortSignalAny([\n            eventLoopSignal,\n            this.#abortController.signal,\n          ]);\n\n          if (signal?.aborted) {\n            throw newAbortError();\n          }\n\n          this.#setState(\"generating\");\n          if (\n            answer.sessionMode &&\n            answer.sessionMode !== sessionContext.sessionMode\n          ) {\n            this.switchSessionMode(answer.sessionMode);\n          }\n          await this.#agentCompletion(answer, signal, onStep);\n          this.#setState(\"success\");\n          const autoPush = answer.autoPush ?? \"none\";\n          if (autoPush !== \"none\") {\n            await this.pushChanges({\n              actor: \"agent\",\n              pullFirst: answer.autoPush === \"merge-push\",\n              forcePush: answer.autoPush === \"force-push\",\n            });\n          }\n          this.#lastSuggestedAction = undefined;\n        } catch (e) {\n          if (e instanceof Error) {\n            if (e.name === \"AbortError\") {\n              onStep({\n                type: \"user-abort\",\n                hasContinueMessage: !!this.#scheduledMessage,\n              });\n              this.#setState(\"abort\");\n            } else if (e instanceof PrivateError) {\n              // PrivateError should not expose sensitive details to the user, but still\n              // needs to emit an error step to trigger credit restoration\n              this.#currentMessage = undefined;\n              onStep({\n                type: \"error\",\n                code: \"unknown\",\n                message: \"An internal error occurred. Please try again.\",\n              });\n              this.#sys.Sentry?.captureException(e, {\n                tags: {\n                  operation: \"codegen-stream\",\n                },\n              });\n              this.#setState(\"error\");\n            } else if (e instanceof CodeGenError) {\n              this.#currentMessage = undefined;\n              onStep({\n                type: \"error\",\n                code: e.code,\n                message: e.message,\n              });\n\n              if (!NOT_BAD_ERRORS.includes(e.code)) {\n                this.#sys.Sentry?.captureException(e, {\n                  tags: {\n                    operation: \"codegen-stream\",\n                  },\n                });\n              }\n              this.#setState(\"error\");\n            } else {\n              this.#currentMessage = undefined;\n              onStep({\n                type: \"error\",\n                code: \"cli-genetic-error\",\n                message: e.message,\n                metadata: { error: e },\n              });\n              this.#sys.Sentry?.captureException(e, {\n                tags: {\n                  operation: \"codegen-stream\",\n                },\n              });\n              this.#setState(\"error\");\n            }\n          } else {\n            this.#setState(\"error\");\n          }\n        }\n        this.#eventLoops++;\n      }\n    } catch (e) {\n      this.#sys.Sentry?.captureException(e, {\n        level: \"fatal\",\n      });\n      throw e;\n    } finally {\n      this.#eventLoopAbortController = undefined;\n      this.#startLoopPromise = undefined;\n      endLoop();\n    }\n    this.#emitter.emit(\"idle\");\n    this.#setState(\"close\");\n  }\n\n  async #agentCompletion(\n    userMessage: GenerateUserMessage,\n    signal: AbortSignal,\n    onStep: (step: GenerateCompletionStep) => void,\n  ) {\n    this.#userTurnCreditsUsed = 0;\n    const sessionContext = this.getSessionContext();\n    const maxCompletions =\n      userMessage.maxCompletions ?? DEFAULT_MAX_COMPLETIONS;\n    let loops = 0;\n    let errors = 0;\n    let totalCompletions = 0;\n    let includeUserMessage = true;\n    let hasChanges = false;\n    let userInput: UserInput | undefined;\n    while (true) {\n      if (signal?.aborted) {\n        throw newAbortError();\n      }\n      try {\n        // We compute the user input if it's undefined\n        // If it's defined, we perform the same completion again\n        if (!userInput) {\n          userInput = await this.#getUserInput(\n            userMessage,\n            includeUserMessage,\n            signal,\n            onStep,\n          );\n          userInput.modelOverride = userMessage.modelOverride;\n        }\n        includeUserMessage = false;\n\n        if (userInput.user.role === \"user\") {\n          const files = userInput.files\n            .filter((f) => (f.importance ?? 0) > 2.5 && f.content)\n            .map((f) => ({\n              filePath: f.filePath,\n              size: f.content?.length ?? 0,\n              isCustomInstruction: false,\n              wasIncluded: f.wasIncluded,\n            }));\n          sessionContext.customInstructions.forEach((a) => {\n            if (a.filePath) {\n              files.push({\n                filePath: a.filePath,\n                size: a.content?.length ?? 0,\n                isCustomInstruction: true,\n                wasIncluded: true,\n              });\n            }\n          });\n          onStep({\n            type: \"user-input\",\n            prompt:\n              userInput.userMessage?.displayPrompt ?? userInput.userPrompt,\n            files,\n          });\n        }\n\n        try {\n          const { shouldContinue, completions, filesChanged } =\n            await this.#generateCompletion(\n              sessionContext,\n              userInput,\n              signal,\n              onStep,\n            );\n          userInput = undefined;\n          errors = 0;\n          loops++;\n          hasChanges ||= filesChanged;\n          totalCompletions += completions;\n          this.#currentMessage = undefined;\n\n          const status = await this.emitGitStatus();\n          if (status) {\n            const targetBranch = this.getAiBranch();\n            if (status.currentBranch !== targetBranch) {\n              if (totalCompletions - 1 >= maxCompletions) {\n                onStep({\n                  type: \"error\",\n                  code: \"ask-to-continue\",\n                  message: `The agent has been working for a while. Do you want to continue?`,\n                });\n                break;\n              }\n              includeUserMessage = true;\n              userMessage = {\n                userPrompt: `Seems like the current git branch is ${status.currentBranch}, however, this is a broken state in Fusion. Make sure to git checkout into \"${targetBranch}\", before finishing.`,\n                displayPrompt: \"\",\n              };\n              continue;\n            }\n          }\n          if (!shouldContinue) {\n            break;\n          }\n          if (!signal.aborted) {\n            const scheduledMessage = this.getScheduledMessage();\n            if (scheduledMessage) {\n              includeUserMessage = true;\n              userMessage = scheduledMessage;\n              totalCompletions = 0;\n              continue;\n            }\n          }\n\n          if (totalCompletions >= maxCompletions) {\n            onStep({\n              type: \"error\",\n              code: \"ask-to-continue\",\n              message: `The agent has been working for a while. Do you want to continue?`,\n            });\n            break;\n          }\n        } catch (e) {\n          await this.emitGitStatus();\n          throw e;\n        }\n      } catch (e) {\n        if (\n          errors < 2 &&\n          ((e instanceof CodeGenError && e.code === \"abrupt-end\") ||\n            (e instanceof Error && e.name === \"HTTPStreamBroke\") ||\n            (e instanceof Error && e.name === \"HTTPStreamHang\"))\n        ) {\n          errors++;\n          continue;\n        }\n        throw e;\n      } finally {\n        inPlaceRemovePendingTurns(sessionContext.turns);\n        const shouldRefresh = this.#fusionConfig?.refreshPreview ?? true;\n        if (hasChanges && shouldRefresh) {\n          this.requestRefresh();\n        }\n      }\n    }\n  }\n\n  async #generateCompletion(\n    sessionContext: SessionContext,\n    userInput: UserInput,\n    signal: AbortSignal,\n    onStep: (step: GenerateCompletionStep) => void,\n  ): Promise<{\n    completions: number;\n    shouldContinue: boolean;\n    filesChanged: boolean;\n  }> {\n    if (this.#onGoingArtifacts) {\n      throw new Error(\"generateCompletion already started\");\n    }\n    const url = this.getLastTurn()?.nextUrl ?? this.#initialUrl;\n\n    let filesChanged = false;\n    let completions = 0;\n    onStep({\n      type: \"start\",\n      id: \"\",\n      name: \"thinking\",\n      title: \"Thinking\",\n      content: \"\",\n    });\n    try {\n      const artifacts: GenerateCodeEvent[] = (this.#onGoingArtifacts = []);\n      let beforeCommit = await this.getCurrentCommitHash();\n      if (!sessionContext.beforeCommit && beforeCommit) {\n        sessionContext.beforeCommit = beforeCommit;\n      }\n\n      let mcpServers = this.#mcpServers;\n      if (mcpServers && this.#privacyMode?.encrypt) {\n        mcpServers = !!this.#privacyMode.mcpServers;\n      }\n\n      let uiContextPrompt = userInput.userMessage?.uiContextPrompt;\n      if (uiContextPrompt && !this.#canCollapseWorkspace()) {\n        const workspace = this.#fusionConfig?.workspace?.folders.find(\n          (a) => a.enableGit,\n        );\n        if (workspace?.path) {\n          uiContextPrompt = `Relative file paths are relative to: ${workspace.path}/`;\n        }\n      }\n\n      const body: CodeGenInputOptions = {\n        url,\n        position: this.#position,\n        eventName: \"cli code\",\n        maxPages: 2,\n        autoContinue: 1,\n        codeGenMode: this.#mode,\n        userContext: {\n          ...sessionContext.userContext,\n          fullstoryUrl: userInput.userMessage?.metadata?.fullstoryUrl,\n        },\n        files: userInput.files,\n        maxTokens: this.#maxTokens,\n        aclPolicy: this.#fusionConfig?.accessControl,\n        repoIndexingConfig: this.#fusionConfig?.repoIndexingConfig,\n        recommendedRoot: this.#fusionConfig?.workspace?.folders.find(\n          (a) => a.enableGit,\n        )?.recommendedRoot,\n        attachments: userInput.attachments,\n        customInstructions: sessionContext.customInstructions,\n        sessionId: sessionContext.sessionId,\n        userPrompt: userInput.userPrompt,\n        ephemeralUserPrompt: userInput.userMessage?.ephemeralUserPrompt,\n        uiContextPrompt: userInput.userMessage?.uiContextPrompt,\n        displayUserPrompt: userInput.userMessage?.displayPrompt,\n        isManualContinue: userInput.userMessage?.isManualContinue,\n        sessionMode: userInput.userMessage?.sessionMode,\n        projectId: this.#projectId,\n        branchName: this.#branchName,\n        pingEvents: true,\n        workingDirectory: this.#bashWorkingDirectory,\n        beforeCommit,\n        toolResults: userInput.toolResults,\n        role: userInput.user.role,\n        user: userInput.user,\n        repair: userInput.repair,\n        category: userInput.category,\n        enabledTools: this.#enabledTools,\n        enabledMCPs: mcpServers ? userInput.enabledMCPs : undefined,\n        localMCPTools: this.#localMCPManager?.listTools(),\n        searchResponse: userInput.searchResponse,\n        encryptKey: this.#encryptKey,\n        maxAgentTiming: 3 * 60 * 1000, // 3 minutes\n        mcpServers,\n        environmentVariables: mergeEnvironmentVariables(\n          this.#fusionConfig?.environmentVariables ?? [],\n          this.#fusionContext?.devServerOrchestrator?.environmentVariables ??\n            [],\n        ),\n        dirtyEnvironmentVariables:\n          this.#dirtyEnvironmentVariables && userInput.user.role === \"user\",\n        redactUserMessages: this.#privacyMode?.redactUserMessages,\n        redactLLMMessages: this.#privacyMode?.redactLLMMessages,\n        modelOverride: userInput.modelOverride ?? this.#modelOverride,\n        metadata: userInput.userMessage?.metadata,\n      };\n\n      if (this.#debug) {\n        console.log(\"Starting completion stream\");\n      }\n\n      const stream = completionStream(\n        this.#sys,\n        this.#credentials,\n        body,\n        signal,\n      );\n\n      let lastTurn: CodegenTurn | undefined;\n      let shouldContinue = false;\n      let endSignalReceived = false;\n      for await (const streamItem of stream) {\n        const openedAction = async (\n          json: GenerateCodeEvent,\n        ): Promise<boolean> => {\n          if (json.type === \"user\") {\n            const newTurn: CodegenTurn = (lastTurn = {\n              state: \"running\",\n              unixTime: Date.now(),\n              title: \"\",\n              sentiment: undefined,\n              userMessage: userInput.userMessage,\n              afterCommit: beforeCommit,\n              beforeCommit,\n              lastCommit: undefined,\n              creditsUsed: 0,\n              actions: [],\n              applyResults: [],\n              completionId: json.id ?? \"\",\n              nextUrl: undefined,\n              user: json.user,\n              autoContinue: false,\n            });\n            lastTurn = newTurn;\n            sessionContext.turns.push(newTurn);\n            if (json.compacting) {\n              sessionContext.customInstructions =\n                await this.#getCustomInstructions();\n            }\n            onStep({\n              type: \"user\",\n              displayPrompt: json.displayPrompt,\n              id: json.id,\n              user: json.user,\n              role: json.user.role,\n              compacting: json.compacting,\n            });\n          } else if (json.type === \"mcp-status\") {\n            this.#lastMCPStatus = json;\n            onStep(json);\n          } else if (json.type === \"mcp-auth-required\") {\n            endSignalReceived = true;\n            onStep(json);\n            return true;\n          } else if (json.type === \"error\") {\n            endSignalReceived = true;\n            onStep(json);\n            return true;\n          } else if (json.type === \"done\") {\n            completions++;\n            this.#userTurnCreditsUsed += json.creditsUsed;\n            const turnState = (lastTurn = await this.#finalizeTurn(\n              sessionContext,\n              json,\n              lastTurn,\n              beforeCommit,\n            ));\n            for (const action of json.actions ?? []) {\n              if (action.type === \"tool_result\") {\n                onStep({\n                  type: \"tool_result\",\n                  result: {\n                    content: action.content,\n                    tool_use_id: action.id!,\n                    type: \"tool_result\",\n                    title: action.actionTitle,\n                    tool_name: action.filePath,\n                    is_error: !!action.errors?.length,\n                  },\n                });\n              }\n            }\n\n            // If there are changes, reset the command output\n            if (turnState.applyResults.length > 0) {\n              this.#fusionContext?.devServerOrchestrator?.addCheckpoint();\n            }\n            // Apply changes and get commit hash if using Fusion\n            let changedFiles = await this.#applyResults(this.#sys, turnState);\n            let hasChanges = changedFiles.length > 0;\n            const commitHash = await this.commitWorkInProgress(\n              turnState,\n              changedFiles,\n            );\n            let commitFailed = false;\n            if (commitHash) {\n              hasChanges = true;\n              turnState.afterCommit = commitHash;\n              beforeCommit = commitHash;\n            } else if (commitHash === undefined) {\n              commitFailed = true;\n            }\n            if (hasChanges) {\n              filesChanged = true;\n            }\n            if (userInput.user.role === \"user\") {\n              this.#dirtyEnvironmentVariables = false;\n            }\n            this.#completionFinalize({\n              completionId: turnState.completionId,\n              beforeCommit: turnState.beforeCommit,\n              afterCommit: turnState.afterCommit,\n              commitFailed,\n            });\n\n            onStep({\n              type: \"done\",\n              stopReason: json.stopReason,\n              id: json.id!,\n              applyResults: turnState.applyResults,\n              actions: json.actions ?? [],\n              creditsUsed: json.creditsUsed,\n              sessionUsage: json.sessionUsage,\n              model: json.model,\n              usage: json.usage,\n              url: json.nextUrl,\n              promptVersion: json.promptVersion,\n              hasChanges,\n            });\n          } else if (json.type === \"continue\") {\n            shouldContinue = json.autoContinue;\n            endSignalReceived = true;\n            onStep({\n              type: \"continue\",\n              id: json.id!,\n              url: json.nextUrl!,\n              autoContinue: json.autoContinue,\n            });\n            return true;\n          } else {\n            if (json.type === \"thinking\") {\n              json.actionTitle = \"Planning\";\n            }\n            if (\"content\" in json && json.type !== \"delta\") {\n              json;\n              onStep({\n                type: \"start\",\n                name: json.type,\n                filePath: json.filePath ?? \"\",\n                id: \"id\" in json ? json.id : undefined,\n                title:\n                  json.actionTitle ?? json.artifactTitle ?? json.filePath ?? \"\",\n                content: json.content ?? \"\",\n              });\n            }\n          }\n          return false;\n        };\n\n        const closedAction = async (json: GenerateCodeEvent) => {\n          if (json.type === \"thinking\") {\n            onStep({\n              type: \"planning\",\n              content: json.content,\n            });\n          }\n          if (json.type === \"server_tool_result\") {\n            onStep({\n              type: \"server_tool_result\",\n              content: JSON.parse(json.content),\n              title:\n                json.actionTitle ?? json.artifactTitle ?? \"Server Tool Result\",\n              id: json.id!,\n            });\n          }\n          if (json.type === \"file\" && json.filePath && !json.synthetic) {\n            onStep({\n              type: \"file\",\n              filePath: json.filePath,\n              content: json.content,\n              title: json.actionTitle ?? json.artifactTitle ?? \"Created\",\n              id: json.id!,\n              errors: json.errors,\n            });\n          }\n          if (json.type === \"diff\" && json.filePath && !json.synthetic) {\n            onStep({\n              type: \"diff\",\n              filePath: json.filePath,\n              title: json.actionTitle ?? json.artifactTitle ?? \"Updated\",\n              content: json.content,\n              id: json.id!,\n              errors: json.errors,\n            });\n          }\n          if (json.type === \"tool\" && json.filePath) {\n            onStep({\n              type: \"tool\",\n              name: json.filePath,\n              id: json.id!,\n              content: json.content,\n            });\n          } else if (json.type === \"text\") {\n            onStep({\n              type: \"text\",\n              content: json.content,\n            });\n          }\n        };\n\n        const deltaAction = async (json: GenerateCodeEvent, delta: string) => {\n          onStep({\n            type: \"delta\",\n            name: json.type,\n            delta,\n          });\n        };\n\n        if (streamItem.type === \"ping\") {\n          if (this.#debug) {\n            console.log(\"generateCompletion: Ping\");\n          }\n          continue;\n        }\n\n        if (streamItem.type === \"delta\") {\n          const delta = streamItem.content as string;\n          const lastArtifact = getLastOne(artifacts);\n          if (lastArtifact && \"content\" in lastArtifact) {\n            lastArtifact.content += delta;\n            await deltaAction(lastArtifact, delta);\n          }\n        } else {\n          const lastArtifact = getLastOne(artifacts);\n          if (lastArtifact && \"content\" in lastArtifact) {\n            (lastArtifact as any).incomplete = false;\n            await closedAction(lastArtifact);\n          }\n          artifacts.push(streamItem);\n          if (await openedAction(streamItem)) {\n            break;\n          }\n        }\n      }\n\n      if (!endSignalReceived) {\n        throw new CodeGenError(\n          \"Completion stream ended abruptly\",\n          \"abrupt-end\",\n        );\n      }\n\n      // Return `true` if we should continue\n      if (lastTurn) {\n        return {\n          completions,\n          filesChanged,\n          shouldContinue:\n            shouldContinue ||\n            lastTurn.actions.some((a) => a.type === \"tool\") ||\n            lastTurn.autoContinue,\n        };\n      }\n      return {\n        completions,\n        shouldContinue: false,\n        filesChanged,\n      };\n    } finally {\n      this.#onGoingArtifacts = undefined;\n    }\n  }\n\n  async commitWorkInProgress(lastTurn: CodegenTurn, changedFiles: string[]) {\n    // If using Fusion and changes were made, commit and push to side-car branch\n    if (!this.#fusionContext?.git) {\n      return false;\n    }\n    const hasMergeConflict = await this.#hasMergeConflict();\n    if (hasMergeConflict && changedFiles.length === 0) {\n      return false;\n    }\n    if (await this.isCleanWorkTree()) {\n      return false;\n    }\n    try {\n      // Stage changes\n      if (hasMergeConflict) {\n        await this.git([\"add\", ...changedFiles]);\n      } else {\n        await this.git([\"add\", \".\"]);\n      }\n\n      // Create commit with appropriate message\n      const commitMessage = `${lastTurn.title}\\n${lastTurn.completionId}`;\n      const commitLines = commitMessage\n        .split(\"\\n\")\n        .flatMap((line) => [\"-m\", line]);\n      await this.git([\n        \"commit\",\n        \"--allow-empty\",\n        \"--quiet\",\n        \"--no-verify\",\n        ...commitLines,\n      ]);\n\n      // Get the commit hash\n      const afterCommit = await this.getCurrentCommitHash();\n\n      // Return the commit hash\n      return afterCommit;\n    } catch (err) {\n      if (!hasMergeConflict) {\n        this.#sys.Sentry?.captureException(\n          new Error(\"Error commiting work in progress\", { cause: err }),\n          {\n            tags: {\n              operation: \"codegen-git\",\n            },\n          },\n        );\n      }\n    }\n  }\n\n  async #resolveToolCalls(\n    userInput: UserInput,\n    turn: CodegenTurn,\n    signal: AbortSignal,\n    onStep: (step: GenerateCompletionStep) => void,\n  ) {\n    const toolCalls: LLMToolCalls[] =\n      turn.actions\n        .filter((a) => a.type === \"tool\" && a.id)\n        .map((a) => {\n          const content = a.content.trim();\n          let input = {};\n          try {\n            input = content ? JSON.parse(content) : {};\n          } catch (e) {\n            input = {};\n          }\n          return {\n            id: a.id!,\n            name: a.filePath as any,\n            input,\n            abortController:\n              this.#runningToolCalls.find((call) => call.id === a.id)\n                ?.abortController ?? new AbortController(),\n          };\n        }) ?? [];\n\n    if (toolCalls.length > 0) {\n      this.#runningToolCalls = toolCalls;\n      try {\n        const toolContext: ToolContext = {\n          sys: this.#sys,\n          credentials: this.#credentials,\n          files: userInput.files,\n          user: userInput.user,\n          position: this.#position,\n          fusionConfig: this.#fusionConfig,\n          signal,\n          canCollapseWorkspace: this.#canCollapseWorkspace(),\n          emitter: this.#emitter,\n          filterText: (text) => {\n            text = filterWorkingDirectory(text, this.#bashWorkingDirectory);\n            if (this.#fusionConfig?.accessControl?.secrets) {\n              text = filterSecrets(\n                text,\n                this.#fusionConfig.accessControl.secrets,\n              );\n            }\n            return text;\n          },\n          allowedCommands: compilePatterns(\n            this.#fusionConfig?.allowedCommands ?? [],\n          ),\n          getAllFiles: (options) =>\n            this.getAllFiles({\n              getDotFiles: options.getDotFiles,\n              includePattern: options.pattern,\n              gitignore: true,\n            }),\n          workingDirectory: this.#workingDirectory,\n          bashWorkingDirectory: this.#bashWorkingDirectory,\n          // Add required workspace-aware file operations\n          workspaceFolders: this.#workspace?.folders ?? [],\n          restore: (options) => this.restore(options),\n          patchFusionConfig: (patch) => {\n            if (!userInput.patchFusionConfig) {\n              userInput.patchFusionConfig = {};\n            }\n            const prevEnvVariables = userInput.patchFusionConfig.envVariables;\n            Object.assign(userInput.patchFusionConfig, patch);\n            userInput.patchFusionConfig.envVariables = {\n              ...prevEnvVariables,\n              ...patch.envVariables,\n            };\n          },\n          readFile: (path) => this.readFile(path),\n          writeFile: (path, content) => this.writeFile(path, content),\n          deleteFile: (path) => this.deleteFile(path),\n          fileExists: (path) => this.fileExists(path),\n          listDir: (path) => this.listDir(path),\n          evaluateAccess: (resource: string, permission: Permission) =>\n            evaluateAccess(\n              resource,\n              permission,\n              this.#fusionConfig?.accessControl,\n              this.#getUserPrincipals(),\n            ),\n          stat: (path) => this.stat(path),\n          localMCPManager: this.#localMCPManager,\n          passThrough: (toolCall, signal) => {\n            const abortResponse: ToolResolution = {\n              toolResult:\n                \"Aborted by the user. So the task could not be completed.\",\n              isError: true,\n              title: \"Aborted by the user.\",\n            };\n\n            return new Promise<ToolResolution>((resolve) => {\n              const cleanup = () => {\n                signal.removeEventListener(\"abort\", onAbort);\n                this.#waitingToolFulfilment.delete(toolCall.id);\n              };\n\n              const onAbort = () => {\n                cleanup();\n                resolve(abortResponse);\n              };\n\n              if (signal.aborted) {\n                onAbort();\n                return;\n              }\n\n              signal.addEventListener(\"abort\", onAbort, { once: true });\n\n              this.#waitingToolFulfilment.set(toolCall.id, (result) => {\n                cleanup();\n                resolve(result);\n              });\n\n              this.#emitter.emit(\"step\", {\n                type: \"tool-call-request\",\n                id: toolCall.id,\n                name: toolCall.name,\n                input: toolCall.input,\n              });\n            });\n          },\n\n          // Required path resolution\n          resolveWorkspacePath: (path, forceWorkspace) =>\n            this.resolveWorkspacePath(path, forceWorkspace),\n          absolutePathToWorkspaceUrl: (path) =>\n            this.absolutePathToWorkspaceUrl(path),\n          setHasPlanToApply: (value: boolean) => {\n            this.#hasPlanToApply = value;\n          },\n\n          ...this.#fusionContext,\n        };\n\n        const toolResults = await resolveToolCalls(\n          toolContext,\n          toolCalls,\n          turn.cachedToolResults,\n          onStep,\n        );\n        turn.cachedToolResults = toolResults;\n        if (toolContext.signal?.aborted) {\n          throw newAbortError();\n        }\n        if (userInput.patchFusionConfig) {\n          this.#emitter.emit(\"step\", {\n            type: \"fusion-config-patch\",\n            patch: userInput.patchFusionConfig,\n          });\n        }\n        userInput.files = toolContext.files;\n        userInput.toolResults = toolResults;\n      } finally {\n        this.#runningToolCalls = [];\n      }\n    }\n  }\n\n  async #getUserInput(\n    userMessage: GenerateUserMessage,\n    isActualUserMessage: boolean,\n    signal: AbortSignal,\n    onStep: (step: GenerateCompletionStep) => void,\n  ): Promise<UserInput> {\n    const sessionContext = this.getSessionContext();\n    const lastUndoState = getLastOne(sessionContext.turns);\n    const user = structuredClone(\n      userMessage.user ??\n        lastUndoState?.user ??\n        ({\n          source: \"agent\",\n          role: \"agent\",\n        } satisfies UserSourceAgent),\n    );\n    const userInput: UserInput = {\n      userMessage: undefined,\n      userPrompt: \"\",\n      files: [],\n      attachments: [],\n      searchResponse: null,\n      rerankFiles: 0,\n      mostRelevantFile: null,\n      toolResults: [],\n      user,\n      modelOverride: userMessage.modelOverride,\n      repair: userMessage.repair,\n      category: userMessage.category,\n      enabledMCPs: userMessage.enabledMCPs,\n    };\n    const hasUrl = !!this.getLastTurn()?.nextUrl;\n    const isFirstTurn = sessionContext.turns.length < 2 || !hasUrl;\n\n    if (isActualUserMessage) {\n      let searchResponse: CodebaseSearchResponse | null = null;\n      if (isFirstTurn) {\n        const allFiles = filterNonImportantFiles(\n          await this.getAllFiles({\n            getDotFiles: false,\n            gitignore: true,\n          }),\n        );\n        const importantSet = new Set<string>();\n        const leastImportantSet = new Set<string>();\n        if (userMessage.files) {\n          for (const file of userMessage.files) {\n            importantSet.add(normalizeRelativePath(file));\n          }\n        }\n        const includeBaseFiles =\n          userMessage.includeBaseFiles ?? sessionContext.turns.length === 0;\n        const importantFiles = Array.from(importantSet);\n\n        function isImportant(filePath: string) {\n          if (includeBaseFiles && isBaseImportantFile(filePath)) {\n            return 5;\n          }\n          if (leastImportantSet.has(filePath)) {\n            return 2;\n          }\n          if (\n            importantFiles.some((b) =>\n              filePath.toLowerCase().startsWith(b.toLowerCase()),\n            )\n          ) {\n            return 2;\n          }\n          return 0;\n        }\n\n        const projectFiles = signal.aborted\n          ? []\n          : allFiles.map((file) => {\n              const importance = isImportant(file);\n              if (importance === 0) {\n                return {\n                  filePath: file,\n                };\n              }\n\n              // Use our built-in readFileSync method instead of duplicating the logic\n              let content: string | null = null;\n              try {\n                content = this.readFileSync(file);\n                if (!content) {\n                  return {\n                    filePath: file,\n                  };\n                }\n              } catch (e) {\n                return {\n                  filePath: file,\n                };\n              }\n\n              const isSmallEnough = content.length < 30000;\n\n              return {\n                filePath: file, // Keep the original path with workspace prefix\n                content,\n                importance: isSmallEnough ? importance : 2,\n              } as ProjectFile;\n            });\n\n        userInput.files = projectFiles;\n        userInput.attachments = userMessage.attachments ?? [];\n      }\n\n      if (this.#fusionContext?.git) {\n        let changedDiffPrompt: string | undefined;\n        const changesReport = await this.getChangesReport();\n        if (changesReport) {\n          for (const filePath of changesReport.files) {\n            if (!userInput.files.some((a) => a.filePath === filePath)) {\n              try {\n                const content = await this.readFile(filePath);\n                userInput.files.push({\n                  filePath,\n                  importance: 0,\n                  content: content ?? undefined,\n                });\n              } catch {\n                userInput.files.push({\n                  filePath,\n                  importance: 0,\n                });\n              }\n            }\n          }\n\n          if (changesReport.diff.length < 30000) {\n            changedDiffPrompt = changesReport.diff;\n          } else {\n            changedDiffPrompt = changesReport.files\n              .map((a) => `- ${a}`)\n              .join(\"\\n\")\n              .trim()\n              .slice(0, 30000);\n          }\n\n          if (changedDiffPrompt) {\n            userInput.userPrompt = `\nSince last time, some files were changed by the user or tools (formatting for example):\n<modified-files-context>\\n${changedDiffPrompt}\\n</modified-files-context>\\n\\n${userInput.userPrompt}`;\n          }\n        }\n      }\n\n      userInput.userMessage = userMessage;\n      userInput.userPrompt = userMessage.userPrompt;\n      userInput.attachments = userMessage.attachments ?? [];\n      userInput.searchResponse = searchResponse;\n      userInput.rerankFiles = 0;\n      userInput.mostRelevantFile = null;\n      userInput.toolResults = [];\n    } else {\n      userInput.user.role = \"agent\";\n    }\n\n    // fill tool results\n    if (lastUndoState) {\n      await this.#resolveToolCalls(userInput, lastUndoState, signal, onStep);\n    }\n    return userInput;\n  }\n\n  async #finalizeTurn(\n    sessionContext: SessionContext,\n    doneEvent: GenerateCodeEventDone,\n    lastTurn: CodegenTurn | undefined,\n    beforeCommit: string | undefined,\n  ): Promise<CodegenTurn> {\n    const { actions } = doneEvent;\n\n    const turnState: CodegenTurn = lastTurn\n      ? lastTurn\n      : {\n          state: \"done\",\n          unixTime: doneEvent.unixTime ?? Date.now(),\n          title: doneEvent.actionTitle,\n          user: {\n            source: \"agent\",\n            role: \"agent\",\n          },\n          completionId: doneEvent.id ?? \"\",\n          creditsUsed: doneEvent.creditsUsed ?? 0,\n          nextUrl: doneEvent.nextUrl,\n          applyResults: [],\n          actions: actions ?? [],\n          userMessage: undefined,\n          beforeCommit,\n          afterCommit: beforeCommit,\n          lastCommit: undefined,\n          sentiment: undefined,\n          autoContinue: doneEvent.autoContinue,\n        };\n\n    turnState.state = \"done\";\n    turnState.title = doneEvent.actionTitle ?? \"\";\n    turnState.creditsUsed = doneEvent.creditsUsed ?? 0;\n    turnState.nextUrl = doneEvent.nextUrl;\n    turnState.autoContinue = doneEvent.autoContinue;\n    turnState.actions = actions ?? [];\n    if (!lastTurn) {\n      sessionContext.turns.push(turnState);\n    }\n\n    if (Array.isArray(actions)) {\n      for (const action of actions) {\n        const filePath = action.filePath;\n        if (action.type === \"file\" && filePath && !action.incomplete) {\n          const stat = await this.stat(filePath, true);\n          let isUpdate = !!stat;\n          let oldContentString: string | null = null;\n          let canReadFile = true;\n          if (isUpdate) {\n            try {\n              oldContentString = this.readFileSync(filePath, true);\n            } catch {\n              // File exists, but we do not have access to read it\n              canReadFile = false;\n            }\n          }\n\n          if (oldContentString) {\n            if (action.content.trim() === \"\") {\n              turnState.applyResults.push({\n                action: \"delete\",\n                filePath,\n                addedLines: 0,\n                removedLines: oldContentString.split(\"\\n\").length,\n                content: \"\",\n                oldContent: oldContentString,\n              });\n            } else {\n              const diff = diffLines(oldContentString, action.content);\n              turnState.applyResults.push({\n                action: \"update\",\n                filePath,\n                addedLines: diff\n                  .filter((d) => d.added)\n                  .reduce((acc, d) => acc + (d.count ?? 0), 0),\n                removedLines: diff\n                  .filter((d) => d.removed)\n                  .reduce((acc, d) => acc + (d.count ?? 0), 0),\n                content: action.content,\n                oldContent: oldContentString,\n              });\n            }\n          } else if (isUpdate && !canReadFile) {\n            turnState.applyResults.push({\n              action: \"update\",\n              filePath,\n              addedLines: 0,\n              removedLines: 0,\n              content: action.content,\n              oldContent: undefined,\n            });\n          } else {\n            turnState.applyResults.push({\n              action: \"create\",\n              filePath,\n              addedLines: action.content.split(\"\\n\").length,\n              removedLines: 0,\n              content: action.content,\n              oldContent: \"\",\n            });\n          }\n        }\n      }\n    }\n\n    return turnState;\n  }\n\n  /**\n   * Returns true if the last turn's afterCommit (or beforeCommit) is different from the session's beforeCommit.\n   */\n  #hasChanges(): boolean {\n    const sessionContext = this.getSessionContext();\n    const initialCommit = sessionContext.beforeCommit;\n    const lastTurn = sessionContext.turns.findLast(\n      (turn) => turn.afterCommit ?? turn.beforeCommit,\n    );\n    const afterCommit = lastTurn?.afterCommit ?? lastTurn?.beforeCommit;\n\n    if (initialCommit && afterCommit && initialCommit !== afterCommit) {\n      return true;\n    }\n    return sessionContext.turns.some((turn) => {\n      return turn.applyResults.length > 0;\n    });\n  }\n\n  async #hasGeneratingPlaceholder(): Promise<boolean> {\n    try {\n      const findString =\n        \"{/* TODO: FUSION_GENERATION_APP_PLACEHOLDER replace everything here with the actual app! */}\";\n      const content = await this.#sys.readFile(\n        this.resolveWorkspacePath(\"client/pages/Index.tsx\", true).resolvedPath,\n      );\n      const mainContent = await this.#sys.readFile(\n        this.resolveWorkspacePath(\"client/App.tsx\", true).resolvedPath,\n      );\n      const isIndexUsed = mainContent?.includes(\n        '<Route path=\"/\" element={<Index />} />',\n      );\n      if (isIndexUsed && content && content.includes(findString)) {\n        return true;\n      }\n    } catch {\n      // do nothing\n    }\n    return false;\n  }\n\n  /**\n   * Filters out files that should not be included in the changes report,\n   * such as build artifacts, binary files, and generated code.\n   * This prevents large payloads and irrelevant context from being sent to the LLM.\n   */\n  #shouldIgnoreFileForChangesReport(filePath: string): boolean {\n    const lowerPath = filePath.toLowerCase();\n\n    // Build artifacts and cache directories\n    const ignoredPaths = [\n      \".next/\",\n      \"dist/\",\n      \"build/\",\n      \"out/\",\n      \"node_modules/\",\n      \".cache/\",\n      \"coverage/\",\n      \"__pycache__/\",\n      \"target/\", // Rust\n      \"vendor/\", // Go/PHP\n      \".gradle/\",\n      \".build/\",\n    ];\n\n    // Binary and archive file extensions\n    const ignoredExtensions = [\n      \".gz\",\n      \".zip\",\n      \".tar\",\n      \".tgz\",\n      \".7z\",\n      \".rar\",\n      \".pack\",\n      \".bin\",\n      \".exe\",\n      \".dll\",\n      \".so\",\n      \".dylib\",\n      \".o\",\n      \".a\",\n      \".jar\",\n      \".class\",\n      \".pyc\",\n      \".pyo\",\n      \".wasm\",\n      \".png\",\n      \".jpg\",\n      \".jpeg\",\n      \".gif\",\n      \".ico\",\n      \".webp\",\n      \".svg\",\n      \".mp4\",\n      \".mp3\",\n      \".wav\",\n      \".pdf\",\n      \".woff\",\n      \".woff2\",\n      \".ttf\",\n      \".eot\",\n      \".map\",\n      \".min.js\",\n      \".min.css\",\n      \".bundle.js\",\n      \".chunk.js\",\n      \".tsbuildinfo\",\n    ];\n\n    // Check if path contains any ignored directories\n    for (const ignoredPath of ignoredPaths) {\n      if (lowerPath.includes(ignoredPath)) {\n        return true;\n      }\n    }\n\n    // Check if file has an ignored extension\n    for (const ext of ignoredExtensions) {\n      if (lowerPath.endsWith(ext)) {\n        return true;\n      }\n    }\n\n    // Check for lock files\n    if (\n      lowerPath.endsWith(\"package-lock.json\") ||\n      lowerPath.endsWith(\"yarn.lock\") ||\n      lowerPath.endsWith(\"pnpm-lock.yaml\") ||\n      lowerPath.endsWith(\".lock\")\n    ) {\n      return true;\n    }\n\n    return false;\n  }\n\n  async getChangesReport(): Promise<\n    | {\n        diff: string;\n        files: string[];\n      }\n    | undefined\n  > {\n    if (!this.#fusionContext?.git) {\n      return undefined;\n    }\n\n    try {\n      const lastTurn = this.getSessionContext().turns.findLast((a) =>\n        a.actions.some((a) => a.type === \"file\" || a.type === \"diff\"),\n      );\n      const afterCommit = lastTurn?.afterCommit;\n      if (!afterCommit) {\n        return undefined;\n      }\n\n      const fileNamesOut = await this.git([\n        \"--no-pager\",\n        \"diff\",\n        \"--name-only\",\n        afterCommit,\n      ]);\n\n      // Get all changed file paths relative to git working directory\n      const allChangedFilePaths = fileNamesOut\n        .trim()\n        .split(\"\\n\")\n        .map((a) => a.trim())\n        .filter((a) => a);\n\n      // Filter out build artifacts and binary files before processing\n      const filteredFilePaths = allChangedFilePaths.filter(\n        (filePath) => !this.#shouldIgnoreFileForChangesReport(filePath),\n      );\n\n      // Convert to workspace URLs for the files array\n      const changedFiles = filteredFilePaths\n        .map((filePath) =>\n          this.absolutePathToWorkspaceUrl(\n            this.#sys.join(this.#gitWorkingDirectory, filePath),\n          ),\n        )\n        .filter((a) => a != null);\n\n      // If no relevant files changed, return empty result\n      if (filteredFilePaths.length === 0) {\n        return {\n          files: [],\n          diff: \"\",\n        };\n      }\n\n      // Only diff the filtered files by passing them as arguments to git diff\n      // This prevents git from processing binary files and build artifacts\n      const out = await this.git([\n        \"--no-pager\",\n        \"diff\",\n        \"-U0\",\n        \"--no-color\",\n        afterCommit,\n        \"--\",\n        ...filteredFilePaths,\n      ]).then((out) => out.trim());\n\n      // When the work tree is clean, status outputs nothing.\n      let intro = \"\";\n      const gitWorkspace = this.gitEnabledFolder;\n      if (gitWorkspace && !this.#canCollapseWorkspace() && out.length > 0) {\n        intro = `Notice that all the relative paths, are inside \"${gitWorkspace.name}/\", remember that when using Read/Write/Edit tools:\\n`;\n      }\n      return {\n        files: changedFiles,\n        diff: truncateString(`${intro}${out}`, 10000),\n      };\n    } catch (err) {\n      this.#sys.Sentry?.captureException(err, {\n        tags: {\n          operation: \"codegen-git\",\n        },\n      });\n      return undefined;\n    }\n  }\n\n  #gitStatusCommand() {\n    return [\"status\", \"--porcelain=v1\", \"-z\", \"--ignore-submodules=dirty\"];\n  }\n\n  async isCleanWorkTree(): Promise<boolean> {\n    try {\n      const out = await this.git(this.#gitStatusCommand());\n\n      // When the work tree is clean, status outputs nothing.\n      return out.trim().length === 0;\n    } catch {\n      // If status itself fails, treat as dirty.\n      return false;\n    }\n  }\n\n  async #applyResults(sys: DevToolsSys, turn: CodegenTurn): Promise<string[]> {\n    // Track if any changes were made\n    const results = turn.applyResults;\n    const changedFiles: string[] = [];\n    for (const result of results) {\n      try {\n        if (result.action === \"delete\") {\n          // Use the workspace-aware deleteFile method\n          const absolutePath = await this.deleteFile(result.filePath);\n          if (absolutePath) {\n            changedFiles.push(absolutePath);\n          }\n        } else if (result.content) {\n          // Use the workspace-aware writeFile method\n          const absolutePath = await this.writeFile(\n            result.filePath,\n            result.content,\n          );\n          if (absolutePath) {\n            this.#pendingFormating.add(absolutePath);\n            changedFiles.push(absolutePath);\n          }\n        }\n      } catch (e) {\n        sys.Sentry?.captureException(e);\n      }\n    }\n\n    return changedFiles;\n  }\n\n  /**\n   * Checks if we're in the special case of a single workspace named \".\"\n   * where we don't need to add folder prefixes\n   */\n  #isSingleCurrentDirWorkspace(): boolean {\n    return (\n      this.#workspace?.folders?.length === 1 &&\n      this.#workspace.folders[0].name === \".\"\n    );\n  }\n\n  #canCollapseWorkspace(): boolean {\n    return (\n      this.#workspace?.folders?.length === 1 ||\n      !this.#workspace?.folders?.length\n    );\n  }\n\n  /**\n   * Resolves a workspace file path to its actual file system path\n   * @param filePath A file path that may include a workspace prefix (e.g., \"workspace1/path/to/file.js\")\n   * @param forceWorkspace If true, will try the first workspace as fallback when no workspace folder is found\n   * @returns The actual file system path and the workspace folder it belongs to\n   */\n  resolveWorkspacePath(\n    filePath: string,\n    forceWorkspace: boolean,\n  ): {\n    resolvedPath: string;\n    workspaceFolder?: WorkspaceFolder;\n  } {\n    return resolveWorkspacePath({\n      filePath,\n      forceWorkspace,\n      workspace: this.#workspace,\n      workingDirectory: this.#workingDirectory,\n      sys: this.#sys,\n      canCollapseWorkspace: this.#canCollapseWorkspace(),\n    });\n  }\n\n  /**\n   * Extracts user principals from the current session context\n   * @returns Array of user's teams/roles or undefined if not available\n   */\n  #getUserPrincipals(): string[] | undefined {\n    try {\n      const sessionContext = this.getSessionContext();\n      const lastTurn = getLastOne(sessionContext.turns);\n      return lastTurn?.user.principals;\n    } catch {\n      // If session context is not available or no turns, return undefined\n      return undefined;\n    }\n  }\n\n  /**\n   * Converts an absolute file system path to a workspace URL\n   * @param absolutePath The absolute file system path to convert\n   * @returns The workspace URL if the path can be converted, undefined otherwise\n   */\n  absolutePathToWorkspaceUrl(absolutePath: string): string | undefined {\n    return absolutePathToWorkspaceUrl({\n      absolutePath,\n      workspace: this.#workspace,\n      workingDirectory: this.#workingDirectory,\n      sys: this.#sys,\n      canCollapseWorkspace: this.#canCollapseWorkspace(),\n    });\n  }\n\n  /**\n   * Launches the editor for a given file path\n   * @param filePath The file path to launch the editor for\n   * @param line The line number to launch the editor at\n   * @param column The column number to launch the editor at\n   * @returns void\n   */\n  async launchEditor(\n    opts: {\n      filePath?: string;\n      line?: number;\n      column?: number;\n    } = {},\n  ): Promise<{\n    success: boolean;\n    message?: string;\n  }> {\n    let filePath: string;\n    let line: number | undefined;\n    let column: number | undefined;\n    if (opts.filePath) {\n      filePath = this.resolveWorkspacePath(opts.filePath, false).resolvedPath;\n      line = opts.line ?? undefined;\n      column = opts.column ?? undefined;\n    } else {\n      filePath = this.#gitWorkingDirectory;\n    }\n    if (!(await this.#sys.exists(filePath))) {\n      return {\n        success: false,\n        message: `File not found: ${filePath}`,\n      };\n    }\n    return await this.#sys.launchEditor({\n      filePath: filePath,\n      line,\n      column,\n    });\n  }\n\n  /**\n   * Reads a file from the workspace\n   * @param filePath A file path that may include a workspace prefix\n   * @returns The file content or null if the file doesn't exist\n   */\n  async readFile(\n    filePath: string,\n    skipAclCheck?: boolean,\n  ): Promise<string | null> {\n    // Check ACL permissions\n    if (!skipAclCheck) {\n      const aclResult = evaluateAccess(\n        filePath,\n        \"read\",\n        this.#fusionConfig?.accessControl,\n        this.#getUserPrincipals(),\n      );\n\n      if (!aclResult.allowed) {\n        throw new PrivateError(`ACL denied: ${aclResult.message}`);\n      }\n    }\n    try {\n      if (filePath === \"AGENTS.md\" && this.#workspace?.agentsMD) {\n        return this.#workspace.agentsMD;\n      }\n      // First try the normal resolution\n      let { resolvedPath } = this.resolveWorkspacePath(\n        filePath,\n        !!skipAclCheck,\n      );\n\n      if (await this.#sys.exists(resolvedPath)) {\n        return await this.#sys.readFile(resolvedPath);\n      }\n\n      // If not found, try with forceWorkspace enabled\n      ({ resolvedPath } = this.resolveWorkspacePath(filePath, true));\n\n      if (await this.#sys.exists(resolvedPath)) {\n        return await this.#sys.readFile(resolvedPath);\n      }\n    } catch (error) {\n      this.#sys.Sentry?.captureException(error, {\n        extra: {\n          filePath,\n        },\n      });\n    }\n    return null;\n  }\n\n  /**\n   * Checks if a file exists in the workspace\n   * @param filePath A file path that may include a workspace prefix\n   * @returns True if the file exists, false otherwise\n   */\n  async fileExists(filePath: string): Promise<{\n    absolutePath: string | undefined;\n    recommendedPath: string | undefined;\n    workspaceFolder: WorkspaceFolder | undefined;\n    virtual: boolean;\n  }> {\n    // fileExists should not check ACL permissions\n    // since it's internally used to check if a file exists, that would block actual file writes\n    try {\n      if (filePath === \"AGENTS.md\" && this.#workspace?.agentsMD) {\n        return {\n          absolutePath: filePath,\n          recommendedPath: undefined,\n          workspaceFolder: undefined,\n          virtual: true,\n        };\n      }\n\n      // First try the normal resolution\n      let { resolvedPath, workspaceFolder } = this.resolveWorkspacePath(\n        filePath,\n        false,\n      );\n\n      if (await this.#sys.exists(resolvedPath)) {\n        return {\n          absolutePath: resolvedPath,\n          recommendedPath: undefined,\n          workspaceFolder,\n          virtual: false,\n        };\n      } else if (workspaceFolder) {\n        return {\n          absolutePath: undefined,\n          recommendedPath: undefined,\n          workspaceFolder,\n          virtual: false,\n        };\n      }\n\n      // If not found, try with forceWorkspace enabled\n      ({ resolvedPath, workspaceFolder } = this.resolveWorkspacePath(\n        filePath,\n        true,\n      ));\n\n      if (await this.#sys.exists(resolvedPath)) {\n        return {\n          absolutePath: resolvedPath,\n          recommendedPath: resolvedPath,\n          workspaceFolder,\n          virtual: false,\n        };\n      } else {\n        return {\n          absolutePath: undefined,\n          recommendedPath: resolvedPath,\n          workspaceFolder,\n          virtual: false,\n        };\n      }\n    } catch (error) {\n      this.#sys.Sentry?.captureException(error, {\n        extra: {\n          filePath,\n        },\n      });\n    }\n    return {\n      absolutePath: undefined,\n      recommendedPath: undefined,\n      workspaceFolder: undefined,\n      virtual: false,\n    };\n  }\n\n  /**\n   * Reads a file from the workspace synchronously\n   * @param filePath A file path that may include a workspace prefix\n   * @returns The file content or null if the file doesn't exist\n   */\n  readFileSync(filePath: string, skipAclCheck?: boolean): string | null {\n    if (!skipAclCheck) {\n      // Check ACL permissions\n      const aclResult = evaluateAccess(\n        filePath,\n        \"read\",\n        this.#fusionConfig?.accessControl,\n        this.#getUserPrincipals(),\n      );\n\n      if (!aclResult.allowed) {\n        throw new PrivateError(`ACL denied: ${aclResult.message}`);\n      }\n    }\n    try {\n      if (filePath === \"AGENTS.md\" && this.#workspace?.agentsMD) {\n        return this.#workspace.agentsMD;\n      }\n\n      // First try the normal resolution\n      let { resolvedPath } = this.resolveWorkspacePath(filePath, false);\n\n      if (this.#sys.existsSync(resolvedPath)) {\n        return this.#sys.readFileSync(resolvedPath);\n      }\n\n      // If not found, try with forceWorkspace enabled\n      ({ resolvedPath } = this.resolveWorkspacePath(filePath, true));\n\n      if (this.#sys.existsSync(resolvedPath)) {\n        return this.#sys.readFileSync(resolvedPath);\n      }\n    } catch (error) {\n      this.#sys.Sentry?.captureException(error, {\n        extra: {\n          filePath,\n        },\n      });\n    }\n    return null;\n  }\n\n  /**\n   * Writes content to a file in the workspace\n   * @param filePath A file path that may include a workspace prefix\n   * @param content The content to write\n   * @returns True if the write was successful, false otherwise\n   */\n  async writeFile(\n    filePath: string,\n    content: string | Uint8Array,\n    skipAclCheck?: boolean,\n  ): Promise<string | null> {\n    // Check ACL permissions\n    if (!skipAclCheck) {\n      const aclResult = evaluateAccess(\n        filePath,\n        \"write\",\n        this.#fusionConfig?.accessControl,\n        this.#getUserPrincipals(),\n      );\n      if (!aclResult.allowed) {\n        throw new PrivateError(`ACL denied: ${aclResult.message}`);\n      }\n    }\n\n    try {\n      const { resolvedPath } = this.resolveWorkspacePath(\n        filePath,\n        !!skipAclCheck,\n      );\n      // Since DevToolsSys doesn't have a mkdir method, we'll use a more direct approach\n      // Make sure parent directory exists before writing\n      await this.#sys.writeFile(resolvedPath, content);\n      return resolvedPath;\n    } catch (error) {\n      this.#sys.Sentry?.captureException(error, {\n        extra: {\n          filePath,\n        },\n      });\n      return null;\n    }\n  }\n\n  /**\n   * Lists files in a directory in the workspace\n   * @param dirPath A directory path that may include a workspace prefix\n   * @returns Array of file names in the directory or empty array if directory doesn't exist\n   */\n  async listDir(dirPath: string): Promise<string[]> {\n    // Check ACL permissions\n    const aclResult = evaluateAccess(\n      dirPath,\n      \"list\",\n      this.#fusionConfig?.accessControl,\n      this.#getUserPrincipals(),\n    );\n\n    if (!aclResult.allowed) {\n      throw new PrivateError(`ACL denied: ${aclResult.message}`);\n    }\n\n    try {\n      const { resolvedPath, workspaceFolder } = this.resolveWorkspacePath(\n        dirPath,\n        false,\n      );\n\n      if (!(await this.#sys.exists(resolvedPath))) {\n        return [];\n      }\n\n      const filesTypes = await readdir(resolvedPath, {\n        withFileTypes: true,\n      });\n\n      const files = filesTypes.map(\n        (file) => file.name + (file.isDirectory() ? \"/\" : \"\"),\n      );\n\n      // Special case: single workspace named \".\" - return files without prefix\n      if (this.#isSingleCurrentDirWorkspace()) {\n        return filterFilesByListPatterns({\n          files: files.map((file) =>\n            this.#sys.join(dirPath, file).replace(/^\\.\\//, \"\"),\n          ),\n          policy: this.#fusionConfig?.accessControl,\n        });\n      }\n\n      // If this is a workspace folder, add the workspace prefix to the paths\n      if (workspaceFolder && this.#workspace?.folders) {\n        const prefix = workspaceFolder.name || workspaceFolder.path;\n        return filterFilesByListPatterns({\n          files: files.map(\n            (file) =>\n              `${prefix}/${this.#sys.join(dirPath, file).replace(/^\\.\\//, \"\")}`,\n          ),\n          policy: this.#fusionConfig?.accessControl,\n        });\n      }\n\n      return filterFilesByListPatterns({\n        files: files,\n        policy: this.#fusionConfig?.accessControl,\n      });\n    } catch (error) {\n      this.#sys.Sentry?.captureException(error, {\n        extra: {\n          dirPath,\n        },\n      });\n      return [];\n    }\n  }\n\n  /**\n   * Get stats for a file in the workspace\n   * @param filePath A file path that may include a workspace prefix\n   * @returns The file stats or null if the file doesn't exist\n   */\n  async stat(\n    filePath: string,\n    skipAclCheck?: boolean,\n  ): Promise<{\n    isDirectory: () => boolean;\n    isFile: () => boolean;\n    size: number;\n  } | null> {\n    // Check ACL permissions\n    if (!skipAclCheck) {\n      const aclResult = evaluateAccess(\n        filePath,\n        \"read\",\n        this.#fusionConfig?.accessControl,\n        this.#getUserPrincipals(),\n      );\n\n      if (!aclResult.allowed) {\n        throw new PrivateError(`ACL denied: ${aclResult.message}`);\n      }\n    }\n    try {\n      let { resolvedPath } = this.resolveWorkspacePath(filePath, false);\n      if (await this.#sys.exists(resolvedPath)) {\n        return await this.#sys.stat(resolvedPath);\n      }\n    } catch (error) {\n      this.#sys.Sentry?.captureException(error, {\n        extra: {\n          filePath,\n        },\n      });\n    }\n    return null;\n  }\n\n  /**\n   * Deletes a file from the workspace\n   * @param filePath A file path that may include a workspace prefix\n   * @returns True if the delete was successful, false otherwise\n   */\n  async deleteFile(\n    filePath: string,\n    skipAclCheck?: boolean,\n  ): Promise<string | null> {\n    // Check ACL permissions\n    if (!skipAclCheck) {\n      const aclResult = evaluateAccess(\n        filePath,\n        \"write\",\n        this.#fusionConfig?.accessControl,\n        this.#getUserPrincipals(),\n      );\n\n      if (!aclResult.allowed) {\n        throw new PrivateError(`ACL denied: ${aclResult.message}`);\n      }\n    }\n\n    try {\n      const { resolvedPath } = this.resolveWorkspacePath(\n        filePath,\n        !!skipAclCheck,\n      );\n      if (!(await this.#sys.exists(resolvedPath))) {\n        return null; // File doesn't exist, consider this a success\n      }\n      await this.#sys.unlink(resolvedPath);\n      return resolvedPath;\n    } catch (error) {\n      this.#sys.Sentry?.captureException(error, {\n        extra: {\n          filePath,\n        },\n      });\n      return null;\n    }\n  }\n\n  getLinesStats() {\n    const stats = this.#sessionContext?.turns.reduce(\n      (acc, turn) => {\n        const turnStats = turn.applyResults.reduce(\n          (turnAcc, result) => ({\n            added: turnAcc.added + result.addedLines,\n            removed: turnAcc.removed + result.removedLines,\n          }),\n          { added: 0, removed: 0 },\n        );\n        return {\n          added: acc.added + turnStats.added,\n          removed: acc.removed + turnStats.removed,\n        };\n      },\n      { added: 0, removed: 0 },\n    ) ?? { added: 0, removed: 0 };\n\n    return {\n      ...stats,\n      net: stats.added - stats.removed,\n    };\n  }\n\n  /**\n   * Get git diff between current commit and remote branch\n   * If remote current branch doesn't exist, gets diff between default branch and current branch\n   * @param numberOfContextLines - Optional number of context lines to include in the diff\n   * @param includeFilesOnly - If true, only return filePath and action properties\n   * @param filePaths - Optional array of file paths to limit the diff to specific files\n   */\n  async getDiffFromRemote({\n    numberOfContextLines,\n    includeFilesOnly,\n    filePaths,\n  }: {\n    numberOfContextLines?: number;\n    includeFilesOnly?: boolean;\n    filePaths?: Array<string>;\n  }): Promise<ApplyActionsResult[]> {\n    if (!this.#fusionContext?.git) {\n      return [];\n    }\n\n    try {\n      // Get current branch\n      const currentBranch = (\n        await this.git([\"branch\", \"--show-current\"])\n      ).trim();\n\n      if (!currentBranch) {\n        throw new Error(\"Could not determine current branch\");\n      }\n\n      // Check if origin remote exists\n      let hasOriginRemote = false;\n      try {\n        const remotes = await this.git([\"remote\"]);\n        hasOriginRemote = remotes.includes(\"origin\");\n      } catch (error) {\n        // No remotes configured\n        console.warn(\"No git remotes configured, cannot get diff from remote\");\n        throw error;\n      }\n\n      if (!hasOriginRemote) {\n        console.warn(\n          \"Origin remote not found, trying to get diff from main branch\",\n        );\n\n        // Try to get diff between current branch and main branch\n        try {\n          return await this.getDiffFromParentBranch({\n            numberOfContextLines,\n            includeFilesOnly,\n            filePaths,\n          });\n        } catch (error) {\n          console.warn(\"Failed to get diff from main branch:\", error);\n          throw error;\n        }\n      }\n\n      // Check if remote branch exists\n      let hasRemoteBranch = false;\n      let diffTarget: string;\n\n      try {\n        const remoteBranchName = `origin/${currentBranch}`;\n        const remoteExists = await this.git([\n          \"ls-remote\",\n          \"--heads\",\n          \"origin\",\n          currentBranch,\n        ]);\n        hasRemoteBranch = remoteExists.trim().length > 0;\n\n        if (hasRemoteBranch) {\n          // Use remote current branch\n          diffTarget = remoteBranchName;\n        } else {\n          // Fallback to parent branch comparison\n          return await this.getDiffFromParentBranch({\n            numberOfContextLines,\n            includeFilesOnly,\n            filePaths,\n          });\n        }\n      } catch (error) {\n        console.warn(\"Failed to check remote branches:\", error);\n        throw error;\n      }\n\n      // Build git diff command with optional context lines\n      const diffArgs = [\"diff\", diffTarget];\n\n      if (includeFilesOnly) {\n        diffArgs.push(\"--name-status\");\n      } else if (numberOfContextLines !== undefined) {\n        diffArgs.push(`-U${numberOfContextLines}`);\n      }\n\n      diffArgs.push(\"--\");\n\n      if (filePaths && filePaths.length > 0) {\n        diffArgs.push(...filePaths);\n      }\n\n      const diff = await this.git(diffArgs);\n      if (!diff || diff.trim() === \"\") {\n        return [];\n      }\n\n      return parseGitDiffToApplyActions(diff, includeFilesOnly);\n    } catch (error) {\n      console.error(\"getDiffFromRemote error:\", error);\n      throw error;\n    }\n  }\n\n  /**\n   * Get git diff based on the specified mode\n   * @param mode - The diff mode: 'previous-commit', 'parent-branch', or 'remote'\n   * @param numberOfContextLines - Optional number of context lines to include in the diff (e.g., 999 for -U999)\n   * @param includeFilesOnly - If true, only return filePath and action properties\n   * @param filePaths - Optional array of file paths to limit the diff to specific files\n   */\n  async getDiff({\n    mode = \"remote-parent-branch\",\n    numberOfContextLines,\n    includeFilesOnly,\n    filePaths,\n  }: {\n    mode: \"remote-parent-branch\" | \"remote-current-branch\";\n    numberOfContextLines?: number;\n    includeFilesOnly?: boolean;\n    filePaths?: Array<string>;\n  }): Promise<{\n    state: \"error\" | \"success\";\n    diff?: ApplyActionsResult[];\n    error?: Error;\n  }> {\n    if (!this.#fusionContext?.git) {\n      return {\n        state: \"error\",\n        error: new Error(\"Git not configured\"),\n      };\n    }\n\n    try {\n      switch (mode) {\n        case \"remote-parent-branch\": {\n          const diff = await this.getDiffFromParentBranch({\n            numberOfContextLines,\n            includeFilesOnly,\n            filePaths,\n          });\n          return {\n            state: \"success\",\n            diff,\n          };\n        }\n        case \"remote-current-branch\": {\n          const diff = await this.getDiffFromRemote({\n            numberOfContextLines,\n            includeFilesOnly,\n            filePaths,\n          });\n          return {\n            state: \"success\",\n            diff,\n          };\n        }\n        default:\n          throw new Error(`Unknown diff mode: ${mode}`);\n      }\n    } catch (error) {\n      console.error(`getDiff error for mode '${mode}':`, error);\n      this.#sys.Sentry?.captureException(error);\n      return {\n        state: \"error\",\n        error: error instanceof Error ? error : new Error(String(error)),\n      };\n    }\n  }\n\n  /**\n   * Get the default branch name from remote repository\n   * Falls back to checking common default branch names\n   */\n  private async getDefaultBranch(): Promise<string> {\n    try {\n      // First try to get the actual default branch from remote\n      const remoteInfo = await this.git([\"remote\", \"show\", \"origin\"]);\n      const defaultBranchMatch = remoteInfo.match(/HEAD branch: (.+)/);\n      if (defaultBranchMatch) {\n        const defaultBranch = defaultBranchMatch[1].trim();\n        return `origin/${defaultBranch}`;\n      }\n    } catch (error) {\n      // Continue to fallback methods\n    }\n\n    // Fallback: check if origin/main exists\n    try {\n      const mainExists = await this.git([\n        \"ls-remote\",\n        \"--heads\",\n        \"origin\",\n        \"main\",\n      ]);\n      if (mainExists.trim().length > 0) {\n        return \"origin/main\";\n      }\n    } catch (error) {\n      // Continue to next fallback\n    }\n\n    // Fallback: check if origin/master exists\n    try {\n      const masterExists = await this.git([\n        \"ls-remote\",\n        \"--heads\",\n        \"origin\",\n        \"master\",\n      ]);\n      if (masterExists.trim().length > 0) {\n        return \"origin/master\";\n      }\n    } catch (error) {\n      // Continue to final fallback\n    }\n\n    // Final fallback: try to get any remote branch\n    try {\n      const allBranches = await this.git([\"ls-remote\", \"--heads\", \"origin\"]);\n      const branches = allBranches\n        .trim()\n        .split(\"\\n\")\n        .map((line) => line.split(\"\\t\")[1])\n        .filter((branch) => branch && !branch.includes(\"HEAD\"));\n\n      if (branches.length > 0) {\n        // Use the first available branch\n        return `origin/${branches[0].replace(\"refs/heads/\", \"\")}`;\n      }\n    } catch (error) {\n      // If all else fails, throw an error\n    }\n\n    throw new Error(\n      \"Could not determine default branch. No remote branches found.\",\n    );\n  }\n\n  /**\n   * Get git diff between current branch and its parent branch (main/master)\n   * @param numberOfContextLines - Optional number of context lines to include in the diff\n   * @param includeFilesOnly - If true, only return filePath and action properties\n   * @param filePaths - Optional array of file paths to limit the diff to specific files\n   */\n  private async getDiffFromParentBranch({\n    numberOfContextLines,\n    includeFilesOnly,\n    filePaths,\n  }: {\n    numberOfContextLines?: number;\n    includeFilesOnly?: boolean;\n    filePaths?: Array<string>;\n  }): Promise<ApplyActionsResult[]> {\n    try {\n      // Get current branch\n      const currentBranch = (\n        await this.git([\"branch\", \"--show-current\"])\n      ).trim();\n\n      if (!currentBranch) {\n        throw new Error(\"Could not determine current branch\");\n      }\n\n      // Determine which parent branch exists (main or master)\n      const parentBranchName = await this.getDefaultBranch();\n\n      if (!parentBranchName) {\n        throw new Error(\"Could not find parent branch (main/master)\");\n      }\n\n      // Try to fetch the remote parent branch first\n      try {\n        await this.git([\"fetch\", ...parentBranchName.split(\"/\")]);\n      } catch (error) {\n        console.warn(`Failed to fetch remote ${parentBranchName}:`, error);\n        throw error;\n      }\n\n      const diffArgs = [\"diff\", parentBranchName];\n\n      if (includeFilesOnly) {\n        diffArgs.push(\"--name-status\");\n      } else if (numberOfContextLines !== undefined) {\n        diffArgs.push(`-U${numberOfContextLines}`);\n      }\n      diffArgs.push(\"--\");\n\n      if (filePaths && filePaths.length > 0) {\n        diffArgs.push(...filePaths);\n      }\n\n      const diff = await this.git(diffArgs);\n      if (!diff || diff.trim() === \"\") {\n        return [];\n      }\n\n      return parseGitDiffToApplyActions(diff, includeFilesOnly);\n    } catch (error) {\n      console.error(\"getDiffFromParentBranch error:\", error);\n      throw error;\n    }\n  }\n}\n\nfunction getLastGoodTurn(sessionContext: SessionContext) {\n  for (let i = sessionContext.turns.length - 1; i >= 0; i--) {\n    const turnState = sessionContext.turns[i];\n    if (turnState.state === \"done\" && turnState.nextUrl) {\n      return turnState;\n    }\n  }\n  return undefined;\n}\n\nfunction getLastUserTurn(sessionContext: SessionContext) {\n  for (let i = sessionContext.turns.length - 1; i >= 0; i--) {\n    const turnState = sessionContext.turns[i];\n    if (turnState.user.role === \"user\" && turnState.completionId) {\n      return turnState;\n    }\n  }\n  return undefined;\n}\n\nfunction getLastApplyResultsTurn(sessionContext: SessionContext) {\n  for (let i = sessionContext.turns.length - 1; i >= 0; i--) {\n    const turnState = sessionContext.turns[i];\n    if (\n      turnState.nextUrl &&\n      (turnState.applyResults.length > 0 || turnState.user.role === \"user\")\n    ) {\n      return turnState;\n    }\n  }\n  return undefined;\n}\n\nfunction getLastOne<T>(array: T[]): T | undefined {\n  return array[array.length - 1];\n}\n\nfunction inPlaceRemovePendingTurns(turns: CodegenTurn[]) {\n  for (let i = turns.length - 1; i >= 0; i--) {\n    const turn = turns[i];\n    if (turn.state !== \"done\") {\n      turns.splice(i, 1);\n    }\n  }\n}\n\nasync function restoreConsumedCredit(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionId: string,\n  restoreCredits: number,\n) {\n  const url = new URL(`${apiAirV2Host}/codegen/restore-consumed-credit`);\n  if (credentials.builderPublicKey) {\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n  }\n  if (credentials.userId) {\n    url.searchParams.set(\"userId\", credentials.userId);\n  }\n  const headers: Record<string, string> = {\n    \"Content-Type\": \"application/json\",\n  };\n  if (credentials.builderPrivateKey) {\n    headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n  }\n  try {\n    await safeFetch(url, {\n      method: \"POST\",\n      body: JSON.stringify({ sessionId, restoreCredits }),\n      headers,\n      signal: AbortSignal.timeout(30000),\n    });\n  } catch (error) {\n    const isTimeout =\n      (error && (error as any).name === \"AbortError\") ||\n      (typeof (error as any)?.code === \"string\" &&\n        (error as any).code === \"ABORT_ERR\") ||\n      (typeof (error as any)?.timeout === \"boolean\" &&\n        (error as any).timeout) ||\n      /timeout|abort/i.test((error as any)?.message ?? \"\");\n\n    sys.Sentry?.captureException(error, {\n      level: \"warning\",\n      tags: {\n        operation: \"restore-consumed-credit\",\n        timeout: isTimeout,\n      },\n    });\n  }\n}\n\n/**\n * Analyzes the payload to identify what's making it large\n */\nfunction analyzePayloadBreakdown(\n  body: CodeGenInputOptions,\n  jsonString: string,\n) {\n  const breakdown: Record<string, any> = {\n    totalSize: jsonString.length,\n    totalSizeMB: (jsonString.length / (1024 * 1024)).toFixed(2),\n  };\n\n  // Analyze attachments\n  if (body.attachments?.length) {\n    const attachmentSizes = body.attachments.map(\n      (att) => JSON.stringify(att).length,\n    );\n    const attachmentsByType: Record<\n      string,\n      { count: number; totalSize: number }\n    > = {};\n\n    body.attachments.forEach((att, idx) => {\n      const type = att.type || \"unknown\";\n      const size = attachmentSizes[idx];\n      if (!attachmentsByType[type]) {\n        attachmentsByType[type] = { count: 0, totalSize: 0 };\n      }\n      attachmentsByType[type].count++;\n      attachmentsByType[type].totalSize += size;\n    });\n\n    breakdown.attachments = {\n      count: body.attachments.length,\n      totalSize: attachmentSizes.reduce((a, b) => a + b, 0),\n      totalSizeMB: (\n        attachmentSizes.reduce((a, b) => a + b, 0) /\n        (1024 * 1024)\n      ).toFixed(2),\n      byType: Object.entries(attachmentsByType).map(([type, data]) => ({\n        type,\n        count: data.count,\n        sizeMB: (data.totalSize / (1024 * 1024)).toFixed(2),\n      })),\n      largestAttachments: body.attachments\n        .map((att, idx) => ({\n          type: att.type,\n          size: attachmentSizes[idx],\n          sizeMB: (attachmentSizes[idx] / (1024 * 1024)).toFixed(2),\n        }))\n        .sort((a, b) => b.size - a.size)\n        .slice(0, 5),\n    };\n  }\n\n  // Analyze files\n  if (body.files?.length) {\n    const filesByExtension: Record<\n      string,\n      { count: number; withContent: number; totalContentSize: number }\n    > = {};\n    let totalFilesWithContent = 0;\n    let totalFilesWithoutContent = 0;\n    let totalContentSize = 0;\n\n    body.files.forEach((file) => {\n      const ext = file.filePath?.split(\".\").pop() || \"no-ext\";\n      if (!filesByExtension[ext]) {\n        filesByExtension[ext] = {\n          count: 0,\n          withContent: 0,\n          totalContentSize: 0,\n        };\n      }\n      filesByExtension[ext].count++;\n\n      if (file.content) {\n        filesByExtension[ext].withContent++;\n        filesByExtension[ext].totalContentSize += file.content.length;\n        totalFilesWithContent++;\n        totalContentSize += file.content.length;\n      } else {\n        totalFilesWithoutContent++;\n      }\n    });\n\n    const topExtensions = Object.entries(filesByExtension)\n      .sort((a, b) => b[1].totalContentSize - a[1].totalContentSize)\n      .slice(0, 10)\n      .map(([ext, data]) => ({\n        ext,\n        count: data.count,\n        withContent: data.withContent,\n        contentSizeMB: (data.totalContentSize / (1024 * 1024)).toFixed(2),\n      }));\n\n    breakdown.files = {\n      totalCount: body.files.length,\n      withContent: totalFilesWithContent,\n      withoutContent: totalFilesWithoutContent,\n      totalContentSize,\n      totalContentSizeMB: (totalContentSize / (1024 * 1024)).toFixed(2),\n      topExtensionsBySize: topExtensions,\n    };\n  }\n\n  // Analyze prompts\n  const promptSizes: Record<string, any> = {};\n  if (body.userPrompt) {\n    promptSizes.userPrompt = {\n      size: body.userPrompt.length,\n      sizeMB: (body.userPrompt.length / (1024 * 1024)).toFixed(2),\n      hasGitDiff: body.userPrompt.includes(\"<modified-files-context>\"),\n    };\n\n    // Extract git diff size if present\n    if (promptSizes.userPrompt.hasGitDiff) {\n      const match = body.userPrompt.match(\n        /<modified-files-context>([\\s\\S]*?)<\\/modified-files-context>/,\n      );\n      if (match) {\n        promptSizes.gitDiffInPrompt = {\n          size: match[1].length,\n          sizeMB: (match[1].length / (1024 * 1024)).toFixed(2),\n        };\n      }\n    }\n  }\n\n  if (body.uiContextPrompt) {\n    promptSizes.uiContextPrompt = {\n      size: body.uiContextPrompt.length,\n      sizeMB: (body.uiContextPrompt.length / (1024 * 1024)).toFixed(2),\n    };\n  }\n\n  if (Object.keys(promptSizes).length > 0) {\n    breakdown.prompts = promptSizes;\n  }\n\n  // Analyze tool results\n  if (body.toolResults?.length) {\n    const toolResultSize = JSON.stringify(body.toolResults).length;\n    breakdown.toolResults = {\n      count: body.toolResults.length,\n      totalSize: toolResultSize,\n      totalSizeMB: (toolResultSize / (1024 * 1024)).toFixed(2),\n    };\n  }\n\n  return breakdown;\n}\n\nasync function* completionStream(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  body: CodeGenInputOptions,\n  signal: AbortSignal,\n) {\n  if (!credentials.builderPrivateKey) {\n    throw new Error(\"Missing builder public key during completion stream\");\n  }\n  const abortController = new AbortController();\n  const json = JSON.stringify(body);\n  const url = new URL(`${apiAirV2Host}/codegen/completion`);\n  if (credentials.builderPublicKey) {\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n  }\n  if (credentials.userId) {\n    url.searchParams.set(\"userId\", credentials.userId);\n  }\n\n  const startTime = performance.now();\n  let lastMessageTime = startTime;\n  let lastPingTime: number | undefined;\n  let didStream = false;\n  let responseSize = 0;\n  let lastEvents: string[] = [];\n  let timer;\n  try {\n    const res = await safeFetch(url, {\n      method: \"POST\",\n      body: json,\n      keepalive: false,\n      headers: {\n        Connection: \"close\",\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${credentials.builderPrivateKey}`,\n      },\n      signal: abortSignalAny([signal, abortController.signal]),\n    });\n    if (!res.ok) {\n      const httpText = await res.text();\n      let errorMessage = `Bad Status: ${res.status}: ${httpText}`;\n\n      // For 413 errors, add payload breakdown to help debug\n      if (res.status === 413) {\n        const breakdown = analyzePayloadBreakdown(body, json);\n        const topContributors: string[] = [];\n\n        if (breakdown.attachments?.totalSizeMB) {\n          topContributors.push(\n            `Attachments: ${breakdown.attachments.totalSizeMB}MB (${breakdown.attachments.count} files)`,\n          );\n        }\n        if (breakdown.files?.totalContentSizeMB) {\n          topContributors.push(\n            `File content: ${breakdown.files.totalContentSizeMB}MB (${breakdown.files.withContent} files)`,\n          );\n        }\n        if (breakdown.prompts?.gitDiffInPrompt?.sizeMB) {\n          topContributors.push(\n            `Git diff: ${breakdown.prompts.gitDiffInPrompt.sizeMB}MB`,\n          );\n        }\n        if (breakdown.prompts?.uiContextPrompt?.sizeMB) {\n          topContributors.push(\n            `UI context: ${breakdown.prompts.uiContextPrompt.sizeMB}MB`,\n          );\n        }\n        if (breakdown.toolResults?.totalSizeMB) {\n          topContributors.push(\n            `Tool results: ${breakdown.toolResults.totalSizeMB}MB`,\n          );\n        }\n\n        if (topContributors.length > 0) {\n          errorMessage += `\\n\\nPayload size: ${breakdown.totalSizeMB}MB. Top contributors:\\n${topContributors.join(\"\\n\")}`;\n        }\n      }\n\n      const error = new Error(errorMessage);\n      error.name = `BadStatus${res.status}`;\n      throw error;\n    }\n    const stream = transformStream(res.body);\n\n    /**\n     * The idle timeout will fire if the stream becomes silent for 40 seconds.\n     * However this is very unlikely and unrelated to LLM issues, since the /codegen/completion endpoints\n     * emits a constant ping message every 2 seconds.\n     *\n     * This timeout was added to prevent the completion for hanging much longer, usually 30minutes (the cloud run's max timeout).\n     */\n    const IDLE_TIMEOUT = 40000;\n    timer = setTimeout(() => {\n      if (!signal.aborted) {\n        const error = new Error(\"HTTP Stream Hang\");\n        error.name = \"HTTPStreamHang\";\n        abortController.abort(error);\n      }\n    }, IDLE_TIMEOUT);\n    for await (const value of stream) {\n      lastMessageTime = performance.now();\n      responseSize += value.length;\n      clearTimeout(timer);\n      timer = setTimeout(() => {\n        if (!signal.aborted) {\n          const error = new Error(\"HTTP Stream Broke\");\n          error.name = \"HTTPStreamBroke\";\n          abortController.abort(error);\n        }\n      }, IDLE_TIMEOUT);\n      if (value.length === 0) {\n        continue;\n      }\n      lastEvents.push(value);\n      lastEvents = lastEvents.slice(-10);\n      try {\n        const json = JSON.parse(value) as GenerateCodeEvent;\n\n        if (json.type === \"ping\") {\n          lastPingTime = performance.now();\n        }\n\n        didStream = true;\n        yield json;\n      } catch (e) {\n        sys.Sentry?.captureException(e, {\n          extra: {\n            value,\n          },\n          tags: {\n            operation: \"codegen-stream\",\n          },\n        });\n      }\n    }\n  } catch (e) {\n    const now = performance.now();\n\n    if (\n      (e instanceof Error && e.name === \"AbortError\") ||\n      (e instanceof Error && e.name === \"HTTPStreamBroke\") ||\n      (e instanceof Error && e.name === \"HTTPStreamHang\") ||\n      (e instanceof Error && e.name === \"BadStatus403\") ||\n      e instanceof CodeGenError\n    ) {\n      if (e instanceof Error && e.name === \"HTTPStreamBroke\") {\n        const requestSize = new Blob([json]).size;\n        const timeSinceLastPing =\n          lastPingTime !== undefined ? now - lastPingTime : undefined;\n        sys.Sentry?.setContext(\"brokenStreamInfo\", {\n          timeSinceLastPing,\n          lastMessageElapsed: now - lastMessageTime,\n          totalElapsed: now - startTime,\n          responseSize,\n          requestSize,\n          didStream,\n          lastEvents,\n        });\n\n        // attachments that are too large will be rejected by sentry\n        const MAX_SIZE = 20 * 1024 * 1024;\n        const isAttachmentTooLarge = requestSize > MAX_SIZE;\n        sys.Sentry?.getCurrentScope().addAttachment({\n          filename: isAttachmentTooLarge ? \"truncated-body.json\" : \"body.json\",\n          data: isAttachmentTooLarge ? json.slice(0, 200000) : json,\n        });\n      }\n      throw e;\n    }\n    if (e instanceof NetworkError) {\n      throw e;\n    }\n\n    const errName = e instanceof Error ? e.name : \"UnknownError\";\n    const newError = new PrivateError(\n      `codegen/completion endpoint: ${errName}`,\n      {\n        cause: e,\n      },\n    );\n\n    // Get detailed payload breakdown for debugging\n    const payloadBreakdown = analyzePayloadBreakdown(body, json);\n\n    sys.Sentry?.captureException(newError, {\n      tags: {\n        operation: \"codegen-stream\",\n      },\n      extra: {\n        bodySize: json.length,\n        responseSize,\n        attachments: body.attachments?.length ?? 0,\n        files: body.files?.length ?? 0,\n        toolResults: body.toolResults?.length ?? 0,\n        didStream,\n        lastMessageElapsed: now - lastMessageTime,\n        totalElapsed: now - startTime,\n        lastEvents,\n\n        // Detailed payload breakdown\n        payloadBreakdown,\n      },\n    });\n    throw newError;\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\nasync function codegenEndpoint(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  endpoint: string,\n  feedback: Record<string, any>,\n) {\n  let lastError: any;\n  const maxRetries = 3;\n  const json = JSON.stringify(feedback);\n  for (let i = 0; i < maxRetries; i++) {\n    try {\n      const url = new URL(`${apiAirV2Host}${endpoint}`);\n      if (credentials.builderPublicKey) {\n        url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n      }\n      if (credentials.userId) {\n        url.searchParams.set(\"userId\", credentials.userId);\n      }\n\n      const headers: Record<string, string> = {\n        \"Content-Type\": \"application/json\",\n      };\n      if (credentials.builderPrivateKey) {\n        headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n      }\n      const res = await safeFetch(url, {\n        method: \"POST\",\n        body: json,\n        keepalive: true,\n        headers,\n        signal: AbortSignal.timeout(30000),\n      });\n      if (res.ok) {\n        return true;\n      }\n      throw new Error(`Bad Status: ${res.status}`);\n    } catch (error) {\n      if (error instanceof NetworkError) {\n        displayNetworkError(error);\n      }\n      lastError = error;\n    }\n    if (i < maxRetries - 1) {\n      await exponentialBackoff(i);\n    }\n  }\n  if (lastError) {\n    sys.Sentry?.captureException(lastError);\n  }\n  return false;\n}\n\nasync function setLastCompletionOfSession(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  data: CodegenSetLastCompletion,\n  _verbose: boolean,\n) {\n  let lastError: any;\n  const maxRetries = 2;\n  const json = JSON.stringify(data);\n  for (let i = 0; i < maxRetries; i++) {\n    try {\n      const url = new URL(\n        `${apiAirV2Host}/codegen/sessions/set-last-completion`,\n      );\n      if (credentials.builderPublicKey) {\n        url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n      }\n      if (credentials.userId) {\n        url.searchParams.set(\"userId\", credentials.userId);\n      }\n\n      const headers: Record<string, string> = {\n        \"Content-Type\": \"application/json\",\n      };\n      if (credentials.builderPrivateKey) {\n        headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n      }\n      const res = await safeFetch(url, {\n        method: \"POST\",\n        body: json,\n        keepalive: true,\n        headers,\n        signal: AbortSignal.timeout(30000),\n      });\n      if (res.ok) {\n        return true;\n      }\n      throw new Error(`Bad Status: ${res.status}`);\n    } catch (error) {\n      // Check if this is a NetworkError and display detailed information\n      if (error instanceof NetworkError) {\n        displayNetworkError(error);\n      }\n      lastError = error;\n    }\n    if (i < maxRetries - 1) {\n      await exponentialBackoff(i);\n    }\n  }\n  if (lastError) {\n    sys.Sentry?.captureException(lastError);\n  }\n  return false;\n}\n\nasync function getTurnsBySessionId(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionId: string,\n  linear: boolean,\n  completionIdCursor?: string,\n): Promise<GetSessionTurnsResult> {\n  try {\n    const url = new URL(`${apiAirV2Host}/codegen/sessions/${sessionId}/turns`);\n    if (credentials.builderPublicKey) {\n      url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n    }\n    if (credentials.userId) {\n      url.searchParams.set(\"userId\", credentials.userId);\n    }\n    url.searchParams.set(\"linear\", String(linear));\n    if (completionIdCursor) {\n      url.searchParams.set(\"completionIdCursor\", completionIdCursor);\n    }\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    if (credentials.builderPrivateKey) {\n      headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n    }\n    const res = await safeFetch(url, {\n      method: \"GET\",\n      headers,\n      keepalive: true,\n      signal: AbortSignal.timeout(10000),\n    });\n\n    const json = await res.json();\n    return json as GetSessionTurnsResult;\n  } catch (error) {\n    // Check if this is a NetworkError and display detailed information\n    if (error instanceof NetworkError) {\n      displayNetworkError(error);\n    }\n    sys.Sentry?.captureException(error);\n    return {\n      turns: [],\n      sessionId: sessionId,\n      initialUrl: undefined,\n      beforeCommit: undefined,\n      title: undefined,\n      createdUnixTime: undefined,\n      updatedUnixTime: undefined,\n      allIds: [],\n      lastCompletionId: undefined,\n      canLoadMore: false,\n    };\n  }\n}\n\nasync function getCustomInstructions({\n  sys,\n  projectDir,\n  currentDir,\n  rootDir,\n}: {\n  sys: DevToolsSys;\n  /** Use to generate relative paths. */\n  projectDir: string;\n  /** Where to start. */\n  currentDir: string;\n  /** Where to stop */\n  rootDir: string;\n}) {\n  const customInstructions: CustomInstruction[] = [];\n\n  /**\n   * Recursively find all .mdc files in a rules directory\n   * @param dir - The directory to search\n   * @param rulesFolderRoot - The root of the .builder/rules/ folder (used for calculating relative paths)\n   * @param ruleRelativePath - The path relative to rulesFolderRoot (accumulated during recursion)\n   */\n  async function findRulesFilesRecursively(\n    dir: string,\n    rulesFolderRoot: string,\n    ruleRelativePath: string = \"\",\n  ): Promise<void> {\n    try {\n      if (!(await sys.exists(dir))) {\n        return;\n      }\n\n      const entries = await sys.readdir(dir);\n      for (const entry of entries) {\n        const entryPath = sys.join(dir, entry);\n        const stat = await sys.stat(entryPath).catch(() => null);\n        if (!stat) continue;\n\n        if (stat.isDirectory()) {\n          const newRulePath = ruleRelativePath\n            ? `${ruleRelativePath}/${entry}`\n            : entry;\n          await findRulesFilesRecursively(\n            entryPath,\n            rulesFolderRoot,\n            newRulePath,\n          );\n        } else {\n          await parseCursorRules(entryPath);\n        }\n      }\n    } catch (error) {\n      // ignore directory read errors\n    }\n  }\n\n  async function parseCursorRules(absolutePath: string) {\n    let exists = false;\n    try {\n      const stat = await sys.stat(absolutePath);\n      exists = stat.isFile();\n    } catch {\n      exists = false;\n    }\n    try {\n      if (exists) {\n        const relativePath = sys.relative(projectDir, absolutePath);\n        const fileContent = await sys.readFile(absolutePath);\n        if (fileContent) {\n          const customInstruction = createCustomInstructionFromMdc(\n            fileContent,\n            relativePath,\n          );\n          customInstructions.push(customInstruction);\n        }\n      }\n    } catch (error) {\n      sys.Sentry?.captureException(error);\n    }\n  }\n\n  async function tryAddCustomInstructions(absolutePath: string) {\n    let exists = false;\n    try {\n      const stat = await sys.stat(absolutePath);\n      exists = stat.isFile();\n    } catch {\n      exists = false;\n    }\n    try {\n      if (exists) {\n        const customInstructionsContent = await sys.readFile(absolutePath);\n        const relativePath = sys.relative(projectDir, absolutePath);\n        if (customInstructionsContent) {\n          const id = \"hash-\" + (await sys.hash(customInstructionsContent));\n          customInstructions.push({\n            id: id,\n            name: relativePath,\n            content: customInstructionsContent,\n            filePath: relativePath,\n          });\n        }\n      }\n    } catch (error) {\n      sys.Sentry?.captureException(error);\n    }\n  }\n\n  const rulesFolders = [\".cursor/rules\", \".builder/rules\"];\n  const rulesFiles = [\n    \".cursorrules\",\n    \".builderrules\",\n    \".windsurfrules\",\n    \".github/copilot-instructions.md\",\n  ];\n\n  // Add project rules recursing up from current directory\n  let prevDir: string | undefined;\n  do {\n    try {\n      for (const rulesFolder of rulesFolders) {\n        const projectRulesDir = sys.resolve(currentDir, rulesFolder);\n        if (await sys.exists(projectRulesDir)) {\n          await findRulesFilesRecursively(projectRulesDir, projectRulesDir);\n        }\n      }\n    } catch (error) {\n      console.debug(`Error reading ${currentDir}:`, error);\n    }\n    for (const rulesFile of rulesFiles) {\n      await tryAddCustomInstructions(sys.resolve(currentDir, rulesFile));\n    }\n    // windows has roots like C:\\, etc.\n    // prevent infinite loop\n    prevDir = currentDir;\n    currentDir = sys.dirname(currentDir);\n    if (currentDir === prevDir) {\n      break;\n    }\n  } while (prevDir !== rootDir);\n\n  return customInstructions;\n}\n\nconst parseCLIURL = (url: string | undefined) => {\n  if (!url) {\n    return {\n      id: undefined,\n      isInitial: true,\n    };\n  }\n  const parsed = new URL(url);\n  if (parsed.protocol === \"cgen:\") {\n    return {\n      isInitial: false,\n      id: parsed.pathname.slice(1),\n    };\n  } else {\n    return {\n      isInitial: true,\n      id: undefined,\n    };\n  }\n};\n\nexport async function getUserContext(\n  sys: DevToolsSys,\n  gitWorkingDirectory?: string,\n) {\n  const repoInfo = await sys.getRepoInfo(gitWorkingDirectory);\n  const userContext: UserContext = {\n    client: \"@builder.io/dev-tools\",\n    clientVersion: sys.version,\n    nodeVersion: process.version,\n    frameworks: sys.getFrameworks().map((f) => f.name),\n    systemPlatform: process.platform,\n    systemEOL: os.EOL,\n    systemArch: os.arch(),\n    inGitRepo: !!repoInfo.remoteUrl,\n  };\n  try {\n    const userInfo = os.userInfo();\n    userContext.systemShell = userInfo.shell ?? undefined;\n  } catch {\n    // ignore\n  }\n  return userContext;\n}\n\nexport function makeAsyncIterator<T>() {\n  let done = false;\n  let events: T[] = [];\n  let resolve: () => void;\n  let promise: Promise<void>;\n\n  defer();\n\n  function defer() {\n    promise = new Promise<void>((r) => (resolve = r));\n  }\n\n  async function* read(): AsyncGenerator<T, void, void> {\n    await promise;\n    const item = events.shift();\n\n    if (item) {\n      yield item;\n    }\n    if (!done) yield* read();\n  }\n\n  function write(event: T) {\n    events.push(event);\n    resolve();\n    defer();\n  }\n\n  function end() {\n    done = true;\n    resolve();\n  }\n\n  return [read(), write, end] as const;\n}\n\nfunction countOccurrences(str: string, char: string) {\n  return str.split(char).length - 1;\n}\n\nfunction isAGENTSFile(filePath: string) {\n  return (\n    filePath.endsWith(\"CLAUDE.md\") ||\n    filePath.endsWith(\"AGENT.md\") ||\n    filePath.endsWith(\"AGENTS.md\")\n  );\n}\n\nfunction isBaseImportantFile(filePath: string) {\n  const numSlashes = countOccurrences(filePath, \"/\");\n  return (\n    isAGENTSFile(filePath) ||\n    (numSlashes < 2 && filePath.endsWith(\"package.json\")) ||\n    filePath.endsWith(\"Podfile\") ||\n    filePath.endsWith(\"Cartfile\") ||\n    (numSlashes < 2 && filePath.endsWith(\"global.css\")) ||\n    (numSlashes < 2 && filePath.endsWith(\"tailwind.config.ts\")) ||\n    (numSlashes < 2 && filePath.endsWith(\"tailwind.config.js\")) ||\n    filePath.endsWith(\"libraries.toml\")\n  );\n}\n\nfunction hasBuildError(text: string) {\n  if (!text) return false; // fast-path\n\n  const errorMatchers = [\n    // \u2500\u2500 webpack \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    /ERROR[ ]in\\b/i, // \"ERROR in ./src/App.tsx ...\"\n\n    // \u2500\u2500 vite / webpack-dev-server etc. \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    /(\\b|^)failed to compile\\b/i, // \"\u2718 failed to compile\"\n    /(\\b|^)Internal server error\\b/i, // vite\n    /(\\b|^)Error when evaluating SSR module virtual\\b/i, // vite\n    /(\\b|^)ReferenceError: \\w* is not defined\\b/i, // vite\n\n    // \u2500\u2500 typescript (tsc / ts-loader / vite) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    /(\\b|^)Found \\d+ errors?\\./i, // summary line\n    /(\\b|^)error TS\\d+\\b/i, // individual error lines\n\n    // \u2500\u2500 generic fall-backs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    /(\\b|^)Module build failed\\b/i, // loader failure\n    /(\\b|^)Build failed\\b/i, // esbuild / rspack\n    /(\\b|^)\\[Error:.*\\]/i, // [Error: ...]\n    /(\\b|^)uncaughtException: /i, // \"uncaughtException: ...\"\n  ];\n\n  return errorMatchers.some((re) => re.test(text));\n}\n\n/**\n * Loads a workspace configuration from a JSON file\n * @param sys DevToolsSys instance\n * @param workspaceFile Path to the workspace JSON file\n * @returns The workspace configuration and working directory\n */\nexport async function loadWorkspace(\n  sys: DevToolsSys,\n  workspaceFile: string,\n): Promise<{\n  workspace: WorkspaceConfiguration;\n  workingDirectory: string;\n}> {\n  try {\n    // Resolve the workspace file path\n    const resolvedPath = sys.resolve(sys.cwd(), workspaceFile);\n\n    // Check if the file exists\n    if (!(await sys.exists(resolvedPath))) {\n      throw new Error(`Workspace file not found: ${workspaceFile}`);\n    }\n\n    // Read and parse the workspace file\n    const content = await sys.readFile(resolvedPath);\n    if (!content) {\n      throw new Error(`Failed to read workspace file: ${workspaceFile}`);\n    }\n\n    const workspaceConfig = JSON.parse(content);\n\n    // Validate the workspace configuration\n    if (!workspaceConfig.folders || !Array.isArray(workspaceConfig.folders)) {\n      throw new Error(\n        'Invalid workspace configuration: missing \"folders\" array',\n      );\n    }\n\n    // Get the working directory (the directory containing the workspace file)\n    const workingDirectory = sys.dirname(resolvedPath);\n\n    return {\n      workspace: workspaceConfig,\n      workingDirectory,\n    };\n  } catch (error) {\n    console.error(\n      `Error loading workspace: ${error instanceof Error ? error.message : String(error)}`,\n    );\n    throw error;\n  }\n}\n\nfunction mergeUserMessages(\n  currentMessage: GenerateUserMessage,\n  newMessage: GenerateUserMessage,\n): GenerateUserMessage {\n  return {\n    ...newMessage,\n    maxCompletions: Math.max(\n      currentMessage.maxCompletions ?? DEFAULT_MAX_COMPLETIONS,\n      newMessage.maxCompletions ?? DEFAULT_MAX_COMPLETIONS,\n    ),\n    userPrompt: currentMessage.userPrompt + \"\\n\\n\" + newMessage.userPrompt,\n    files: Array.from(\n      new Set([...(currentMessage.files ?? []), ...(newMessage.files ?? [])]),\n    ),\n    includeBaseFiles: currentMessage.includeBaseFiles,\n    skipSearch: newMessage.skipSearch,\n  };\n}\n\nexport function keepAlive() {\n  const t = setInterval(() => {}, 1 << 30);\n  return () => clearInterval(t); // call this when you're really finished\n}\n\nfunction parseAheadBehind(line: string) {\n  // split on any run of whitespace and filter out empties\n  const parts = line.trim().split(/\\s+/).filter(Boolean);\n\n  const ahead = Number.parseInt(parts[0] ?? \"\", 10);\n  const behind = Number.parseInt(parts[1] ?? \"\", 10);\n\n  return {\n    ahead: Number.isFinite(ahead) ? ahead : 0,\n    behind: Number.isFinite(behind) ? behind : 0,\n  };\n}\n\nexport class BashError extends Error {\n  public readonly code: number | string | undefined;\n  public readonly stdout: string;\n  public readonly stderr: string;\n  public readonly command: string;\n\n  constructor(\n    command: string,\n    code: number | string | undefined,\n    stdout: string,\n    stderr: string,\n    opts?: {\n      cause?: Error;\n    },\n  ) {\n    super(`${command} failed with code ${code}\\n\\n${stdout}\\n${stderr}`, opts);\n    this.name = \"BashError\";\n    this.command = command;\n    this.code = code;\n    this.stdout = stdout;\n    this.stderr = stderr;\n  }\n}\n\nfunction mergeEnvironmentVariables(\n  envVariables: EnvironmentVariable[],\n  extraEnvVariables: EnvironmentVariable[],\n) {\n  const merged: EnvironmentVariable[] = [];\n  function addEnv(env: EnvironmentVariable) {\n    const index = merged.findIndex((e) => e.key === env.key);\n    if (index >= 0) {\n      merged[index] = env;\n    } else {\n      merged.push(env);\n    }\n  }\n  for (const env of envVariables) {\n    addEnv(env);\n  }\n  for (const env of extraEnvVariables) {\n    addEnv(env);\n  }\n  return merged;\n}\n\nfunction processPushChangesArgs(opts: PushChangesArgs) {\n  if (typeof opts === \"boolean\") {\n    return {\n      pullFirst: opts,\n    };\n  }\n  return opts;\n}\n\nfunction getErrorMessage(err: unknown) {\n  if (err instanceof Error) {\n    let message = `${err.message}`;\n    if (err.cause instanceof Error) {\n      message += `\\n=======\\n`;\n      message += getErrorMessage(err.cause);\n    }\n    return message;\n  }\n  return String(err);\n}\n", "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n", "import isUnicodeSupported from \"is-unicode-supported\";\nimport color from \"picocolors\";\nimport { cursor, erase } from \"sisteransi\";\n\nimport { green, red } from \"picocolors\";\n\nexport const spinner = () => {\n  const frames = unicode ? [\"\u25D2\", \"\u25D0\", \"\u25D3\", \"\u25D1\"] : [\"\u2022\", \"o\", \"O\", \"0\"];\n  const delay = unicode ? 80 : 120;\n\n  let loop: NodeJS.Timeout;\n  let isSpinnerActive: boolean = false;\n  let _message: string = \"\";\n  let _extra: string = \"\";\n  let _lastMessage: string = \"\";\n\n  const handleExit = (code: number) => {\n    const msg = code > 1 ? \"Something went wrong\" : \"Canceled\";\n    if (isSpinnerActive) stop(msg, code);\n  };\n\n  const errorEventHandler = (err: Error, origin: string | Promise<unknown>) => {\n    console.error(origin, err);\n    handleExit(2);\n  };\n  const signalEventHandler = () => handleExit(1);\n\n  const registerHooks = () => {\n    // Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n    process.on(\"uncaughtExceptionMonitor\", errorEventHandler);\n    // Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n    process.on(\"unhandledRejection\", errorEventHandler);\n    // Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n    process.on(\"SIGINT\", signalEventHandler);\n    process.on(\"SIGTERM\", signalEventHandler);\n    process.on(\"exit\", handleExit);\n  };\n\n  const clearHooks = () => {\n    process.removeListener(\"uncaughtExceptionMonitor\", errorEventHandler);\n    process.removeListener(\"unhandledRejection\", errorEventHandler);\n    process.removeListener(\"SIGINT\", signalEventHandler);\n    process.removeListener(\"SIGTERM\", signalEventHandler);\n    process.removeListener(\"exit\", handleExit);\n  };\n\n  const start = (msg: string = \"\"): void => {\n    isSpinnerActive = true;\n    _message = msg.replace(/\\.+$/, \"\");\n    process.stdout.write(`${color.gray(S_BAR)}\\n`);\n    let frameIndex = 0;\n    let dotsTimer = 0;\n    registerHooks();\n    if (!process.env.CI) {\n      loop = setInterval(() => {\n        const frame = color.magenta(frames[frameIndex]);\n        const loadingDots = \".\".repeat(Math.floor(dotsTimer)).slice(0, 3);\n        process.stdout.write(\n          cursor.move(-999, -_lastMessage.split(\"\\n\").length + 1),\n        );\n        process.stdout.write(erase.down(_lastMessage.split(\"\\n\").length));\n        const toWrite = `${frame}  ${_message}${loadingDots}${_extra}`;\n        process.stdout.write(toWrite);\n        frameIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n        dotsTimer = dotsTimer < frames.length ? dotsTimer + 0.125 : 0;\n        _lastMessage = toWrite;\n      }, delay) as any;\n    }\n  };\n\n  const stop = (msg?: string, code: number = 0): void => {\n    _message = msg ?? _message;\n    isSpinnerActive = false;\n    clearInterval(loop);\n    const step =\n      code === 0\n        ? green(S_STEP_SUBMIT)\n        : code === 1\n          ? red(S_STEP_CANCEL)\n          : red(S_STEP_ERROR);\n    process.stdout.write(\n      cursor.move(-999, -_lastMessage.split(\"\\n\").length + 1),\n    );\n    process.stdout.write(erase.down(_lastMessage.split(\"\\n\").length));\n    process.stdout.write(`${step}  ${_message}\\n`);\n    _lastMessage = _message;\n    clearHooks();\n  };\n\n  const message = (msg: string = \"\"): void => {\n    _message = msg ?? _message;\n  };\n\n  const extra = (msg: string = \"\"): void => {\n    _extra = msg;\n  };\n\n  return {\n    start,\n    stop,\n    message,\n    extra,\n  };\n};\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\n\nconst S_BAR = s(\"\u2502\", \"|\");\n\nconst S_STEP_CANCEL = s(\"\u25A0\", \"x\");\nconst S_STEP_ERROR = s(\"\u25B2\", \"x\");\nconst S_STEP_SUBMIT = s(\"\u25C7\", \"o\");\n", "export async function openBrowser(href: string) {\n  const { default: open } = await import(\"open\");\n  await open(href);\n}\n", "import { EXAMPLE_OR_STARTER_REPOS, type FusionConfig } from \"$/ai-utils\";\nimport { cancel, isCancel, log, text } from \"@clack/prompts\";\nimport type { LaunchArgs } from \"../launch\";\nimport { exit } from \"process\";\nimport type { DevToolsSys } from \"../../types\";\n\nasync function readFile(\n  sys: DevToolsSys,\n  filePath: string,\n  optionName: string,\n) {\n  const resolvedPath = sys.isAbsolute(filePath)\n    ? filePath\n    : sys.resolve(sys.cwd(), filePath);\n\n  const content = await sys.readFile(resolvedPath);\n  if (!content) {\n    throw new Error(`Failed to read ${optionName} file: ${resolvedPath}`);\n  }\n  log.info(`\uD83D\uDCC4 Loaded ${optionName} from file: ${resolvedPath}`);\n  return content;\n}\n\n/**\n * Helper to get HTTPS server options from args and fusionConfig\n */\nasync function getHttpsServerOptions(\n  sys: DevToolsSys,\n  args: LaunchArgs,\n  fusionConfig: FusionConfig,\n): Promise<FusionConfig[\"httpsServerOptions\"]> {\n  const keyPath = fusionConfig.httpsServerFiles?.key;\n  const certPath = fusionConfig.httpsServerFiles?.cert;\n  const caPath = fusionConfig.httpsServerFiles?.ca;\n\n  const options: NonNullable<FusionConfig[\"httpsServerOptions\"]> = {\n    ...fusionConfig.httpsServerOptions,\n    key: keyPath\n      ? await readFile(sys, keyPath, \"key\")\n      : fusionConfig.httpsServerOptions?.key,\n    cert: certPath\n      ? await readFile(sys, certPath, \"cert\")\n      : fusionConfig.httpsServerOptions?.cert,\n    ca: caPath\n      ? await readFile(sys, caPath, \"ca\")\n      : fusionConfig.httpsServerOptions?.ca,\n  };\n\n  // Handle inline HTTPS arguments (args take precedence over config)\n  // Filter out undefined values\n  const filtered: NonNullable<FusionConfig[\"httpsServerOptions\"]> =\n    Object.fromEntries(\n      Object.entries(options).filter(([_, value]) => value !== undefined),\n    );\n\n  // Return undefined if no options remain after filtering\n  if (Object.keys(filtered).length === 0) {\n    return undefined;\n  }\n\n  return filtered;\n}\n\nexport async function getFusionConfig(\n  sys: DevToolsSys,\n  args: LaunchArgs,\n): Promise<FusionConfig> {\n  const workingDirectory: string = sys.cwd();\n  let isLocal = !!args.local || !args.projectId;\n  let fusionConfig: FusionConfig = {\n    devCommand: \"\",\n    workingDirectory,\n    projectId: args.projectId,\n    branchName: args.branchName,\n    serverUrl: \"\",\n    commitMode: \"commits\",\n    mode: \"init-and-launch\",\n    isLocal,\n    allowedCommands: [\n      \"npm *\",\n      \"pnpm *\",\n      \"yarn *\",\n      \"yarn\",\n      \"git *\",\n      \"export *\",\n      \"rails *\",\n      \"gem *\",\n      \"bundle *\",\n      \"rake *\",\n      \"echo *\",\n      \"cd *\",\n      \"find *\",\n      \"ls *\",\n      \"rm *\",\n      \"cp *\",\n      \"mv *\",\n      \"curl *\",\n      \"npx tsc *\",\n      \"head *\",\n      \"lsof *\",\n      \"kill *\",\n      \"ps *\",\n      \"awk *\",\n      \"cat *\",\n      \"grep *\",\n      \"sed *\",\n      \"tail *\",\n      \"touch *\",\n      \"mkdir *\",\n      \"npx *\",\n      \"env\",\n      \"printenv *\",\n      \"sleep *\",\n      \"netlify *\",\n      \"node *\",\n      \"tsx *\",\n    ],\n  };\n  if (args.configJson) {\n    try {\n      const loadedConfig = JSON.parse(args.configJson) as Partial<FusionConfig>;\n      fusionConfig = Object.assign({}, fusionConfig, loadedConfig);\n      if (fusionConfig.projectId) {\n        isLocal = false;\n        fusionConfig.isLocal = false;\n      }\n    } catch (err) {\n      sys.Sentry?.captureException(err);\n    }\n  } else {\n    const fusionConfigPath = await getFusionConfigPath(sys, args);\n    if (fusionConfigPath && (await sys.exists(fusionConfigPath))) {\n      try {\n        const content = await sys.readFile(fusionConfigPath);\n        if (content) {\n          const loadedConfig = JSON.parse(content) as Partial<FusionConfig>;\n          fusionConfig = Object.assign({}, fusionConfig, loadedConfig);\n        }\n      } catch (err) {\n        sys.Sentry?.captureException(err);\n      }\n    }\n  }\n\n  if (fusionConfig.command) {\n    if (!fusionConfig.devCommand) {\n      fusionConfig.devCommand = fusionConfig.command;\n    }\n    delete fusionConfig.command;\n  }\n  const command = args.c || (args.command as string);\n  const port = args.p || (args.port as number);\n  const installCommand = args.installCommand as string;\n  const serverUrl = args.serverUrl as string;\n  let isInteractive =\n    args.interactive && !args.configJson && !args.fusionInit && isLocal;\n\n  // If serverUrl is provided, we don't need command or port\n  if (serverUrl) {\n    isInteractive = false;\n    fusionConfig.serverUrl = serverUrl;\n    if (!command) {\n      fusionConfig.devCommand = \"\"; // No command needed when using serverUrl\n    }\n  } else if (command && port) {\n    isInteractive = false;\n    // check saved fusionConfig for server url origin and protocol\n    let urlOrigin = \"http://localhost\";\n    if (fusionConfig.serverUrl) {\n      try {\n        const url = new URL(fusionConfig.serverUrl);\n        urlOrigin = `${url.protocol}//${url.hostname}`;\n      } catch (_) {\n        // Fallback to default if URL parsing fails\n        urlOrigin = \"http://localhost\";\n      }\n    }\n    fusionConfig.serverUrl = `${urlOrigin}:${port}`;\n    fusionConfig.devCommand = command;\n  } else if (command && fusionConfig.autoDetectDevServer) {\n    isInteractive = false;\n    fusionConfig.devCommand = command;\n    // Set a default that will be overridden by auto-detection\n    fusionConfig.serverUrl = fusionConfig.serverUrl || \"http://localhost:3000\";\n  }\n\n  if (command && port) {\n    isInteractive = false;\n  }\n  if (port && !serverUrl) {\n    fusionConfig.serverUrl = `http://localhost:${port}`;\n  }\n  if (installCommand) {\n    fusionConfig.setupCommand = installCommand;\n  }\n  if (command) {\n    fusionConfig.devCommand = command;\n  }\n  if (typeof args.authenticateProxy === \"boolean\") {\n    fusionConfig.authenticateProxy = args.authenticateProxy;\n  }\n  if (typeof args.privacyMode === \"boolean\" && args.privacyMode) {\n    fusionConfig.privacyMode = Object.assign({}, fusionConfig.privacyMode, {\n      encrypt: true,\n    });\n  }\n  if (typeof args.autoDetectDevServer === \"boolean\") {\n    fusionConfig.autoDetectDevServer = args.autoDetectDevServer;\n  }\n  if (typeof args.https === \"boolean\") {\n    fusionConfig.https = args.https;\n  }\n  if (args.localHttpsDomain) {\n    fusionConfig.localHttpsDomain = args.localHttpsDomain;\n  }\n  if (typeof args.nativeApp === \"boolean\") {\n    fusionConfig.nativeApp = args.nativeApp;\n  }\n\n  // Process disabledTools from CLI args\n  if (args.disabledTools) {\n    const disabledToolsArray = args.disabledTools\n      .split(\",\")\n      .map((tool) => tool.trim());\n    fusionConfig.disabledTools = disabledToolsArray;\n  }\n\n  // Handle HTTPS server options from args (both inline and path-based)\n  fusionConfig.httpsServerOptions = await getHttpsServerOptions(\n    sys,\n    args,\n    fusionConfig,\n  );\n\n  if (isInteractive) {\n    if (!fusionConfig.devCommand) {\n      const textResult = await text({\n        message:\n          \"Enter the command to run for the dev server (e.g. 'npm run dev')\",\n        placeholder: \"npm run dev\",\n        validate: (value) => {\n          if (value.trim() === \"\" || value.length === 0) {\n            return \"Command cannot be empty\";\n          }\n        },\n      });\n      if (isCancel(textResult)) {\n        cancel(\"Goodbye! \uD83D\uDC4B\");\n        return await exit(1);\n      }\n      fusionConfig.devCommand = textResult;\n    }\n\n    if (!fusionConfig.serverUrl) {\n      const numberResult = await text({\n        message: \"Enter the port number for the dev server\",\n        placeholder: \"3000\",\n        validate: (value) => {\n          const num = Number(value);\n          if (isNaN(num) || num < 0 || num > 65535 || Math.floor(num) !== num) {\n            return \"Invalid port number, must be an integer between 0 and 65535\";\n          }\n        },\n      });\n      if (isCancel(numberResult)) {\n        cancel(\"Goodbye! \uD83D\uDC4B\");\n        return await exit(1);\n      }\n      fusionConfig.serverUrl = `http://localhost:${numberResult}`;\n    }\n\n    // Write fusion.config.json\n    await saveFusionConfig(sys, fusionConfig, args);\n  }\n\n  // normalize values\n  if (typeof fusionConfig.fusionServerPort === \"string\") {\n    const port = parseInt(fusionConfig.fusionServerPort);\n    if (!isNaN(port)) {\n      fusionConfig.fusionServerPort = port;\n    } else {\n      throw new Error(\n        `Invalid fusionServerPort: ${fusionConfig.fusionServerPort}. Expected a number between 0 and 65535, got \"${fusionConfig.fusionServerPort}\".`,\n      );\n    }\n  }\n\n  return fusionConfig;\n}\n\nexport async function saveFusionConfig(\n  sys: DevToolsSys,\n  fusionConfig: FusionConfig,\n  args: LaunchArgs,\n) {\n  const fusionConfigPath = await getFusionConfigPath(sys, args);\n\n  // Write fusion.config.json\n  await sys.writeFile(\n    fusionConfigPath,\n    JSON.stringify(\n      omit(\n        fusionConfig,\n        \"workingDirectory\",\n        \"projectId\",\n        \"authenticateProxy\",\n        \"privacyMode\",\n      ),\n      null,\n      2,\n    ),\n  );\n}\n\nconst getFusionConfigPath = async (sys: DevToolsSys, args: LaunchArgs) => {\n  if (args.configPath) {\n    const resolvedPath = sys.resolve(sys.cwd(), args.configPath);\n    if (await sys.exists(resolvedPath)) {\n      return resolvedPath;\n    }\n    throw new Error(`Fusion config file not found: ${resolvedPath}`);\n  }\n  const tryPaths = [\"builder.config.json\", \"fusion.config.json\"];\n  const workingDirectory: string = sys.cwd();\n  for (const path of tryPaths) {\n    const configPath = sys.join(workingDirectory, path);\n    const hasFusionConfig = await sys.exists(configPath);\n    if (hasFusionConfig) {\n      return configPath;\n    }\n  }\n\n  return sys.join(workingDirectory, tryPaths[0]);\n};\n\nconst omit = <\n  T extends Record<string | number | symbol, any> = Record<string, any>,\n  K extends keyof T = keyof T,\n>(\n  obj: T | undefined | null,\n  ...removePropNames: K[]\n) => {\n  /**\n  var obj = {a: 3, b: 5, c: 9};\n  omit(obj, 'a', 'c'); // {b: 5}\n\n  DOES NOT REMOVE dot.properties!\n*/\n  const result: Record<string, any> = {};\n  if (obj && typeof obj === \"object\") {\n    for (const propName in obj) {\n      if (!obj.hasOwnProperty || obj.hasOwnProperty(propName)) {\n        if (!removePropNames.includes(propName as any)) {\n          result[propName] = obj[propName];\n        }\n      }\n    }\n  }\n  return result as Omit<T, K>;\n};\n\nexport function trackConfigData(sys: DevToolsSys, fusionConfig: FusionConfig) {\n  sys.Sentry?.setTag(\"isLocal\", fusionConfig.isLocal);\n  sys.Sentry?.setTag(\"commitMode\", fusionConfig.commitMode);\n\n  const repoUrlWithWriteAccess = fusionConfig.workspace?.folders.find(\n    (folder) => folder.enableGit,\n  )?.originalRepoUrl;\n\n  if (repoUrlWithWriteAccess) {\n    const repoUrl = EXAMPLE_OR_STARTER_REPOS.some((repo) =>\n      repoUrlWithWriteAccess.endsWith(repo),\n    )\n      ? repoUrlWithWriteAccess\n      : \"custom-repo\";\n    sys.Sentry?.setTag(\"repoUrl\", repoUrl);\n  }\n}\n", "import { findPackageJson } from \"../../common/fs\";\nimport { CodeGenSession } from \"../codegen\";\nimport * as Sentry from \"@sentry/node\";\nimport type { DevToolsSys } from \"../../core\";\nimport { type Credentials } from \"../credentials\";\nimport type {\n  DesignSystem,\n  FusionConfig,\n  GenerateUserMessage,\n  WorkspaceConfiguration,\n  UpdateDesignSystemInput,\n  DesignSystemScope,\n  DisplayDesignSystem,\n} from \"$/ai-utils\";\nimport { apiAirV2Host } from \"../constants\";\nimport { safeFetch } from \"../fetch\";\nimport { PrivateError } from \"../../common/errors\";\nimport { select, isCancel } from \"@clack/prompts\";\nimport { isAbsolute } from \"path\";\nimport type { IndexDocument } from \"./types\";\n\nexport const AGENT_FILE = \"AGENTS.md\";\nexport const ICONS_FILE = \"icons.mdx\";\nexport const TOKENS_FILE = \"tokens.mdx\";\nexport const REPO_INDEXING_FOLDER = \"repo-indexing\";\n\nexport interface UserSettings {\n  isAdminInOrganization: boolean;\n  email: string;\n}\n\nconst SPACE_SCOPE = [\n  {\n    value: \"space\",\n    label: \"Space\",\n    hint: \"Available to all applications in your current space\",\n  },\n];\n\nconst ORGANIZATION_SCOPE = [\n  {\n    value: \"organization\",\n    label: \"Organization\",\n    hint: \"Available to all applications in your organization\",\n  },\n];\n\nconst GLOBAL_SCOPE = [\n  {\n    value: \"global\",\n    label: \"Global\",\n    hint: \"Available to all applications in the Builder platform\",\n  },\n];\n\nexport const promptForDesignSystemScope = async (\n  credentials: Credentials,\n  userSettings: UserSettings | null,\n): Promise<DesignSystemScope | undefined> => {\n  const userId = credentials.userId;\n  if (!userId) {\n    throw new Error(\"User ID is required\");\n  }\n\n  const isAdminInOrganization = userSettings?.isAdminInOrganization;\n  const isBuilderAdmin = userSettings?.email?.includes(\"@builder.io\");\n\n  const scopeOptions = [...SPACE_SCOPE];\n\n  if (isAdminInOrganization || isBuilderAdmin) {\n    scopeOptions.push(...ORGANIZATION_SCOPE);\n  }\n\n  if (isBuilderAdmin) {\n    scopeOptions.push(...GLOBAL_SCOPE);\n  }\n\n  // If there is only one scope option, return it\n  if (scopeOptions.length === 1) {\n    return scopeOptions[0].value as DesignSystemScope;\n  }\n\n  const scope = await select({\n    message: \"What is your design system scope?\",\n    options: scopeOptions,\n  });\n\n  if (isCancel(scope)) {\n    return undefined;\n  }\n\n  return scope as DesignSystemScope;\n};\n\nexport const parseDesignSystem = async (\n  sys: DevToolsSys,\n  designSystemPackage?: string,\n) => {\n  try {\n    const appRootDir = sys.getAppRootDir();\n    const packageJson = await findPackageJson(sys, appRootDir);\n    if (!packageJson) {\n      return { name: undefined, version: undefined };\n    }\n\n    // Get the name from package.json\n    const name = designSystemPackage ?? packageJson.name;\n\n    // Get the version if designSystemPackage is provided\n    let version: string | undefined;\n    if (designSystemPackage) {\n      const designSystemPackageVersion =\n        packageJson.dependencies?.[designSystemPackage] ||\n        packageJson.devDependencies?.[designSystemPackage];\n\n      version =\n        designSystemPackageVersion?.replace(/^[\\^~>=<]+/, \"\") ||\n        designSystemPackageVersion;\n    } else {\n      version = packageJson.version;\n    }\n\n    return { name, version };\n  } catch (error) {\n    console.error(\"Error parsing design system\", error);\n    return { name: undefined, version: undefined };\n  }\n};\n\nexport const storeComponentDocs = async (\n  credentials: Credentials,\n  body: IndexDocument,\n  debug?: boolean,\n) => {\n  try {\n    const url = new URL(\"/mappings/store-component-docs\", apiAirV2Host);\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n    url.searchParams.set(\"userId\", credentials.userId!);\n\n    const response = await safeFetch(url, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${credentials.builderPrivateKey}`,\n      },\n      body: JSON.stringify(body),\n    });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      if (debug) {\n        console.error(\"API request failed:\", response.status, errorText);\n      }\n      throw new Error(\n        `Failed to store component group: ${response.status} ${errorText}`,\n      );\n    }\n\n    return await response.json();\n  } catch (error) {\n    throw error;\n  }\n};\n\nexport const runCodeGen = async (\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionId: string,\n  message: GenerateUserMessage,\n  debug?: boolean,\n  designSystemPackage?: string,\n  workspaceConfig?: WorkspaceConfiguration,\n  opts: {\n    tags?: object;\n    maxTokens?: number;\n    retriesAllowed?: number;\n  } = {},\n  metadata?: any,\n): Promise<string> => {\n  const { maxTokens, retriesAllowed = 0 } = opts;\n  let writtenContent: string | undefined;\n\n  const customSys = {\n    ...sys,\n    writeFile: async (\n      filePath: string,\n      content: string | Uint8Array,\n    ): Promise<void> => {\n      writtenContent =\n        typeof content === \"string\" ? content : content.toString();\n      return Promise.resolve();\n    },\n  };\n\n  const fusionConfig: FusionConfig = {\n    accessControl: {\n      denyDescription:\n        \"You can read all files, but you can only write AGENTS.md, component-groups.json, icons.json, and repo-indexing/*.mdx.\",\n      entries: [\n        /**\n         * Reading component mapper files can confuse the LLM during component discovery\n         * because it can incorrectly conclude that components with mapper.tsx files are\n         * the only components that should be indexed.\n         */\n        {\n          action: \"deny\",\n          resource: \"*.mapper.tsx\",\n          description: \"Do not index mapper files.\",\n          permissions: [\"read\", \"write\", \"list\"],\n        },\n        /**\n         * The moment an ACL is defined, all files become deny-access by default.\n         * This makes it so all files are enabled by default. Any explicit deny rules\n         * are checked first and will override this.\n         */\n        {\n          // Matches the current directory (e.g. list contents of current directory)\n          action: \"allow\",\n          resource: \".\",\n          permissions: [\"read\", \"list\"],\n        },\n        {\n          // Recursively matches descendants (e.g. read foo/bar/baz.md, read foo.txt)\n          action: \"allow\",\n          resource: \"**/*\",\n          permissions: [\"read\", \"list\"],\n        },\n        {\n          action: \"allow\",\n          resource: AGENT_FILE,\n          permissions: [\"write\"],\n        },\n        {\n          action: \"allow\",\n          resource: \"**/repo-indexing/*.mdx\",\n          permissions: [\"write\"],\n        },\n        {\n          action: \"allow\",\n          resource: \"component-groups.json\",\n          permissions: [\"write\"],\n        },\n        {\n          action: \"allow\",\n          resource: \"icons.json\",\n          permissions: [\"write\"],\n        },\n        {\n          action: \"allow\",\n          resource: \"tokens.json\",\n          permissions: [\"write\"],\n        },\n      ],\n    },\n    // Repo indexing's working directory is always the current directory\n    workingDirectory: sys.cwd(),\n    ...(workspaceConfig && { workspace: workspaceConfig }),\n  };\n\n  if (designSystemPackage && !isAbsolute(designSystemPackage)) {\n    /**\n     * Show the file structure of the designSystemPackage so the LLM knows\n     * how to find components. Do not show deps of the designSystemPackage\n     * to avoid large file trees.\n     */\n    fusionConfig.accessControl?.entries?.push(\n      {\n        action: \"allow\",\n        resource: `**/node_modules/${designSystemPackage}/**/*`,\n        permissions: [\"list\", \"read\"],\n      },\n      {\n        action: \"allow\",\n        resource: `!**/node_modules/${designSystemPackage}/node_modules/**/*`,\n        permissions: [\"list\"],\n      },\n      {\n        action: \"deny\",\n        resource: `**/node_modules/${designSystemPackage}/node_modules`,\n        permissions: [\"list\", \"read\", \"write\"],\n      },\n    );\n  }\n\n  try {\n    const codegen = new CodeGenSession({\n      maxTokens,\n      sys: customSys,\n      credentials,\n      position: \"repo-indexing\",\n      mode: \"quality-v4\",\n      sessionOrCompletionId: sessionId,\n      ...(designSystemPackage &&\n        !designSystemPackage.startsWith(\"/\") && {\n          workingDirectory: `node_modules/${designSystemPackage}`,\n        }),\n      fusionConfig,\n      enabledTools: [\n        \"Read\",\n        \"Write\",\n        \"Glob\",\n        \"Bash\",\n        \"Grep\",\n        \"ReadRule\",\n        \"TodoRead\",\n        \"TodoWrite\",\n      ],\n      ...(metadata && { metadata }),\n    });\n\n    if (debug) {\n      codegen.setDebug(debug);\n    }\n\n    await codegen.initializeSession({\n      skipSessionLoading: true,\n    });\n\n    codegen.connectToEventLoop(false, async (event) => {\n      switch (event.type) {\n        case \"error\": {\n          if (debug) {\n            console.error(\"\\n\", event.message);\n          }\n          break;\n        }\n      }\n    });\n\n    await codegen.sendMessage(message);\n    await codegen.waitUntilIdle();\n\n    await codegen.close();\n\n    if (!writtenContent) {\n      const id = Sentry.captureException(\n        new PrivateError(\n          `Repo indexing failed: No essential files were written`,\n        ),\n        {\n          tags: {\n            ...opts?.tags,\n            sessionId: sessionId,\n          },\n        },\n      );\n\n      throw new PrivateError(\n        `Sorry, we ran into a problem when indexing your components. Please try again. If the issue persists, please contact support@builder.io. and provide the error ID: ${id}`,\n      );\n    }\n\n    return writtenContent;\n  } catch (error: unknown) {\n    if (retriesAllowed === 0) {\n      throw error;\n    }\n\n    return runCodeGen(\n      sys,\n      credentials,\n      sessionId,\n      message,\n      debug,\n      designSystemPackage,\n      workspaceConfig,\n      {\n        ...opts,\n        retriesAllowed: retriesAllowed - 1,\n      },\n      metadata,\n    );\n  }\n};\n\ninterface GetAllDesignSystemsOpts {\n  /**\n   * If true, only design systems that the user has permission to edit will be\n   * returned. If false, all design systems that the user has permission to edit\n   * as well as design systems that the user has permission to read but not edit\n   * will be returned. Defaults to false.\n   */\n  onlyEditAccess?: boolean;\n  /**\n   * If true, design systems that are scoped to the global space will be included.\n   * Defaults to false.\n   */\n  includeGlobalScopeDesignSystems?: boolean;\n  /**\n   * If true, the # of component docs in each design system will also be returned.\n   * Defaults to false.\n   */\n  includeDocumentCount?: boolean;\n}\n\nexport async function getAllDesignSystems(\n  credentials: Credentials,\n  opts: { includeDocumentCount: true } & Omit<\n    GetAllDesignSystemsOpts,\n    \"includeDocumentCount\"\n  >,\n): Promise<DisplayDesignSystem[]>;\nexport async function getAllDesignSystems(\n  credentials: Credentials,\n  opts?: GetAllDesignSystemsOpts,\n): Promise<DesignSystem[]>;\nexport async function getAllDesignSystems(\n  credentials: Credentials,\n  opts: GetAllDesignSystemsOpts = {},\n): Promise<DesignSystem[] | DisplayDesignSystem[]> {\n  const url = new URL(\"/design-systems/v1\", apiAirV2Host);\n  url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n  url.searchParams.set(\"userId\", credentials.userId!);\n\n  if (opts.includeGlobalScopeDesignSystems) {\n    url.searchParams.set(\"includeGlobalScopeDesignSystems\", \"true\");\n  }\n\n  if (opts.includeDocumentCount) {\n    url.searchParams.set(\"includeDocumentCount\", \"true\");\n  }\n\n  const response = await safeFetch(url, {\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey}`,\n    },\n  });\n\n  if (!response.ok) {\n    return [];\n  }\n\n  const designSystems = ((await response.json()) ?? []) as\n    | DesignSystem[]\n    | DisplayDesignSystem[];\n\n  if (opts.onlyEditAccess) {\n    // A design system is editable if it is owned by the space the user is authenticated with\n    return designSystems.filter(\n      (ds) => ds.spaceId === credentials.builderPublicKey!,\n    );\n  }\n\n  return designSystems;\n}\n\nexport const getDesignSystemsByScope = (\n  scope: DesignSystemScope,\n  designSystems: DesignSystem[],\n): DesignSystem[] => {\n  return designSystems.filter((ds: DesignSystem) => ds.scope === scope) ?? [];\n};\n\nexport const getDesignSystemByName = (\n  designSystemName: string,\n  designSystems: DesignSystem[],\n): DesignSystem | null => {\n  return (\n    designSystems.find(\n      (ds: DesignSystem) => ds.designSystemName === designSystemName,\n    ) || null\n  );\n};\n\nexport const getDesignSystemByNameAndScope = (\n  credentials: Credentials,\n  designSystemName: string,\n  scope: DesignSystemScope,\n  designSystems: DesignSystem[],\n): DesignSystem | null => {\n  if (designSystems) {\n    return (\n      designSystems.find(\n        (ds: DesignSystem) =>\n          ds.designSystemName === designSystemName && ds.scope === scope,\n      ) || null\n    );\n  }\n\n  return null;\n};\n\nexport const addDesignSystem = async (\n  credentials: Credentials,\n  body: {\n    designSystemName: string;\n    designSystemVersion?: string;\n    designSystemPackage?: string;\n    status: string;\n    scope: DesignSystemScope;\n  },\n) => {\n  const url = new URL(\"/design-systems/v1\", apiAirV2Host);\n  url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n  url.searchParams.set(\"userId\", credentials.userId!);\n\n  const response = await safeFetch(url, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey}`,\n    },\n    body: JSON.stringify(body),\n  });\n\n  if (!response.ok) {\n    const error = await response.json();\n    const errorMessage = error.message || \"Failed to add design system\";\n    throw new Error(errorMessage);\n  }\n\n  const data = await response.json();\n\n  return data.id;\n};\n\nexport const updateDesignSystem = async (\n  credentials: Credentials,\n  body: UpdateDesignSystemInput,\n) => {\n  const url = new URL(`/design-systems/v1/${body.id}`, apiAirV2Host);\n  url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n  url.searchParams.set(\"userId\", credentials.userId!);\n\n  const response = await safeFetch(url, {\n    method: \"PATCH\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey}`,\n    },\n    body: JSON.stringify(body),\n  });\n\n  if (!response.ok) {\n    throw new Error(\"Failed to update design system\");\n  }\n\n  return await response.json();\n};\n\nexport const checkRepoIndexingFolder = async (\n  sys: DevToolsSys,\n): Promise<boolean> => {\n  const repoIndexingPath = sys.join(sys.getAppRootDir(), REPO_INDEXING_FOLDER);\n\n  try {\n    const exists = await sys.exists(repoIndexingPath);\n    if (!exists) {\n      return false;\n    }\n    const files = await sys.readdir(repoIndexingPath);\n    const mdxFiles = files.filter(\n      (file: string) => file.endsWith(\".mdx\") || file.endsWith(\".md\"),\n    );\n\n    return mdxFiles.length > 0;\n  } catch (error) {\n    return false;\n  }\n};\n", "import type { DevToolsSys } from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport {\n  bold,\n  bgCyan,\n  dim,\n  magenta,\n  white,\n  bgGreen,\n  green,\n  red,\n  bgMagenta,\n} from \"picocolors\";\nimport { getAllProjectFiles } from \"./sync-utils\";\nimport {\n  isCancel,\n  intro,\n  outro,\n  log,\n  confirm,\n  text,\n  select,\n  stream,\n  multiselect,\n  cancel,\n} from \"@clack/prompts\";\nimport { getCredentials } from \"./credentials\";\nimport { track } from \"./track\";\nimport { printHelp } from \"./help\";\nimport { findPackageJson } from \"../common/fs\";\nimport os from \"node:os\";\nimport { pkgVersion } from \"./version\";\n\nimport {\n  getContentText,\n  type ApplyActionsResult,\n  type UserContext,\n  type WorkspaceConfiguration,\n} from \"$/ai-utils\";\nimport { CodeGenSession, loadWorkspace, makeAsyncIterator } from \"./codegen\";\nimport { spinner } from \"./spinner\";\nimport readline, { type Key } from \"node:readline\";\nimport { exit } from \"./exit\";\nimport type { Formatter } from \"picocolors/types\";\nimport { openBrowser } from \"./utils/open\";\nimport { getFusionConfig, saveFusionConfig } from \"./launch/config\";\nimport { getAllDesignSystems } from \"./repo-indexing/repo-indexing-utils\";\n\nexport const runCodeCommand = async (\n  sys: DevToolsSys,\n  subCommand: string,\n  args: CLIArgs,\n) => {\n  if (subCommand === \"generate\" || subCommand === \"gen\" || subCommand === \"g\") {\n    await runCodeGen(sys, args);\n  } else if (subCommand === \"gen\") {\n    printHelp(\"code\");\n  } else {\n    await runCodeGen(sys, args);\n  }\n};\n\nexport const runCodeGen = async (sys: DevToolsSys, args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" code \"))) + `  ` + dim(pkgVersion));\n\n  if (!isTTY() && !args.prompt) {\n    await track(\"tty error\", {});\n    log.error(\n      \"This command requires a TTY-enabled terminal.\\nIf you are using Windows Git Bash, try a different terminal or wrap the command with winpty.\",\n    );\n    await exit(1);\n    return;\n  }\n\n  await track(\"figma code started\", {});\n\n  if (!args.workspace) {\n    await checkProjectRoot(sys, !args.prompt);\n  }\n\n  const credentials = await getCredentials(sys, args, {\n    forceSpaceId: args.spaceId,\n    builderPrivateKey: true,\n    builderPublicKey: true,\n  });\n\n  let workspaceConfig: WorkspaceConfiguration | undefined;\n  let workingDirectory: string | undefined;\n\n  if (args.workspace) {\n    const result = await loadWorkspace(sys, args.workspace);\n    workspaceConfig = result.workspace;\n    workingDirectory = result.workingDirectory;\n  }\n\n  const fusionConfig = await getFusionConfig(sys, args);\n\n  const designSystems = await getAllDesignSystems(credentials, {\n    includeGlobalScopeDesignSystems: true,\n    includeDocumentCount: true,\n  });\n  // Validate existing design system configuration\n  if (fusionConfig.repoIndexingConfig?.designSystems) {\n    const allDesignSystems = new Set(\n      designSystems.map((ds) => ds.designSystemName),\n    );\n    const configuredDesignSystems =\n      fusionConfig.repoIndexingConfig.designSystems;\n    const invalidDesignSystems = configuredDesignSystems.filter(\n      (dsName) => !allDesignSystems.has(dsName),\n    );\n\n    if (invalidDesignSystems.length > 0) {\n      log.warn(\n        `\u26A0\uFE0F  The following design systems in your configuration no longer exist or you don't have access:\\n` +\n          invalidDesignSystems.map((ds) => `  \u2022 ${ds}`).join(\"\\n\"),\n      );\n    }\n  }\n\n  if (!fusionConfig.repoIndexingConfig) {\n    const spaceOrOrgDesignSystems = designSystems.filter(\n      (ds) => ds.scope === \"space\" || ds.scope === \"organization\",\n    );\n    if (spaceOrOrgDesignSystems.length > 0) {\n      // Display a prompt to the user to select multiple design systems\n      const designSystemsSelected = await multiselect({\n        message:\n          \"You have available design systems. Select the ones you want to use:\",\n        options: spaceOrOrgDesignSystems.map((ds) => ({\n          value: ds.designSystemName,\n          label: `${ds.scope === \"organization\" ? \"(Organization) \" : \"\"}${ds.designSystemName} (${ds.docCount} components)`,\n        })),\n        required: false,\n      });\n\n      if (isCancel(designSystemsSelected)) {\n        cancel(\"Aborted\");\n        return await exit(1);\n      }\n\n      if (designSystemsSelected && designSystemsSelected.length > 0) {\n        fusionConfig.repoIndexingConfig = {\n          designSystems: designSystemsSelected as string[],\n        };\n        const shouldSave = await confirm({\n          message:\n            \"Save selections for this working directory to your builder.config.json?\",\n          active: \"Yes\",\n          inactive: \"No\",\n        });\n\n        if (isCancel(shouldSave)) {\n          cancel(\"Aborted\");\n          return await exit(1);\n        }\n\n        if (shouldSave) {\n          await saveFusionConfig(sys, fusionConfig, args);\n        }\n      }\n    }\n  }\n\n  const codegen = new CodeGenSession({\n    sys,\n    credentials,\n    position: \"cli\",\n    initialUrl: args.url,\n    mode: args.mode ?? \"quality-v4\",\n    mcpServers: !args.disableMcp,\n    fusionConfig: {\n      ...fusionConfig,\n      workingDirectory,\n      workspace: workspaceConfig,\n    },\n  });\n\n  const cliArgPrompt = args.prompt;\n  // Setup keyboard handling\n  const handleKeypress = (_: string, key: Key) => {\n    // Handle Ctrl+C or ESC\n    if ((key.ctrl && key.name === \"c\") || key.name === \"escape\") {\n      codegen.abort();\n    }\n  };\n\n  let rl: readline.Interface | undefined;\n  const startCapture = () => {\n    if (rl) {\n      stopCapture();\n    }\n    rl = readline.createInterface({\n      input: process.stdin,\n      output: process.stdout,\n    });\n    if (process.stdin.isTTY) process.stdin.setRawMode(true);\n    readline.emitKeypressEvents(process.stdin, rl);\n    process.stdin.on(\"keypress\", handleKeypress);\n  };\n\n  const stopCapture = () => {\n    if (rl) {\n      // Cleanup keyboard handling\n      process.stdin.removeListener(\"keypress\", handleKeypress);\n      if (process.stdin.isTTY) {\n        process.stdin.setRawMode(false);\n      }\n      rl.close();\n      rl = undefined;\n    }\n  };\n\n  let s: ReturnType<typeof import(\"./spinner\").spinner> | undefined;\n  let textEmitter: ReturnType<typeof makeAsyncIterator<string>> | undefined;\n\n  await codegen.initializeSession();\n  printSessionId(codegen);\n  let deltaAccumulator = \"\";\n  let lastTitle = \"\";\n\n  if (cliArgPrompt) {\n    await codegen.sendMessage({\n      userPrompt: cliArgPrompt,\n      user: {\n        source: \"builder.io\",\n        userId: credentials.userId,\n        role: \"user\",\n      },\n    });\n  }\n\n  await codegen.connectToEventLoop(false, async (event) => {\n    switch (event.type) {\n      case \"start\": {\n        deltaAccumulator = \"\";\n        lastTitle = event.title;\n        if (\n          event.name === \"tool\" &&\n          [\"view_path\", \"Read\"].includes(event.filePath!)\n        ) {\n          break;\n        }\n        if (s) {\n          s.stop();\n          s = undefined;\n        }\n        if (textEmitter) {\n          // close the text emitter\n          textEmitter[1](\"\\n\");\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        if (event.name === \"text\") {\n          textEmitter = makeAsyncIterator<string>();\n          stream.message(textEmitter[0], { symbol: magenta(\"~\") });\n        } else {\n          s = spinner();\n          s.start(event.title);\n          s.extra(cancelMessage);\n        }\n        break;\n      }\n      case \"delta\": {\n        deltaAccumulator += event.delta;\n        if (event.name === \"tool\") {\n          // do nothing\n        } else {\n          if (textEmitter) {\n            textEmitter[1](event.delta);\n          } else {\n            if (s) {\n              s.extra(\n                \"\\n\\n\" +\n                  (lastTitle\n                    ? \"   \" + bgMagenta(` ${lastTitle} `) + \"\\n\"\n                    : \"\") +\n                  boxAscii(deltaAccumulator, magenta, \"  \", -15) +\n                  \"\\n\" +\n                  cancelMessage,\n              );\n            }\n          }\n        }\n        break;\n      }\n      case \"tool\": {\n        // Handle bash command spinner events\n        if (s) {\n          s.stop(`${event.name}`);\n          s = undefined;\n        }\n        // For other tool events, do nothing but avoid the default case\n        break;\n      }\n      case \"file\":\n      case \"diff\": {\n        if (s) {\n          s.stop(`${event.title}: ${dim(event.filePath)}`);\n          s = undefined;\n        }\n        break;\n      }\n      case \"text\": {\n        if (textEmitter) {\n          textEmitter[1](\"\\n\");\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        break;\n      }\n      case \"user-abort\": {\n        if (s) {\n          s.stop();\n          s = undefined;\n        }\n        if (textEmitter) {\n          textEmitter[1](\"\\n\");\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        log.error(\"Generation aborted\");\n        break;\n      }\n      case \"wait-for-input\": {\n        if (cliArgPrompt) {\n          await codegen.stopEventLoop();\n        } else {\n          await new Promise((resolve) => setTimeout(resolve, 100));\n          stopCapture();\n\n          const answer = await askInteractiveQuestions(codegen);\n\n          if (answer.command === \"exit\") {\n            await codegen.stopEventLoop();\n          } else if (answer.userPrompt) {\n            startCapture();\n            await codegen.sendMessage({\n              userPrompt: answer.userPrompt,\n              user: {\n                source: \"builder.io\",\n                userId: credentials.userId,\n                role: \"user\",\n              },\n            });\n          }\n        }\n        break;\n      }\n      case \"user-input\": {\n        if (textEmitter) {\n          textEmitter[1](\"\\n\");\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        if (s) {\n          s.stop();\n          s = undefined;\n        }\n        if (event.files.length > 0) {\n          log.info(\n            \"Reading files:\\n\\n\" +\n              event.files\n                .map((f) => ` ${dim(f.filePath)} (${formatFileSize(f.size)})`)\n                .join(\"\\n\"),\n          );\n        }\n        break;\n      }\n      case \"tool_result\": {\n        // Stop spinner for bash commands\n        if (event.result.tool_name === \"bash\" && s) {\n          s.stop();\n          s = undefined;\n        }\n\n        if (event.result.is_error) {\n          log.error(\n            `${event.result.title ? event.result.title : `Tool failed: ${event.result.tool_name}`}\\n\\n${boxAscii(getContentText(event.result.content).trim(), red, \"\")}`,\n          );\n        } else {\n          log.info(\n            `${event.result.title ? event.result.title : `Tool: ${event.result.tool_name}`}\\n\\n${boxAscii(getContentText(event.result.content).trim(), green, \"\", 15)}`,\n          );\n        }\n\n        break;\n      }\n      case \"error\": {\n        if (event.stopReason === \"limit\") {\n          await track(\"code generation\", {\n            spaceId: credentials.builderPublicKey,\n            cli: true,\n            error: \"rate limit reached\",\n          });\n          const stopReasonMessage =\n            event.message ??\n            \"The request was cancelled because it reached the account limits. Please upgrade your plan.\";\n          log.error(red(\"\uD83D\uDEA8 \" + stopReasonMessage));\n          const url = new URL(\"https://builder.io/account/subscription\");\n          url.searchParams.set(\"space_id\", credentials.builderPublicKey!);\n          const r = await confirm({\n            message: dim(url.href),\n            active: \"Open subscription page\",\n            inactive: \"Exit\",\n          });\n          if (r) {\n            await openBrowser(url.href);\n          }\n          await exit(1);\n        } else if (event.code === \"ask-to-continue\") {\n          if (s) {\n            s.stop();\n            s = undefined;\n          }\n\n          const shouldContinue = await confirm({\n            message:\n              event.message ||\n              \"The agent has been working for a while. Do you want to continue?\",\n            active: \"Yes, continue\",\n            inactive: \"No, stop here\",\n          });\n\n          if (shouldContinue) {\n            await codegen.sendMessage({\n              userPrompt: \"\",\n              displayPrompt: \"Continue!\",\n              isManualContinue: true,\n              user: {\n                source: \"agent\",\n                role: \"agent\",\n              },\n            });\n          } else {\n            log.info(\"Code generation stopped by user.\");\n            break;\n          }\n        } else {\n          await track(\"code generation\", {\n            spaceId: credentials.builderPublicKey,\n            cli: true,\n            error: event.message,\n          });\n          log.error(event.message);\n          await exit(1);\n        }\n        break;\n      }\n      case \"done\": {\n        if (textEmitter) {\n          textEmitter[1](\"\\n\");\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        if (s) {\n          s.stop();\n          s = undefined;\n        }\n        if (event.usage) {\n          const rate = event.usage.total / event.usage.limits.aiGeneration;\n          if (rate > 0.5) {\n            log.info(\n              formatUsage(event.usage.total, event.usage.limits.aiGeneration),\n            );\n          }\n        }\n\n        if (event.applyResults.length > 0) {\n          log.success(formatChangesSummary(event.applyResults));\n        }\n        break;\n      }\n\n      case \"continue\": {\n        if (s) {\n          s.stop(\"All changes applied\");\n          s = undefined;\n        }\n        break;\n      }\n      default: {\n        if (s) {\n          // don't stop the spinner for stdio (command output) events\n          if (event.type === \"stdio\") {\n            break;\n          }\n\n          s.stop();\n          s = undefined;\n        }\n      }\n    }\n  });\n  await codegen.waitForEventLoop();\n  stopCapture();\n  await printFeedbackText(codegen);\n  await exit(0);\n};\n\ninterface InteractiveAnswer {\n  command: \"exit\" | undefined;\n  userPrompt: string | undefined;\n  feedback: \"positive\" | \"negative\" | \"undo\" | undefined;\n}\n\nasync function askInteractiveQuestions(\n  codegen: CodeGenSession,\n): Promise<InteractiveAnswer> {\n  const defaultMessage = \"please, enter your own prompt\";\n  const state = codegen.getCurrentState();\n  const lastUndoState = codegen.getLastApplyResultsTurn();\n  switch (state) {\n    case \"initial-with-url\": {\n      const placeholder = `e.g., \"add a new contact page\", \"update the card component\", \"add a header to the layout of the app\"`;\n      const integration = await text({\n        message: `Describe how the design integrates into your codebase: ${dim(\"or Ctrl+C to exit\")}`,\n        placeholder,\n        validate(value) {\n          if (value.length === 0 || value === placeholder) {\n            return \"please, enter a detailed instruction\";\n          }\n          if (value.length < 10) {\n            return \"a more detailed instruction is needed\";\n          }\n        },\n      });\n\n      if (isCancel(integration)) {\n        return {\n          command: \"exit\",\n          userPrompt: undefined,\n          feedback: undefined,\n        };\n      }\n\n      return {\n        command: undefined,\n        userPrompt:\n          integration ??\n          \"integrate design into the app, might be a new page/component/layout depending on the design\",\n        feedback: undefined,\n      };\n    }\n    case \"initial-without-url\": {\n      const placeholder = `e.g., \"add a new page\", \"add a new component\", \"update the button component\"`;\n      const integration = await text({\n        message: `What do you want to do? ${dim(\"or Ctrl+C to exit\")}`,\n        placeholder,\n        validate(value) {\n          if (value.length === 0 || value === placeholder) {\n            return defaultMessage;\n          }\n        },\n      });\n      if (isCancel(integration)) {\n        return {\n          command: \"exit\",\n          userPrompt: undefined,\n          feedback: undefined,\n        };\n      }\n\n      return {\n        command: undefined,\n        userPrompt:\n          integration ??\n          \"integrate design into the app, might be a new page/component/layout depending on the design\",\n        feedback: undefined,\n      };\n    }\n    case \"abort\": {\n      const placeholder = `e.g., \"make sure to keep X, while removing Y\"`;\n      const integration = await text({\n        message: `Okey! what do you want to do? ${dim(\"or Ctrl+C to exit\")}`,\n        placeholder,\n        validate(value) {\n          if (value.length === 0 || value === placeholder) {\n            return defaultMessage;\n          }\n        },\n      });\n      if (isCancel(integration)) {\n        await codegen.acceptCode();\n        return {\n          command: \"exit\",\n          userPrompt: undefined,\n          feedback: undefined,\n        };\n      }\n\n      return {\n        command: undefined,\n        userPrompt:\n          integration ??\n          \"integrate design into the app, might be a new page/component/layout depending on the design\",\n        feedback: undefined,\n      };\n    }\n    case \"error\": {\n      const placeholder = `e.g., \"make sure to keep X, while removing Y\"`;\n      const integration = await text({\n        message: `Mmmh! something went wrong, let's try again: ${dim(\"or Ctrl+C to exit\")}`,\n        placeholder,\n        validate(value) {\n          if (value.length === 0 || value === placeholder) {\n            return defaultMessage;\n          }\n        },\n      });\n      if (isCancel(integration)) {\n        await codegen.acceptCode();\n        return {\n          command: \"exit\",\n          userPrompt: undefined,\n          feedback: undefined,\n        };\n      }\n\n      return {\n        command: undefined,\n        userPrompt:\n          integration ??\n          \"integrate design into the app, might be a new page/component/layout depending on the design\",\n        feedback: undefined,\n      };\n    }\n    case \"success\": {\n      const placeholder = `e.g., \"Plan, search, build\"`;\n      if (!lastUndoState?.applyResults.length) {\n        const integration = await text({\n          message: \">\",\n          placeholder,\n          validate(value) {\n            if (value.length === 0 || value === placeholder) {\n              return defaultMessage;\n            }\n          },\n        });\n        if (isCancel(integration)) {\n          await codegen.acceptCode();\n          return {\n            command: \"exit\",\n            userPrompt: undefined,\n            feedback: undefined,\n          };\n        }\n\n        return {\n          command: undefined,\n          userPrompt:\n            integration ??\n            \"integrate design into the app, might be a new page/component/layout depending on the design\",\n          feedback: undefined,\n        };\n      }\n      const whatToDoNext = !codegen.lastTurnHasChanges()\n        ? \"continue\"\n        : await select({\n            message: `What do you want to do next? ${dim(\"or Ctrl+C to exit\")}`,\n            options: [\n              {\n                value: \"good\",\n                label: \"\uD83D\uDC4D Accept and Continue\",\n                hint: \"you will be able to keep prompting for more changes\",\n              },\n              {\n                value: \"bad\",\n                label: \"\uD83D\uDC4E Refine\",\n                hint: \"something went wrong, but I wanna refine instead of a complete undo\",\n              },\n              {\n                value: \"undo\",\n                label: \"\u23EE\uFE0F  Undo last changes\",\n                hint: \"want to revert the last changes\",\n              },\n            ],\n          });\n\n      if (isCancel(whatToDoNext)) {\n        await codegen.acceptCode();\n        return { command: \"exit\", userPrompt: undefined, feedback: undefined };\n      }\n\n      if (whatToDoNext === \"continue\") {\n        const placeholder = `e.g., \"implement the new page\"`;\n        const userPrompt = await text({\n          message: `What else can I do for you? ${dim(\"or Ctrl+C to exit\")}`,\n          placeholder,\n          validate(value) {\n            if (!value || value === placeholder) {\n              return \"Ctrl+C to exit\";\n            }\n          },\n        });\n\n        if (isCancel(userPrompt)) {\n          await codegen.acceptCode();\n          return {\n            feedback: undefined,\n            command: \"exit\",\n            userPrompt: undefined,\n          };\n        }\n      }\n\n      if (whatToDoNext === \"good\") {\n        codegen.sendFeedback({\n          feedbackSentiment: \"positive\",\n        });\n        const placeholder = `e.g., \"Make it mobile-friendly\", \"Add form validation\", \"add docs\"`;\n        const userPrompt = await text({\n          message: `Describe any additional improvements: ${dim(\n            \"or Ctrl+C to exit\",\n          )}`,\n          placeholder,\n          validate(value) {\n            if (!value || value === placeholder) {\n              return \"Ctrl+C to exit\";\n            }\n          },\n        });\n\n        if (isCancel(userPrompt)) {\n          await codegen.acceptCode();\n          return {\n            feedback: \"positive\",\n            command: \"exit\",\n            userPrompt: undefined,\n          };\n        }\n\n        return {\n          userPrompt: userPrompt,\n          feedback: \"positive\",\n          command: undefined,\n        };\n      }\n\n      if (whatToDoNext === \"bad\") {\n        codegen.sendFeedback({\n          feedbackSentiment: \"negative\",\n        });\n        const placeholder = `e.g., \"code seems to be broken\", \"i can't see the page\"`;\n        const userPrompt = await text({\n          message: `What went wrong? Please be more detailed this time ${dim(\n            \"or Ctrl+C to exit\",\n          )}`,\n          placeholder,\n          validate(value) {\n            if (!value || value === placeholder) {\n              return \"Ctrl+C to exit\";\n            }\n          },\n        });\n\n        if (isCancel(userPrompt)) {\n          await codegen.acceptCode();\n          return {\n            command: \"exit\",\n            userPrompt: undefined,\n            feedback: undefined,\n          };\n        }\n\n        codegen.sendFeedback({\n          feedbackSentiment: \"negative\",\n          feedbackText: userPrompt,\n        });\n\n        return {\n          feedback: \"negative\",\n          userPrompt: `Last changes were not good, here's my feedback:\\n${userPrompt}\\nNotice that previously changes were already applied, any patch goes on top the previous changes.`,\n          command: undefined,\n        };\n      }\n\n      if (whatToDoNext === \"undo\") {\n        codegen.sendFeedback({\n          feedbackSentiment: \"undo\",\n        });\n        const { undone: files } = await codegen.undoLastUserMessage();\n        if (files && files.length > 0) {\n          log.warn(\n            `Restored files to previous state:\\n\\n${files\n              .map((file) => dim(file))\n              .join(\"\\n\")}\\n`,\n          );\n        }\n        const placeholder = `e.g., \"do X and Y, but make sure to do Z\"`;\n        const userPrompt = await text({\n          message: `Let's try again, please be more detailed this time ${dim(\n            \"or Ctrl+C to exit\",\n          )}`,\n          placeholder,\n          validate(value) {\n            value = value.trim();\n            if (!value || value === placeholder) {\n              return \"Ctrl+C to exit\";\n            }\n          },\n        });\n\n        if (isCancel(userPrompt)) {\n          await codegen.acceptCode();\n          return {\n            command: \"exit\",\n            userPrompt: undefined,\n            feedback: undefined,\n          };\n        }\n\n        return {\n          feedback: \"negative\",\n          command: undefined,\n          userPrompt,\n        };\n      }\n    }\n    default: {\n      throw new Error(`Unknown state: ${state}`);\n    }\n  }\n}\n\nconst cancelMessage = \"\\n   \" + dim(\"ESC to interrupt\");\n\n// Strip ANSI color codes for measuring text length\nconst ansiRegex = /\\x1B(?:[@-Z\\\\-_]|\\[[0-?]*[ -/]*[@-~])/g;\n\n// Calculate visible length of text (excluding ANSI color codes)\nfunction visibleLength(text: string): number {\n  return text.replace(ansiRegex, \"\").length;\n}\n\nfunction boxAscii(\n  text: string,\n  color: Formatter,\n  ident: string,\n  maxLines?: number,\n) {\n  // Get terminal width and calculate max content width (80% of terminal width)\n  const terminalWidth = process.stdout.columns || 80;\n  const maxWidth = Math.min(Math.floor(terminalWidth * 0.8), 120);\n\n  // Account for box borders (2 chars on each side)\n  const contentWidth = maxWidth - 4;\n\n  // Split by newlines and process lines\n  let lines = text.split(\"\\n\");\n  let isTruncated = false;\n  let isTruncatedFromTop = false;\n\n  // If maxLines is set and text has more lines, truncate it\n  if (maxLines !== undefined) {\n    const numLines = Math.abs(maxLines);\n    if (lines.length > numLines) {\n      if (maxLines > 0) {\n        // Take the first N lines\n        lines = lines.slice(0, numLines);\n        isTruncated = true;\n      } else {\n        // Take the last N lines\n        lines = lines.slice(-numLines);\n        isTruncatedFromTop = true;\n      }\n    }\n  }\n\n  // Clamp each line to content width\n  lines = lines.map((line) => {\n    // If line is too long, clamp it and add ellipsis\n    if (visibleLength(line) > contentWidth) {\n      let slicePos = 0;\n      let visibleChars = 0;\n\n      while (visibleChars < contentWidth - 3 && slicePos < line.length) {\n        if (\n          !line\n            .substring(slicePos)\n            .match(ansiRegex)?.[0]\n            ?.startsWith(line[slicePos])\n        ) {\n          visibleChars++;\n        }\n        slicePos++;\n      }\n\n      return line.slice(0, slicePos) + \"...\";\n    }\n    return line;\n  });\n\n  // Create the box\n  const horizontalBorder = \"\u2500\".repeat(Math.max(0, maxWidth - 2));\n  const top = color(`${ident}\u250C${horizontalBorder}\u2510`);\n  const bottom = color(`${ident}\u2514${horizontalBorder}\u2518`);\n\n  // Left align each line and add vertical borders\n  let formattedLines = lines.map((line) => {\n    // Calculate padding based on visible length (excluding ANSI codes)\n    const rightPadding = \" \".repeat(\n      Math.max(0, contentWidth - visibleLength(line)),\n    );\n    return `${ident}${color(\"\u2502\")} ${dim(line)}${rightPadding} ${color(\"\u2502\")}`;\n  });\n\n  // Add truncation message if needed\n  if (isTruncatedFromTop) {\n    const truncationMessage = \"... continues above ...\";\n    const rightPadding = \" \".repeat(\n      Math.max(0, contentWidth - truncationMessage.length),\n    );\n    formattedLines.unshift(\n      `${ident}${color(\"\u2502\")} ${color(truncationMessage)}${rightPadding} ${color(\"\u2502\")}`,\n    );\n  }\n  if (isTruncated) {\n    const truncationMessage = \"... continues below ...\";\n    const rightPadding = \" \".repeat(\n      Math.max(0, contentWidth - truncationMessage.length),\n    );\n    formattedLines.push(\n      `${ident}${color(\"\u2502\")} ${color(truncationMessage)}${rightPadding} ${color(\"\u2502\")}`,\n    );\n  }\n\n  // Combine all parts\n  return `${top}\\n${formattedLines.join(\"\\n\")}\\n${bottom}`;\n}\n\nfunction getFeedbackFormUrl(\n  sessionId: string,\n  spaceId: string | undefined,\n): string {\n  const FORM_SHORT_URL =\n    \"https://docs.google.com/forms/d/e/1FAIpQLSdHUIxeNZCAeMTgAWehxBtZplgcqXqyPbGf9Z1Advnf2ARxGw/viewform\";\n  const SESSION_ID_PARAM = \"entry.986969459\";\n  const SPACE_ID_PARAM = \"entry.1867678972\";\n  const url = new URL(FORM_SHORT_URL);\n  url.searchParams.set(\"usp\", \"pp_url\");\n  url.searchParams.set(SESSION_ID_PARAM, sessionId);\n  if (spaceId) {\n    url.searchParams.set(SPACE_ID_PARAM, spaceId);\n  }\n  return url.toString();\n}\nfunction printSessionId(codegen: CodeGenSession) {\n  const sessionId = codegen.getSessionId();\n  log.info(`Session ID: ${dim(sessionId)}`);\n}\n\nasync function printFeedbackText(codegen: CodeGenSession) {\n  const sessionId = codegen.getSessionId();\n  const spaceId = codegen.getSpaceId();\n  const nextUrl = codegen.getNextUrl();\n  outro(`${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} ${dim(\"session \" + sessionId)}`);\n  const feedbackUrl = getFeedbackFormUrl(sessionId, spaceId);\n  console.log(\n    `\\n   \uD83D\uDCDD We'd love your feedback on the code generation!\\n   ${dim(\n      feedbackUrl,\n    )}\\n\n    ${nextUrl ? `\\n   \u25B6\uFE0F Resume session:\\n   ${dim(`npx builder.io@latest code --url ${JSON.stringify(nextUrl)}`)}\\n` : \"\"}`,\n  );\n}\n/**\n * Format usage information as a progress bar\n * Usage: 1,234/5,000\n * \u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\n */\nfunction formatUsage(total: number, limit: number): string {\n  // Calculate percentage\n  const percentage = Math.round((total / limit) * 100);\n\n  // Use half of terminal width for the progress bar\n  const terminalWidth = process.stdout.columns || 80;\n  const barLength = Math.min(Math.floor(terminalWidth / 2), 80);\n  const filledLength = Math.round((percentage / 100) * barLength);\n  const emptyLength = barLength - filledLength;\n\n  const filled = \"\u2588\".repeat(filledLength);\n  const empty = \"\u2591\".repeat(emptyLength);\n\n  // Format numbers with commas\n  const formattedTotal = total.toLocaleString();\n  const formattedLimit = limit.toLocaleString();\n\n  return `Usage: ${formattedTotal}/${formattedLimit}\n${filled}${empty}`;\n}\n\n/**\n * Format changes summary with colored boxes to represent additions and deletions\n * Similar to git's change summary display\n */\nfunction formatChangesSummary(results: ApplyActionsResult[]): string {\n  if (results.length === 0) {\n    return green(\"Changes are applied\");\n  }\n\n  return `${green(\"Changes applied, please review the changes:\")}\\n\\n${results\n    .map((r) => {\n      const addedBox =\n        r.addedLines > 0 ? green(\"\u25A0\".repeat(Math.min(r.addedLines, 5))) : \"\";\n      const removedBox =\n        r.removedLines > 0 ? red(\"\u25A0\".repeat(Math.min(r.removedLines, 5))) : \"\";\n      return `${dim(r.filePath)} ${green(`+${r.addedLines}`)} ${red(\n        `-${r.removedLines}`,\n      )} ${addedBox}${removedBox}`;\n    })\n    .join(\"\\n\")}`;\n}\n\nexport async function checkProjectRoot(sys: DevToolsSys, interactive: boolean) {\n  const cwdDir = sys.getCwdDir();\n  log.info(`Opening project: ${dim(cwdDir)}`);\n  const allFiles = await getAllProjectFiles({\n    basePath: cwdDir,\n    globPattern: \"**/{package.json,tsconfig.json}\",\n    sys,\n  });\n  // find any package.json not at root\n  const nonRootPackageJsons = allFiles.filter((file) =>\n    file.endsWith(\"/package.json\"),\n  );\n\n  const packageJson = await findPackageJson(sys, cwdDir);\n\n  const isIosProject = (await sys.readdir(cwdDir)).some(\n    (file) =>\n      file.endsWith(\".xcodeproj\") ||\n      file.endsWith(\".xcworkspace\") ||\n      file === \"Podfile\",\n  );\n\n  const isAndroidProject = (await sys.readdir(cwdDir)).some(\n    (file) =>\n      file.startsWith(\"build.gradle\") || file.startsWith(\"settings.gradle\"),\n  );\n\n  if (!(packageJson || isAndroidProject || isIosProject)) {\n    log.warn(\n      \"Looks like you are running this command outside a JS, iOS or Android project, this project runs better when executed at the root of a JS, iOS or Android project.\",\n    );\n    await track(\"cli code outside project\", {});\n\n    if (interactive) {\n      const shouldContinue = await confirm({\n        message: \"Do you want to continue anyway?\",\n        active: \"Yes\",\n        inactive: \"No\",\n        initialValue: false,\n      });\n      if (shouldContinue !== true) {\n        await exit(1);\n        return;\n      }\n    }\n  }\n\n  const nonRootTsConfigs = allFiles.filter((file) =>\n    file.endsWith(\"/tsconfig.json\"),\n  );\n\n  let foundMultiplePackageJsons = false;\n  if (nonRootPackageJsons.length > 0) {\n    foundMultiplePackageJsons = true;\n    log.warn(\n      `This command works best when executed at the root of a single project.\\nFound several ${bold(\n        \"package.json\",\n      )} files (${nonRootPackageJsons.length}) instead:\\n${dim(\n        nonRootPackageJsons.join(\"\\n\"),\n      )}`,\n    );\n  } else {\n    if (nonRootTsConfigs.length > 0) {\n      foundMultiplePackageJsons = true;\n      log.warn(\n        `This command works best when executed at the root of a single project.\\nFound several ${bold(\n          \"tsconfig.json\",\n        )} files (${nonRootTsConfigs.length}) instead:\\n${dim(\n          nonRootTsConfigs.join(\"\\n\"),\n        )}`,\n      );\n    }\n  }\n  if (foundMultiplePackageJsons && interactive) {\n    await track(\"cli code monorepo\", {});\n\n    const shouldContinue = await confirm({\n      message: \"Do you want to continue anyway?\",\n      active: \"Yes\",\n      inactive: \"No (recommended)\",\n      initialValue: false,\n    });\n    if (shouldContinue !== true) {\n      log.info(\"cd into the nested project, and run the command again\");\n      await exit(1);\n      return;\n    }\n  }\n\n  sys.Sentry?.setExtra(\"nonRootPackageJsons\", nonRootPackageJsons);\n  sys.Sentry?.setExtra(\"nonRootTsConfigs\", nonRootTsConfigs);\n  sys.Sentry?.setExtra(\"packageJson\", packageJson);\n  sys.Sentry?.setExtra(\"cwdDir\", cwdDir);\n}\n\nexport async function getUserContext(sys: DevToolsSys) {\n  const repoInfo = await sys.getRepoInfo();\n  const userContext: UserContext = {\n    client: \"@builder.io/dev-tools\",\n    clientVersion: sys.version,\n    nodeVersion: process.version,\n    frameworks: sys.getFrameworks().map((f) => f.name),\n    systemPlatform: process.platform,\n    systemEOL: os.EOL,\n    systemArch: os.arch(),\n    inGitRepo: repoInfo.hasGit,\n  };\n  try {\n    const userInfo = os.userInfo();\n    userContext.systemShell = userInfo.shell ?? undefined;\n  } catch {\n    // ignore\n  }\n  return userContext;\n}\n\nfunction isTTY() {\n  return process.stdout.isTTY || process.env.FORCE_TTY === \"1\";\n}\n\nfunction formatFileSize(size: number): string {\n  if (size < 1024) {\n    return `${size} B`;\n  } else if (size < 1024 * 1024) {\n    return `${(size / 1024).toFixed(1)} KB`;\n  } else {\n    return `${(size / (1024 * 1024)).toFixed(1)} MB`;\n  }\n}\n", "import * as ts from \"typescript\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\n\n/**\n * Performs an incremental type-check (no emit) for the given project directory.\n * It reads tsconfig.json (just like the tsc CLI does) and enforces the `noEmit` flag.\n *\n * @param projectDir - The path to the project (where tsconfig.json is located).\n * @param oldProgram - Optionally, the previous builder program for incremental builds.\n * @returns An object containing the new builder program and collected diagnostics.\n */\nexport interface CheckpointData {\n  program: ts.EmitAndSemanticDiagnosticsBuilderProgram;\n  diagnostics: ts.Diagnostic[];\n}\n\nexport type Checkpoint = CheckpointData | null;\n\nexport function runCheckpoint(\n  projectDir: string,\n  oldProgram?: ts.EmitAndSemanticDiagnosticsBuilderProgram,\n): Checkpoint {\n  try {\n    // Locate tsconfig.json.\n    const configPath = ts.findConfigFile(\n      projectDir,\n      ts.sys.fileExists,\n      \"tsconfig.json\",\n    );\n    if (!configPath) {\n      return null;\n    }\n\n    // Read and parse tsconfig.json.\n    const configFile = ts.readConfigFile(configPath, ts.sys.readFile);\n    if (configFile.error) {\n      return null;\n    }\n\n    const parsedConfig = ts.parseJsonConfigFileContent(\n      configFile.config,\n      ts.sys,\n      path.dirname(configPath),\n    );\n\n    // Enforce noEmit so that no files are output.\n    parsedConfig.options.noEmit = true;\n\n    // Create an incremental compiler host that correctly sets source file versions.\n    const host = ts.createIncrementalCompilerHost(parsedConfig.options);\n\n    // Create an incremental builder program, reusing the previous program if available.\n    const builderProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram(\n      parsedConfig.fileNames,\n      parsedConfig.options,\n      host,\n      oldProgram,\n      parsedConfig.errors,\n      parsedConfig.projectReferences,\n    );\n\n    // Get all diagnostics (syntactic, semantic, etc.) without emitting files.\n    const diagnostics = ts.getPreEmitDiagnostics(builderProgram.getProgram());\n\n    return {\n      program: builderProgram,\n      diagnostics: diagnostics.filter(filterDiagnostic),\n    };\n  } catch (e) {\n    return null;\n  }\n}\n\nexport function filterDiagnostic(c: ts.Diagnostic) {\n  if (c.category !== ts.DiagnosticCategory.Error) {\n    return false;\n  }\n  if (!c.file) {\n    return false;\n  }\n  // usused parameter\n  if (\n    c.code === 6133 ||\n    c.code === 6138 ||\n    c.code === 6305 ||\n    c.code === 6196 ||\n    c.code === 6192 ||\n    c.code === 6198 ||\n    c.code === 6199 ||\n    c.code === 6205 ||\n    c.code === 1449 ||\n    c.code === 2578 ||\n    c.code === 7006 ||\n    c.code === 5074 ||\n    c.code === 7026 ||\n    c.code === 2503 ||\n    c.code === 2695\n  ) {\n    return false;\n  }\n\n  // Omit prop type mismatch\n  // like when the component expects an enum but the value is a string\n  // TODO: this is actually a legitimate type error and the correct way would be to use `as EnumType` in the mapper\n  if (c.code === 2322) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Produces a fingerprint (hash) for a given diagnostic.\n * Combines file name, position, code, category, and message into a unique identifier.\n */\nfunction fingerprintDiagnostic(diag: ts.Diagnostic): string {\n  // Use 'global' for diagnostics not tied to a file.\n  const fileName = diag.file ? diag.file.fileName : \"global\";\n  const pos =\n    diag.file && diag.start !== undefined\n      ? diag.file.getLineAndCharacterOfPosition(diag.start)\n      : { line: 0, character: 0 };\n  const code = diag.code;\n  const category = diag.category;\n  const message = ts.flattenDiagnosticMessageText(diag.messageText, \"\\n\");\n  // Create a raw fingerprint string.\n  const rawFingerprint = `${fileName}:${pos.line}:${pos.character}:${code}:${category}:${message}`;\n  // Hash the raw fingerprint for a concise representation.\n  return crypto.createHash(\"sha256\").update(rawFingerprint).digest(\"hex\");\n}\n\n/**\n * Given a new list of diagnostics and a baseline list, filter out diagnostics\n * that were already present in the baseline.\n */\nexport function filterBaselineDiagnostics(\n  baselineFingerprints: Set<string>,\n  checkpoint: Checkpoint,\n): ts.Diagnostic[] {\n  if (checkpoint?.diagnostics) {\n    return checkpoint.diagnostics.filter(\n      (d) => !baselineFingerprints.has(fingerprintDiagnostic(d)),\n    );\n  }\n  return [];\n}\n\nexport function createFingerprintSet(checkpoint: Checkpoint): Set<string> {\n  if (checkpoint?.diagnostics) {\n    return new Set(checkpoint.diagnostics.map((d) => fingerprintDiagnostic(d)));\n  }\n  return new Set();\n}\n\n/**\n * Returns a FormatDiagnosticsHost suitable for formatting diagnostics.\n */\nconst diagnosticHost: ts.FormatDiagnosticsHost = {\n  getCanonicalFileName: (fileName) => fileName,\n  getCurrentDirectory: () => ts.sys.getCurrentDirectory(),\n  getNewLine: () => ts.sys.newLine,\n};\n\n/**\n * Pretty prints diagnostics as a plain text string.\n *\n * @param diagnostics - An array of ts.Diagnostic objects.\n * @returns A formatted string that describes the diagnostics.\n */\nexport function prettyPrintDiagnostics(diagnostics: ts.Diagnostic[]): string {\n  return ts.formatDiagnostics(diagnostics, diagnosticHost);\n}\n\nexport function prettyPrintDiagnosticsWithContext(\n  diagnostics: ts.Diagnostic[],\n): string {\n  return ts.formatDiagnosticsWithColorAndContext(diagnostics, diagnosticHost);\n}\n", "import ts from \"typescript\";\nimport type { DevTools, DevToolsSys, ExportType } from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport { getCredentials, isCI } from \"./credentials\";\n\nimport {\n  cancel,\n  confirm,\n  intro,\n  isCancel,\n  log,\n  outro,\n  select,\n  spinner,\n} from \"@clack/prompts\";\n\nimport {\n  bold,\n  bgCyan,\n  dim,\n  yellow,\n  cyan,\n  bgGreen,\n  white,\n  magenta,\n  bgRed,\n  bgBlack,\n} from \"picocolors\";\nimport { createTsProgram } from \"../common/typescript\";\nimport { createDevTools } from \"../core\";\nimport { common, createEmphasize } from \"emphasize\";\nimport { exit } from \"./exit\";\nimport { apiAirV2Host } from \"./constants\";\nimport { isMapperFile } from \"../common/utils\";\nimport { track } from \"./track\";\nimport { safeFetch } from \"./fetch\";\nimport { pkgVersion } from \"./version\";\nimport { getFigmaComponentName } from \"$/vcp-common/figma-component\";\nimport { inPlaceResolveFigmaURLs } from \"./figma-utils\";\nimport { checkProjectRoot, getUserContext } from \"./code\";\nimport { filterDiagnostic } from \"./incremental-tsc\";\nimport type {\n  ESMImport,\n  ImportMetadata,\n  FigmaBuilderLink,\n  FigmaMapperFile,\n  PublishedMapping,\n} from \"$/ai-utils\";\n\nexport const runFigmaPublish = async (sys: DevToolsSys, args: CLIArgs) => {\n  const userContext = await getUserContext(sys);\n  sys.Sentry?.setContext(\"userContext\", userContext);\n\n  await track(\"figma publish started\", {});\n\n  const interactive = !args.yes || !args.skipInstallation;\n  if (interactive) {\n    if (!process.stdout.isTTY && process.env.FORCE_TTY !== \"1\") {\n      await track(\"tty error\", {});\n\n      cancel(\n        \"This command requires a TTY-enabled terminal. \\n see docs for more information on how to run non-interactive.\\nIf you are using Windows Git Bash, try a different terminal or wrap the command with winpty.\",\n      );\n      return await exit(1);\n    }\n  }\n  const ciMode = isCI(args);\n\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" figma publish \"))) + `  ` + dim(pkgVersion));\n\n  await checkProjectRoot(sys, interactive);\n\n  let mappingFiles: string[];\n  let figmaBuilderLinks: FigmaBuilderLink[];\n  let figmaLinksToResolve: string[];\n  let mapperFiles: FigmaMapperFile[];\n  let finalLinks: FigmaBuilderLink[];\n  let finalSkippedLinks: [FigmaBuilderLink, \"duplicate\" | \"no-key\"][];\n\n  if (args.clearMappings) {\n    // Skip all file parsing when clearing mappings\n    mappingFiles = [];\n    figmaBuilderLinks = [];\n    figmaLinksToResolve = [];\n    mapperFiles = [];\n    finalLinks = [];\n    finalSkippedLinks = [];\n  } else {\n    // Normal flow: find and parse mapping files\n    mappingFiles = await findAllMappingFiles(sys);\n\n    const mappingResults = await findMappingsFromFiles({\n      mappingFiles,\n      sys,\n    });\n\n    figmaBuilderLinks = mappingResults.figmaBuilderLinks;\n    figmaLinksToResolve = mappingResults.figmaLinksToResolve;\n    mapperFiles = mappingResults.mapperFiles;\n\n    const { filteredLinks, skippedLinks } = filterMappings(figmaBuilderLinks);\n    finalLinks = filteredLinks;\n    finalSkippedLinks = skippedLinks;\n  }\n\n  const {\n    builderPrivateKey: privateKey,\n    builderPublicKey: spaceId,\n    userId,\n    spaceName,\n    figmaAuth,\n  } = await getCredentials(sys, args, {\n    forceSpaceId: args.spaceId,\n    builderPrivateKey: true,\n    builderPublicKey: true,\n    requireFigmaAuth: figmaLinksToResolve.length > 0 ? \"if-unset\" : undefined,\n  });\n\n  if (figmaAuth && figmaLinksToResolve.length > 0) {\n    await inPlaceResolveFigmaURLs(\n      sys,\n      args,\n      figmaAuth,\n      figmaBuilderLinks,\n      figmaLinksToResolve,\n    );\n  }\n\n  if (finalSkippedLinks.length > 0) {\n    await track(\"figma publish user error\", {\n      mappingFiles: mappingFiles.length,\n      filteredLinks: finalLinks.length,\n      skippedLinks: finalSkippedLinks.length,\n    });\n    if (args.force !== true) {\n      log.message(\"\");\n      cancel(\n        `Found some errors in the mapping files. Please fix the issues and try again, or use the ${bold(\n          \"--force\",\n        )} flag to publish regardless.`,\n      );\n      return await exit(1);\n    } else {\n      log.warn(\n        \"Local mappings contain some type errors, but --force flag was used, skipping.\",\n      );\n    }\n  }\n\n  let devTools: DevTools | undefined;\n  try {\n    devTools = await createDevTools(sys);\n  } catch (e) {\n    sys.Sentry?.captureException(e, { level: \"warning\" });\n  }\n\n  const extraContext = spaceName\n    ? `${bold(spaceName)} ${dim(\"(\" + spaceId + \")\")}`\n    : `space id \"${bold(spaceId)}\"`;\n\n  if (finalLinks.length === 0) {\n    const warningMessage = args.clearMappings\n      ? `Clear mappings flag is set. All existing mappings will be removed from space: ${extraContext}.`\n      : `No mappings found. Publishing will remove all existing mapping in space: ${extraContext}.`;\n\n    log.warning(warningMessage);\n    const confirmPublish =\n      ciMode ||\n      args.yes ||\n      (await confirm({\n        message: `Do you want to continue?`,\n        active: \"Publish\",\n        inactive: \"Cancel\",\n      }));\n    if (isCancel(confirmPublish) || !confirmPublish) {\n      cancel(\"Publish cancelled.\");\n      return await exit(1);\n    }\n  } else {\n    let hasRelativeImports = false;\n    for (const link of finalLinks) {\n      if (link.imports && link.imports.length > 0) {\n        const relativeImports = link.imports.filter((i) =>\n          i.importPath?.startsWith(\".\"),\n        );\n        if (relativeImports.length > 0) {\n          hasRelativeImports = true;\n          log.warn(\n            `${dim(`Found relative imports in ${link.loc}:`)}\\n${relativeImports\n              .map((i) => i.importPath)\n              .join(\"/n\")}`,\n          );\n        }\n      }\n    }\n    if (hasRelativeImports) {\n      log.warn(`${yellow(`Relative imports may break when code is generated in different projects.\\nInstead, use one of these approaches:`)}\n${dim(\"\u2022\")} Package imports ${dim(`(e.g. import { Button } from \"@your-org/components\")`)}\n${dim(\"\u2022\")} TypeScript path aliases ${dim(`(e.g. import { Input } from \"@/components\")`)}\n\nThese imports will be preserved exactly as written when generating code.\nSee: https://www.builder.io/c/docs/component-mapping-publishing\n`);\n    }\n    const confirmPublish =\n      ciMode ||\n      args.yes ||\n      (await select({\n        message: `Do you want to publish the found mappings to ${extraContext}?`,\n        options: [\n          {\n            label: \"Publish\",\n            hint: \"Existing mappings will be overwritten\",\n            value: true,\n          },\n          {\n            label: \"Cancel\",\n            value: false,\n          },\n        ],\n      }));\n    if (isCancel(confirmPublish) || !confirmPublish) {\n      cancel(\n        \"Publish cancelled.\\nYou can use `npx builder.io@latest auth` to re-authenticate in a different space\",\n      );\n      return await exit(1);\n    }\n  }\n  let s = spinner();\n  const repoInfo = await sys.getRepoInfo();\n  let id: string | undefined;\n  if (!args.dryrun) {\n    s.start(\"Publishing Figma Mappings\");\n    id = await publishFigmaMappings(sys, spaceId!, privateKey!, userId!, {\n      figmaBuilderLinks: finalLinks,\n      remoteUrl: repoInfo?.remoteUrl,\n      defaultBranch: repoInfo?.defaultBranch,\n      currentBranch: repoInfo?.currentBranch,\n      commit: repoInfo?.commit,\n      userContext,\n      mapperFiles,\n    });\n    s.stop(\n      finalLinks.length > 0\n        ? `${finalLinks.length} mappings uploaded`\n        : \"All mappings removed from the Builder space\",\n    );\n  }\n\n  if (args.verbose || args.dryrun) {\n    const highlight = createEmphasize(common);\n\n    log.info(\n      highlight.highlight(\"json\", JSON.stringify(finalLinks, null, 2)).value,\n    );\n  }\n\n  const { success, error } = await setPublicKey(sys, spaceId!, devTools, true);\n  if (!success) {\n    if (error === \"permission-error\") {\n      log.error(\n        `Failed to set public api key. Please ensure you have write access in the current directory. You can use chmod to change the permissions of this directory.`,\n      );\n    } else {\n      log.error(\"Error setting public api key: \" + error);\n    }\n  }\n\n  log.success(\n    `${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} ${id ? dim(\"id \" + id) : \"\"}`,\n  );\n\n  const command =\n    {\n      react: \"npm run start\",\n      angular: \"npm run start\",\n      vue: \"npm run dev\",\n      svelte: \"npm run dev\",\n      next: \"npm run dev\",\n      remix: \"npm run dev\",\n    }[devTools?.framework ?? \"react\"] ?? \"npm run start\";\n\n  outro(\n    dim(\"You can now start the dev server:\\n\\n   \") +\n      bgBlack(white(bold(` ${command} `))) +\n      \"\\n\\n   \" +\n      dim(\n        \"Then, go back to Figma and generate code again to see your mapped components.\",\n      ),\n  );\n\n  await track(\"figma publish success\", {\n    spaceId,\n    mappingFiles: mappingFiles.length,\n    figmaBuilderLinks: finalLinks.length,\n  });\n};\n\nasync function parseFile(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  typeChecker: ts.TypeChecker,\n): Promise<FigmaBuilderLink[]> {\n  const figmaBuilderLinks: FigmaBuilderLink[] = [];\n  const nodes: ts.Node[] = [sourceFile];\n  const fileLoc = sys.relative(sys.getAppRootDir(), sourceFile.fileName);\n  while (nodes.length > 0) {\n    const node = nodes.shift()!;\n    if (isFigmaMapperCall(node, sourceFile)) {\n      const link = parseCallExpression(sys, node, sourceFile, typeChecker);\n      const { line, character } = sourceFile.getLineAndCharacterOfPosition(\n        node.getStart(),\n      );\n      if (link) {\n        link.loc = `${fileLoc}:${line + 1}:${character + 1}`;\n        figmaBuilderLinks.push(link);\n      }\n    }\n    nodes.push(...node.getChildren(sourceFile));\n  }\n  return figmaBuilderLinks;\n}\n\nexport const FIGMA_CONNECT_CALL = `figmaMapping`;\n\nfunction parseCallExpression(\n  sys: DevToolsSys,\n  node: ts.CallExpression,\n  sourceFile: ts.SourceFile,\n  typeChecker: ts.TypeChecker,\n): FigmaBuilderLink | null {\n  const [arg] = node.arguments;\n  if (!arg) {\n    throw new Error(\"Invalid figmaMapping call, no arguments found\");\n  }\n  if (!ts.isObjectLiteralExpression(arg)) {\n    throw new Error(\n      \"Invalid figmaMapping call, argument is not an object literal\",\n    );\n  }\n  const properties = arg.properties;\n  if (!properties) {\n    throw new Error(\"Invalid figmaMapping call, argument has no properties\");\n  }\n  let figmaKey: string = \"\";\n  let figmaComponentName: string | undefined;\n  let inputMapper: string | undefined;\n  let originalInputMapper: string | undefined;\n  let builderName: string = \"-\";\n  let figmaName: string = sys\n    .basename(sourceFile.fileName)\n    .replace(/\\.mapper\\.[tsxjm]+$/, \"\");\n  let exportType: ExportType | undefined;\n  let importName: string | undefined;\n  let importPath: string | undefined;\n  let figmaUrl: string | undefined;\n  interface MappingMeta {\n    imports: ImportMetadata[];\n  }\n  let meta: MappingMeta | undefined;\n  if (node.typeArguments && node.typeArguments.length > 0) {\n    const name = extractFigmaComponentName(\n      node.typeArguments[0].getText(sourceFile),\n    );\n    if (name) {\n      figmaName = name;\n    }\n  }\n  for (const prop of properties) {\n    const name = prop.name?.getText(sourceFile);\n    if (!name) {\n      throw new Error(\"Invalid figmaMapping call, property has no name\");\n    }\n\n    switch (name) {\n      case \"componentName\": {\n        if (!(\"initializer\" in prop)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentName has no initializer\",\n          );\n        }\n        const initializer = prop.initializer;\n        if (!ts.isStringLiteral(initializer)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentName is not a string literal\",\n          );\n        }\n        figmaComponentName = initializer.text;\n        break;\n      }\n      case \"url\": {\n        if (!(\"initializer\" in prop)) {\n          throw new Error(\"Invalid figmaMapping call, url has no initializer\");\n        }\n        const initializer = prop.initializer;\n        if (!ts.isStringLiteral(initializer)) {\n          throw new Error(\n            \"Invalid figmaMapping call, url is not a string literal\",\n          );\n        }\n        figmaUrl = initializer.text;\n        break;\n      }\n      case \"componentKey\": {\n        if (!(\"initializer\" in prop)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentKey has no initializer\",\n          );\n        }\n        const initializer = prop.initializer;\n\n        if (!ts.isStringLiteral(initializer)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentKey is not a string literal\",\n          );\n        }\n        figmaKey = initializer.text;\n        break;\n      }\n      case \"meta\": {\n        if (!(\"initializer\" in prop)) {\n          throw new Error(\"Invalid figmaMapping call, meta has no initializer\");\n        }\n        const initializer = prop.initializer;\n        if (ts.isObjectLiteralExpression(initializer)) {\n          meta = { imports: [] };\n          for (const property of initializer.properties) {\n            if (\n              ts.isPropertyAssignment(property) &&\n              ts.isIdentifier(property.name)\n            ) {\n              const name = property.name.text;\n              if (\n                name === \"imports\" &&\n                ts.isArrayLiteralExpression(property.initializer)\n              ) {\n                meta.imports = property.initializer.elements\n                  .map((element) => {\n                    if (ts.isStringLiteral(element)) {\n                      // Handle plain string imports\n                      return element.text;\n                    } else if (ts.isObjectLiteralExpression(element)) {\n                      // Handle structured import objects\n                      const importObj: any = {};\n                      for (const prop of element.properties) {\n                        if (\n                          ts.isPropertyAssignment(prop) &&\n                          ts.isIdentifier(prop.name)\n                        ) {\n                          const propName = prop.name.text;\n                          if (ts.isStringLiteral(prop.initializer)) {\n                            importObj[propName] = prop.initializer.text;\n                          }\n                        }\n                      }\n                      return importObj;\n                    }\n                    return null;\n                  })\n                  .filter(Boolean);\n              }\n            }\n          }\n        }\n        break;\n      }\n      case \"mapper\": {\n        if (ts.isMethodDeclaration(prop)) {\n          if (\n            prop.parameters &&\n            prop.parameters.length > 0 &&\n            prop.parameters[0] &&\n            prop.parameters[0].type\n          ) {\n            const type = prop.parameters[0].type.getText(sourceFile);\n            const name = extractFigmaComponentName(type);\n            if (name) {\n              figmaName = name;\n            }\n          }\n          function getExportStatement(identifier: ts.Identifier) {\n            // use typechecker to get import statement of node.tagName\n            const symbol = typeChecker.getSymbolAtLocation(identifier);\n            const declaration = symbol?.getDeclarations()?.[0];\n            if (declaration) {\n              const importDeclaration =\n                findParentImportDeclaration(declaration);\n\n              if (importDeclaration?.importClause) {\n                const name =\n                  importDeclaration.importClause.name?.getText(sourceFile);\n                if (name === builderName) {\n                  exportType = \"default\";\n                  importName = name;\n                } else if (\n                  importDeclaration.importClause.namedBindings &&\n                  ts.isNamedImports(\n                    importDeclaration.importClause.namedBindings,\n                  )\n                ) {\n                  exportType = \"named\";\n                  importDeclaration.importClause.namedBindings.elements.forEach(\n                    (binding) => {\n                      if (binding.name.getText(sourceFile) === builderName) {\n                        importName = binding.name.getText(sourceFile);\n                      }\n                    },\n                  );\n                }\n                if (\n                  importName &&\n                  ts.isStringLiteral(importDeclaration.moduleSpecifier)\n                ) {\n                  importPath = importDeclaration.moduleSpecifier.text;\n                }\n                return true;\n              }\n            }\n            return false;\n          }\n          function visitor(node: ts.Node) {\n            if (\n              (ts.isJsxOpeningElement(node) ||\n                ts.isJsxSelfClosingElement(node)) &&\n              ts.isIdentifier(node.tagName)\n            ) {\n              builderName = node.tagName.getText(sourceFile);\n              getExportStatement(node.tagName);\n              return;\n            } else if (\n              // html template literal\n              ts.isTaggedTemplateExpression(node) &&\n              ts.isIdentifier(node.tag) &&\n              (node.tag.escapedText === \"html\" ||\n                node.tag.escapedText === \"tmpl\")\n            ) {\n              if (ts.isTemplateExpression(node.template)) {\n                const found = node.template.templateSpans.find(\n                  (a) =>\n                    ts.isIdentifier(a.expression) &&\n                    isCapitalized(a.expression.text) &&\n                    getExportStatement(a.expression),\n                );\n                if (found && ts.isIdentifier(found.expression)) {\n                  builderName = found.expression.text;\n                  return;\n                }\n              }\n              let match = node.template\n                .getText(sourceFile)\n                .match(/^`\\s*<([^\\s]+)/);\n              if (match) {\n                builderName = match[1];\n                return;\n              }\n              // tmpl may not have an html tag, so we need to check for that\n              match = node.template.getText(sourceFile).match(/^`\\s*([^\\s]+)/);\n              if (match) {\n                builderName = match[1];\n                return;\n              }\n            } else {\n              ts.forEachChild(node, visitor);\n            }\n          }\n          ts.forEachChild(prop, visitor);\n\n          originalInputMapper = prop\n            .getText(sourceFile)\n            .replace(/^mapper/, \"function Mapper\");\n          inputMapper = transpileInputMapper(originalInputMapper);\n          break;\n        }\n      }\n      case \"designTokenMapper\": {\n        if (ts.isMethodDeclaration(prop)) {\n          originalInputMapper = prop\n            .getText(sourceFile)\n            .replace(/^designTokenMapper/, \"function Mapper\");\n          inputMapper = transpileInputMapper(originalInputMapper);\n          figmaKey = \"design-tokens\";\n          break;\n        }\n      }\n      case \"genericMapper\": {\n        if (ts.isMethodDeclaration(prop)) {\n          originalInputMapper = prop\n            .getText(sourceFile)\n            .replace(/^genericMapper/, \"function Mapper\");\n          inputMapper = transpileInputMapper(originalInputMapper);\n          figmaKey = \"*\";\n          break;\n        }\n      }\n    }\n  }\n\n  if (!figmaKey && !figmaUrl) {\n    throw new Error(\"Invalid figmaMapping call, no componentKey or url found\");\n  }\n  if (!figmaKey && !inputMapper) {\n    throw new Error(\"Invalid figmaMapping call, no mapper found\");\n  }\n  if (!figmaKey && !originalInputMapper) {\n    throw new Error(\"Invalid figmaMapping call, no original mapper found\");\n  }\n\n  // Separate structured imports from string imports\n  const extractedImports = extractImports(sourceFile);\n  const metaImports = meta?.imports ?? [];\n\n  const structuredImports: ESMImport[] = [];\n  const stringImports: string[] = [];\n\n  // Add extracted imports (always structured)\n  structuredImports.push(...extractedImports);\n\n  // Process meta imports\n  for (const importItem of metaImports) {\n    if (typeof importItem === \"string\") {\n      stringImports.push(importItem);\n    } else {\n      structuredImports.push(importItem);\n    }\n  }\n\n  return {\n    builderName,\n    figmaName: figmaComponentName ?? figmaName,\n    figmaKey,\n    figmaUrl,\n    inputMapper,\n    exportType,\n    importName,\n    importPath,\n    originalInputMapper,\n    imports: structuredImports,\n    importStrings: stringImports.length > 0 ? stringImports : undefined,\n    source: \"cli\",\n  };\n}\n\nfunction isCapitalized(name: string): boolean {\n  return name.charAt(0) === name.charAt(0).toUpperCase();\n}\nfunction transpileInputMapper(originalInputMapper: string): string {\n  const inputMapper = ts.transpile(originalInputMapper, {\n    target: ts.ScriptTarget.Latest,\n    allowNonTsExtensions: true,\n    moduleResolution: ts.ModuleResolutionKind.NodeJs,\n    module: ts.ModuleKind.CommonJS,\n    noImplicitAny: false,\n    esModuleInterop: true,\n    noUnusedLocals: false,\n    noUnusedParameters: false,\n    jsx: ts.JsxEmit.React,\n    jsxFactory: \"React.createElement\",\n    jsxFragmentFactory: \"React.Fragment\",\n    allowJs: true,\n    checkJs: true,\n    strict: true,\n    suppressImplicitAnyIndexErrors: true,\n    typeRoots: [\"node_modules/@types\"],\n    inlineSources: true,\n    inlineSourceMap: true,\n  });\n  return inputMapper;\n}\n\nfunction findParentImportDeclaration(\n  declaration: ts.Declaration,\n): ts.ImportDeclaration | undefined {\n  let current = declaration;\n  while (current) {\n    if (ts.isImportDeclaration(current)) {\n      return current;\n    }\n    current = current.parent as ts.Declaration;\n  }\n}\nfunction isFigmaMapperCall(\n  node: ts.Node,\n  sourceFile: ts.SourceFile,\n): node is ts.CallExpression {\n  return (\n    ts.isCallExpression(node) &&\n    node.expression.getText(sourceFile) === FIGMA_CONNECT_CALL\n  );\n}\n\nexport async function findAllMappingFiles(sys: DevToolsSys) {\n  const skipFolders = [\"node_modules\", \"dist\", \"build\", \"public\"];\n  const files = await sys.readdirRecursive(sys.getAppRootDir(), skipFolders);\n  return files.filter((file) => isMapperFile(file));\n}\n\nfunction extractFigmaComponentName(name: string) {\n  const componentNameMatch = name.match(/^Figma(\\w+)Props$/);\n  if (componentNameMatch && typeof componentNameMatch[1] === \"string\") {\n    return componentNameMatch[1];\n  }\n  return undefined;\n}\n\nexport async function setPublicKey(\n  sys: DevToolsSys,\n  publicKey: string,\n  devTools: DevTools | undefined,\n  ensureFigmaImportPage: boolean = false,\n) {\n  try {\n    if (!devTools) {\n      devTools = await createDevTools(sys);\n    }\n    const envInfo = await devTools.setPublicApiKey({\n      publicApiKey: publicKey,\n    });\n    if (envInfo.modifiedType === \"permission-error\") {\n      return { success: false, error: \"permission-error\" };\n    }\n    if (ensureFigmaImportPage) {\n      await devTools.ensureFigmaImportPage();\n    }\n    return { success: true };\n  } catch (e) {\n    let error = \"unknown-error\";\n    if (e instanceof Error) {\n      error = e.message;\n    } else if (typeof e === \"string\") {\n      error = e;\n    }\n    return { success: false, error };\n  }\n}\n\nconst publishFigmaMappings = async (\n  _sys: DevToolsSys,\n  spaceId: string,\n  privateKey: string,\n  userId: string,\n  data: PublishedMapping,\n): Promise<string> => {\n  const url = new URL(`${apiAirV2Host}/mappings/publish`);\n  url.searchParams.set(\"apiKey\", spaceId);\n  url.searchParams.set(\"userId\", userId);\n\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${privateKey}`,\n    },\n    body: JSON.stringify(data),\n  });\n\n  const json = await res.json();\n  if (typeof json === \"object\" && typeof json.id === \"string\") {\n    return json.id;\n  }\n  throw new Error(\"Figma Publish Response is not valid\");\n};\n\n/**\n * Returns a FormatDiagnosticsHost suitable for formatting diagnostics.\n */\nconst diagnosticHost: ts.FormatDiagnosticsHost = {\n  getCanonicalFileName: (fileName) => fileName,\n  getCurrentDirectory: () => ts.sys.getCurrentDirectory(),\n  getNewLine: () => ts.sys.newLine,\n};\n\nfunction prettyPrintDiagnosticsWithContext(\n  diagnostics: readonly ts.Diagnostic[],\n): string {\n  return ts.formatDiagnosticsWithColorAndContext(diagnostics, diagnosticHost);\n}\n\nexport async function findMappingsFromFiles({\n  sys,\n  mappingFiles,\n  typeCheck,\n}: {\n  mappingFiles: string[];\n  sys: DevToolsSys;\n  typeCheck?: boolean;\n}): Promise<{\n  mapperFiles: FigmaMapperFile[];\n  figmaBuilderLinks: FigmaBuilderLink[];\n  diagnostics: ts.Diagnostic[];\n  figmaLinksToResolve: string[];\n}> {\n  sys.Sentry?.setContext(\"findMappings\", {\n    mappingFiles,\n  });\n\n  if (!mappingFiles.length) {\n    return {\n      mapperFiles: [],\n      figmaBuilderLinks: [],\n      figmaLinksToResolve: [],\n      diagnostics: [],\n    };\n  }\n  const figmaBuilderLinks: FigmaBuilderLink[] = [];\n  const mapperFiles: FigmaMapperFile[] = [];\n  const totalDiagnostics: ts.Diagnostic[] = [];\n  const tsProgram = await createTsProgram(sys, mappingFiles);\n  const typeChecker = tsProgram.getTypeChecker();\n  const fatalDiagnostics = tsProgram\n    .getSyntacticDiagnostics()\n    .filter(filterDiagnostic)\n    .filter((d) =>\n      d.file?.fileName ? mappingFiles.includes(d.file.fileName) : false,\n    );\n\n  if (fatalDiagnostics.length > 0) {\n    log.error(\n      `At least one of the mappings contain syntactic errors:\\n\\n${prettyPrintDiagnosticsWithContext(fatalDiagnostics)}`,\n    );\n    return exit(1);\n  }\n\n  const allDiagnostics: ts.Diagnostic[] = [\n    ...(typeCheck ? tsProgram.getSemanticDiagnostics() : []),\n  ].filter(filterDiagnostic);\n\n  for (const file of mappingFiles) {\n    try {\n      const sourceFile = tsProgram.getSourceFile(file);\n      if (!sourceFile) {\n        sys.Sentry?.captureException(new Error(`Could not find source file`), {\n          extra: {\n            file,\n            sourceFiles: tsProgram.getSourceFiles().map((a) => a.fileName),\n          },\n          level: \"warning\",\n        });\n        continue;\n      }\n      const fileName = sourceFile?.fileName;\n      mapperFiles.push({\n        filePath: file,\n        content: sourceFile.getText(),\n      });\n      if (fileName) {\n        const diagnostics = allDiagnostics.filter((a) => {\n          return a.file?.fileName === fileName;\n        });\n        if (diagnostics.length > 0) {\n          totalDiagnostics.push(...diagnostics);\n        }\n      }\n\n      const links = await parseFile(sys, sourceFile, typeChecker);\n      figmaBuilderLinks.push(...links);\n    } catch (e) {\n      sys.Sentry?.captureException(e);\n      return await exit(1);\n    }\n  }\n\n  const figmaLinksToResolve = figmaBuilderLinks\n    .filter((l) => l.figmaUrl && !l.figmaKey)\n    .map((l) => l.figmaUrl!);\n\n  return {\n    mapperFiles,\n    figmaBuilderLinks,\n    figmaLinksToResolve,\n    diagnostics: totalDiagnostics,\n  };\n}\n\nfunction filterMappings(links: FigmaBuilderLink[]) {\n  const seenFigmaKeys = new Set<string>();\n  const filteredLinks: FigmaBuilderLink[] = [];\n  const skippedLinks: [FigmaBuilderLink, \"duplicate\" | \"no-key\"][] = [];\n  for (const l of links) {\n    let isDuplicate = false;\n    if (!l.figmaKey) {\n      skippedLinks.push([l, \"no-key\"]);\n      continue;\n    }\n    if (l.figmaKey) {\n      isDuplicate ||= seenFigmaKeys.has(l.figmaKey);\n      seenFigmaKeys.add(l.figmaKey);\n    } else if (l.figmaUrl) {\n      // only check for duplicated urls if no key is provided\n      isDuplicate ||= seenFigmaKeys.has(l.figmaUrl);\n      seenFigmaKeys.add(l.figmaUrl);\n    }\n    if (isDuplicate) {\n      skippedLinks.push([l, \"duplicate\"]);\n    } else {\n      filteredLinks.push(l);\n    }\n  }\n\n  if (filteredLinks.length > 0) {\n    const filteredLinksMessage =\n      `Found ${filteredLinks.length} mappings:\\n` +\n      filteredLinks\n        .map((l) => {\n          let isDuplicate = false;\n          if (l.figmaKey) {\n            isDuplicate ||= seenFigmaKeys.has(l.figmaKey);\n            seenFigmaKeys.add(l.figmaKey);\n          } else if (l.figmaUrl) {\n            // only check for duplicated urls if no key is provided\n            isDuplicate ||= seenFigmaKeys.has(l.figmaUrl);\n            seenFigmaKeys.add(l.figmaUrl);\n          }\n\n          let text = \"\";\n          switch (l.figmaKey) {\n            // add icon\n            case \"design-tokens\":\n              text = \"  \" + cyan(`\u2747\uFE0E Design tokens mapper`);\n              break;\n            case \"*\": // generic mapper\n              text = \"  \" + yellow(`\u25CF Generic mapper`);\n              break;\n            default:\n              text = `  ${magenta(\n                \"\u2756\" + \" \" + getFigmaComponentName(l.figmaName),\n              )}  ${dim(\"\u2192\")}  ${\n                l.builderName === \"-\" ? \"-\" : \"<\" + l.builderName + \">\"\n              }`;\n              break;\n          }\n          if (l.loc) {\n            text = `${text} in ${dim(l.loc)}`;\n          }\n          return text;\n        })\n        .join(\"\\n\");\n\n    log.info(filteredLinksMessage);\n  }\n  if (skippedLinks.length > 0) {\n    const skippedLinksMessage = skippedLinks\n      .map(([l, type]) => {\n        let text = \"\";\n        switch (l.figmaKey) {\n          // add icon\n          case \"design-tokens\":\n            text += cyan(`\u2747\uFE0E Design tokens mapper`);\n            break;\n          case \"*\": // generic mapper\n            text += yellow(`\u25CF Generic mapper`);\n            break;\n          default:\n            text += `${magenta(\n              \"\u2756\" + \" \" + getFigmaComponentName(l.figmaName),\n            )}`;\n            break;\n        }\n        text = (l.loc ? bgRed(`${text} in ${l.loc}`) : text) + \"\\n\";\n        switch (type) {\n          case \"duplicate\":\n            text += bold(`Component mapping is duplicateds`);\n            break;\n          case \"no-key\":\n            text += `Could not resolve the \"url\" to a figma component key.\\n${dim(\n              l.figmaUrl,\n            )} is not a COMPONENT or COMPONENT_SET`;\n            break;\n        }\n        return text;\n      })\n      .join(\"\\n\");\n    log.error(skippedLinksMessage);\n  }\n\n  return {\n    filteredLinks,\n    skippedLinks,\n  };\n}\n\nfunction extractImports(sourceFile: ts.SourceFile): ESMImport[] {\n  const imports: ESMImport[] = [];\n\n  for (const statement of sourceFile.statements) {\n    if (!ts.isImportDeclaration(statement)) continue;\n    if (!statement.importClause) continue;\n    if (statement.importClause.isTypeOnly) continue;\n\n    // Get the module path\n    if (!ts.isStringLiteral(statement.moduleSpecifier)) continue;\n    const importPath = statement.moduleSpecifier.text;\n\n    // Skip @builder.io imports\n    if (importPath.startsWith(\"@builder.io\")) continue;\n\n    // Handle default import\n    if (statement.importClause.name) {\n      imports.push({\n        importType: \"default\",\n        importName: statement.importClause.name.text,\n        importPath,\n      });\n    }\n\n    // Handle named imports\n    const namedBindings = statement.importClause.namedBindings;\n    if (namedBindings && ts.isNamedImports(namedBindings)) {\n      for (const element of namedBindings.elements) {\n        if (!element.isTypeOnly) {\n          imports.push({\n            importType: \"named\",\n            importName: element.name.text,\n            importPath,\n          });\n        }\n      }\n    }\n  }\n\n  return imports;\n}\n", "import { createServer, IncomingMessage, ServerResponse } from \"http\";\nimport type { DevToolsSys } from \"../types\";\nimport {\n  BUILDER_AUTH_RETURN_PATH,\n  FRAMEWORK_QS,\n  NODE_VERSION_QS,\n  PLATFORM_QS,\n} from \"../common/constants\";\nimport { platform } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { log, select } from \"@clack/prompts\";\nimport { yellow, green, dim } from \"picocolors\";\nimport type { CLIArgs } from \"./index\";\nimport { setPublicKey } from \"./figma-publish\";\nimport { setUserId } from \"./track\";\nimport { randomUUID } from \"crypto\";\nimport { safeFetch } from \"./fetch\";\nimport { spinner } from \"./spinner\";\nimport { printHelp } from \"./help\";\nimport type { AddressInfo } from \"net\";\nimport { findPackageJson } from \"../common/fs\";\nimport { openBrowser } from \"./utils/open\";\nimport { exit } from \"./exit\";\nimport type { Feature } from \"$/ai-utils\";\n\ndeclare const OAUTH_DONE_HTML: string;\n\n// Default starting ports\nconst DEFAULT_FIGMA_PORT = 5294;\nconst DEFAULT_BUILDER_PORT = 5284;\nconst MAX_PORT_ATTEMPTS = 4;\n\nexport interface CredentialsOptions {\n  forceSpaceId?: string;\n  builderPublicKey?: boolean;\n  builderPrivateKey?: boolean;\n  /**\n   * `always`: Figma auth will be required even if Figma credentials have already been set.\n   * `if-unset`: Figma auth will be required only if Figma credentials have not been set.\n   * `undefined` (default): Figma auth will never be required.\n   * */\n  requireFigmaAuth?: \"always\" | \"if-unset\";\n  /**\n   * If `true`, Builder.io auth will be required even if Builder.io credentials have\n   * already been set.\n   */\n  force?: boolean;\n}\n\nexport interface FigmaAuth {\n  access_token: string;\n  oauth: boolean;\n}\n\nexport interface BuilderCodegenUsage {\n  total: number | undefined;\n  fast: number | undefined;\n  quality: number | undefined;\n  features?: Feature[];\n  limits?: {\n    aiGeneration: number;\n    aiGenerationContextWindow: number;\n  };\n}\n\nexport interface BuilderAuth {\n  privateKey: string;\n  spaceId: string;\n  spaceName: string;\n  userId: string;\n}\n\nexport const isCI = (args: CLIArgs) => {\n  if (process.env.CI) {\n    return true;\n  }\n  if (args.ci) {\n    return true;\n  }\n  return false;\n};\n\nexport interface Credentials {\n  figmaAuth?: FigmaAuth;\n  builderPublicKey?: string;\n  builderPrivateKey?: string;\n  spaceName?: string;\n  userId?: string;\n  timestamp?: string;\n}\n\nexport const readCredentials = (sys: DevToolsSys, args: CLIArgs) => {\n  const storedCredentials = isCI(args) ? {} : loadCredentials(sys);\n\n  let spaceName: string | undefined = storedCredentials.spaceName;\n  let userId: string | undefined =\n    args.builderUserId ??\n    process.env.BUILDER_USER_ID ??\n    storedCredentials.userId;\n  let builderPublicKey: string | undefined =\n    args.builderPublicKey ??\n    process.env.BUILDER_PUBLIC_KEY ??\n    storedCredentials.builderPublicKey;\n  let builderPrivateKey: string | undefined =\n    args.builderPrivateKey ??\n    process.env.BUILDER_PRIVATE_KEY ??\n    storedCredentials.builderPrivateKey;\n\n  const figmaPersonalToken =\n    process.env.FIGMA_PERSONAL_TOKEN ?? args.figmaToken;\n\n  let figmaAuth: FigmaAuth | undefined;\n  if (figmaPersonalToken) {\n    figmaAuth = { access_token: figmaPersonalToken, oauth: false };\n  } else {\n    figmaAuth = storedCredentials.figmaAuth;\n  }\n\n  return {\n    spaceName,\n    userId,\n    builderPublicKey,\n    builderPrivateKey,\n    figmaAuth,\n    timestamp: storedCredentials.timestamp,\n  };\n};\n\nexport const getCredentials = async (\n  sys: DevToolsSys,\n  args: CLIArgs,\n  opts: CredentialsOptions,\n): Promise<Credentials> => {\n  let {\n    spaceName,\n    userId,\n    builderPublicKey,\n    builderPrivateKey,\n    figmaAuth,\n    timestamp,\n  } = readCredentials(sys, args);\n\n  if (\n    opts.forceSpaceId &&\n    !args.yes &&\n    builderPublicKey &&\n    builderPublicKey !== opts.forceSpaceId\n  ) {\n    log.warning(\n      `You are currently authenticated for space ${yellow(\n        builderPublicKey,\n      )} (${spaceName || \"unnamed\"}), but this command requires space ${green(opts.forceSpaceId)}.`,\n    );\n\n    const action = await select({\n      message:\n        \"You must switch to the correct space to continue with this code generation command.\",\n      options: [\n        {\n          value: \"switch\",\n          label: \"Switch to required space\",\n          hint: \"Authenticate with the correct space and continue\",\n        },\n        {\n          value: \"exit\",\n          label: \"Exit code generation\",\n          hint: \"Cancel the command and stay in current space\",\n        },\n      ],\n    });\n\n    if (action === \"switch\") {\n      builderPublicKey = opts.forceSpaceId;\n      builderPrivateKey = undefined;\n      spaceName = undefined;\n      userId = undefined;\n    } else {\n      log.info(\n        \"Code generation cancelled. You can run the command again when you're ready to switch spaces.\",\n      );\n      return await exit(1);\n    }\n  }\n\n  if (isCI(args)) {\n    if (!figmaAuth && opts.requireFigmaAuth === \"if-unset\") {\n      throw new Error(\n        \"No Figma personal token found.\\nPlease set the FIGMA_PERSONAL_TOKEN environment variable.\",\n      );\n    }\n    if (!builderPrivateKey && opts.builderPrivateKey) {\n      throw new Error(\n        \"No Builder private key found.\\nPlease set the BUILDER_PRIVATE_KEY environment variable.\",\n      );\n    }\n    if (!builderPublicKey && opts.builderPublicKey) {\n      throw new Error(\n        \"No Builder public key found.\\nPlease set the BUILDER_PUBLIC_KEY environment variable.\",\n      );\n    }\n    return {\n      figmaAuth,\n      builderPublicKey,\n      builderPrivateKey,\n      userId,\n      spaceName,\n    };\n  }\n  if (\n    opts.requireFigmaAuth === \"always\" ||\n    (!figmaAuth && opts.requireFigmaAuth === \"if-unset\")\n  ) {\n    figmaAuth = await getFigmaAuth(sys);\n    storeCredentials(sys, {\n      figmaAuth,\n    });\n  }\n  if (\n    opts.force ||\n    (!builderPrivateKey && opts.builderPrivateKey) ||\n    (!builderPublicKey && opts.builderPublicKey)\n  ) {\n    const {\n      privateKey,\n      spaceId,\n      spaceName: name,\n      userId: uId,\n    } = await getBuilderAuth(sys, opts.forceSpaceId);\n    if (opts.forceSpaceId && spaceId !== opts.forceSpaceId) {\n      throw new Error(\n        `OAuth flow returned space ${yellow(\n          spaceId,\n        )}, however the command specified --spaceId=${green(opts.forceSpaceId)}`,\n      );\n    }\n    builderPublicKey = spaceId;\n    builderPrivateKey = privateKey;\n    spaceName = name;\n    userId = uId;\n    await setUserId(userId);\n    const packageJson = await findPackageJson(sys, sys.getAppRootDir());\n    if (packageJson) {\n      const success = await setPublicKey(sys, spaceId, undefined, false);\n      if (!success) {\n        log.warn(\n          `Unable to set public api key in an existing .env file or create a new one. Please ensure you have write access in the current directory.`,\n        );\n      }\n    }\n    storeCredentials(sys, {\n      builderPublicKey,\n      builderPrivateKey,\n      spaceName,\n      userId,\n      timestamp: new Date().toISOString(),\n    });\n  }\n\n  if (userId) {\n    sys.Sentry?.setUser({\n      id: userId,\n      username: process.env.USER || process.env.USERNAME || \"unknown\",\n    });\n  } else if (builderPublicKey) {\n    sys.Sentry?.setUser({\n      id: builderPublicKey,\n      username: process.env.USER || process.env.USERNAME || \"unknown\",\n    });\n  }\n  if (spaceName || builderPublicKey) {\n    sys.Sentry?.setContext(\"builder\", {\n      spaceId: builderPublicKey,\n      spaceName,\n      userId,\n    });\n  }\n  return {\n    figmaAuth,\n    builderPublicKey,\n    builderPrivateKey,\n    spaceName,\n    userId,\n    timestamp,\n  };\n};\n\nconst SECRET = \"RHr2ed743waC2g2ZHMEJSn6O0NQ08L\";\nexport async function getFigmaAuth(sys: DevToolsSys): Promise<FigmaAuth> {\n  const randomState = randomUUID();\n  return createAuthServer<FigmaAuth>({\n    sys,\n    name: \"Figma\",\n    initialPort: DEFAULT_FIGMA_PORT,\n    requestListener: async (port, req, res, resolve, reject) => {\n      const url = new URL(req.url || \"\", `http://localhost:${port}`);\n      if (url.pathname === \"/figma-connect\") {\n        const code = url.searchParams.get(\"code\");\n        const state = url.searchParams.get(\"state\");\n        const clientId = \"nrGCqw6TLl95QJhVDi097A\";\n        const clientSecret = SECRET;\n\n        const base64Encoded = Buffer.from(\n          `${clientId}:${clientSecret}`,\n        ).toString(\"base64\");\n        const authHeader = `Basic ${base64Encoded}`;\n\n        if (code && randomState === state) {\n          const figmaRes = await safeFetch(\n            \"https://api.figma.com/v1/oauth/token\",\n            {\n              method: \"POST\",\n              headers: {\n                \"Content-Type\": \"application/x-www-form-urlencoded\",\n                Authorization: authHeader,\n              },\n              body: new URLSearchParams({\n                redirect_uri: `http://localhost:${port}/figma-connect`,\n                code,\n                grant_type: \"authorization_code\",\n              }).toString(),\n            },\n          );\n\n          const data = await figmaRes.json();\n          res.end(\n            OAUTH_DONE_HTML.replace(\n              \"{{MESSAGE}}\",\n              \"The CLI has authenticated correctly with Figma\",\n            ),\n            () => {\n              resolve({\n                ...data,\n                oauth: true,\n              });\n            },\n          );\n        }\n      }\n    },\n    onListen: (port) => {\n      const url = new URL(\"https://www.figma.com/oauth\");\n      url.searchParams.set(\"client_id\", \"nrGCqw6TLl95QJhVDi097A\");\n      url.searchParams.set(\n        \"redirect_uri\",\n        `http://localhost:${port}/figma-connect`,\n      );\n      url.searchParams.set(\n        \"scope\",\n        \"files:read,file_dev_resources:read,file_variables:read\",\n      );\n      url.searchParams.set(\"state\", randomState);\n      url.searchParams.set(\"response_type\", \"code\");\n      return url.href;\n    },\n  });\n}\n\nexport async function getBuilderCodegenUsage(\n  builderPublicKey: string,\n  builderPrivateKey: string,\n): Promise<BuilderCodegenUsage> {\n  const url = new URL(\"https://cdn.builder.io/api/v1/usage/codegen-usage\");\n  url.searchParams.set(\"apiKey\", builderPublicKey);\n\n  const res = await safeFetch(url, {\n    method: \"GET\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${builderPrivateKey!}`,\n    },\n  });\n\n  const results = await res.json();\n  return results;\n}\n\nexport async function getBuilderAuth(\n  sys: DevToolsSys,\n  preferSpaceId?: string,\n): Promise<BuilderAuth> {\n  const host = await sys.getDeviceId();\n  return createAuthServer<BuilderAuth>({\n    sys,\n    name: \"Builder.io\",\n    initialPort: DEFAULT_BUILDER_PORT,\n    requestListener: async (port, req, res, resolve) => {\n      const url = new URL(req.url || \"\", `http://localhost:${port}`);\n      if (url.pathname === BUILDER_AUTH_RETURN_PATH) {\n        res.end(\n          OAUTH_DONE_HTML.replace(\n            \"{{MESSAGE}}\",\n            \"The CLI has authenticated correctly with Builder.io\",\n          ),\n          () => {\n            resolve({\n              privateKey: url.searchParams.get(\"p-key\") || \"\",\n              spaceId: url.searchParams.get(\"api-key\") || \"\",\n              spaceName: url.searchParams.get(\"org-name\") || \"\",\n              userId: url.searchParams.get(\"user-id\") || \"\",\n            });\n          },\n        );\n      }\n    },\n    onListen: (port) => {\n      const authUrl = new URL(`/cli-auth`, `https://builder.io`);\n      authUrl.searchParams.set(`client_id`, \"builder-dev-tools-cli\");\n\n      authUrl.searchParams.set(`host`, host);\n      authUrl.searchParams.set(`response_type`, `code`);\n      authUrl.searchParams.set(`cli`, `true`);\n      if (preferSpaceId) {\n        authUrl.searchParams.set(\"space_id\", preferSpaceId);\n      }\n\n      const returnUrl = new URL(\n        BUILDER_AUTH_RETURN_PATH,\n        `http://localhost:${port}`,\n      );\n      returnUrl.searchParams.set(PLATFORM_QS, platform());\n      returnUrl.searchParams.set(NODE_VERSION_QS, process.versions.node);\n\n      const frameworks = sys.getFrameworks();\n      if (frameworks.length > 0) {\n        authUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n        returnUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n      }\n      authUrl.searchParams.set(`redirect_url`, returnUrl.href);\n      return authUrl.href;\n    },\n  });\n}\n\nexport function storeCredentials(sys: DevToolsSys, credentials: Credentials) {\n  const doesNodeModulesExist = existsSync(\n    join(sys.getAppRootDir(), \"node_modules\"),\n  );\n\n  if (doesNodeModulesExist) {\n    const configDir = join(sys.getAppRootDir(), \"node_modules\", \".builder\");\n    const filePath = join(configDir, \"data.json\");\n\n    const existingCredentials = loadCredentials(sys);\n\n    credentials = Object.assign(existingCredentials, credentials);\n\n    mkdirSync(dirname(filePath), { recursive: true });\n    writeFileSync(filePath, JSON.stringify({ credentials }, null, 2));\n  } else {\n    const configDir = join(sys.getAppRootDir(), \".config\", \"builderio\");\n    const filePath = join(configDir, \"data.json\");\n    const gitignorePath = join(sys.getAppRootDir(), \".gitignore\");\n\n    const existingCredentials = loadCredentials(sys);\n\n    credentials = Object.assign(existingCredentials, credentials);\n\n    mkdirSync(dirname(filePath), { recursive: true });\n    writeFileSync(filePath, JSON.stringify({ credentials }, null, 2));\n\n    const gitignoreEntry = \".config/\";\n    if (existsSync(gitignorePath)) {\n      const gitignoreContent = readFileSync(gitignorePath, \"utf8\");\n      if (!gitignoreContent.includes(gitignoreEntry)) {\n        writeFileSync(\n          gitignorePath,\n          gitignoreContent + \"\\n\" + gitignoreEntry + \"\\n\",\n        );\n      }\n    } else {\n      writeFileSync(gitignorePath, gitignoreEntry + \"\\n\");\n    }\n  }\n}\n\nfunction loadCredentials(sys: DevToolsSys): Credentials {\n  const newPath = join(\n    sys.getAppRootDir(),\n    \".config\",\n    \"builderio\",\n    \"data.json\",\n  );\n\n  const locations = [\n    join(sys.getAppRootDir(), \"node_modules\", \".builder\", \"data.json\"),\n    newPath,\n    join(sys.getRepoRootDir(), \".git\", \".builder.json\"),\n  ];\n\n  for (const filepath of locations) {\n    if (existsSync(filepath)) {\n      try {\n        const data = readFileSync(filepath, \"utf8\");\n        return JSON.parse(data).credentials;\n      } catch (e) {\n        sys.Sentry?.captureException(e, {\n          level: \"warning\",\n        });\n      }\n    }\n  }\n  return {};\n}\n\nexport function clearCredentials(sys: DevToolsSys): boolean {\n  const locations = [\n    join(sys.getAppRootDir(), \"node_modules\", \".builder\", \"data.json\"),\n    join(sys.getAppRootDir(), \".config\", \"builderio\", \"data.json\"),\n    join(sys.getRepoRootDir(), \".git\", \".builder.json\"),\n  ];\n\n  let removedAny = false;\n  for (const filepath of locations) {\n    if (existsSync(filepath)) {\n      try {\n        sys.unlinkSync(filepath);\n        removedAny = true;\n      } catch (e) {\n        sys.Sentry?.captureException(e, {\n          level: \"warning\",\n        });\n      }\n    }\n  }\n  return removedAny;\n}\n\ninterface AuthServerOptions<T> {\n  sys: DevToolsSys;\n  initialPort: number;\n  name: string;\n  requestListener: (\n    port: number,\n    req: IncomingMessage,\n    res: ServerResponse,\n    resolve: (value: T) => void,\n    reject: (reason?: any) => void,\n  ) => void;\n  onListen: (port: number) => string;\n}\n\nasync function createAuthServer<T>(opts: AuthServerOptions<T>) {\n  let resolve: (value: T) => void;\n  let reject: (reason?: any) => void;\n  let s: ReturnType<typeof spinner> | undefined;\n  const promise = new Promise<T>((re, rej) => {\n    resolve = re;\n    reject = rej;\n  });\n\n  let currentPort = opts.initialPort;\n  let attempt = 0;\n\n  // Create a single server instance\n  const server = createServer((req, res) =>\n    opts.requestListener(currentPort, req, res, resolve!, reject!),\n  );\n\n  const closeServer = () => {\n    clearHooks();\n    if (server) {\n      if (\"closeAllConnections\" in server) {\n        (server as any).closeAllConnections();\n      }\n      server.close((err) => {\n        if (err) {\n          opts.sys.Sentry?.captureException(err);\n        }\n      });\n    }\n  };\n\n  process.on(\"uncaughtExceptionMonitor\", closeServer);\n  process.on(\"unhandledRejection\", closeServer);\n  process.on(\"SIGINT\", closeServer);\n  process.on(\"SIGTERM\", closeServer);\n  process.on(\"exit\", closeServer);\n\n  const clearHooks = () => {\n    process.removeListener(\"uncaughtExceptionMonitor\", closeServer);\n    process.removeListener(\"unhandledRejection\", closeServer);\n    process.removeListener(\"SIGINT\", closeServer);\n    process.removeListener(\"SIGTERM\", closeServer);\n    process.removeListener(\"exit\", closeServer);\n  };\n\n  const tryListen = () => {\n    return new Promise<number>((resolvePort, rejectListen) => {\n      // Handle the error event for the current port attempt\n      const errorHandler = (err: NodeJS.ErrnoException) => {\n        server.removeListener(\"error\", errorHandler);\n\n        if (err.code === \"EADDRINUSE\" && attempt < MAX_PORT_ATTEMPTS) {\n          log.warning(\n            `Port ${currentPort} is already in use, trying next port`,\n          );\n          // Port is in use, try next port\n          currentPort++;\n          attempt++;\n          resolvePort(0); // Signal to try next port\n        } else {\n          rejectListen(err);\n        }\n      };\n\n      // Listen for errors\n      server.once(\"error\", errorHandler);\n\n      // Try to listen on the current port\n      server.listen(currentPort, () => {\n        server.removeListener(\"error\", errorHandler);\n        const addressInfo = server.address() as AddressInfo;\n        resolvePort(addressInfo.port);\n      });\n    });\n  };\n\n  try {\n    let port = 0;\n    while (port === 0 && attempt < MAX_PORT_ATTEMPTS) {\n      port = await tryListen();\n    }\n\n    if (port === 0) {\n      throw new Error(\n        `Failed to find an available port after ${MAX_PORT_ATTEMPTS} attempts`,\n      );\n    }\n\n    const href = opts.onListen(port);\n    log.warn(`Required authenticating with ${opts.name}\\nOPEN: ${dim(href)}`);\n    s = spinner();\n    s.start(`Waiting for ${opts.name} authentication`);\n    await openBrowser(href);\n\n    const result = await promise;\n    if (s) {\n      s.stop(`Authenticated with ${opts.name} successfully`);\n    }\n    return result;\n  } catch (e) {\n    if (s) {\n      s.stop(`Failed to authenticate with ${opts.name}.`, -1);\n      printHelp(\"auth\");\n    }\n    opts.sys.Sentry?.captureException(e);\n    closeServer();\n    throw e;\n  } finally {\n    closeServer();\n  }\n}\n", "\"use strict\";\nexports.__esModule = true;\nexports.distance = exports.closest = void 0;\nvar peq = new Uint32Array(0x10000);\nvar myers_32 = function (a, b) {\n    var n = a.length;\n    var m = b.length;\n    var lst = 1 << (n - 1);\n    var pv = -1;\n    var mv = 0;\n    var sc = n;\n    var i = n;\n    while (i--) {\n        peq[a.charCodeAt(i)] |= 1 << i;\n    }\n    for (i = 0; i < m; i++) {\n        var eq = peq[b.charCodeAt(i)];\n        var xv = eq | mv;\n        eq |= ((eq & pv) + pv) ^ pv;\n        mv |= ~(eq | pv);\n        pv &= eq;\n        if (mv & lst) {\n            sc++;\n        }\n        if (pv & lst) {\n            sc--;\n        }\n        mv = (mv << 1) | 1;\n        pv = (pv << 1) | ~(xv | mv);\n        mv &= xv;\n    }\n    i = n;\n    while (i--) {\n        peq[a.charCodeAt(i)] = 0;\n    }\n    return sc;\n};\nvar myers_x = function (b, a) {\n    var n = a.length;\n    var m = b.length;\n    var mhc = [];\n    var phc = [];\n    var hsize = Math.ceil(n / 32);\n    var vsize = Math.ceil(m / 32);\n    for (var i = 0; i < hsize; i++) {\n        phc[i] = -1;\n        mhc[i] = 0;\n    }\n    var j = 0;\n    for (; j < vsize - 1; j++) {\n        var mv_1 = 0;\n        var pv_1 = -1;\n        var start_1 = j * 32;\n        var vlen_1 = Math.min(32, m) + start_1;\n        for (var k = start_1; k < vlen_1; k++) {\n            peq[b.charCodeAt(k)] |= 1 << k;\n        }\n        for (var i = 0; i < n; i++) {\n            var eq = peq[a.charCodeAt(i)];\n            var pb = (phc[(i / 32) | 0] >>> i) & 1;\n            var mb = (mhc[(i / 32) | 0] >>> i) & 1;\n            var xv = eq | mv_1;\n            var xh = ((((eq | mb) & pv_1) + pv_1) ^ pv_1) | eq | mb;\n            var ph = mv_1 | ~(xh | pv_1);\n            var mh = pv_1 & xh;\n            if ((ph >>> 31) ^ pb) {\n                phc[(i / 32) | 0] ^= 1 << i;\n            }\n            if ((mh >>> 31) ^ mb) {\n                mhc[(i / 32) | 0] ^= 1 << i;\n            }\n            ph = (ph << 1) | pb;\n            mh = (mh << 1) | mb;\n            pv_1 = mh | ~(xv | ph);\n            mv_1 = ph & xv;\n        }\n        for (var k = start_1; k < vlen_1; k++) {\n            peq[b.charCodeAt(k)] = 0;\n        }\n    }\n    var mv = 0;\n    var pv = -1;\n    var start = j * 32;\n    var vlen = Math.min(32, m - start) + start;\n    for (var k = start; k < vlen; k++) {\n        peq[b.charCodeAt(k)] |= 1 << k;\n    }\n    var score = m;\n    for (var i = 0; i < n; i++) {\n        var eq = peq[a.charCodeAt(i)];\n        var pb = (phc[(i / 32) | 0] >>> i) & 1;\n        var mb = (mhc[(i / 32) | 0] >>> i) & 1;\n        var xv = eq | mv;\n        var xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n        var ph = mv | ~(xh | pv);\n        var mh = pv & xh;\n        score += (ph >>> (m - 1)) & 1;\n        score -= (mh >>> (m - 1)) & 1;\n        if ((ph >>> 31) ^ pb) {\n            phc[(i / 32) | 0] ^= 1 << i;\n        }\n        if ((mh >>> 31) ^ mb) {\n            mhc[(i / 32) | 0] ^= 1 << i;\n        }\n        ph = (ph << 1) | pb;\n        mh = (mh << 1) | mb;\n        pv = mh | ~(xv | ph);\n        mv = ph & xv;\n    }\n    for (var k = start; k < vlen; k++) {\n        peq[b.charCodeAt(k)] = 0;\n    }\n    return score;\n};\nvar distance = function (a, b) {\n    if (a.length < b.length) {\n        var tmp = b;\n        b = a;\n        a = tmp;\n    }\n    if (b.length === 0) {\n        return a.length;\n    }\n    if (a.length <= 32) {\n        return myers_32(a, b);\n    }\n    return myers_x(a, b);\n};\nexports.distance = distance;\nvar closest = function (str, arr) {\n    var min_distance = Infinity;\n    var min_index = 0;\n    for (var i = 0; i < arr.length; i++) {\n        var dist = distance(str, arr[i]);\n        if (dist < min_distance) {\n            min_distance = dist;\n            min_index = i;\n        }\n    }\n    return arr[min_index];\n};\nexports.closest = closest;\n", "/*!\n * depd\n * Copyright(c) 2014-2018 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar relative = require('path').relative\n\n/**\n * Module exports.\n */\n\nmodule.exports = depd\n\n/**\n * Get the path to base files on.\n */\n\nvar basePath = process.cwd()\n\n/**\n * Determine if namespace is contained in the string.\n */\n\nfunction containsNamespace (str, namespace) {\n  var vals = str.split(/[ ,]+/)\n  var ns = String(namespace).toLowerCase()\n\n  for (var i = 0; i < vals.length; i++) {\n    var val = vals[i]\n\n    // namespace contained\n    if (val && (val === '*' || val.toLowerCase() === ns)) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Convert a data descriptor to accessor descriptor.\n */\n\nfunction convertDataDescriptorToAccessor (obj, prop, message) {\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n  var value = descriptor.value\n\n  descriptor.get = function getter () { return value }\n\n  if (descriptor.writable) {\n    descriptor.set = function setter (val) { return (value = val) }\n  }\n\n  delete descriptor.value\n  delete descriptor.writable\n\n  Object.defineProperty(obj, prop, descriptor)\n\n  return descriptor\n}\n\n/**\n * Create arguments string to keep arity.\n */\n\nfunction createArgumentsString (arity) {\n  var str = ''\n\n  for (var i = 0; i < arity; i++) {\n    str += ', arg' + i\n  }\n\n  return str.substr(2)\n}\n\n/**\n * Create stack string from stack.\n */\n\nfunction createStackString (stack) {\n  var str = this.name + ': ' + this.namespace\n\n  if (this.message) {\n    str += ' deprecated ' + this.message\n  }\n\n  for (var i = 0; i < stack.length; i++) {\n    str += '\\n    at ' + stack[i].toString()\n  }\n\n  return str\n}\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n  if (!namespace) {\n    throw new TypeError('argument namespace is required')\n  }\n\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n  var file = site[0]\n\n  function deprecate (message) {\n    // call to self as log\n    log.call(deprecate, message)\n  }\n\n  deprecate._file = file\n  deprecate._ignored = isignored(namespace)\n  deprecate._namespace = namespace\n  deprecate._traced = istraced(namespace)\n  deprecate._warned = Object.create(null)\n\n  deprecate.function = wrapfunction\n  deprecate.property = wrapproperty\n\n  return deprecate\n}\n\n/**\n * Determine if event emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction eehaslisteners (emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function'\n    ? emitter.listeners(type).length\n    : emitter.listenerCount(type)\n\n  return count > 0\n}\n\n/**\n * Determine if namespace is ignored.\n */\n\nfunction isignored (namespace) {\n  if (process.noDeprecation) {\n    // --no-deprecation support\n    return true\n  }\n\n  var str = process.env.NO_DEPRECATION || ''\n\n  // namespace ignored\n  return containsNamespace(str, namespace)\n}\n\n/**\n * Determine if namespace is traced.\n */\n\nfunction istraced (namespace) {\n  if (process.traceDeprecation) {\n    // --trace-deprecation support\n    return true\n  }\n\n  var str = process.env.TRACE_DEPRECATION || ''\n\n  // namespace traced\n  return containsNamespace(str, namespace)\n}\n\n/**\n * Display deprecation message.\n */\n\nfunction log (message, site) {\n  var haslisteners = eehaslisteners(process, 'deprecation')\n\n  // abort early if no destination\n  if (!haslisteners && this._ignored) {\n    return\n  }\n\n  var caller\n  var callFile\n  var callSite\n  var depSite\n  var i = 0\n  var seen = false\n  var stack = getStack()\n  var file = this._file\n\n  if (site) {\n    // provided site\n    depSite = site\n    callSite = callSiteLocation(stack[1])\n    callSite.name = depSite.name\n    file = callSite[0]\n  } else {\n    // get call site\n    i = 2\n    depSite = callSiteLocation(stack[i])\n    callSite = depSite\n  }\n\n  // get caller of deprecated thing in relation to file\n  for (; i < stack.length; i++) {\n    caller = callSiteLocation(stack[i])\n    callFile = caller[0]\n\n    if (callFile === file) {\n      seen = true\n    } else if (callFile === this._file) {\n      file = this._file\n    } else if (seen) {\n      break\n    }\n  }\n\n  var key = caller\n    ? depSite.join(':') + '__' + caller.join(':')\n    : undefined\n\n  if (key !== undefined && key in this._warned) {\n    // already warned\n    return\n  }\n\n  this._warned[key] = true\n\n  // generate automatic message from call site\n  var msg = message\n  if (!msg) {\n    msg = callSite === depSite || !callSite.name\n      ? defaultMessage(depSite)\n      : defaultMessage(callSite)\n  }\n\n  // emit deprecation if listeners exist\n  if (haslisteners) {\n    var err = DeprecationError(this._namespace, msg, stack.slice(i))\n    process.emit('deprecation', err)\n    return\n  }\n\n  // format and write message\n  var format = process.stderr.isTTY\n    ? formatColor\n    : formatPlain\n  var output = format.call(this, msg, caller, stack.slice(i))\n  process.stderr.write(output + '\\n', 'utf8')\n}\n\n/**\n * Get call site location as array.\n */\n\nfunction callSiteLocation (callSite) {\n  var file = callSite.getFileName() || '<anonymous>'\n  var line = callSite.getLineNumber()\n  var colm = callSite.getColumnNumber()\n\n  if (callSite.isEval()) {\n    file = callSite.getEvalOrigin() + ', ' + file\n  }\n\n  var site = [file, line, colm]\n\n  site.callSite = callSite\n  site.name = callSite.getFunctionName()\n\n  return site\n}\n\n/**\n * Generate a default message from the site.\n */\n\nfunction defaultMessage (site) {\n  var callSite = site.callSite\n  var funcName = site.name\n\n  // make useful anonymous name\n  if (!funcName) {\n    funcName = '<anonymous@' + formatLocation(site) + '>'\n  }\n\n  var context = callSite.getThis()\n  var typeName = context && callSite.getTypeName()\n\n  // ignore useless type name\n  if (typeName === 'Object') {\n    typeName = undefined\n  }\n\n  // make useful type name\n  if (typeName === 'Function') {\n    typeName = context.name || typeName\n  }\n\n  return typeName && callSite.getMethodName()\n    ? typeName + '.' + funcName\n    : funcName\n}\n\n/**\n * Format deprecation message without color.\n */\n\nfunction formatPlain (msg, caller, stack) {\n  var timestamp = new Date().toUTCString()\n\n  var formatted = timestamp +\n    ' ' + this._namespace +\n    ' deprecated ' + msg\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    at ' + stack[i].toString()\n    }\n\n    return formatted\n  }\n\n  if (caller) {\n    formatted += ' at ' + formatLocation(caller)\n  }\n\n  return formatted\n}\n\n/**\n * Format deprecation message with color.\n */\n\nfunction formatColor (msg, caller, stack) {\n  var formatted = '\\x1b[36;1m' + this._namespace + '\\x1b[22;39m' + // bold cyan\n    ' \\x1b[33;1mdeprecated\\x1b[22;39m' + // bold yellow\n    ' \\x1b[0m' + msg + '\\x1b[39m' // reset\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    \\x1b[36mat ' + stack[i].toString() + '\\x1b[39m' // cyan\n    }\n\n    return formatted\n  }\n\n  if (caller) {\n    formatted += ' \\x1b[36m' + formatLocation(caller) + '\\x1b[39m' // cyan\n  }\n\n  return formatted\n}\n\n/**\n * Format call site location.\n */\n\nfunction formatLocation (callSite) {\n  return relative(basePath, callSite[0]) +\n    ':' + callSite[1] +\n    ':' + callSite[2]\n}\n\n/**\n * Get the stack as array of call sites.\n */\n\nfunction getStack () {\n  var limit = Error.stackTraceLimit\n  var obj = {}\n  var prep = Error.prepareStackTrace\n\n  Error.prepareStackTrace = prepareObjectStackTrace\n  Error.stackTraceLimit = Math.max(10, limit)\n\n  // capture the stack\n  Error.captureStackTrace(obj)\n\n  // slice this function off the top\n  var stack = obj.stack.slice(1)\n\n  Error.prepareStackTrace = prep\n  Error.stackTraceLimit = limit\n\n  return stack\n}\n\n/**\n * Capture call site stack from v8.\n */\n\nfunction prepareObjectStackTrace (obj, stack) {\n  return stack\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n */\n\nfunction wrapfunction (fn, message) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('argument fn must be a function')\n  }\n\n  var args = createArgumentsString(fn.length)\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n\n  site.name = fn.name\n\n  // eslint-disable-next-line no-new-func\n  var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',\n    '\"use strict\"\\n' +\n    'return function (' + args + ') {' +\n    'log.call(deprecate, message, site)\\n' +\n    'return fn.apply(this, arguments)\\n' +\n    '}')(fn, log, this, message, site)\n\n  return deprecatedfn\n}\n\n/**\n * Wrap property in a deprecation message.\n */\n\nfunction wrapproperty (obj, prop, message) {\n  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n    throw new TypeError('argument obj must be object')\n  }\n\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n  if (!descriptor) {\n    throw new TypeError('must call property on owner object')\n  }\n\n  if (!descriptor.configurable) {\n    throw new TypeError('property must be configurable')\n  }\n\n  var deprecate = this\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n\n  // set site name\n  site.name = prop\n\n  // convert data descriptor\n  if ('value' in descriptor) {\n    descriptor = convertDataDescriptorToAccessor(obj, prop, message)\n  }\n\n  var get = descriptor.get\n  var set = descriptor.set\n\n  // wrap getter\n  if (typeof get === 'function') {\n    descriptor.get = function getter () {\n      log.call(deprecate, message, site)\n      return get.apply(this, arguments)\n    }\n  }\n\n  // wrap setter\n  if (typeof set === 'function') {\n    descriptor.set = function setter () {\n      log.call(deprecate, message, site)\n      return set.apply(this, arguments)\n    }\n  }\n\n  Object.defineProperty(obj, prop, descriptor)\n}\n\n/**\n * Create DeprecationError for deprecation\n */\n\nfunction DeprecationError (namespace, message, stack) {\n  var error = new Error()\n  var stackString\n\n  Object.defineProperty(error, 'constructor', {\n    value: DeprecationError\n  })\n\n  Object.defineProperty(error, 'message', {\n    configurable: true,\n    enumerable: false,\n    value: message,\n    writable: true\n  })\n\n  Object.defineProperty(error, 'name', {\n    enumerable: false,\n    configurable: true,\n    value: 'DeprecationError',\n    writable: true\n  })\n\n  Object.defineProperty(error, 'namespace', {\n    configurable: true,\n    enumerable: false,\n    value: namespace,\n    writable: true\n  })\n\n  Object.defineProperty(error, 'stack', {\n    configurable: true,\n    enumerable: false,\n    get: function () {\n      if (stackString !== undefined) {\n        return stackString\n      }\n\n      // prepare stack trace\n      return (stackString = createStackString.call(this, stack))\n    },\n    set: function setter (val) {\n      stackString = val\n    }\n  })\n\n  return error\n}\n", "/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n  b:  1,\n  kb: 1 << 10,\n  mb: 1 << 20,\n  gb: 1 << 30,\n  tb: Math.pow(1024, 4),\n  pb: Math.pow(1024, 5),\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n *  case: [string],\n *  decimalPlaces: [number]\n *  fixedDecimals: [boolean]\n *  thousandsSeparator: [string]\n *  unitSeparator: [string]\n *  }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n  if (typeof value === 'string') {\n    return parse(value);\n  }\n\n  if (typeof value === 'number') {\n    return format(value, options);\n  }\n\n  return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n  if (!Number.isFinite(value)) {\n    return null;\n  }\n\n  var mag = Math.abs(value);\n  var thousandsSeparator = (options && options.thousandsSeparator) || '';\n  var unitSeparator = (options && options.unitSeparator) || '';\n  var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n  var fixedDecimals = Boolean(options && options.fixedDecimals);\n  var unit = (options && options.unit) || '';\n\n  if (!unit || !map[unit.toLowerCase()]) {\n    if (mag >= map.pb) {\n      unit = 'PB';\n    } else if (mag >= map.tb) {\n      unit = 'TB';\n    } else if (mag >= map.gb) {\n      unit = 'GB';\n    } else if (mag >= map.mb) {\n      unit = 'MB';\n    } else if (mag >= map.kb) {\n      unit = 'KB';\n    } else {\n      unit = 'B';\n    }\n  }\n\n  var val = value / map[unit.toLowerCase()];\n  var str = val.toFixed(decimalPlaces);\n\n  if (!fixedDecimals) {\n    str = str.replace(formatDecimalsRegExp, '$1');\n  }\n\n  if (thousandsSeparator) {\n    str = str.split('.').map(function (s, i) {\n      return i === 0\n        ? s.replace(formatThousandsRegExp, thousandsSeparator)\n        : s\n    }).join('.');\n  }\n\n  return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n  if (typeof val === 'number' && !isNaN(val)) {\n    return val;\n  }\n\n  if (typeof val !== 'string') {\n    return null;\n  }\n\n  // Test if the string passed is valid\n  var results = parseRegExp.exec(val);\n  var floatValue;\n  var unit = 'b';\n\n  if (!results) {\n    // Nothing could be extracted from the given string\n    floatValue = parseInt(val, 10);\n    unit = 'b'\n  } else {\n    // Retrieve the value and the unit\n    floatValue = parseFloat(results[1]);\n    unit = results[4].toLowerCase();\n  }\n\n  if (isNaN(floatValue)) {\n    return null;\n  }\n\n  return Math.floor(map[unit] * floatValue);\n}\n", "/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || !TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  var string = type\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!TOKEN_REGEXP.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  var header = typeof string === 'object'\n    ? getcontenttype(string)\n    : string\n\n  if (typeof header !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = header.indexOf(';')\n  var type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (!TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid media type')\n  }\n\n  var obj = new ContentType(type.toLowerCase())\n\n  // parse parameters\n  if (index !== -1) {\n    var key\n    var match\n    var value\n\n    PARAM_REGEXP.lastIndex = index\n\n    while ((match = PARAM_REGEXP.exec(header))) {\n      if (match.index !== index) {\n        throw new TypeError('invalid parameter format')\n      }\n\n      index += match[0].length\n      key = match[1].toLowerCase()\n      value = match[2]\n\n      if (value.charCodeAt(0) === 0x22 /* \" */) {\n        // remove quotes\n        value = value.slice(1, -1)\n\n        // remove escapes\n        if (value.indexOf('\\\\') !== -1) {\n          value = value.replace(QESC_REGEXP, '$1')\n        }\n      }\n\n      obj.parameters[key] = value\n    }\n\n    if (index !== header.length) {\n      throw new TypeError('invalid parameter format')\n    }\n  }\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n  var header\n\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    header = obj.getHeader('content-type')\n  } else if (typeof obj.headers === 'object') {\n    // req-like\n    header = obj.headers && obj.headers['content-type']\n  }\n\n  if (typeof header !== 'string') {\n    throw new TypeError('content-type header is missing from object')\n  }\n\n  return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (TOKEN_REGEXP.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n  this.parameters = Object.create(null)\n  this.type = type\n}\n", "'use strict'\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)\n\nfunction setProtoOf (obj, proto) {\n  obj.__proto__ = proto\n  return obj\n}\n\nfunction mixinProperties (obj, proto) {\n  for (var prop in proto) {\n    if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n      obj[prop] = proto[prop]\n    }\n  }\n  return obj\n}\n", "{\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"103\": \"Early Hints\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a Teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Too Early\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\n}\n", "/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.message = codes\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes)\n\n// array of status codes\nstatus.codes = createStatusCodeList(codes)\n\n// status codes for redirects\nstatus.redirect = {\n  300: true,\n  301: true,\n  302: true,\n  303: true,\n  305: true,\n  307: true,\n  308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n  204: true,\n  205: true,\n  304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n  502: true,\n  503: true,\n  504: true\n}\n\n/**\n * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap (codes) {\n  var map = {}\n\n  Object.keys(codes).forEach(function forEachCode (code) {\n    var message = codes[code]\n    var status = Number(code)\n\n    // populate map\n    map[message.toLowerCase()] = status\n  })\n\n  return map\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList (codes) {\n  return Object.keys(codes).map(function mapCode (code) {\n    return Number(code)\n  })\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode (message) {\n  var msg = message.toLowerCase()\n\n  if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n    throw new Error('invalid status message: \"' + message + '\"')\n  }\n\n  return status.code[msg]\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage (code) {\n  if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n    throw new Error('invalid status code: ' + code)\n  }\n\n  return status.message[code]\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n  if (typeof code === 'number') {\n    return getStatusMessage(code)\n  }\n\n  if (typeof code !== 'string') {\n    throw new TypeError('code must be a number or string')\n  }\n\n  // '403'\n  var n = parseInt(code, 10)\n  if (!isNaN(n)) {\n    return getStatusMessage(n)\n  }\n\n  return getStatusCode(code)\n}\n", "if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n", "try {\n  var util = require('util');\n  /* istanbul ignore next */\n  if (typeof util.inherits !== 'function') throw '';\n  module.exports = util.inherits;\n} catch (e) {\n  /* istanbul ignore next */\n  module.exports = require('./inherits_browser.js');\n}\n", "/*!\n * toidentifier\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = toIdentifier\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier (str) {\n  return str\n    .split(' ')\n    .map(function (token) {\n      return token.slice(0, 1).toUpperCase() + token.slice(1)\n    })\n    .join('')\n    .replace(/[^ _0-9a-z]/gi, '')\n}\n", "/*!\n * http-errors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('http-errors')\nvar setPrototypeOf = require('setprototypeof')\nvar statuses = require('statuses')\nvar inherits = require('inherits')\nvar toIdentifier = require('toidentifier')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError\nmodule.exports.HttpError = createHttpErrorConstructor()\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass (status) {\n  return Number(String(status).charAt(0) + '00')\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError () {\n  // so much arity going on ~_~\n  var err\n  var msg\n  var status = 500\n  var props = {}\n  for (var i = 0; i < arguments.length; i++) {\n    var arg = arguments[i]\n    var type = typeof arg\n    if (type === 'object' && arg instanceof Error) {\n      err = arg\n      status = err.status || err.statusCode || status\n    } else if (type === 'number' && i === 0) {\n      status = arg\n    } else if (type === 'string') {\n      msg = arg\n    } else if (type === 'object') {\n      props = arg\n    } else {\n      throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type)\n    }\n  }\n\n  if (typeof status === 'number' && (status < 400 || status >= 600)) {\n    deprecate('non-error status code; use only 4xx or 5xx status codes')\n  }\n\n  if (typeof status !== 'number' ||\n    (!statuses.message[status] && (status < 400 || status >= 600))) {\n    status = 500\n  }\n\n  // constructor\n  var HttpError = createError[status] || createError[codeClass(status)]\n\n  if (!err) {\n    // create error\n    err = HttpError\n      ? new HttpError(msg)\n      : new Error(msg || statuses.message[status])\n    Error.captureStackTrace(err, createError)\n  }\n\n  if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n    // add properties to generic error\n    err.expose = status < 500\n    err.status = err.statusCode = status\n  }\n\n  for (var key in props) {\n    if (key !== 'status' && key !== 'statusCode') {\n      err[key] = props[key]\n    }\n  }\n\n  return err\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor () {\n  function HttpError () {\n    throw new TypeError('cannot construct abstract class')\n  }\n\n  inherits(HttpError, Error)\n\n  return HttpError\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ClientError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ClientError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ClientError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ClientError, HttpError)\n  nameFunc(ClientError, className)\n\n  ClientError.prototype.status = code\n  ClientError.prototype.statusCode = code\n  ClientError.prototype.expose = true\n\n  return ClientError\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction (HttpError) {\n  return function isHttpError (val) {\n    if (!val || typeof val !== 'object') {\n      return false\n    }\n\n    if (val instanceof HttpError) {\n      return true\n    }\n\n    return val instanceof Error &&\n      typeof val.expose === 'boolean' &&\n      typeof val.statusCode === 'number' && val.status === val.statusCode\n  }\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ServerError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ServerError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ServerError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ServerError, HttpError)\n  nameFunc(ServerError, className)\n\n  ServerError.prototype.status = code\n  ServerError.prototype.statusCode = code\n  ServerError.prototype.expose = false\n\n  return ServerError\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc (func, name) {\n  var desc = Object.getOwnPropertyDescriptor(func, 'name')\n\n  if (desc && desc.configurable) {\n    desc.value = name\n    Object.defineProperty(func, 'name', desc)\n  }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports (exports, codes, HttpError) {\n  codes.forEach(function forEachCode (code) {\n    var CodeError\n    var name = toIdentifier(statuses.message[code])\n\n    switch (codeClass(code)) {\n      case 400:\n        CodeError = createClientErrorConstructor(HttpError, name, code)\n        break\n      case 500:\n        CodeError = createServerErrorConstructor(HttpError, name, code)\n        break\n    }\n\n    if (CodeError) {\n      // export the constructor\n      exports[code] = CodeError\n      exports[name] = CodeError\n    }\n  })\n}\n\n/**\n * Get a class name from a name identifier.\n * @private\n */\n\nfunction toClassName (name) {\n  return name.substr(-5) !== 'Error'\n    ? name + 'Error'\n    : name\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key\n    .substring(6)\n    .toLowerCase()\n    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n  else if (val === 'null') val = null;\n  else val = Number(val);\n\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n             2 === fd ? process.stderr :\n             createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts\n    ? Boolean(exports.inspectOpts.colors)\n    : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts)\n    .split('\\n').map(function(str) {\n      return str.trim()\n    }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString()\n      + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, { autoClose: false });\n      stream._type = 'fs';\n      break;\n\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n\n  stream._isStdio = true;\n\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n  debug.inspectOpts = {};\n\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}\n", "/*!\n * destroy\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar EventEmitter = require('events').EventEmitter\nvar ReadStream = require('fs').ReadStream\nvar Stream = require('stream')\nvar Zlib = require('zlib')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = destroy\n\n/**\n * Destroy the given stream, and optionally suppress any future `error` events.\n *\n * @param {object} stream\n * @param {boolean} suppress\n * @public\n */\n\nfunction destroy (stream, suppress) {\n  if (isFsReadStream(stream)) {\n    destroyReadStream(stream)\n  } else if (isZlibStream(stream)) {\n    destroyZlibStream(stream)\n  } else if (hasDestroy(stream)) {\n    stream.destroy()\n  }\n\n  if (isEventEmitter(stream) && suppress) {\n    stream.removeAllListeners('error')\n    stream.addListener('error', noop)\n  }\n\n  return stream\n}\n\n/**\n * Destroy a ReadStream.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyReadStream (stream) {\n  stream.destroy()\n\n  if (typeof stream.close === 'function') {\n    // node.js core bug work-around\n    stream.on('open', onOpenClose)\n  }\n}\n\n/**\n * Close a Zlib stream.\n *\n * Zlib streams below Node.js 4.5.5 have a buggy implementation\n * of .close() when zlib encountered an error.\n *\n * @param {object} stream\n * @private\n */\n\nfunction closeZlibStream (stream) {\n  if (stream._hadError === true) {\n    var prop = stream._binding === null\n      ? '_binding'\n      : '_handle'\n\n    stream[prop] = {\n      close: function () { this[prop] = null }\n    }\n  }\n\n  stream.close()\n}\n\n/**\n * Destroy a Zlib stream.\n *\n * Zlib streams don't have a destroy function in Node.js 6. On top of that\n * simply calling destroy on a zlib stream in Node.js 8+ will result in a\n * memory leak. So until that is fixed, we need to call both close AND destroy.\n *\n * PR to fix memory leak: https://github.com/nodejs/node/pull/23734\n *\n * In Node.js 6+8, it's important that destroy is called before close as the\n * stream would otherwise emit the error 'zlib binding closed'.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyZlibStream (stream) {\n  if (typeof stream.destroy === 'function') {\n    // node.js core bug work-around\n    // istanbul ignore if: node.js 0.8\n    if (stream._binding) {\n      // node.js < 0.10.0\n      stream.destroy()\n      if (stream._processing) {\n        stream._needDrain = true\n        stream.once('drain', onDrainClearBinding)\n      } else {\n        stream._binding.clear()\n      }\n    } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {\n      // node.js >= 12, ^11.1.0, ^10.15.1\n      stream.destroy()\n    } else if (stream._destroy && typeof stream.close === 'function') {\n      // node.js 7, 8\n      stream.destroyed = true\n      stream.close()\n    } else {\n      // fallback\n      // istanbul ignore next\n      stream.destroy()\n    }\n  } else if (typeof stream.close === 'function') {\n    // node.js < 8 fallback\n    closeZlibStream(stream)\n  }\n}\n\n/**\n * Determine if stream has destroy.\n * @private\n */\n\nfunction hasDestroy (stream) {\n  return stream instanceof Stream &&\n    typeof stream.destroy === 'function'\n}\n\n/**\n * Determine if val is EventEmitter.\n * @private\n */\n\nfunction isEventEmitter (val) {\n  return val instanceof EventEmitter\n}\n\n/**\n * Determine if stream is fs.ReadStream stream.\n * @private\n */\n\nfunction isFsReadStream (stream) {\n  return stream instanceof ReadStream\n}\n\n/**\n * Determine if stream is Zlib stream.\n * @private\n */\n\nfunction isZlibStream (stream) {\n  return stream instanceof Zlib.Gzip ||\n    stream instanceof Zlib.Gunzip ||\n    stream instanceof Zlib.Deflate ||\n    stream instanceof Zlib.DeflateRaw ||\n    stream instanceof Zlib.Inflate ||\n    stream instanceof Zlib.InflateRaw ||\n    stream instanceof Zlib.Unzip\n}\n\n/**\n * No-op function.\n * @private\n */\n\nfunction noop () {}\n\n/**\n * On drain handler to clear binding.\n * @private\n */\n\n// istanbul ignore next: node.js 0.8\nfunction onDrainClearBinding () {\n  this._binding.clear()\n}\n\n/**\n * On open handler to close stream.\n * @private\n */\n\nfunction onOpenClose () {\n  if (typeof this.fd === 'number') {\n    // actually close down the fd\n    this.close()\n  }\n}\n", "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n    this.encoder = encoder;\n    this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n    if (this.addBOM) {\n        str = BOMChar + str;\n        this.addBOM = false;\n    }\n\n    return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n    this.decoder = decoder;\n    this.pass = false;\n    this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n    var res = this.decoder.write(buf);\n    if (this.pass || !res)\n        return res;\n\n    if (res[0] === BOMChar) {\n        res = res.slice(1);\n        if (typeof this.options.stripBOM === 'function')\n            this.options.stripBOM();\n    }\n\n    this.pass = true;\n    return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n    return this.decoder.end();\n}\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n    // Encodings\n    utf8:   { type: \"_internal\", bomAware: true},\n    cesu8:  { type: \"_internal\", bomAware: true},\n    unicode11utf8: \"utf8\",\n\n    ucs2:   { type: \"_internal\", bomAware: true},\n    utf16le: \"ucs2\",\n\n    binary: { type: \"_internal\" },\n    base64: { type: \"_internal\" },\n    hex:    { type: \"_internal\" },\n\n    // Codec.\n    _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n    this.enc = codecOptions.encodingName;\n    this.bomAware = codecOptions.bomAware;\n\n    if (this.enc === \"base64\")\n        this.encoder = InternalEncoderBase64;\n    else if (this.enc === \"cesu8\") {\n        this.enc = \"utf8\"; // Use utf8 for decoding.\n        this.encoder = InternalEncoderCesu8;\n\n        // Add decoder for versions of Node not supporting CESU-8\n        if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '\uD83D\uDCA9') {\n            this.decoder = InternalDecoderCesu8;\n            this.defaultCharUnicode = iconv.defaultCharUnicode;\n        }\n    }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n    StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n    StringDecoder.call(this, codec.enc);\n}\n\nInternalDecoder.prototype = StringDecoder.prototype;\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n    this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n    return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n    this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n    str = this.prevStr + str;\n    var completeQuads = str.length - (str.length % 4);\n    this.prevStr = str.slice(completeQuads);\n    str = str.slice(0, completeQuads);\n\n    return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n    return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n    for (var i = 0; i < str.length; i++) {\n        var charCode = str.charCodeAt(i);\n        // Naive implementation, but it works because CESU-8 is especially easy\n        // to convert from UTF-16 (which all JS strings are encoded in).\n        if (charCode < 0x80)\n            buf[bufIdx++] = charCode;\n        else if (charCode < 0x800) {\n            buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n        else { // charCode will always be < 0x10000 in javascript.\n            buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n            buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n    }\n    return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n    this.acc = 0;\n    this.contBytes = 0;\n    this.accBytes = 0;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n        res = '';\n    for (var i = 0; i < buf.length; i++) {\n        var curByte = buf[i];\n        if ((curByte & 0xC0) !== 0x80) { // Leading byte\n            if (contBytes > 0) { // Previous code is invalid\n                res += this.defaultCharUnicode;\n                contBytes = 0;\n            }\n\n            if (curByte < 0x80) { // Single-byte code\n                res += String.fromCharCode(curByte);\n            } else if (curByte < 0xE0) { // Two-byte code\n                acc = curByte & 0x1F;\n                contBytes = 1; accBytes = 1;\n            } else if (curByte < 0xF0) { // Three-byte code\n                acc = curByte & 0x0F;\n                contBytes = 2; accBytes = 1;\n            } else { // Four or more are not supported for CESU-8.\n                res += this.defaultCharUnicode;\n            }\n        } else { // Continuation byte\n            if (contBytes > 0) { // We're waiting for it.\n                acc = (acc << 6) | (curByte & 0x3f);\n                contBytes--; accBytes++;\n                if (contBytes === 0) {\n                    // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n                    if (accBytes === 2 && acc < 0x80 && acc > 0)\n                        res += this.defaultCharUnicode;\n                    else if (accBytes === 3 && acc < 0x800)\n                        res += this.defaultCharUnicode;\n                    else\n                        // Actually add character.\n                        res += String.fromCharCode(acc);\n                }\n            } else { // Unexpected continuation byte\n                res += this.defaultCharUnicode;\n            }\n        }\n    }\n    this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n    return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n    var res = 0;\n    if (this.contBytes > 0)\n        res += this.defaultCharUnicode;\n    return res;\n}\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n    var buf = Buffer.from(str, 'ucs2');\n    for (var i = 0; i < buf.length; i += 2) {\n        var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n    }\n    return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n    this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n    if (buf.length == 0)\n        return '';\n\n    var buf2 = Buffer.alloc(buf.length + 1),\n        i = 0, j = 0;\n\n    if (this.overflowByte !== -1) {\n        buf2[0] = buf[0];\n        buf2[1] = this.overflowByte;\n        i = 1; j = 2;\n    }\n\n    for (; i < buf.length-1; i += 2, j+= 2) {\n        buf2[j] = buf[i+1];\n        buf2[j+1] = buf[i];\n    }\n\n    this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n    return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n    options = options || {};\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n    this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n    this.decoder = null;\n    this.initialBytes = [];\n    this.initialBytesLen = 0;\n\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n    if (!this.decoder) {\n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBytes.push(buf);\n        this.initialBytesLen += buf.length;\n        \n        if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var buf = Buffer.concat(this.initialBytes),\n            encoding = detectEncoding(buf, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n        this.initialBytes.length = this.initialBytesLen = 0;\n    }\n\n    return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n    if (!this.decoder) {\n        var buf = Buffer.concat(this.initialBytes),\n            encoding = detectEncoding(buf, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var res = this.decoder.write(buf),\n            trail = this.decoder.end();\n\n        return trail ? (res + trail) : res;\n    }\n    return this.decoder.end();\n}\n\nfunction detectEncoding(buf, defaultEncoding) {\n    var enc = defaultEncoding || 'utf-16le';\n\n    if (buf.length >= 2) {\n        // Check BOM.\n        if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM\n            enc = 'utf-16be';\n        else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM\n            enc = 'utf-16le';\n        else {\n            // No BOM found. Try to deduce encoding from initial content.\n            // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n            // So, we count ASCII as if it was LE or BE, and decide from that.\n            var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions\n                _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.\n\n            for (var i = 0; i < _len; i += 2) {\n                if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;\n                if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;\n            }\n\n            if (asciiCharsBE > asciiCharsLE)\n                enc = 'utf-16be';\n            else if (asciiCharsBE < asciiCharsLE)\n                enc = 'utf-16le';\n        }\n    }\n\n    return enc;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n    this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n    // Naive implementation.\n    // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n    return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n        return \"+\" + (chunk === '+' ? '' : \n            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n            + \"-\";\n    }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n    base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n    minusChar = '-'.charCodeAt(0),\n    andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '+'\n            if (buf[i] == plusChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64Chars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n                    res += \"+\";\n                } else {\n                    var b64str = base64Accum + buf.slice(lastI, i).toString();\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus is absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + buf.slice(lastI).toString();\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = Buffer.alloc(6);\n    this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n    var inBase64 = this.inBase64,\n        base64Accum = this.base64Accum,\n        base64AccumIdx = this.base64AccumIdx,\n        buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        var uChar = str.charCodeAt(i);\n        if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n            if (inBase64) {\n                if (base64AccumIdx > 0) {\n                    bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n                    base64AccumIdx = 0;\n                }\n\n                buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n                inBase64 = false;\n            }\n\n            if (!inBase64) {\n                buf[bufIdx++] = uChar; // Write direct character\n\n                if (uChar === andChar)  // Ampersand -> '&-'\n                    buf[bufIdx++] = minusChar;\n            }\n\n        } else { // Non-direct character\n            if (!inBase64) {\n                buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n                inBase64 = true;\n            }\n            if (inBase64) {\n                base64Accum[base64AccumIdx++] = uChar >> 8;\n                base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n                if (base64AccumIdx == base64Accum.length) {\n                    bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n                    base64AccumIdx = 0;\n                }\n            }\n        }\n    }\n\n    this.inBase64 = inBase64;\n    this.base64AccumIdx = base64AccumIdx;\n\n    return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n    var buf = Buffer.alloc(10), bufIdx = 0;\n    if (this.inBase64) {\n        if (this.base64AccumIdx > 0) {\n            bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n            this.base64AccumIdx = 0;\n        }\n\n        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n        this.inBase64 = false;\n    }\n\n    return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n    // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '&'\n            if (buf[i] == andChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n                    res += \"&\";\n                } else {\n                    var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus may be absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n    if (!codecOptions)\n        throw new Error(\"SBCS codec is called without the data.\")\n    \n    // Prepare char buffer for decoding.\n    if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n        throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n    \n    if (codecOptions.chars.length === 128) {\n        var asciiString = \"\";\n        for (var i = 0; i < 128; i++)\n            asciiString += String.fromCharCode(i);\n        codecOptions.chars = asciiString + codecOptions.chars;\n    }\n\n    this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n    \n    // Encoding buffer.\n    var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n    for (var i = 0; i < codecOptions.chars.length; i++)\n        encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n    this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n    this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length);\n    for (var i = 0; i < str.length; i++)\n        buf[i] = this.encodeBuf[str.charCodeAt(i)];\n    \n    return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n    this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n    var decodeBuf = this.decodeBuf;\n    var newBuf = Buffer.alloc(buf.length*2);\n    var idx1 = 0, idx2 = 0;\n    for (var i = 0; i < buf.length; i++) {\n        idx1 = buf[i]*2; idx2 = i*2;\n        newBuf[idx2] = decodeBuf[idx1];\n        newBuf[idx2+1] = decodeBuf[idx1+1];\n    }\n    return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n    // Not supported by iconv, not sure why.\n    \"10029\": \"maccenteuro\",\n    \"maccenteuro\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n    },\n\n    \"808\": \"cp808\",\n    \"ibm808\": \"cp808\",\n    \"cp808\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n    },\n\n    \"mik\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n    },\n\n    // Aliases of generated encodings.\n    \"ascii8bit\": \"ascii\",\n    \"usascii\": \"ascii\",\n    \"ansix34\": \"ascii\",\n    \"ansix341968\": \"ascii\",\n    \"ansix341986\": \"ascii\",\n    \"csascii\": \"ascii\",\n    \"cp367\": \"ascii\",\n    \"ibm367\": \"ascii\",\n    \"isoir6\": \"ascii\",\n    \"iso646us\": \"ascii\",\n    \"iso646irv\": \"ascii\",\n    \"us\": \"ascii\",\n\n    \"latin1\": \"iso88591\",\n    \"latin2\": \"iso88592\",\n    \"latin3\": \"iso88593\",\n    \"latin4\": \"iso88594\",\n    \"latin5\": \"iso88599\",\n    \"latin6\": \"iso885910\",\n    \"latin7\": \"iso885913\",\n    \"latin8\": \"iso885914\",\n    \"latin9\": \"iso885915\",\n    \"latin10\": \"iso885916\",\n\n    \"csisolatin1\": \"iso88591\",\n    \"csisolatin2\": \"iso88592\",\n    \"csisolatin3\": \"iso88593\",\n    \"csisolatin4\": \"iso88594\",\n    \"csisolatincyrillic\": \"iso88595\",\n    \"csisolatinarabic\": \"iso88596\",\n    \"csisolatingreek\" : \"iso88597\",\n    \"csisolatinhebrew\": \"iso88598\",\n    \"csisolatin5\": \"iso88599\",\n    \"csisolatin6\": \"iso885910\",\n\n    \"l1\": \"iso88591\",\n    \"l2\": \"iso88592\",\n    \"l3\": \"iso88593\",\n    \"l4\": \"iso88594\",\n    \"l5\": \"iso88599\",\n    \"l6\": \"iso885910\",\n    \"l7\": \"iso885913\",\n    \"l8\": \"iso885914\",\n    \"l9\": \"iso885915\",\n    \"l10\": \"iso885916\",\n\n    \"isoir14\": \"iso646jp\",\n    \"isoir57\": \"iso646cn\",\n    \"isoir100\": \"iso88591\",\n    \"isoir101\": \"iso88592\",\n    \"isoir109\": \"iso88593\",\n    \"isoir110\": \"iso88594\",\n    \"isoir144\": \"iso88595\",\n    \"isoir127\": \"iso88596\",\n    \"isoir126\": \"iso88597\",\n    \"isoir138\": \"iso88598\",\n    \"isoir148\": \"iso88599\",\n    \"isoir157\": \"iso885910\",\n    \"isoir166\": \"tis620\",\n    \"isoir179\": \"iso885913\",\n    \"isoir199\": \"iso885914\",\n    \"isoir203\": \"iso885915\",\n    \"isoir226\": \"iso885916\",\n\n    \"cp819\": \"iso88591\",\n    \"ibm819\": \"iso88591\",\n\n    \"cyrillic\": \"iso88595\",\n\n    \"arabic\": \"iso88596\",\n    \"arabic8\": \"iso88596\",\n    \"ecma114\": \"iso88596\",\n    \"asmo708\": \"iso88596\",\n\n    \"greek\" : \"iso88597\",\n    \"greek8\" : \"iso88597\",\n    \"ecma118\" : \"iso88597\",\n    \"elot928\" : \"iso88597\",\n\n    \"hebrew\": \"iso88598\",\n    \"hebrew8\": \"iso88598\",\n\n    \"turkish\": \"iso88599\",\n    \"turkish8\": \"iso88599\",\n\n    \"thai\": \"iso885911\",\n    \"thai8\": \"iso885911\",\n\n    \"celtic\": \"iso885914\",\n    \"celtic8\": \"iso885914\",\n    \"isoceltic\": \"iso885914\",\n\n    \"tis6200\": \"tis620\",\n    \"tis62025291\": \"tis620\",\n    \"tis62025330\": \"tis620\",\n\n    \"10000\": \"macroman\",\n    \"10006\": \"macgreek\",\n    \"10007\": \"maccyrillic\",\n    \"10079\": \"maciceland\",\n    \"10081\": \"macturkish\",\n\n    \"cspc8codepage437\": \"cp437\",\n    \"cspc775baltic\": \"cp775\",\n    \"cspc850multilingual\": \"cp850\",\n    \"cspcp852\": \"cp852\",\n    \"cspc862latinhebrew\": \"cp862\",\n    \"cpgr\": \"cp869\",\n\n    \"msee\": \"cp1250\",\n    \"mscyrl\": \"cp1251\",\n    \"msansi\": \"cp1252\",\n    \"msgreek\": \"cp1253\",\n    \"msturk\": \"cp1254\",\n    \"mshebr\": \"cp1255\",\n    \"msarab\": \"cp1256\",\n    \"winbaltrim\": \"cp1257\",\n\n    \"cp20866\": \"koi8r\",\n    \"20866\": \"koi8r\",\n    \"ibm878\": \"koi8r\",\n    \"cskoi8r\": \"koi8r\",\n\n    \"cp21866\": \"koi8u\",\n    \"21866\": \"koi8u\",\n    \"ibm1168\": \"koi8u\",\n\n    \"strk10482002\": \"rk1048\",\n\n    \"tcvn5712\": \"tcvn\",\n    \"tcvn57121\": \"tcvn\",\n\n    \"gb198880\": \"iso646cn\",\n    \"cn\": \"iso646cn\",\n\n    \"csiso14jisc6220ro\": \"iso646jp\",\n    \"jisc62201969ro\": \"iso646jp\",\n    \"jp\": \"iso646jp\",\n\n    \"cshproman8\": \"hproman8\",\n    \"r8\": \"hproman8\",\n    \"roman8\": \"hproman8\",\n    \"xroman8\": \"hproman8\",\n    \"ibm1051\": \"hproman8\",\n\n    \"mac\": \"macintosh\",\n    \"csmacintosh\": \"macintosh\",\n};\n\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  }\n}", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n    GB18030_CODE = -2,\n    SEQ_START  = -10,\n    NODE_START = -1000,\n    UNASSIGNED_NODE = new Array(0x100),\n    DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n    UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n    this.encodingName = codecOptions.encodingName;\n    if (!codecOptions)\n        throw new Error(\"DBCS codec is called without the data.\")\n    if (!codecOptions.table)\n        throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n    // Load tables.\n    var mappingTable = codecOptions.table();\n\n\n    // Decode tables: MBCS -> Unicode.\n\n    // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n    // Trie root is decodeTables[0].\n    // Values: >=  0 -> unicode character code. can be > 0xFFFF\n    //         == UNASSIGNED -> unknown/unassigned sequence.\n    //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n    //         <= NODE_START -> index of the next node in our trie to process next byte.\n    //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n    this.decodeTables = [];\n    this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n    this.decodeTableSeq = [];\n\n    // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n    for (var i = 0; i < mappingTable.length; i++)\n        this._addDecodeChunk(mappingTable[i]);\n\n    this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n    \n    // Encode tables: Unicode -> DBCS.\n\n    // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n    // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n    // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n    //         == UNASSIGNED -> no conversion found. Output a default char.\n    //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n    this.encodeTable = [];\n    \n    // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n    // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n    // means end of sequence (needed when one sequence is a strict subsequence of another).\n    // Objects are kept separately from encodeTable to increase performance.\n    this.encodeTableSeq = [];\n\n    // Some chars can be decoded, but need not be encoded.\n    var skipEncodeChars = {};\n    if (codecOptions.encodeSkipVals)\n        for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n            var val = codecOptions.encodeSkipVals[i];\n            if (typeof val === 'number')\n                skipEncodeChars[val] = true;\n            else\n                for (var j = val.from; j <= val.to; j++)\n                    skipEncodeChars[j] = true;\n        }\n        \n    // Use decode trie to recursively fill out encode tables.\n    this._fillEncodeTable(0, 0, skipEncodeChars);\n\n    // Add more encoding pairs when needed.\n    if (codecOptions.encodeAdd) {\n        for (var uChar in codecOptions.encodeAdd)\n            if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n                this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n    }\n\n    this.defCharSB  = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n\n\n    // Load & create GB18030 tables when needed.\n    if (typeof codecOptions.gb18030 === 'function') {\n        this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n        // Add GB18030 decode tables.\n        var thirdByteNodeIdx = this.decodeTables.length;\n        var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n        var fourthByteNodeIdx = this.decodeTables.length;\n        var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n        for (var i = 0x81; i <= 0xFE; i++) {\n            var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];\n            var secondByteNode = this.decodeTables[secondByteNodeIdx];\n            for (var j = 0x30; j <= 0x39; j++)\n                secondByteNode[j] = NODE_START - thirdByteNodeIdx;\n        }\n        for (var i = 0x81; i <= 0xFE; i++)\n            thirdByteNode[i] = NODE_START - fourthByteNodeIdx;\n        for (var i = 0x30; i <= 0x39; i++)\n            fourthByteNode[i] = GB18030_CODE\n    }        \n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n    var bytes = [];\n    for (; addr > 0; addr >>= 8)\n        bytes.push(addr & 0xFF);\n    if (bytes.length == 0)\n        bytes.push(0);\n\n    var node = this.decodeTables[0];\n    for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n        var val = node[bytes[i]];\n\n        if (val == UNASSIGNED) { // Create new node.\n            node[bytes[i]] = NODE_START - this.decodeTables.length;\n            this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n        }\n        else if (val <= NODE_START) { // Existing node.\n            node = this.decodeTables[NODE_START - val];\n        }\n        else\n            throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n    }\n    return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n    // First element of chunk is the hex mbcs code where we start.\n    var curAddr = parseInt(chunk[0], 16);\n\n    // Choose the decoding node where we'll write our chars.\n    var writeTable = this._getDecodeTrieNode(curAddr);\n    curAddr = curAddr & 0xFF;\n\n    // Write all other elements of the chunk to the table.\n    for (var k = 1; k < chunk.length; k++) {\n        var part = chunk[k];\n        if (typeof part === \"string\") { // String, write as-is.\n            for (var l = 0; l < part.length;) {\n                var code = part.charCodeAt(l++);\n                if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n                    var codeTrail = part.charCodeAt(l++);\n                    if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n                        writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n                    else\n                        throw new Error(\"Incorrect surrogate pair in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n                }\n                else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n                    var len = 0xFFF - code + 2;\n                    var seq = [];\n                    for (var m = 0; m < len; m++)\n                        seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n                    writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n                    this.decodeTableSeq.push(seq);\n                }\n                else\n                    writeTable[curAddr++] = code; // Basic char\n            }\n        } \n        else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n            var charCode = writeTable[curAddr - 1] + 1;\n            for (var l = 0; l < part; l++)\n                writeTable[curAddr++] = charCode++;\n        }\n        else\n            throw new Error(\"Incorrect type '\" + typeof part + \"' given in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n    }\n    if (curAddr > 0xFF)\n        throw new Error(\"Incorrect chunk in \"  + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n    var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n    if (this.encodeTable[high] === undefined)\n        this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n    return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n    if (bucket[low] <= SEQ_START)\n        this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n    else if (bucket[low] == UNASSIGNED)\n        bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n    \n    // Get the root of character tree according to first character of the sequence.\n    var uCode = seq[0];\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n\n    var node;\n    if (bucket[low] <= SEQ_START) {\n        // There's already a sequence with  - use it.\n        node = this.encodeTableSeq[SEQ_START-bucket[low]];\n    }\n    else {\n        // There was no sequence object - allocate a new one.\n        node = {};\n        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n        bucket[low] = SEQ_START - this.encodeTableSeq.length;\n        this.encodeTableSeq.push(node);\n    }\n\n    // Traverse the character tree, allocating new nodes as needed.\n    for (var j = 1; j < seq.length-1; j++) {\n        var oldVal = node[uCode];\n        if (typeof oldVal === 'object')\n            node = oldVal;\n        else {\n            node = node[uCode] = {}\n            if (oldVal !== undefined)\n                node[DEF_CHAR] = oldVal\n        }\n    }\n\n    // Set the leaf to given dbcsCode.\n    uCode = seq[seq.length-1];\n    node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n    var node = this.decodeTables[nodeIdx];\n    for (var i = 0; i < 0x100; i++) {\n        var uCode = node[i];\n        var mbCode = prefix + i;\n        if (skipEncodeChars[mbCode])\n            continue;\n\n        if (uCode >= 0)\n            this._setEncodeChar(uCode, mbCode);\n        else if (uCode <= NODE_START)\n            this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);\n        else if (uCode <= SEQ_START)\n            this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n    }\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n    // Encoder state\n    this.leadSurrogate = -1;\n    this.seqObj = undefined;\n    \n    // Static data\n    this.encodeTable = codec.encodeTable;\n    this.encodeTableSeq = codec.encodeTableSeq;\n    this.defaultCharSingleByte = codec.defCharSB;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n    var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n        leadSurrogate = this.leadSurrogate,\n        seqObj = this.seqObj, nextChar = -1,\n        i = 0, j = 0;\n\n    while (true) {\n        // 0. Get next character.\n        if (nextChar === -1) {\n            if (i == str.length) break;\n            var uCode = str.charCodeAt(i++);\n        }\n        else {\n            var uCode = nextChar;\n            nextChar = -1;    \n        }\n\n        // 1. Handle surrogates.\n        if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n            if (uCode < 0xDC00) { // We've got lead surrogate.\n                if (leadSurrogate === -1) {\n                    leadSurrogate = uCode;\n                    continue;\n                } else {\n                    leadSurrogate = uCode;\n                    // Double lead surrogate found.\n                    uCode = UNASSIGNED;\n                }\n            } else { // We've got trail surrogate.\n                if (leadSurrogate !== -1) {\n                    uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n                    leadSurrogate = -1;\n                } else {\n                    // Incomplete surrogate pair - only trail surrogate found.\n                    uCode = UNASSIGNED;\n                }\n                \n            }\n        }\n        else if (leadSurrogate !== -1) {\n            // Incomplete surrogate pair - only lead surrogate found.\n            nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n            leadSurrogate = -1;\n        }\n\n        // 2. Convert uCode character.\n        var dbcsCode = UNASSIGNED;\n        if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n            var resCode = seqObj[uCode];\n            if (typeof resCode === 'object') { // Sequence continues.\n                seqObj = resCode;\n                continue;\n\n            } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n                dbcsCode = resCode;\n\n            } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n                // Try default character for this sequence\n                resCode = seqObj[DEF_CHAR];\n                if (resCode !== undefined) {\n                    dbcsCode = resCode; // Found. Write it.\n                    nextChar = uCode; // Current character will be written too in the next iteration.\n\n                } else {\n                    // TODO: What if we have no default? (resCode == undefined)\n                    // Then, we should write first char of the sequence as-is and try the rest recursively.\n                    // Didn't do it for now because no encoding has this situation yet.\n                    // Currently, just skip the sequence and write current char.\n                }\n            }\n            seqObj = undefined;\n        }\n        else if (uCode >= 0) {  // Regular character\n            var subtable = this.encodeTable[uCode >> 8];\n            if (subtable !== undefined)\n                dbcsCode = subtable[uCode & 0xFF];\n            \n            if (dbcsCode <= SEQ_START) { // Sequence start\n                seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n                continue;\n            }\n\n            if (dbcsCode == UNASSIGNED && this.gb18030) {\n                // Use GB18030 algorithm to find character(s) to write.\n                var idx = findIdx(this.gb18030.uChars, uCode);\n                if (idx != -1) {\n                    var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n                    newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n                    newBuf[j++] = 0x30 + dbcsCode;\n                    continue;\n                }\n            }\n        }\n\n        // 3. Write dbcsCode character.\n        if (dbcsCode === UNASSIGNED)\n            dbcsCode = this.defaultCharSingleByte;\n        \n        if (dbcsCode < 0x100) {\n            newBuf[j++] = dbcsCode;\n        }\n        else if (dbcsCode < 0x10000) {\n            newBuf[j++] = dbcsCode >> 8;   // high byte\n            newBuf[j++] = dbcsCode & 0xFF; // low byte\n        }\n        else {\n            newBuf[j++] = dbcsCode >> 16;\n            newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        }\n    }\n\n    this.seqObj = seqObj;\n    this.leadSurrogate = leadSurrogate;\n    return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n    if (this.leadSurrogate === -1 && this.seqObj === undefined)\n        return; // All clean. Most often case.\n\n    var newBuf = Buffer.alloc(10), j = 0;\n\n    if (this.seqObj) { // We're in the sequence.\n        var dbcsCode = this.seqObj[DEF_CHAR];\n        if (dbcsCode !== undefined) { // Write beginning of the sequence.\n            if (dbcsCode < 0x100) {\n                newBuf[j++] = dbcsCode;\n            }\n            else {\n                newBuf[j++] = dbcsCode >> 8;   // high byte\n                newBuf[j++] = dbcsCode & 0xFF; // low byte\n            }\n        } else {\n            // See todo above.\n        }\n        this.seqObj = undefined;\n    }\n\n    if (this.leadSurrogate !== -1) {\n        // Incomplete surrogate pair - only lead surrogate found.\n        newBuf[j++] = this.defaultCharSingleByte;\n        this.leadSurrogate = -1;\n    }\n    \n    return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n    // Decoder state\n    this.nodeIdx = 0;\n    this.prevBuf = Buffer.alloc(0);\n\n    // Static data\n    this.decodeTables = codec.decodeTables;\n    this.decodeTableSeq = codec.decodeTableSeq;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n    var newBuf = Buffer.alloc(buf.length*2),\n        nodeIdx = this.nodeIdx, \n        prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,\n        seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.\n        uCode;\n\n    if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.\n        prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);\n    \n    for (var i = 0, j = 0; i < buf.length; i++) {\n        var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];\n\n        // Lookup in current trie node.\n        var uCode = this.decodeTables[nodeIdx][curByte];\n\n        if (uCode >= 0) { \n            // Normal character, just use it.\n        }\n        else if (uCode === UNASSIGNED) { // Unknown char.\n            // TODO: Callback with seq.\n            //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n            i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).\n            uCode = this.defaultCharUnicode.charCodeAt(0);\n        }\n        else if (uCode === GB18030_CODE) {\n            var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n            var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);\n            var idx = findIdx(this.gb18030.gbChars, ptr);\n            uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n        }\n        else if (uCode <= NODE_START) { // Go to next trie node.\n            nodeIdx = NODE_START - uCode;\n            continue;\n        }\n        else if (uCode <= SEQ_START) { // Output a sequence of chars.\n            var seq = this.decodeTableSeq[SEQ_START - uCode];\n            for (var k = 0; k < seq.length - 1; k++) {\n                uCode = seq[k];\n                newBuf[j++] = uCode & 0xFF;\n                newBuf[j++] = uCode >> 8;\n            }\n            uCode = seq[seq.length-1];\n        }\n        else\n            throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n        // Write the character to buffer, handling higher planes using surrogate pair.\n        if (uCode > 0xFFFF) { \n            uCode -= 0x10000;\n            var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);\n            newBuf[j++] = uCodeLead & 0xFF;\n            newBuf[j++] = uCodeLead >> 8;\n\n            uCode = 0xDC00 + uCode % 0x400;\n        }\n        newBuf[j++] = uCode & 0xFF;\n        newBuf[j++] = uCode >> 8;\n\n        // Reset trie node.\n        nodeIdx = 0; seqStart = i+1;\n    }\n\n    this.nodeIdx = nodeIdx;\n    this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);\n    return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n    var ret = '';\n\n    // Try to parse all remaining chars.\n    while (this.prevBuf.length > 0) {\n        // Skip 1 character in the buffer.\n        ret += this.defaultCharUnicode;\n        var buf = this.prevBuf.slice(1);\n\n        // Parse remaining as usual.\n        this.prevBuf = Buffer.alloc(0);\n        this.nodeIdx = 0;\n        if (buf.length > 0)\n            ret += this.write(buf);\n    }\n\n    this.nodeIdx = 0;\n    return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n    if (table[0] > val)\n        return -1;\n\n    var l = 0, r = table.length;\n    while (l < r-1) { // always table[l] <= val < table[r]\n        var mid = l + Math.floor((r-l+1)/2);\n        if (table[mid] <= val)\n            l = mid;\n        else\n            r = mid;\n    }\n    return l;\n}\n\n", "[\n[\"0\",\"\\u0000\",128],\n[\"a1\",\"\uFF61\",62],\n[\"8140\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\"],\n[\"8180\",\"\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"81b8\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"81c8\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"81da\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"81f0\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"81fc\",\"\u25EF\"],\n[\"824f\",\"\uFF10\",9],\n[\"8260\",\"\uFF21\",25],\n[\"8281\",\"\uFF41\",25],\n[\"829f\",\"\u3041\",82],\n[\"8340\",\"\u30A1\",62],\n[\"8380\",\"\u30E0\",22],\n[\"839f\",\"\u0391\",16,\"\u03A3\",6],\n[\"83bf\",\"\u03B1\",16,\"\u03C3\",6],\n[\"8440\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"8470\",\"\u0430\",5,\"\u0451\u0436\",7],\n[\"8480\",\"\u043E\",17],\n[\"849f\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"8740\",\"\u2460\",19,\"\u2160\",9],\n[\"875f\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"877e\",\"\u337B\"],\n[\"8780\",\"\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"889f\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"8940\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\"],\n[\"8980\",\"\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"8a40\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\"],\n[\"8a80\",\"\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"8b40\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\"],\n[\"8b80\",\"\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"8c40\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\"],\n[\"8c80\",\"\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"8d40\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\"],\n[\"8d80\",\"\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"8e40\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\"],\n[\"8e80\",\"\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"8f40\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\"],\n[\"8f80\",\"\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"9040\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\"],\n[\"9080\",\"\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"9140\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\"],\n[\"9180\",\"\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"9240\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\"],\n[\"9280\",\"\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"9340\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\"],\n[\"9380\",\"\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"9440\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\"],\n[\"9480\",\"\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"9540\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\"],\n[\"9580\",\"\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"9640\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\"],\n[\"9680\",\"\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"9740\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\"],\n[\"9780\",\"\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"9840\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"989f\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"9940\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\"],\n[\"9980\",\"\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"9a40\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\"],\n[\"9a80\",\"\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"9b40\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\"],\n[\"9b80\",\"\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"9c40\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\"],\n[\"9c80\",\"\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"9d40\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\"],\n[\"9d80\",\"\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"9e40\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\"],\n[\"9e80\",\"\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"9f40\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\"],\n[\"9f80\",\"\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"e040\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\"],\n[\"e080\",\"\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e140\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\"],\n[\"e180\",\"\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e240\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\"],\n[\"e280\",\"\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e340\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\"],\n[\"e380\",\"\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e440\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\"],\n[\"e480\",\"\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e540\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\"],\n[\"e580\",\"\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"e640\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\"],\n[\"e680\",\"\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"e740\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\"],\n[\"e780\",\"\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"e840\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\"],\n[\"e880\",\"\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"e940\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\"],\n[\"e980\",\"\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"ea40\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\"],\n[\"ea80\",\"\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"ed40\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\"],\n[\"ed80\",\"\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"ee40\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\"],\n[\"ee80\",\"\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"eeef\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"f040\",\"\uE000\",62],\n[\"f080\",\"\uE03F\",124],\n[\"f140\",\"\uE0BC\",62],\n[\"f180\",\"\uE0FB\",124],\n[\"f240\",\"\uE178\",62],\n[\"f280\",\"\uE1B7\",124],\n[\"f340\",\"\uE234\",62],\n[\"f380\",\"\uE273\",124],\n[\"f440\",\"\uE2F0\",62],\n[\"f480\",\"\uE32F\",124],\n[\"f540\",\"\uE3AC\",62],\n[\"f580\",\"\uE3EB\",124],\n[\"f640\",\"\uE468\",62],\n[\"f680\",\"\uE4A7\",124],\n[\"f740\",\"\uE524\",62],\n[\"f780\",\"\uE563\",124],\n[\"f840\",\"\uE5E0\",62],\n[\"f880\",\"\uE61F\",124],\n[\"f940\",\"\uE69C\"],\n[\"fa40\",\"\u2170\",9,\"\u2160\",9,\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\"],\n[\"fa80\",\"\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\"],\n[\"fb40\",\"\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\"],\n[\"fb80\",\"\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\"],\n[\"fc40\",\"\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"8ea1\",\"\uFF61\",62],\n[\"a1a1\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\"],\n[\"a2a1\",\"\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2ba\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"a2ca\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"a2dc\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"a2f2\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"a2fe\",\"\u25EF\"],\n[\"a3b0\",\"\uFF10\",9],\n[\"a3c1\",\"\uFF21\",25],\n[\"a3e1\",\"\uFF41\",25],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a8a1\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"ada1\",\"\u2460\",19,\"\u2160\",9],\n[\"adc0\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"addf\",\"\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"b0a1\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"b1a1\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\"],\n[\"b2a1\",\"\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"b3a1\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\"],\n[\"b4a1\",\"\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"b5a1\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\"],\n[\"b6a1\",\"\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"b7a1\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\"],\n[\"b8a1\",\"\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"b9a1\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\"],\n[\"baa1\",\"\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"bba1\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\"],\n[\"bca1\",\"\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"bda1\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\"],\n[\"bea1\",\"\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"bfa1\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\"],\n[\"c0a1\",\"\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"c1a1\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\"],\n[\"c2a1\",\"\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"c3a1\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\"],\n[\"c4a1\",\"\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"c5a1\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\"],\n[\"c6a1\",\"\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"c7a1\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\"],\n[\"c8a1\",\"\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"c9a1\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\"],\n[\"caa1\",\"\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"cba1\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\"],\n[\"cca1\",\"\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"cda1\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\"],\n[\"cea1\",\"\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"cfa1\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"d0a1\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"d1a1\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\"],\n[\"d2a1\",\"\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"d3a1\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\"],\n[\"d4a1\",\"\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"d5a1\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\"],\n[\"d6a1\",\"\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"d7a1\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\"],\n[\"d8a1\",\"\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"d9a1\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\"],\n[\"daa1\",\"\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"dba1\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\"],\n[\"dca1\",\"\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"dda1\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\"],\n[\"dea1\",\"\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"dfa1\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\"],\n[\"e0a1\",\"\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e1a1\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\"],\n[\"e2a1\",\"\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e3a1\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\"],\n[\"e4a1\",\"\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e5a1\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\"],\n[\"e6a1\",\"\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e7a1\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\"],\n[\"e8a1\",\"\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e9a1\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\"],\n[\"eaa1\",\"\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"eba1\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\"],\n[\"eca1\",\"\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"eda1\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\"],\n[\"eea1\",\"\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"efa1\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\"],\n[\"f0a1\",\"\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"f1a1\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\"],\n[\"f2a1\",\"\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"f3a1\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\"],\n[\"f4a1\",\"\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"f9a1\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\"],\n[\"faa1\",\"\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"fba1\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\"],\n[\"fca1\",\"\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"fcf1\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"8fa2af\",\"\u02D8\u02C7\u00B8\u02D9\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\"],\n[\"8fa2c2\",\"\u00A1\u00A6\u00BF\"],\n[\"8fa2eb\",\"\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\"],\n[\"8fa6e1\",\"\u0386\u0388\u0389\u038A\u03AA\"],\n[\"8fa6e7\",\"\u038C\"],\n[\"8fa6e9\",\"\u038E\u03AB\"],\n[\"8fa6ec\",\"\u038F\"],\n[\"8fa6f1\",\"\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE\"],\n[\"8fa7c2\",\"\u0402\",10,\"\u040E\u040F\"],\n[\"8fa7f2\",\"\u0452\",10,\"\u045E\u045F\"],\n[\"8fa9a1\",\"\u00C6\u0110\"],\n[\"8fa9a4\",\"\u0126\"],\n[\"8fa9a6\",\"\u0132\"],\n[\"8fa9a8\",\"\u0141\u013F\"],\n[\"8fa9ab\",\"\u014A\u00D8\u0152\"],\n[\"8fa9af\",\"\u0166\u00DE\"],\n[\"8fa9c1\",\"\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE\"],\n[\"8faaa1\",\"\u00C1\u00C0\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8\u00CB\u00CA\u011A\u0116\u0112\u0118\"],\n[\"8faaba\",\"\u011C\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD\u0178\u0176\u0179\u017D\u017B\"],\n[\"8faba1\",\"\u00E1\u00E0\u00E4\u00E2\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\"],\n[\"8fabbd\",\"\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\"],\n[\"8fabc5\",\"\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177\u017A\u017E\u017C\"],\n[\"8fb0a1\",\"\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84\"],\n[\"8fb1a1\",\"\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090\"],\n[\"8fb2a1\",\"\u5092\u5093\u5094\u5096\u509B\u509C\u509E\",4,\"\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2\"],\n[\"8fb3a1\",\"\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B\"],\n[\"8fb4a1\",\"\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F\"],\n[\"8fb5a1\",\"\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\"],\n[\"8fb6a1\",\"\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D\",5,\"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4\",4,\"\u56F1\u56EB\u56ED\"],\n[\"8fb7a1\",\"\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D\",4,\"\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1\"],\n[\"8fb8a1\",\"\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D\"],\n[\"8fb9a1\",\"\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\"],\n[\"8fbaa1\",\"\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\",4,\"\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69\"],\n[\"8fbba1\",\"\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4\"],\n[\"8fbca1\",\"\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\",4,\"\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67\"],\n[\"8fbda1\",\"\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\",4,\"\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\"],\n[\"8fbea1\",\"\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110\",4,\"\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5\"],\n[\"8fbfa1\",\"\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375\"],\n[\"8fc0a1\",\"\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF\"],\n[\"8fc1a1\",\"\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D\"],\n[\"8fc2a1\",\"\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D\"],\n[\"8fc3a1\",\"\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E\",4,\"\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF\"],\n[\"8fc4a1\",\"\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32\"],\n[\"8fc5a1\",\"\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\"],\n[\"8fc6a1\",\"\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6\"],\n[\"8fc7a1\",\"\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E\"],\n[\"8fc8a1\",\"\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA\"],\n[\"8fc9a1\",\"\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094\",4,\"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103\",4,\"\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160\"],\n[\"8fcaa1\",\"\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB\"],\n[\"8fcba1\",\"\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD\"],\n[\"8fcca1\",\"\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428\",9,\"\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506\"],\n[\"8fcda1\",\"\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579\",5,\"\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639\"],\n[\"8fcea1\",\"\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2\",6,\"\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762\"],\n[\"8fcfa1\",\"\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3\"],\n[\"8fd0a1\",\"\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE\"],\n[\"8fd1a1\",\"\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\"],\n[\"8fd2a1\",\"\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\",5],\n[\"8fd3a1\",\"\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D\"],\n[\"8fd4a1\",\"\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2\",4,\"\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D\"],\n[\"8fd5a1\",\"\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\"],\n[\"8fd6a1\",\"\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246\"],\n[\"8fd7a1\",\"\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378\"],\n[\"8fd8a1\",\"\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3\"],\n[\"8fd9a1\",\"\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F\",4,\"\u8556\u8559\u855C\",6,\"\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\"],\n[\"8fdaa1\",\"\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660\",4,\"\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723\"],\n[\"8fdba1\",\"\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783\",6,\"\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835\"],\n[\"8fdca1\",\"\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\",4,\"\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A\"],\n[\"8fdda1\",\"\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4\",4,\"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\"],\n[\"8fdea1\",\"\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42\",4,\"\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86\"],\n[\"8fdfa1\",\"\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22\"],\n[\"8fe0a1\",\"\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41\"],\n[\"8fe1a1\",\"\u8F43\u8F47\u8F4F\u8F51\",4,\"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\"],\n[\"8fe2a1\",\"\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF\"],\n[\"8fe3a1\",\"\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC\",5,\"\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275\",4,\"\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297\"],\n[\"8fe4a1\",\"\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF\",4,\"\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376\"],\n[\"8fe5a1\",\"\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9\",4,\"\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579\"],\n[\"8fe6a1\",\"\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702\"],\n[\"8fe7a1\",\"\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826\"],\n[\"8fe8a1\",\"\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931\",4,\"\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5\"],\n[\"8fe9a1\",\"\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF\",4],\n[\"8feaa1\",\"\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A\",4,\"\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8\"],\n[\"8feba1\",\"\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\",4,\"\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B\"],\n[\"8feca1\",\"\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5\"],\n[\"8feda1\",\"\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43\",4,\"\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\",4,\"\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5\"]\n]\n", "[\n[\"0\",\"\\u0000\",127,\"\u20AC\"],\n[\"8140\",\"\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A\",5,\"\u4E72\u4E74\",9,\"\u4E7F\",6,\"\u4E87\u4E8A\"],\n[\"8180\",\"\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02\",6,\"\u4F0B\u4F0C\u4F12\",4,\"\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\",4,\"\u4F44\u4F45\u4F47\",5,\"\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2\"],\n[\"8240\",\"\u4FA4\u4FAB\u4FAD\u4FB0\",4,\"\u4FB6\",8,\"\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2\",4,\"\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF\",11],\n[\"8280\",\"\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F\",10,\"\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050\",4,\"\u5056\u5057\u5058\u5059\u505B\u505D\",7,\"\u5066\",5,\"\u506D\",8,\"\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E\",20,\"\u50A4\u50A6\u50AA\u50AB\u50AD\",4,\"\u50B3\",6,\"\u50BC\"],\n[\"8340\",\"\u50BD\",17,\"\u50D0\",5,\"\u50D7\u50D8\u50D9\u50DB\",10,\"\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6\",4,\"\u50FC\",9,\"\u5108\"],\n[\"8380\",\"\u5109\u510A\u510C\",5,\"\u5113\",13,\"\u5122\",28,\"\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D\",4,\"\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6\",4,\"\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2\",5],\n[\"8440\",\"\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5\",5,\"\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244\",5,\"\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258\"],\n[\"8480\",\"\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273\",9,\"\u527E\u5280\u5283\",4,\"\u5289\",6,\"\u5291\u5292\u5294\",6,\"\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4\",9,\"\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9\",5,\"\u52E0\u52E1\u52E2\u52E3\u52E5\",10,\"\u52F1\",7,\"\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E\"],\n[\"8540\",\"\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F\",9,\"\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F\"],\n[\"8580\",\"\u5390\",4,\"\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF\",6,\"\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3\",4,\"\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D\",4,\"\u5463\u5465\u5467\u5469\",7,\"\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1\"],\n[\"8640\",\"\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0\",4,\"\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4\",5,\"\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A\",4,\"\u5512\u5513\u5515\",5,\"\u551C\u551D\u551E\u551F\u5521\u5525\u5526\"],\n[\"8680\",\"\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B\",4,\"\u5551\u5552\u5553\u5554\u5557\",4,\"\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F\",5,\"\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0\",6,\"\u55A8\",8,\"\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF\",4,\"\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7\",4,\"\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8\",4,\"\u55FF\u5602\u5603\u5604\u5605\"],\n[\"8740\",\"\u5606\u5607\u560A\u560B\u560D\u5610\",7,\"\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640\",11,\"\u564F\",4,\"\u5655\u5656\u565A\u565B\u565D\",4],\n[\"8780\",\"\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D\",7,\"\u5687\",6,\"\u5690\u5691\u5692\u5694\",14,\"\u56A4\",10,\"\u56B0\",6,\"\u56B8\u56B9\u56BA\u56BB\u56BD\",12,\"\u56CB\",8,\"\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5\",5,\"\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B\",6],\n[\"8840\",\"\u5712\",9,\"\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734\",4,\"\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752\",4,\"\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780\"],\n[\"8880\",\"\u5781\u5787\u5788\u5789\u578A\u578D\",4,\"\u5794\",6,\"\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9\",8,\"\u57C4\",6,\"\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5\",7,\"\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825\",4,\"\u582B\",4,\"\u5831\u5832\u5833\u5834\u5836\",7],\n[\"8940\",\"\u583E\",5,\"\u5845\",6,\"\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859\",4,\"\u585F\",5,\"\u5866\",4,\"\u586D\",16,\"\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C\"],\n[\"8980\",\"\u588D\",4,\"\u5894\",4,\"\u589B\u589C\u589D\u58A0\",7,\"\u58AA\",17,\"\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6\",10,\"\u58D2\u58D3\u58D4\u58D6\",13,\"\u58E5\",5,\"\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA\",7,\"\u5903\u5905\u5906\u5908\",4,\"\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B\"],\n[\"8a40\",\"\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B\",4,\"\u5961\u5963\u5964\u5966\",12,\"\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6\"],\n[\"8a80\",\"\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3\",5,\"\u59BA\u59BC\u59BD\u59BF\",6,\"\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE\",4,\"\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED\",11,\"\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A\",6,\"\u5A33\u5A35\u5A37\",4,\"\u5A3D\u5A3E\u5A3F\u5A41\",4,\"\u5A47\u5A48\u5A4B\",9,\"\u5A56\u5A57\u5A58\u5A59\u5A5B\",5],\n[\"8b40\",\"\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B\",8,\"\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80\",17,\"\u5A93\",6,\"\u5A9C\",13,\"\u5AAB\u5AAC\"],\n[\"8b80\",\"\u5AAD\",4,\"\u5AB4\u5AB6\u5AB7\u5AB9\",4,\"\u5ABF\u5AC0\u5AC3\",5,\"\u5ACA\u5ACB\u5ACD\",4,\"\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC\",4,\"\u5AF2\",22,\"\u5B0A\",11,\"\u5B18\",25,\"\u5B33\u5B35\u5B36\u5B38\",7,\"\u5B41\",6],\n[\"8c40\",\"\u5B48\",7,\"\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF\"],\n[\"8c80\",\"\u5BD1\u5BD4\",8,\"\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9\",4,\"\u5BEF\u5BF1\",6,\"\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67\",6,\"\u5C70\u5C72\",6,\"\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83\",4,\"\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D\",4,\"\u5CA4\",4],\n[\"8d40\",\"\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5\",5,\"\u5CCC\",5,\"\u5CD3\",5,\"\u5CDA\",6,\"\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1\",9,\"\u5CFC\",4],\n[\"8d80\",\"\u5D01\u5D04\u5D05\u5D08\",5,\"\u5D0F\",4,\"\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F\",4,\"\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F\",4,\"\u5D35\",7,\"\u5D3F\",7,\"\u5D48\u5D49\u5D4D\",10,\"\u5D59\u5D5A\u5D5C\u5D5E\",10,\"\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75\",12,\"\u5D83\",21,\"\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0\"],\n[\"8e40\",\"\u5DA1\",21,\"\u5DB8\",12,\"\u5DC6\",6,\"\u5DCE\",12,\"\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED\"],\n[\"8e80\",\"\u5DF0\u5DF5\u5DF6\u5DF8\",4,\"\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E\",7,\"\u5E28\",4,\"\u5E2F\u5E30\u5E32\",4,\"\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46\",5,\"\u5E4D\",6,\"\u5E56\",4,\"\u5E5C\u5E5D\u5E5F\u5E60\u5E63\",14,\"\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8\",4,\"\u5EAE\",4,\"\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF\",6],\n[\"8f40\",\"\u5EC6\u5EC7\u5EC8\u5ECB\",5,\"\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC\",11,\"\u5EE9\u5EEB\",8,\"\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24\"],\n[\"8f80\",\"\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32\",6,\"\u5F3B\u5F3D\u5F3E\u5F3F\u5F41\",14,\"\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2\",5,\"\u5FA9\u5FAB\u5FAC\u5FAF\",5,\"\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE\",4,\"\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007\"],\n[\"9040\",\"\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030\",4,\"\u6036\",4,\"\u603D\u603E\u6040\u6044\",6,\"\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080\"],\n[\"9080\",\"\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD\",7,\"\u60C7\u60C8\u60C9\u60CC\",4,\"\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1\",4,\"\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB\",4,\"\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110\",4,\"\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C\",18,\"\u6140\",6],\n[\"9140\",\"\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156\",6,\"\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169\",6,\"\u6171\u6172\u6173\u6174\u6176\u6178\",18,\"\u618C\u618D\u618F\",4,\"\u6195\"],\n[\"9180\",\"\u6196\",6,\"\u619E\",8,\"\u61AA\u61AB\u61AD\",9,\"\u61B8\",5,\"\u61BF\u61C0\u61C1\u61C3\",4,\"\u61C9\u61CC\",4,\"\u61D3\u61D5\",16,\"\u61E7\",13,\"\u61F6\",8,\"\u6200\",5,\"\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238\",4,\"\u6242\u6244\u6245\u6246\u624A\"],\n[\"9240\",\"\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C\",6,\"\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B\",5,\"\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1\"],\n[\"9280\",\"\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333\",5,\"\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356\",7,\"\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399\",6,\"\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0\"],\n[\"9340\",\"\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7\",6,\"\u63DF\u63E2\u63E4\",4,\"\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406\",4,\"\u640D\u640E\u6411\u6412\u6415\",5,\"\u641D\u641F\u6422\u6423\u6424\"],\n[\"9380\",\"\u6425\u6427\u6428\u6429\u642B\u642E\",5,\"\u6435\",4,\"\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B\",6,\"\u6453\u6455\u6456\u6457\u6459\",4,\"\u645F\",7,\"\u6468\u646A\u646B\u646C\u646E\",9,\"\u647B\",6,\"\u6483\u6486\u6488\",8,\"\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F\",4,\"\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6\",6,\"\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA\"],\n[\"9440\",\"\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7\",24,\"\u6501\",7,\"\u650A\",7,\"\u6513\",4,\"\u6519\",8],\n[\"9480\",\"\u6522\u6523\u6524\u6526\",4,\"\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540\",4,\"\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578\",14,\"\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1\",7,\"\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8\",7,\"\u65E1\u65E3\u65E4\u65EA\u65EB\"],\n[\"9540\",\"\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB\",4,\"\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637\",4,\"\u663D\u663F\u6640\u6642\u6644\",6,\"\u664D\u664E\u6650\u6651\u6658\"],\n[\"9580\",\"\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669\",4,\"\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698\",4,\"\u669E\",8,\"\u66A9\",4,\"\u66AF\",4,\"\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF\",25,\"\u66DA\u66DE\",7,\"\u66E7\u66E8\u66EA\",5,\"\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703\"],\n[\"9640\",\"\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720\",5,\"\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757\",4,\"\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776\"],\n[\"9680\",\"\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9\",7,\"\u67C2\u67C5\",9,\"\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5\",7,\"\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818\",4,\"\u681E\u681F\u6820\u6822\",6,\"\u682B\",6,\"\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856\",5],\n[\"9740\",\"\u685C\u685D\u685E\u685F\u686A\u686C\",7,\"\u6875\u6878\",8,\"\u6882\u6884\u6887\",7,\"\u6890\u6891\u6892\u6894\u6895\u6896\u6898\",9,\"\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8\"],\n[\"9780\",\"\u68B9\",6,\"\u68C1\u68C3\",5,\"\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB\",4,\"\u68E1\u68E2\u68E4\",9,\"\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906\",4,\"\u690C\u690F\u6911\u6913\",11,\"\u6921\u6922\u6923\u6925\",7,\"\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943\",16,\"\u6955\u6956\u6958\u6959\u695B\u695C\u695F\"],\n[\"9840\",\"\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972\",4,\"\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E\",5,\"\u6996\u6997\u6999\u699A\u699D\",9,\"\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD\"],\n[\"9880\",\"\u69BE\u69BF\u69C0\u69C2\",7,\"\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5\",5,\"\u69DC\u69DD\u69DE\u69E1\",11,\"\u69EE\u69EF\u69F0\u69F1\u69F3\",9,\"\u69FE\u6A00\",9,\"\u6A0B\",11,\"\u6A19\",5,\"\u6A20\u6A22\",5,\"\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36\",6,\"\u6A3F\",4,\"\u6A45\u6A46\u6A48\",7,\"\u6A51\",6,\"\u6A5A\"],\n[\"9940\",\"\u6A5C\",4,\"\u6A62\u6A63\u6A64\u6A66\",10,\"\u6A72\",6,\"\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85\",8,\"\u6A8F\u6A92\",4,\"\u6A98\",7,\"\u6AA1\",5],\n[\"9980\",\"\u6AA7\u6AA8\u6AAA\u6AAD\",114,\"\u6B25\u6B26\u6B28\",6],\n[\"9a40\",\"\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D\",11,\"\u6B5A\",7,\"\u6B68\u6B69\u6B6B\",13,\"\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88\"],\n[\"9a80\",\"\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C\",4,\"\u6BA2\",7,\"\u6BAB\",7,\"\u6BB6\u6BB8\",6,\"\u6BC0\u6BC3\u6BC4\u6BC6\",4,\"\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC\",4,\"\u6BE2\",7,\"\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE\",6,\"\u6C08\",4,\"\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B\",4,\"\u6C51\u6C52\u6C53\u6C56\u6C58\"],\n[\"9b40\",\"\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B\",4,\"\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8\"],\n[\"9b80\",\"\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F\",5,\"\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D\",4,\"\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96\",4,\"\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9\",5,\"\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA\"],\n[\"9c40\",\"\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD\",7,\"\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35\"],\n[\"9c80\",\"\u6E36\u6E37\u6E39\u6E3B\",7,\"\u6E45\",7,\"\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60\",10,\"\u6E6C\u6E6D\u6E6F\",14,\"\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A\",4,\"\u6E91\",6,\"\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA\",5],\n[\"9d40\",\"\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA\",7,\"\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A\",4,\"\u6F10\u6F11\u6F12\u6F16\",9,\"\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37\",6,\"\u6F3F\u6F40\u6F41\u6F42\"],\n[\"9d80\",\"\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E\",9,\"\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67\",5,\"\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D\",6,\"\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F\",12,\"\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2\",4,\"\u6FA8\",10,\"\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA\",5,\"\u6FC1\u6FC3\",5,\"\u6FCA\",6,\"\u6FD3\",10,\"\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5\"],\n[\"9e40\",\"\u6FE6\",7,\"\u6FF0\",32,\"\u7012\",7,\"\u701C\",6,\"\u7024\",6],\n[\"9e80\",\"\u702B\",9,\"\u7036\u7037\u7038\u703A\",17,\"\u704D\u704E\u7050\",13,\"\u705F\",11,\"\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E\",12,\"\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB\",12,\"\u70DA\"],\n[\"9f40\",\"\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0\",6,\"\u70F8\u70FA\u70FB\u70FC\u70FE\",10,\"\u710B\",4,\"\u7111\u7112\u7114\u7117\u711B\",10,\"\u7127\",7,\"\u7132\u7133\u7134\"],\n[\"9f80\",\"\u7135\u7137\",13,\"\u7146\u7147\u7148\u7149\u714B\u714D\u714F\",12,\"\u715D\u715F\",4,\"\u7165\u7169\",4,\"\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E\",5,\"\u7185\",4,\"\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A\",4,\"\u71A1\",6,\"\u71A9\u71AA\u71AB\u71AD\",5,\"\u71B4\u71B6\u71B7\u71B8\u71BA\",8,\"\u71C4\",9,\"\u71CF\",4],\n[\"a040\",\"\u71D6\",9,\"\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8\",5,\"\u71EF\",9,\"\u71FA\",11,\"\u7207\",19],\n[\"a080\",\"\u721B\u721C\u721E\",9,\"\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240\",6,\"\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285\",4,\"\u728C\u728E\u7290\u7291\u7293\",11,\"\u72A0\",11,\"\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA\",6,\"\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB\"],\n[\"a1a1\",\"\u3000\u3001\u3002\u00B7\u02C9\u02C7\u00A8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",7,\"\u3016\u3017\u3010\u3011\u00B1\u00D7\u00F7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFF04\u00A4\uFFE0\uFFE1\u2030\u00A7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2a1\",\"\u2170\",9],\n[\"a2b1\",\"\u2488\",19,\"\u2474\",19,\"\u2460\",9],\n[\"a2e5\",\"\u3220\",9],\n[\"a2f1\",\"\u2160\",11],\n[\"a3a1\",\"\uFF01\uFF02\uFF03\uFFE5\uFF05\",88,\"\uFFE3\"],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a6e0\",\"\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44\"],\n[\"a6ee\",\"\uFE3B\uFE3C\uFE37\uFE38\uFE31\"],\n[\"a6f4\",\"\uFE33\uFE34\"],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a840\",\"\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550\",35,\"\u2581\",6],\n[\"a880\",\"\u2588\",7,\"\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E\"],\n[\"a8a1\",\"\u0101\u00E1\u01CE\u00E0\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\u01DC\u00FC\u00EA\u0251\"],\n[\"a8bd\",\"\u0144\u0148\"],\n[\"a8c0\",\"\u0261\"],\n[\"a8c5\",\"\u3105\",36],\n[\"a940\",\"\u3021\",8,\"\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4\"],\n[\"a959\",\"\u2121\u3231\"],\n[\"a95c\",\"\u2010\"],\n[\"a960\",\"\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49\",9,\"\uFE54\uFE55\uFE56\uFE57\uFE59\",8],\n[\"a980\",\"\uFE62\",4,\"\uFE68\uFE69\uFE6A\uFE6B\"],\n[\"a996\",\"\u3007\"],\n[\"a9a4\",\"\u2500\",75],\n[\"aa40\",\"\u72DC\u72DD\u72DF\u72E2\",5,\"\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304\",5,\"\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340\",8],\n[\"aa80\",\"\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358\",7,\"\u7361\",10,\"\u736E\u7370\u7371\"],\n[\"ab40\",\"\u7372\",11,\"\u737F\",4,\"\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3\",5,\"\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3\",4],\n[\"ab80\",\"\u73CB\u73CC\u73CE\u73D2\",6,\"\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3\",4],\n[\"ac40\",\"\u73F8\",10,\"\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411\",8,\"\u741C\",5,\"\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437\",4,\"\u743D\u743E\u743F\u7440\u7442\",11],\n[\"ac80\",\"\u744E\",6,\"\u7456\u7458\u745D\u7460\",12,\"\u746E\u746F\u7471\",4,\"\u7478\u7479\u747A\"],\n[\"ad40\",\"\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491\",10,\"\u749D\u749F\",7,\"\u74AA\",15,\"\u74BB\",12],\n[\"ad80\",\"\u74C8\",9,\"\u74D3\",8,\"\u74DD\u74DF\u74E1\u74E5\u74E7\",6,\"\u74F0\u74F1\u74F2\"],\n[\"ae40\",\"\u74F3\u74F5\u74F8\",6,\"\u7500\u7501\u7502\u7503\u7505\",7,\"\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520\",4,\"\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558\"],\n[\"ae80\",\"\u755D\",7,\"\u7567\u7568\u7569\u756B\",6,\"\u7573\u7575\u7576\u7577\u757A\",4,\"\u7580\u7581\u7582\u7584\u7585\u7587\"],\n[\"af40\",\"\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6\",4,\"\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607\"],\n[\"af80\",\"\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644\"],\n[\"b040\",\"\u7645\",6,\"\u764E\",5,\"\u7655\u7657\",4,\"\u765D\u765F\u7660\u7661\u7662\u7664\",6,\"\u766C\u766D\u766E\u7670\",7,\"\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B\"],\n[\"b080\",\"\u769C\",7,\"\u76A5\",8,\"\u76AF\u76B0\u76B3\u76B5\",9,\"\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265\"],\n[\"b140\",\"\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0\",4,\"\u76E6\",7,\"\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E\",10,\"\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B\"],\n[\"b180\",\"\u772C\u772E\u7730\",4,\"\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748\",7,\"\u7752\",7,\"\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3\"],\n[\"b240\",\"\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D\",11,\"\u777A\u777B\u777C\u7781\u7782\u7783\u7786\",5,\"\u778F\u7790\u7793\",11,\"\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6\",4],\n[\"b280\",\"\u77BC\u77BE\u77C0\",12,\"\u77CE\",8,\"\u77D8\u77D9\u77DA\u77DD\",4,\"\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316\"],\n[\"b340\",\"\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803\",5,\"\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A\"],\n[\"b380\",\"\u785B\u785C\u785E\",11,\"\u786F\",7,\"\u7878\u7879\u787A\u787B\u787D\",6,\"\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A\"],\n[\"b440\",\"\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8\",7,\"\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA\",9],\n[\"b480\",\"\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED\",4,\"\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB\",5,\"\u7902\u7903\u7904\u7906\",6,\"\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E\"],\n[\"b540\",\"\u790D\",5,\"\u7914\",9,\"\u791F\",4,\"\u7925\",14,\"\u7935\",4,\"\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A\",8,\"\u7954\u7955\u7958\u7959\u7961\u7963\"],\n[\"b580\",\"\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970\",6,\"\u7979\u797B\",4,\"\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0\"],\n[\"b640\",\"\u7993\",6,\"\u799B\",11,\"\u79A8\",10,\"\u79B4\",4,\"\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9\",5,\"\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA\"],\n[\"b680\",\"\u79EC\u79EE\u79F1\",6,\"\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F\",4,\"\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C\"],\n[\"b740\",\"\u7A1D\u7A1F\u7A21\u7A22\u7A24\",14,\"\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40\",5,\"\u7A47\",9,\"\u7A52\",4,\"\u7A58\",16],\n[\"b780\",\"\u7A69\",6,\"\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D\"],\n[\"b840\",\"\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE\",4,\"\u7AB4\",10,\"\u7AC0\",10,\"\u7ACC\",9,\"\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7\",5,\"\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3\"],\n[\"b880\",\"\u7AF4\",4,\"\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9\"],\n[\"b940\",\"\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F\",5,\"\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63\",10,\"\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86\",6,\"\u7B8E\u7B8F\"],\n[\"b980\",\"\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9\",7,\"\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8\"],\n[\"ba40\",\"\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4\",4,\"\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2\",4,\"\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF\",7,\"\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10\",5,\"\u7C17\u7C18\u7C19\"],\n[\"ba80\",\"\u7C1A\",4,\"\u7C20\",5,\"\u7C28\u7C29\u7C2B\",12,\"\u7C39\",5,\"\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56\"],\n[\"bb40\",\"\u7C43\",9,\"\u7C4E\",36,\"\u7C75\",5,\"\u7C7E\",9],\n[\"bb80\",\"\u7C88\u7C8A\",6,\"\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4\",4,\"\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95\"],\n[\"bc40\",\"\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE\",6,\"\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1\",6,\"\u7CE9\",5,\"\u7CF0\",7,\"\u7CF9\u7CFA\u7CFC\",13,\"\u7D0B\",5],\n[\"bc80\",\"\u7D11\",14,\"\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30\",6,\"\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6\"],\n[\"bd40\",\"\u7D37\",54,\"\u7D6F\",7],\n[\"bd80\",\"\u7D78\",32,\"\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78\"],\n[\"be40\",\"\u7D99\",12,\"\u7DA7\",6,\"\u7DAF\",42],\n[\"be80\",\"\u7DDA\",32,\"\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB\"],\n[\"bf40\",\"\u7DFB\",62],\n[\"bf80\",\"\u7E3A\u7E3C\",4,\"\u7E42\",4,\"\u7E48\",21,\"\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080\"],\n[\"c040\",\"\u7E5E\",35,\"\u7E83\",23,\"\u7E9C\u7E9D\u7E9E\"],\n[\"c080\",\"\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B\",6,\"\u7F43\u7F46\",9,\"\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0\"],\n[\"c140\",\"\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63\",4,\"\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82\",7,\"\u7F8B\u7F8D\u7F8F\",4,\"\u7F95\",4,\"\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8\",6,\"\u7FB1\"],\n[\"c180\",\"\u7FB3\",4,\"\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF\",4,\"\u7FD6\u7FD7\u7FD9\",5,\"\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF\"],\n[\"c240\",\"\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4\",6,\"\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B\",5,\"\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057\"],\n[\"c280\",\"\u8059\u805B\",13,\"\u806B\",5,\"\u8072\",11,\"\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B\"],\n[\"c340\",\"\u807E\u8081\u8082\u8085\u8088\u808A\u808D\",5,\"\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7\",4,\"\u80CF\",6,\"\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B\"],\n[\"c380\",\"\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F\",12,\"\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139\",4,\"\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478\"],\n[\"c440\",\"\u8140\",5,\"\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B\",4,\"\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183\",4,\"\u8189\u818B\u818C\u818D\u818E\u8190\u8192\",5,\"\u8199\u819A\u819E\",4,\"\u81A4\u81A5\"],\n[\"c480\",\"\u81A7\u81A9\u81AB\",7,\"\u81B4\",5,\"\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD\",6,\"\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81\"],\n[\"c540\",\"\u81D4\",14,\"\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE\",4,\"\u81F5\",5,\"\u81FD\u81FF\u8203\u8207\",4,\"\u820E\u820F\u8211\u8213\u8215\",5,\"\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F\"],\n[\"c580\",\"\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250\",7,\"\u8259\u825B\u825C\u825D\u825E\u8260\",7,\"\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7\"],\n[\"c640\",\"\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8\"],\n[\"c680\",\"\u82FA\u82FC\",4,\"\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D\",9,\"\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390\"],\n[\"c740\",\"\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A\",4,\"\u8353\u8355\",4,\"\u835D\u8362\u8370\",6,\"\u8379\u837A\u837E\",6,\"\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1\",6,\"\u83AC\u83AD\u83AE\"],\n[\"c780\",\"\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20\"],\n[\"c840\",\"\u83EE\u83EF\u83F3\",4,\"\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412\",5,\"\u8419\u841A\u841B\u841E\",5,\"\u8429\",7,\"\u8432\",5,\"\u8439\u843A\u843B\u843E\",7,\"\u8447\u8448\u8449\"],\n[\"c880\",\"\u844A\",6,\"\u8452\",4,\"\u8458\u845D\u845E\u845F\u8460\u8462\u8464\",4,\"\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1\"],\n[\"c940\",\"\u847D\",4,\"\u8483\u8484\u8485\u8486\u848A\u848D\u848F\",7,\"\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2\",12,\"\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7\"],\n[\"c980\",\"\u84D8\",4,\"\u84DE\u84E1\u84E2\u84E4\u84E7\",4,\"\u84ED\u84EE\u84EF\u84F1\",10,\"\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3\"],\n[\"ca40\",\"\u8503\",8,\"\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522\",8,\"\u852D\",9,\"\u853E\",4,\"\u8544\u8545\u8546\u8547\u854B\",10],\n[\"ca80\",\"\u8557\u8558\u855A\u855B\u855C\u855D\u855F\",4,\"\u8565\u8566\u8567\u8569\",8,\"\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31\"],\n[\"cb40\",\"\u8582\u8583\u8586\u8588\",6,\"\u8590\",10,\"\u859D\",6,\"\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1\",5,\"\u85B8\u85BA\",6,\"\u85C2\",6,\"\u85CA\",4,\"\u85D1\u85D2\"],\n[\"cb80\",\"\u85D4\u85D6\",5,\"\u85DD\",6,\"\u85E5\u85E6\u85E7\u85E8\u85EA\",14,\"\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854\"],\n[\"cc40\",\"\u85F9\u85FA\u85FC\u85FD\u85FE\u8600\",4,\"\u8606\",10,\"\u8612\u8613\u8614\u8615\u8617\",15,\"\u8628\u862A\",13,\"\u8639\u863A\u863B\u863D\u863E\u863F\u8640\"],\n[\"cc80\",\"\u8641\",11,\"\u8652\u8653\u8655\",4,\"\u865B\u865C\u865D\u865F\u8660\u8661\u8663\",7,\"\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3\"],\n[\"cd40\",\"\u866D\u866F\u8670\u8672\",6,\"\u8683\",6,\"\u868E\",4,\"\u8694\u8696\",5,\"\u869E\",4,\"\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB\",4,\"\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC\"],\n[\"cd80\",\"\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01\"],\n[\"ce40\",\"\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740\",6,\"\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A\",5,\"\u8761\u8762\u8766\",7,\"\u876F\u8771\u8772\u8773\u8775\"],\n[\"ce80\",\"\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E\",4,\"\u8794\u8795\u8796\u8798\",6,\"\u87A0\",4,\"\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A\"],\n[\"cf40\",\"\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1\",4,\"\u87C7\u87C8\u87C9\u87CC\",4,\"\u87D4\",6,\"\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF\",9],\n[\"cf80\",\"\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804\",5,\"\u880B\",7,\"\u8814\u8817\u8818\u8819\u881A\u881C\",4,\"\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653\"],\n[\"d040\",\"\u8824\",13,\"\u8833\",5,\"\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846\",5,\"\u884E\",5,\"\u8855\u8856\u8858\u885A\",6,\"\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A\"],\n[\"d080\",\"\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897\",4,\"\u889D\",4,\"\u88A3\u88A5\",5,\"\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384\"],\n[\"d140\",\"\u88AC\u88AE\u88AF\u88B0\u88B2\",4,\"\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA\",4,\"\u88E0\u88E1\u88E6\u88E7\u88E9\",6,\"\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903\",5],\n[\"d180\",\"\u8909\u890B\",4,\"\u8911\u8914\",4,\"\u891C\",4,\"\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476\"],\n[\"d240\",\"\u8938\",8,\"\u8942\u8943\u8945\",24,\"\u8960\",5,\"\u8967\",19,\"\u897C\"],\n[\"d280\",\"\u897D\u897E\u8980\u8982\u8984\u8985\u8987\",26,\"\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690\"],\n[\"d340\",\"\u89A2\",30,\"\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4\",6],\n[\"d380\",\"\u89FB\",4,\"\u8A01\",5,\"\u8A08\",21,\"\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89\"],\n[\"d440\",\"\u8A1E\",31,\"\u8A3F\",8,\"\u8A49\",21],\n[\"d480\",\"\u8A5F\",25,\"\u8A7A\",6,\"\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67\"],\n[\"d540\",\"\u8A81\",7,\"\u8A8B\",7,\"\u8A94\",46],\n[\"d580\",\"\u8AC3\",32,\"\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F\"],\n[\"d640\",\"\u8AE4\",34,\"\u8B08\",27],\n[\"d680\",\"\u8B24\u8B25\u8B27\",30,\"\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51\"],\n[\"d740\",\"\u8B46\",31,\"\u8B67\",4,\"\u8B6D\",25],\n[\"d780\",\"\u8B87\",24,\"\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7\"],\n[\"d840\",\"\u8C38\",8,\"\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D\",7,\"\u8C56\u8C57\u8C58\u8C59\u8C5B\",5,\"\u8C63\",6,\"\u8C6C\",6,\"\u8C74\u8C75\u8C76\u8C77\u8C7B\",6,\"\u8C83\u8C84\u8C86\u8C87\"],\n[\"d880\",\"\u8C88\u8C8B\u8C8D\",6,\"\u8C95\u8C96\u8C97\u8C99\",20,\"\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D\"],\n[\"d940\",\"\u8CAE\",62],\n[\"d980\",\"\u8CED\",32,\"\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC\"],\n[\"da40\",\"\u8D0E\",14,\"\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78\",8,\"\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C\",4,\"\u8D92\u8D93\u8D95\",9,\"\u8DA0\u8DA1\"],\n[\"da80\",\"\u8DA2\u8DA4\",12,\"\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA\"],\n[\"db40\",\"\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE\",6,\"\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15\",7,\"\u8E20\u8E21\u8E24\",4,\"\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E\"],\n[\"db80\",\"\u8E3F\u8E43\u8E45\u8E46\u8E4C\",4,\"\u8E53\",5,\"\u8E5A\",11,\"\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD\"],\n[\"dc40\",\"\u8E73\u8E75\u8E77\",4,\"\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88\",6,\"\u8E91\u8E92\u8E93\u8E95\",6,\"\u8E9D\u8E9F\",11,\"\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3\",6,\"\u8EBB\",7],\n[\"dc80\",\"\u8EC3\",10,\"\u8ECF\",21,\"\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365\"],\n[\"dd40\",\"\u8EE5\",62],\n[\"dd80\",\"\u8F24\",32,\"\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A\"],\n[\"de40\",\"\u8F45\",32,\"\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6\"],\n[\"de80\",\"\u8FC9\",4,\"\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496\"],\n[\"df40\",\"\u9019\u901C\u9023\u9024\u9025\u9027\",5,\"\u9030\",4,\"\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048\",4,\"\u904E\u9054\u9055\u9056\u9059\u905A\u905C\",5,\"\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F\",4,\"\u9076\",6,\"\u907E\u9081\"],\n[\"df80\",\"\u9084\u9085\u9086\u9087\u9089\u908A\u908C\",4,\"\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C\"],\n[\"e040\",\"\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105\",19,\"\u911A\u911B\u911C\"],\n[\"e080\",\"\u911D\u911F\u9120\u9121\u9124\",10,\"\u9130\u9132\",6,\"\u913A\",8,\"\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C\"],\n[\"e140\",\"\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180\",4,\"\u9186\u9188\u918A\u918E\u918F\u9193\",6,\"\u919C\",5,\"\u91A4\",5,\"\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB\"],\n[\"e180\",\"\u91BC\",10,\"\u91C8\u91CB\u91D0\u91D2\",9,\"\u91DD\",8,\"\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA\"],\n[\"e240\",\"\u91E6\",62],\n[\"e280\",\"\u9225\",32,\"\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967\",5,\"\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042\"],\n[\"e340\",\"\u9246\",45,\"\u9275\",16],\n[\"e380\",\"\u9286\",7,\"\u928F\",24,\"\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE\"],\n[\"e440\",\"\u92A8\",5,\"\u92AF\",24,\"\u92C9\",31],\n[\"e480\",\"\u92E9\",32,\"\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1\"],\n[\"e540\",\"\u930A\",51,\"\u933F\",10],\n[\"e580\",\"\u934A\",31,\"\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3\"],\n[\"e640\",\"\u936C\",34,\"\u9390\",27],\n[\"e680\",\"\u93AC\",29,\"\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9\"],\n[\"e740\",\"\u93CE\",7,\"\u93D7\",54],\n[\"e780\",\"\u940E\",32,\"\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21\",6,\"\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F\",4,\"\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C\"],\n[\"e840\",\"\u942F\",14,\"\u943F\",43,\"\u946C\u946D\u946E\u946F\"],\n[\"e880\",\"\u9470\",20,\"\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9\"],\n[\"e940\",\"\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577\",7,\"\u9580\",42],\n[\"e980\",\"\u95AB\",32,\"\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B\"],\n[\"ea40\",\"\u95CC\",27,\"\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623\",6,\"\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657\"],\n[\"ea80\",\"\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D\",4,\"\u9673\u9678\",12,\"\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0\"],\n[\"eb40\",\"\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D\",9,\"\u96A8\",7,\"\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6\",9,\"\u96E1\",6,\"\u96EB\"],\n[\"eb80\",\"\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717\",4,\"\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB\"],\n[\"ec40\",\"\u9721\",8,\"\u972B\u972C\u972E\u972F\u9731\u9733\",4,\"\u973A\u973B\u973C\u973D\u973F\",18,\"\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A\",7],\n[\"ec80\",\"\u9772\u9775\u9777\",4,\"\u977D\",7,\"\u9786\",4,\"\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799\",4,\"\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0\"],\n[\"ed40\",\"\u979E\u979F\u97A1\u97A2\u97A4\",6,\"\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5\",46],\n[\"ed80\",\"\u97E4\u97E5\u97E8\u97EE\",4,\"\u97F4\u97F7\",23,\"\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768\"],\n[\"ee40\",\"\u980F\",62],\n[\"ee80\",\"\u984E\",32,\"\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6\",4,\"\u94BC\u94BD\u94BF\u94C4\u94C8\",6,\"\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA\"],\n[\"ef40\",\"\u986F\",5,\"\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8\",37,\"\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0\",4],\n[\"ef80\",\"\u98E5\u98E6\u98E9\",30,\"\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512\",4,\"\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564\",8,\"\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14\"],\n[\"f040\",\"\u9908\",4,\"\u990E\u990F\u9911\",28,\"\u992F\",26],\n[\"f080\",\"\u994A\",9,\"\u9956\",12,\"\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28\",4,\"\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66\",6,\"\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619\"],\n[\"f140\",\"\u998C\u998E\u999A\",10,\"\u99A6\u99A7\u99A9\",47],\n[\"f180\",\"\u99D9\",32,\"\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883\"],\n[\"f240\",\"\u99FA\",62],\n[\"f280\",\"\u9A39\",32,\"\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2\"],\n[\"f340\",\"\u9A5A\",17,\"\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9\",6,\"\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6\",4,\"\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC\"],\n[\"f380\",\"\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0\",8,\"\u9AFA\u9AFC\",6,\"\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B\"],\n[\"f440\",\"\u9B07\u9B09\",5,\"\u9B10\u9B11\u9B12\u9B14\",10,\"\u9B20\u9B21\u9B22\u9B24\",10,\"\u9B30\u9B31\u9B33\",7,\"\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55\",5],\n[\"f480\",\"\u9B5B\",32,\"\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164\"],\n[\"f540\",\"\u9B7C\",62],\n[\"f580\",\"\u9BBB\",32,\"\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC\"],\n[\"f640\",\"\u9BDC\",62],\n[\"f680\",\"\u9C1B\",32,\"\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85\",5,\"\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E\",5,\"\u9CA5\",4,\"\u9CAB\u9CAD\u9CAE\u9CB0\",7,\"\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB\"],\n[\"f740\",\"\u9C3C\",62],\n[\"f780\",\"\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE\",4,\"\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC\",4,\"\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44\"],\n[\"f840\",\"\u9CE3\",62],\n[\"f880\",\"\u9D22\",32],\n[\"f940\",\"\u9D43\",62],\n[\"f980\",\"\u9D82\",32],\n[\"fa40\",\"\u9DA3\",62],\n[\"fa80\",\"\u9DE2\",32],\n[\"fb40\",\"\u9E03\",27,\"\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74\",9,\"\u9E80\"],\n[\"fb80\",\"\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C\",5,\"\u9E94\",8,\"\u9E9E\u9EA0\",5,\"\u9EA7\u9EA8\u9EA9\u9EAA\"],\n[\"fc40\",\"\u9EAB\",8,\"\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF\",4,\"\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0\",8,\"\u9EFA\u9EFD\u9EFF\",6],\n[\"fc80\",\"\u9F06\",4,\"\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A\",5,\"\u9F21\u9F23\",8,\"\u9F2D\u9F2E\u9F30\u9F31\"],\n[\"fd40\",\"\u9F32\",4,\"\u9F38\u9F3A\u9F3C\u9F3F\",4,\"\u9F45\",10,\"\u9F52\",38],\n[\"fd80\",\"\u9F79\",5,\"\u9F81\u9F82\u9F8D\",11,\"\u9F9C\u9F9D\u9F9E\u9FA1\",4,\"\uF92C\uF979\uF995\uF9E7\uF9F1\"],\n[\"fe40\",\"\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29\"]\n]\n", "[\n[\"a140\",\"\uE4C6\",62],\n[\"a180\",\"\uE505\",32],\n[\"a240\",\"\uE526\",62],\n[\"a280\",\"\uE565\",32],\n[\"a2ab\",\"\uE766\",5],\n[\"a2e3\",\"\u20AC\uE76D\"],\n[\"a2ef\",\"\uE76E\uE76F\"],\n[\"a2fd\",\"\uE770\uE771\"],\n[\"a340\",\"\uE586\",62],\n[\"a380\",\"\uE5C5\",31,\"\u3000\"],\n[\"a440\",\"\uE5E6\",62],\n[\"a480\",\"\uE625\",32],\n[\"a4f4\",\"\uE772\",10],\n[\"a540\",\"\uE646\",62],\n[\"a580\",\"\uE685\",32],\n[\"a5f7\",\"\uE77D\",7],\n[\"a640\",\"\uE6A6\",62],\n[\"a680\",\"\uE6E5\",32],\n[\"a6b9\",\"\uE785\",7],\n[\"a6d9\",\"\uE78D\",6],\n[\"a6ec\",\"\uE794\uE795\"],\n[\"a6f3\",\"\uE796\"],\n[\"a6f6\",\"\uE797\",8],\n[\"a740\",\"\uE706\",62],\n[\"a780\",\"\uE745\",32],\n[\"a7c2\",\"\uE7A0\",14],\n[\"a7f2\",\"\uE7AF\",12],\n[\"a896\",\"\uE7BC\",10],\n[\"a8bc\",\"\uE7C7\"],\n[\"a8bf\",\"\u01F9\"],\n[\"a8c1\",\"\uE7C9\uE7CA\uE7CB\uE7CC\"],\n[\"a8ea\",\"\uE7CD\",20],\n[\"a958\",\"\uE7E2\"],\n[\"a95b\",\"\uE7E3\"],\n[\"a95d\",\"\uE7E4\uE7E5\uE7E6\"],\n[\"a989\",\"\u303E\u2FF0\",11],\n[\"a997\",\"\uE7F4\",12],\n[\"a9f0\",\"\uE801\",14],\n[\"aaa1\",\"\uE000\",93],\n[\"aba1\",\"\uE05E\",93],\n[\"aca1\",\"\uE0BC\",93],\n[\"ada1\",\"\uE11A\",93],\n[\"aea1\",\"\uE178\",93],\n[\"afa1\",\"\uE1D6\",93],\n[\"d7fa\",\"\uE810\",4],\n[\"f8a1\",\"\uE234\",93],\n[\"f9a1\",\"\uE292\",93],\n[\"faa1\",\"\uE2F0\",93],\n[\"fba1\",\"\uE34E\",93],\n[\"fca1\",\"\uE3AC\",93],\n[\"fda1\",\"\uE40A\",93],\n[\"fe50\",\"\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843\"],\n[\"fe80\",\"\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13\",6,\"\u4DAE\uE864\uE468\",93]\n]\n", "{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}", "[\n[\"0\",\"\\u0000\",127],\n[\"8141\",\"\uAC02\uAC03\uAC05\uAC06\uAC0B\",4,\"\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25\",6,\"\uAC2E\uAC32\uAC33\uAC34\"],\n[\"8161\",\"\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41\",9,\"\uAC4C\uAC4E\",5,\"\uAC55\"],\n[\"8181\",\"\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D\",18,\"\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B\",4,\"\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95\",6,\"\uAC9E\uACA2\",5,\"\uACAB\uACAD\uACAE\uACB1\",6,\"\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD\",7,\"\uACD6\uACD8\",7,\"\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7\",4,\"\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07\",4,\"\uAD0E\uAD10\uAD12\uAD13\"],\n[\"8241\",\"\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21\",7,\"\uAD2A\uAD2B\uAD2E\",5],\n[\"8261\",\"\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D\",6,\"\uAD46\uAD48\uAD4A\",5,\"\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57\"],\n[\"8281\",\"\uAD59\",7,\"\uAD62\uAD64\",7,\"\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83\",4,\"\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91\",10,\"\uAD9E\",5,\"\uADA5\",17,\"\uADB8\",7,\"\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9\",6,\"\uADD2\uADD4\",7,\"\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5\",18],\n[\"8341\",\"\uADFA\uADFB\uADFD\uADFE\uAE02\",5,\"\uAE0A\uAE0C\uAE0E\",5,\"\uAE15\",7],\n[\"8361\",\"\uAE1D\",18,\"\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C\"],\n[\"8381\",\"\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57\",4,\"\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71\",6,\"\uAE7A\uAE7E\",5,\"\uAE86\",5,\"\uAE8D\",46,\"\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5\",6,\"\uAECE\uAED2\",5,\"\uAEDA\uAEDB\uAEDD\",8],\n[\"8441\",\"\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE\",5,\"\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD\",8],\n[\"8461\",\"\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11\",18],\n[\"8481\",\"\uAF24\",7,\"\uAF2E\uAF2F\uAF31\uAF33\uAF35\",6,\"\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A\",5,\"\uAF51\",10,\"\uAF5E\",5,\"\uAF66\",18,\"\uAF7A\",5,\"\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89\",6,\"\uAF92\uAF93\uAF94\uAF96\",5,\"\uAF9D\",26,\"\uAFBA\uAFBB\uAFBD\uAFBE\"],\n[\"8541\",\"\uAFBF\uAFC1\",5,\"\uAFCA\uAFCC\uAFCF\",4,\"\uAFD5\",6,\"\uAFDD\",4],\n[\"8561\",\"\uAFE2\",5,\"\uAFEA\",5,\"\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9\",6,\"\uB002\uB003\"],\n[\"8581\",\"\uB005\",6,\"\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015\",6,\"\uB01E\",9,\"\uB029\",26,\"\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E\",29,\"\uB07E\uB07F\uB081\uB082\uB083\uB085\",6,\"\uB08E\uB090\uB092\",5,\"\uB09B\uB09D\uB09E\uB0A3\uB0A4\"],\n[\"8641\",\"\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD\",6,\"\uB0C6\uB0CA\",5,\"\uB0D2\"],\n[\"8661\",\"\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9\",6,\"\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6\",10],\n[\"8681\",\"\uB0F1\",22,\"\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E\",4,\"\uB126\uB127\uB129\uB12A\uB12B\uB12D\",6,\"\uB136\uB13A\",5,\"\uB142\uB143\uB145\uB146\uB147\uB149\",6,\"\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161\",22,\"\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183\",4,\"\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D\"],\n[\"8741\",\"\uB19E\",9,\"\uB1A9\",15],\n[\"8761\",\"\uB1B9\",18,\"\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5\"],\n[\"8781\",\"\uB1D6\",5,\"\uB1DE\uB1E0\",7,\"\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1\",7,\"\uB1FA\uB1FC\uB1FE\",5,\"\uB206\uB207\uB209\uB20A\uB20D\",6,\"\uB216\uB218\uB21A\",5,\"\uB221\",18,\"\uB235\",6,\"\uB23D\",26,\"\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261\",6,\"\uB26A\",4],\n[\"8841\",\"\uB26F\",4,\"\uB276\",5,\"\uB27D\",6,\"\uB286\uB287\uB288\uB28A\",4],\n[\"8861\",\"\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B\",4,\"\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7\"],\n[\"8881\",\"\uB2B8\",15,\"\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3\",4,\"\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309\",6,\"\uB312\uB316\",5,\"\uB31D\",54,\"\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363\"],\n[\"8941\",\"\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379\",6,\"\uB382\uB386\",5,\"\uB38D\"],\n[\"8961\",\"\uB38E\uB38F\uB391\uB392\uB393\uB395\",10,\"\uB3A2\",5,\"\uB3A9\uB3AA\uB3AB\uB3AD\"],\n[\"8981\",\"\uB3AE\",21,\"\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9\",18,\"\uB3FD\",18,\"\uB411\",6,\"\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421\",6,\"\uB42A\uB42C\",7,\"\uB435\",15],\n[\"8a41\",\"\uB445\",10,\"\uB452\uB453\uB455\uB456\uB457\uB459\",6,\"\uB462\uB464\uB466\"],\n[\"8a61\",\"\uB467\",4,\"\uB46D\",18,\"\uB481\uB482\"],\n[\"8a81\",\"\uB483\",4,\"\uB489\",19,\"\uB49E\",5,\"\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD\",7,\"\uB4B6\uB4B8\uB4BA\",5,\"\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9\",6,\"\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6\",5,\"\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7\",4,\"\uB4EE\uB4F0\uB4F2\",5,\"\uB4F9\",26,\"\uB516\uB517\uB519\uB51A\uB51D\"],\n[\"8b41\",\"\uB51E\",5,\"\uB526\uB52B\",4,\"\uB532\uB533\uB535\uB536\uB537\uB539\",6,\"\uB542\uB546\"],\n[\"8b61\",\"\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555\",6,\"\uB55E\uB562\",8],\n[\"8b81\",\"\uB56B\",52,\"\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6\",4,\"\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5\",6,\"\uB5CE\uB5D2\",5,\"\uB5D9\",18,\"\uB5ED\",18],\n[\"8c41\",\"\uB600\",15,\"\uB612\uB613\uB615\uB616\uB617\uB619\",4],\n[\"8c61\",\"\uB61E\",6,\"\uB626\",5,\"\uB62D\",6,\"\uB635\",5],\n[\"8c81\",\"\uB63B\",12,\"\uB649\",26,\"\uB665\uB666\uB667\uB669\",50,\"\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5\",5,\"\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2\",16],\n[\"8d41\",\"\uB6C3\",16,\"\uB6D5\",8],\n[\"8d61\",\"\uB6DE\",17,\"\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA\"],\n[\"8d81\",\"\uB6FB\",4,\"\uB702\uB703\uB704\uB706\",33,\"\uB72A\uB72B\uB72D\uB72E\uB731\",6,\"\uB73A\uB73C\",7,\"\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D\",6,\"\uB756\",9,\"\uB761\uB762\uB763\uB765\uB766\uB767\uB769\",6,\"\uB772\uB774\uB776\",5,\"\uB77E\uB77F\uB781\uB782\uB783\uB785\",6,\"\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E\"],\n[\"8e41\",\"\uB79F\uB7A1\",6,\"\uB7AA\uB7AE\",5,\"\uB7B6\uB7B7\uB7B9\",8],\n[\"8e61\",\"\uB7C2\",4,\"\uB7C8\uB7CA\",19],\n[\"8e81\",\"\uB7DE\",13,\"\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5\",6,\"\uB7FE\uB802\",4,\"\uB80A\uB80B\uB80D\uB80E\uB80F\uB811\",6,\"\uB81A\uB81C\uB81E\",5,\"\uB826\uB827\uB829\uB82A\uB82B\uB82D\",6,\"\uB836\uB83A\",5,\"\uB841\uB842\uB843\uB845\",11,\"\uB852\uB854\",7,\"\uB85E\uB85F\uB861\uB862\uB863\uB865\",6,\"\uB86E\uB870\uB872\",5,\"\uB879\uB87A\uB87B\uB87D\",7],\n[\"8f41\",\"\uB885\",7,\"\uB88E\",17],\n[\"8f61\",\"\uB8A0\",7,\"\uB8A9\",6,\"\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9\",4],\n[\"8f81\",\"\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6\",5,\"\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5\",7,\"\uB8DE\uB8E0\uB8E2\",5,\"\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1\",6,\"\uB8FA\uB8FC\uB8FE\",5,\"\uB905\",18,\"\uB919\",6,\"\uB921\",26,\"\uB93E\uB93F\uB941\uB942\uB943\uB945\",6,\"\uB94D\uB94E\uB950\uB952\",5],\n[\"9041\",\"\uB95A\uB95B\uB95D\uB95E\uB95F\uB961\",6,\"\uB96A\uB96C\uB96E\",5,\"\uB976\uB977\uB979\uB97A\uB97B\uB97D\"],\n[\"9061\",\"\uB97E\",5,\"\uB986\uB988\uB98B\uB98C\uB98F\",15],\n[\"9081\",\"\uB99F\",12,\"\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5\",6,\"\uB9BE\uB9C0\uB9C2\",5,\"\uB9CA\uB9CB\uB9CD\uB9D3\",4,\"\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED\",6,\"\uB9F6\uB9FB\",4,\"\uBA02\",5,\"\uBA09\",11,\"\uBA16\",33,\"\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46\"],\n[\"9141\",\"\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D\",6,\"\uBA66\uBA6A\",5],\n[\"9161\",\"\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79\",9,\"\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D\",5],\n[\"9181\",\"\uBA93\",20,\"\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3\",4,\"\uBABA\uBABC\uBABE\",5,\"\uBAC5\uBAC6\uBAC7\uBAC9\",14,\"\uBADA\",33,\"\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05\",7,\"\uBB0E\uBB10\uBB12\",5,\"\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21\",6],\n[\"9241\",\"\uBB28\uBB2A\uBB2C\",7,\"\uBB37\uBB39\uBB3A\uBB3F\",4,\"\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52\"],\n[\"9261\",\"\uBB53\uBB55\uBB56\uBB57\uBB59\",7,\"\uBB62\uBB64\",7,\"\uBB6D\",4],\n[\"9281\",\"\uBB72\",21,\"\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91\",18,\"\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD\",6,\"\uBBB5\uBBB6\uBBB8\",7,\"\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9\",6,\"\uBBD1\uBBD2\uBBD4\",35,\"\uBBFA\uBBFB\uBBFD\uBBFE\uBC01\"],\n[\"9341\",\"\uBC03\",4,\"\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35\"],\n[\"9361\",\"\uBC36\uBC37\uBC39\",6,\"\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51\",8],\n[\"9381\",\"\uBC5A\uBC5B\uBC5C\uBC5E\",37,\"\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F\",4,\"\uBC96\uBC98\uBC9B\",4,\"\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9\",6,\"\uBCB2\uBCB6\",5,\"\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5\",7,\"\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD\",22,\"\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD\"],\n[\"9441\",\"\uBCFE\",5,\"\uBD06\uBD08\uBD0A\",5,\"\uBD11\uBD12\uBD13\uBD15\",8],\n[\"9461\",\"\uBD1E\",5,\"\uBD25\",6,\"\uBD2D\",12],\n[\"9481\",\"\uBD3A\",5,\"\uBD41\",6,\"\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51\",6,\"\uBD5A\",9,\"\uBD65\uBD66\uBD67\uBD69\",22,\"\uBD82\uBD83\uBD85\uBD86\uBD8B\",4,\"\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D\",6,\"\uBDA5\",10,\"\uBDB1\",6,\"\uBDB9\",24],\n[\"9541\",\"\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD\",11,\"\uBDEA\",5,\"\uBDF1\"],\n[\"9561\",\"\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9\",6,\"\uBE01\uBE02\uBE04\uBE06\",5,\"\uBE0E\uBE0F\uBE11\uBE12\uBE13\"],\n[\"9581\",\"\uBE15\",6,\"\uBE1E\uBE20\",35,\"\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F\",4,\"\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B\",4,\"\uBE72\uBE76\",4,\"\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85\",6,\"\uBE8E\uBE92\",5,\"\uBE9A\",13,\"\uBEA9\",14],\n[\"9641\",\"\uBEB8\",23,\"\uBED2\uBED3\"],\n[\"9661\",\"\uBED5\uBED6\uBED9\",6,\"\uBEE1\uBEE2\uBEE6\",5,\"\uBEED\",8],\n[\"9681\",\"\uBEF6\",10,\"\uBF02\",5,\"\uBF0A\",13,\"\uBF1A\uBF1E\",33,\"\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49\",6,\"\uBF52\uBF53\uBF54\uBF56\",44],\n[\"9741\",\"\uBF83\",16,\"\uBF95\",8],\n[\"9761\",\"\uBF9E\",17,\"\uBFB1\",7],\n[\"9781\",\"\uBFB9\",11,\"\uBFC6\",5,\"\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5\",6,\"\uBFDD\uBFDE\uBFE0\uBFE2\",89,\"\uC03D\uC03E\uC03F\"],\n[\"9841\",\"\uC040\",16,\"\uC052\",5,\"\uC059\uC05A\uC05B\"],\n[\"9861\",\"\uC05D\uC05E\uC05F\uC061\",6,\"\uC06A\",15],\n[\"9881\",\"\uC07A\",21,\"\uC092\uC093\uC095\uC096\uC097\uC099\",6,\"\uC0A2\uC0A4\uC0A6\",5,\"\uC0AE\uC0B1\uC0B2\uC0B7\",4,\"\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1\",6,\"\uC0DA\uC0DE\",5,\"\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED\",6,\"\uC0F6\uC0F8\uC0FA\",5,\"\uC101\uC102\uC103\uC105\uC106\uC107\uC109\",6,\"\uC111\uC112\uC113\uC114\uC116\",5,\"\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E\"],\n[\"9941\",\"\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141\",6,\"\uC14A\uC14E\",5,\"\uC156\uC157\"],\n[\"9961\",\"\uC159\uC15A\uC15B\uC15D\",6,\"\uC166\uC16A\",5,\"\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B\"],\n[\"9981\",\"\uC17C\",8,\"\uC186\",5,\"\uC18F\uC191\uC192\uC193\uC195\uC197\",4,\"\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1\",11,\"\uC1BE\",5,\"\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD\",6,\"\uC1D5\uC1D6\uC1D9\",6,\"\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9\",6,\"\uC1F2\uC1F4\",7,\"\uC1FE\uC1FF\uC201\uC202\uC203\uC205\",6,\"\uC20E\uC210\uC212\",5,\"\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223\"],\n[\"9a41\",\"\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235\",16],\n[\"9a61\",\"\uC246\uC247\uC249\",6,\"\uC252\uC253\uC255\uC256\uC257\uC259\",6,\"\uC261\uC262\uC263\uC264\uC266\"],\n[\"9a81\",\"\uC267\",4,\"\uC26E\uC26F\uC271\uC272\uC273\uC275\",6,\"\uC27E\uC280\uC282\",5,\"\uC28A\",5,\"\uC291\",6,\"\uC299\uC29A\uC29C\uC29E\",5,\"\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE\",5,\"\uC2B6\uC2B8\uC2BA\",33,\"\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5\",5,\"\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301\",6,\"\uC30A\uC30B\uC30E\uC30F\"],\n[\"9b41\",\"\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D\",6,\"\uC326\uC327\uC32A\",8],\n[\"9b61\",\"\uC333\",17,\"\uC346\",7],\n[\"9b81\",\"\uC34E\",25,\"\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373\",4,\"\uC37A\uC37B\uC37E\",5,\"\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D\",50,\"\uC3C1\",22,\"\uC3DA\"],\n[\"9c41\",\"\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3\",4,\"\uC3EA\uC3EB\uC3EC\uC3EE\",5,\"\uC3F6\uC3F7\uC3F9\",5],\n[\"9c61\",\"\uC3FF\",8,\"\uC409\",6,\"\uC411\",9],\n[\"9c81\",\"\uC41B\",8,\"\uC425\",6,\"\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435\",6,\"\uC43E\",9,\"\uC449\",26,\"\uC466\uC467\uC469\uC46A\uC46B\uC46D\",6,\"\uC476\uC477\uC478\uC47A\",5,\"\uC481\",18,\"\uC495\",6,\"\uC49D\",12],\n[\"9d41\",\"\uC4AA\",13,\"\uC4B9\uC4BA\uC4BB\uC4BD\",8],\n[\"9d61\",\"\uC4C6\",25],\n[\"9d81\",\"\uC4E0\",8,\"\uC4EA\",5,\"\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502\",9,\"\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515\",6,\"\uC51D\",10,\"\uC52A\uC52B\uC52D\uC52E\uC52F\uC531\",6,\"\uC53A\uC53C\uC53E\",5,\"\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569\",6,\"\uC572\uC576\",5,\"\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594\"],\n[\"9e41\",\"\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1\",7,\"\uC5AA\",9,\"\uC5B6\"],\n[\"9e61\",\"\uC5B7\uC5BA\uC5BF\",4,\"\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9\",6,\"\uC5E2\uC5E4\uC5E6\uC5E7\"],\n[\"9e81\",\"\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611\",6,\"\uC61A\uC61D\",6,\"\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649\",6,\"\uC652\uC656\",5,\"\uC65E\uC65F\uC661\",10,\"\uC66D\uC66E\uC670\uC672\",5,\"\uC67A\uC67B\uC67D\uC67E\uC67F\uC681\",6,\"\uC68A\uC68C\uC68E\",5,\"\uC696\uC697\uC699\uC69A\uC69B\uC69D\",6,\"\uC6A6\"],\n[\"9f41\",\"\uC6A8\uC6AA\",5,\"\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB\",4,\"\uC6C2\uC6C4\uC6C6\",5,\"\uC6CE\"],\n[\"9f61\",\"\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5\",6,\"\uC6DE\uC6DF\uC6E2\",5,\"\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2\"],\n[\"9f81\",\"\uC6F3\",4,\"\uC6FA\uC6FB\uC6FC\uC6FE\",5,\"\uC706\uC707\uC709\uC70A\uC70B\uC70D\",6,\"\uC716\uC718\uC71A\",5,\"\uC722\uC723\uC725\uC726\uC727\uC729\",6,\"\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745\",4,\"\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761\",6,\"\uC769\uC76A\uC76C\",7,\"\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B\",4,\"\uC7A2\uC7A7\",4,\"\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7\"],\n[\"a041\",\"\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2\",5,\"\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1\",6,\"\uC7D9\uC7DA\uC7DB\uC7DC\"],\n[\"a061\",\"\uC7DE\",5,\"\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED\",13],\n[\"a081\",\"\uC7FB\",4,\"\uC802\uC803\uC805\uC806\uC807\uC809\uC80B\",4,\"\uC812\uC814\uC817\",4,\"\uC81E\uC81F\uC821\uC822\uC823\uC825\",6,\"\uC82E\uC830\uC832\",5,\"\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841\",6,\"\uC84A\uC84B\uC84E\",5,\"\uC855\",26,\"\uC872\uC873\uC875\uC876\uC877\uC879\uC87B\",4,\"\uC882\uC884\uC888\uC889\uC88A\uC88E\",5,\"\uC895\",7,\"\uC89E\uC8A0\uC8A2\uC8A3\uC8A4\"],\n[\"a141\",\"\uC8A5\uC8A6\uC8A7\uC8A9\",18,\"\uC8BE\uC8BF\uC8C0\uC8C1\"],\n[\"a161\",\"\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD\",6,\"\uC8D6\uC8D8\uC8DA\",5,\"\uC8E2\uC8E3\uC8E5\"],\n[\"a181\",\"\uC8E6\",14,\"\uC8F6\",5,\"\uC8FE\uC8FF\uC901\uC902\uC903\uC907\",4,\"\uC90E\u3000\u3001\u3002\u00B7\u2025\u2026\u00A8\u3003\u00AD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",9,\"\u00B1\u00D7\u00F7\u2260\u2264\u2265\u221E\u2234\u00B0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u00A7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2\"],\n[\"a241\",\"\uC910\uC912\",5,\"\uC919\",18],\n[\"a261\",\"\uC92D\",6,\"\uC935\",18],\n[\"a281\",\"\uC948\",7,\"\uC952\uC953\uC955\uC956\uC957\uC959\",6,\"\uC962\uC964\",7,\"\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\u00B4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\u00B8\u02DB\u00A1\u00BF\u02D0\u222E\u2211\u220F\u00A4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\u00B6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\u00AE\"],\n[\"a341\",\"\uC971\uC972\uC973\uC975\",6,\"\uC97D\",10,\"\uC98A\uC98B\uC98D\uC98E\uC98F\"],\n[\"a361\",\"\uC991\",6,\"\uC99A\uC99C\uC99E\",16],\n[\"a381\",\"\uC9AF\",16,\"\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB\",4,\"\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01\",58,\"\uFFE6\uFF3D\",32,\"\uFFE3\"],\n[\"a441\",\"\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2\",5,\"\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04\"],\n[\"a461\",\"\uCA05\uCA06\uCA07\uCA0A\uCA0E\",5,\"\uCA15\uCA16\uCA17\uCA19\",12],\n[\"a481\",\"\uCA26\uCA27\uCA28\uCA2A\",28,\"\u3131\",93],\n[\"a541\",\"\uCA47\",4,\"\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55\",6,\"\uCA5E\uCA62\",5,\"\uCA69\uCA6A\"],\n[\"a561\",\"\uCA6B\",17,\"\uCA7E\",5,\"\uCA85\uCA86\"],\n[\"a581\",\"\uCA87\",16,\"\uCA99\",14,\"\u2170\",9],\n[\"a5b0\",\"\u2160\",9],\n[\"a5c1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a5e1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a641\",\"\uCAA8\",19,\"\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5\"],\n[\"a661\",\"\uCAC6\",5,\"\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA\",5,\"\uCAE1\",6],\n[\"a681\",\"\uCAE8\uCAE9\uCAEA\uCAEB\uCAED\",6,\"\uCAF5\",18,\"\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543\",7],\n[\"a741\",\"\uCB0B\",4,\"\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19\",6,\"\uCB22\",7],\n[\"a761\",\"\uCB2A\",22,\"\uCB42\uCB43\uCB44\"],\n[\"a781\",\"\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51\",6,\"\uCB5A\uCB5B\uCB5C\uCB5E\",5,\"\uCB65\",7,\"\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399\",9,\"\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0\",9,\"\u3380\",4,\"\u33BA\",5,\"\u3390\",4,\"\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6\"],\n[\"a841\",\"\uCB6D\",10,\"\uCB7A\",14],\n[\"a861\",\"\uCB89\",18,\"\uCB9D\",6],\n[\"a881\",\"\uCBA4\",19,\"\uCBB9\",11,\"\u00C6\u00D0\u00AA\u0126\"],\n[\"a8a6\",\"\u0132\"],\n[\"a8a8\",\"\u013F\u0141\u00D8\u0152\u00BA\u00DE\u0166\u014A\"],\n[\"a8b1\",\"\u3260\",27,\"\u24D0\",25,\"\u2460\",14,\"\u00BD\u2153\u2154\u00BC\u00BE\u215B\u215C\u215D\u215E\"],\n[\"a941\",\"\uCBC5\",14,\"\uCBD5\",10],\n[\"a961\",\"\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA\",18],\n[\"a981\",\"\uCBFD\",14,\"\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15\",6,\"\uCC1E\uCC1F\uCC20\uCC23\uCC24\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0140\u0142\u00F8\u0153\u00DF\u00FE\u0167\u014B\u0149\u3200\",27,\"\u249C\",25,\"\u2474\",14,\"\u00B9\u00B2\u00B3\u2074\u207F\u2081\u2082\u2083\u2084\"],\n[\"aa41\",\"\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31\",6,\"\uCC3A\uCC3F\",4,\"\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E\"],\n[\"aa61\",\"\uCC4F\",4,\"\uCC56\uCC5A\",5,\"\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69\",6,\"\uCC71\uCC72\"],\n[\"aa81\",\"\uCC73\uCC74\uCC76\",29,\"\u3041\",82],\n[\"ab41\",\"\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1\",6,\"\uCCAA\uCCAE\",5,\"\uCCB6\uCCB7\uCCB9\"],\n[\"ab61\",\"\uCCBA\uCCBB\uCCBD\",6,\"\uCCC6\uCCC8\uCCCA\",5,\"\uCCD1\uCCD2\uCCD3\uCCD5\",5],\n[\"ab81\",\"\uCCDB\",8,\"\uCCE5\",6,\"\uCCED\uCCEE\uCCEF\uCCF1\",12,\"\u30A1\",85],\n[\"ac41\",\"\uCCFE\uCCFF\uCD00\uCD02\",5,\"\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11\",6,\"\uCD1A\uCD1C\uCD1E\uCD1F\uCD20\"],\n[\"ac61\",\"\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D\",11,\"\uCD3A\",4],\n[\"ac81\",\"\uCD3F\",28,\"\uCD5D\uCD5E\uCD5F\u0410\",5,\"\u0401\u0416\",25],\n[\"acd1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"ad41\",\"\uCD61\uCD62\uCD63\uCD65\",6,\"\uCD6E\uCD70\uCD72\",5,\"\uCD79\",7],\n[\"ad61\",\"\uCD81\",6,\"\uCD89\",10,\"\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F\"],\n[\"ad81\",\"\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA\",5,\"\uCDB1\",18,\"\uCDC5\"],\n[\"ae41\",\"\uCDC6\",5,\"\uCDCD\uCDCE\uCDCF\uCDD1\",16],\n[\"ae61\",\"\uCDE2\",5,\"\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1\",6,\"\uCDFA\uCDFC\uCDFE\",4],\n[\"ae81\",\"\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D\",6,\"\uCE15\uCE16\uCE17\uCE18\uCE1A\",5,\"\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B\"],\n[\"af41\",\"\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36\",19],\n[\"af61\",\"\uCE4A\",13,\"\uCE5A\uCE5B\uCE5D\uCE5E\uCE62\",5,\"\uCE6A\uCE6C\"],\n[\"af81\",\"\uCE6E\",5,\"\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D\",6,\"\uCE86\uCE88\uCE8A\",5,\"\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99\"],\n[\"b041\",\"\uCE9A\",5,\"\uCEA2\uCEA6\",5,\"\uCEAE\",12],\n[\"b061\",\"\uCEBB\",5,\"\uCEC2\",19],\n[\"b081\",\"\uCED6\",13,\"\uCEE6\uCEE7\uCEE9\uCEEA\uCEED\",6,\"\uCEF6\uCEFA\",5,\"\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10\",7,\"\uAC19\",4,\"\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06\"],\n[\"b141\",\"\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09\",6,\"\uCF12\uCF14\uCF16\",5,\"\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23\"],\n[\"b161\",\"\uCF25\",6,\"\uCF2E\uCF32\",5,\"\uCF39\",11],\n[\"b181\",\"\uCF45\",14,\"\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D\",6,\"\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78\"],\n[\"b241\",\"\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79\",6,\"\uCF81\uCF82\uCF83\uCF84\uCF86\",5,\"\uCF8D\"],\n[\"b261\",\"\uCF8E\",18,\"\uCFA2\",5,\"\uCFA9\"],\n[\"b281\",\"\uCFAA\",5,\"\uCFB1\",18,\"\uCFC5\",6,\"\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059\"],\n[\"b341\",\"\uCFCC\",19,\"\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9\"],\n[\"b361\",\"\uCFEA\",5,\"\uCFF2\uCFF4\uCFF6\",5,\"\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005\",5],\n[\"b381\",\"\uD00B\",5,\"\uD012\",5,\"\uD019\",19,\"\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB\",4,\"\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD\"],\n[\"b441\",\"\uD02E\",5,\"\uD036\uD037\uD039\uD03A\uD03B\uD03D\",6,\"\uD046\uD048\uD04A\",5],\n[\"b461\",\"\uD051\uD052\uD053\uD055\uD056\uD057\uD059\",6,\"\uD061\",10,\"\uD06E\uD06F\"],\n[\"b481\",\"\uD071\uD072\uD073\uD075\",6,\"\uD07E\uD07F\uD080\uD082\",18,\"\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB\",4,\"\uB2F3\uB2F4\uB2F5\uB2F7\",4,\"\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365\"],\n[\"b541\",\"\uD095\",14,\"\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD\",5],\n[\"b561\",\"\uD0B3\uD0B6\uD0B8\uD0BA\",5,\"\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA\",5,\"\uD0D2\uD0D6\",4],\n[\"b581\",\"\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5\",6,\"\uD0EE\uD0F2\",5,\"\uD0F9\",11,\"\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538\"],\n[\"b641\",\"\uD105\",7,\"\uD10E\",17],\n[\"b661\",\"\uD120\",15,\"\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E\"],\n[\"b681\",\"\uD13F\uD142\uD146\",5,\"\uD14E\uD14F\uD151\uD152\uD153\uD155\",6,\"\uD15E\uD160\uD162\",5,\"\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797\"],\n[\"b741\",\"\uD16E\",13,\"\uD17D\",6,\"\uD185\uD186\uD187\uD189\uD18A\"],\n[\"b761\",\"\uD18B\",20,\"\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7\"],\n[\"b781\",\"\uD1A9\",6,\"\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1\",14,\"\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969\"],\n[\"b841\",\"\uD1D0\",7,\"\uD1D9\",17],\n[\"b861\",\"\uD1EB\",8,\"\uD1F5\uD1F6\uD1F7\uD1F9\",13],\n[\"b881\",\"\uD208\uD20A\",5,\"\uD211\",24,\"\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE\",4,\"\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC\"],\n[\"b941\",\"\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235\",6,\"\uD23E\uD240\uD242\",5,\"\uD249\uD24A\uD24B\uD24C\"],\n[\"b961\",\"\uD24D\",14,\"\uD25D\",6,\"\uD265\uD266\uD267\uD268\"],\n[\"b981\",\"\uD269\",22,\"\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14\",4,\"\uBC1B\",4,\"\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97\"],\n[\"ba41\",\"\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296\",5,\"\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5\",6,\"\uD2AD\"],\n[\"ba61\",\"\uD2AE\uD2AF\uD2B0\uD2B2\",5,\"\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3\",4,\"\uD2CA\uD2CC\",5],\n[\"ba81\",\"\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD\",6,\"\uD2E6\",9,\"\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64\"],\n[\"bb41\",\"\uD2FB\",4,\"\uD302\uD304\uD306\",5,\"\uD30F\uD311\uD312\uD313\uD315\uD317\",4,\"\uD31E\uD322\uD323\"],\n[\"bb61\",\"\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331\",6,\"\uD33A\uD33E\",5,\"\uD346\uD347\uD348\uD349\"],\n[\"bb81\",\"\uD34A\",31,\"\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4\"],\n[\"bc41\",\"\uD36A\",17,\"\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387\"],\n[\"bc61\",\"\uD388\uD389\uD38A\uD38B\uD38E\uD392\",5,\"\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1\",6,\"\uD3AA\uD3AC\uD3AE\"],\n[\"bc81\",\"\uD3AF\",4,\"\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD\",6,\"\uD3C6\uD3C7\uD3CA\",5,\"\uD3D1\",5,\"\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C\",4,\"\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D\"],\n[\"bd41\",\"\uD3D7\uD3D9\",7,\"\uD3E2\uD3E4\",7,\"\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7\"],\n[\"bd61\",\"\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402\",5,\"\uD409\",13],\n[\"bd81\",\"\uD417\",5,\"\uD41E\",25,\"\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430\"],\n[\"be41\",\"\uD438\",7,\"\uD441\uD442\uD443\uD445\",14],\n[\"be61\",\"\uD454\",7,\"\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465\",7,\"\uD46E\uD470\uD471\uD472\"],\n[\"be81\",\"\uD473\",4,\"\uD47A\uD47B\uD47D\uD47E\uD481\uD483\",4,\"\uD48A\uD48C\uD48E\",5,\"\uD495\",8,\"\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4\",6,\"\uC5CC\uC5CE\"],\n[\"bf41\",\"\uD49E\",10,\"\uD4AA\",14],\n[\"bf61\",\"\uD4B9\",18,\"\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5\"],\n[\"bf81\",\"\uD4D6\",5,\"\uD4DD\uD4DE\uD4E0\",7,\"\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1\",6,\"\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC\",5,\"\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8\"],\n[\"c041\",\"\uD4FE\",5,\"\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D\",6,\"\uD516\uD518\",5],\n[\"c061\",\"\uD51E\",25],\n[\"c081\",\"\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545\",6,\"\uD54E\uD550\uD552\",5,\"\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751\",7,\"\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A\"],\n[\"c141\",\"\uD564\uD566\uD567\uD56A\uD56C\uD56E\",5,\"\uD576\uD577\uD579\uD57A\uD57B\uD57D\",6,\"\uD586\uD58A\uD58B\"],\n[\"c161\",\"\uD58C\uD58D\uD58E\uD58F\uD591\",19,\"\uD5A6\uD5A7\"],\n[\"c181\",\"\uD5A8\",31,\"\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3\"],\n[\"c241\",\"\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3\",4,\"\uD5DA\uD5DC\uD5DE\",5,\"\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE\"],\n[\"c261\",\"\uD5EF\",4,\"\uD5F6\uD5F8\uD5FA\",5,\"\uD602\uD603\uD605\uD606\uD607\uD609\",6,\"\uD612\"],\n[\"c281\",\"\uD616\",5,\"\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625\",7,\"\uD62E\",9,\"\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B\"],\n[\"c341\",\"\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D\",4],\n[\"c361\",\"\uD662\",4,\"\uD668\uD66A\",5,\"\uD672\uD673\uD675\",11],\n[\"c381\",\"\uD681\uD682\uD684\uD686\",5,\"\uD68E\uD68F\uD691\uD692\uD693\uD695\",7,\"\uD69E\uD6A0\uD6A2\",5,\"\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35\"],\n[\"c441\",\"\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1\",7,\"\uD6BA\uD6BC\",7,\"\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB\"],\n[\"c461\",\"\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA\",5,\"\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9\",4],\n[\"c481\",\"\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6\",5,\"\uD6FE\uD6FF\uD701\uD702\uD703\uD705\",11,\"\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C\"],\n[\"c541\",\"\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721\",6,\"\uD72A\uD72C\uD72E\",5,\"\uD736\uD737\uD739\"],\n[\"c561\",\"\uD73A\uD73B\uD73D\",6,\"\uD745\uD746\uD748\uD74A\",5,\"\uD752\uD753\uD755\uD75A\",4],\n[\"c581\",\"\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775\",6,\"\uD77E\uD77F\uD780\uD782\",5,\"\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C\"],\n[\"c641\",\"\uD78D\uD78E\uD78F\uD791\",6,\"\uD79A\uD79C\uD79E\",5],\n[\"c6a1\",\"\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401\"],\n[\"c7a1\",\"\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620\"],\n[\"c8a1\",\"\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D\"],\n[\"caa1\",\"\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95\"],\n[\"cba1\",\"\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2\"],\n[\"cca1\",\"\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0\"],\n[\"cda1\",\"\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC\"],\n[\"cea1\",\"\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE\"],\n[\"cfa1\",\"\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4\"],\n[\"d0a1\",\"\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3\"],\n[\"d1a1\",\"\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E\",5,\"\u90A3\uF914\",4,\"\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925\"],\n[\"d2a1\",\"\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928\",4,\"\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933\",5,\"\u99D1\uF939\",10,\"\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A\",7,\"\u5AE9\u8A25\u677B\u7D10\uF952\",5,\"\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336\"],\n[\"d3a1\",\"\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843\"],\n[\"d4a1\",\"\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85\"],\n[\"d5a1\",\"\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23\"],\n[\"d6a1\",\"\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC\"],\n[\"d7a1\",\"\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C\"],\n[\"d8a1\",\"\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5\"],\n[\"d9a1\",\"\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587\"],\n[\"daa1\",\"\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51\"],\n[\"dba1\",\"\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656\"],\n[\"dca1\",\"\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66\"],\n[\"dda1\",\"\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5\"],\n[\"dea1\",\"\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A\"],\n[\"dfa1\",\"\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72\"],\n[\"e0a1\",\"\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C\"],\n[\"e1a1\",\"\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101\"],\n[\"e2a1\",\"\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27\"],\n[\"e3a1\",\"\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81\"],\n[\"e4a1\",\"\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D\"],\n[\"e5a1\",\"\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982\"],\n[\"e6a1\",\"\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2\"],\n[\"e7a1\",\"\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3\"],\n[\"e8a1\",\"\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1\"],\n[\"e9a1\",\"\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553\"],\n[\"eaa1\",\"\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB\"],\n[\"eba1\",\"\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC\"],\n[\"eca1\",\"\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344\"],\n[\"eda1\",\"\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577\"],\n[\"eea1\",\"\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1\"],\n[\"efa1\",\"\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756\"],\n[\"f0a1\",\"\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B\"],\n[\"f1a1\",\"\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA\"],\n[\"f2a1\",\"\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F\"],\n[\"f3a1\",\"\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56\"],\n[\"f4a1\",\"\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2\"],\n[\"f5a1\",\"\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403\"],\n[\"f6a1\",\"\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17\"],\n[\"f7a1\",\"\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211\"],\n[\"f8a1\",\"\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43\"],\n[\"f9a1\",\"\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A\"],\n[\"faa1\",\"\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B\"],\n[\"fba1\",\"\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575\"],\n[\"fca1\",\"\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6\"],\n[\"fda1\",\"\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"a140\",\"\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\u00B7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A\"],\n[\"a1a1\",\"\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\u00A7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\u00AF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\u00D7\u00F7\u00B1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62\",4,\"\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F\"],\n[\"a240\",\"\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\u00B0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581\",7,\"\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D\"],\n[\"a2a1\",\"\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10\",9,\"\u2160\",9,\"\u3021\",8,\"\u5341\u5344\u5345\uFF21\",25,\"\uFF41\",21],\n[\"a340\",\"\uFF57\uFF58\uFF59\uFF5A\u0391\",16,\"\u03A3\",6,\"\u03B1\",16,\"\u03C3\",6,\"\u3105\",10],\n[\"a3a1\",\"\u3110\",25,\"\u02D9\u02C9\u02CA\u02C7\u02CB\"],\n[\"a3e1\",\"\u20AC\"],\n[\"a440\",\"\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D\"],\n[\"a4a1\",\"\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19\"],\n[\"a540\",\"\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916\"],\n[\"a5a1\",\"\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168\"],\n[\"a640\",\"\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74\"],\n[\"a6a1\",\"\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63\"],\n[\"a740\",\"\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D\"],\n[\"a7a1\",\"\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760\"],\n[\"a840\",\"\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292\"],\n[\"a8a1\",\"\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475\"],\n[\"a940\",\"\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45\"],\n[\"a9a1\",\"\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A\"],\n[\"aa40\",\"\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0\"],\n[\"aaa1\",\"\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644\"],\n[\"ab40\",\"\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1\"],\n[\"aba1\",\"\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7\"],\n[\"ac40\",\"\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17\"],\n[\"aca1\",\"\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004\"],\n[\"ad40\",\"\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5\"],\n[\"ada1\",\"\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA\"],\n[\"ae40\",\"\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059\"],\n[\"aea1\",\"\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93\"],\n[\"af40\",\"\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837\"],\n[\"afa1\",\"\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343\"],\n[\"b040\",\"\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661\"],\n[\"b0a1\",\"\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40\"],\n[\"b140\",\"\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD\"],\n[\"b1a1\",\"\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA\"],\n[\"b240\",\"\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6\"],\n[\"b2a1\",\"\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C\"],\n[\"b340\",\"\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014\"],\n[\"b3a1\",\"\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960\"],\n[\"b440\",\"\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD\"],\n[\"b4a1\",\"\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB\"],\n[\"b540\",\"\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98\"],\n[\"b5a1\",\"\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41\"],\n[\"b640\",\"\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591\"],\n[\"b6a1\",\"\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC\"],\n[\"b740\",\"\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D\"],\n[\"b7a1\",\"\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763\"],\n[\"b840\",\"\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B\"],\n[\"b8a1\",\"\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A\"],\n[\"b940\",\"\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4\"],\n[\"b9a1\",\"\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147\"],\n[\"ba40\",\"\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22\"],\n[\"baa1\",\"\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC\"],\n[\"bb40\",\"\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4\"],\n[\"bba1\",\"\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC\"],\n[\"bc40\",\"\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182\"],\n[\"bca1\",\"\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483\"],\n[\"bd40\",\"\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF\"],\n[\"bda1\",\"\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E\"],\n[\"be40\",\"\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09\"],\n[\"bea1\",\"\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1\"],\n[\"bf40\",\"\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A\"],\n[\"bfa1\",\"\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A\"],\n[\"c040\",\"\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687\"],\n[\"c0a1\",\"\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC\"],\n[\"c140\",\"\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA\"],\n[\"c1a1\",\"\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01\"],\n[\"c240\",\"\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658\"],\n[\"c2a1\",\"\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6\"],\n[\"c340\",\"\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378\"],\n[\"c3a1\",\"\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E\"],\n[\"c440\",\"\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C\"],\n[\"c4a1\",\"\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74\"],\n[\"c540\",\"\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C\"],\n[\"c5a1\",\"\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92\"],\n[\"c640\",\"\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72\"],\n[\"c940\",\"\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15\"],\n[\"c9a1\",\"\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B\"],\n[\"ca40\",\"\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418\"],\n[\"caa1\",\"\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747\"],\n[\"cb40\",\"\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293\"],\n[\"cba1\",\"\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762\"],\n[\"cc40\",\"\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B\"],\n[\"cca1\",\"\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2\"],\n[\"cd40\",\"\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA\"],\n[\"cda1\",\"\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF\"],\n[\"ce40\",\"\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB\"],\n[\"cea1\",\"\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA\"],\n[\"cf40\",\"\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42\"],\n[\"cfa1\",\"\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80\"],\n[\"d040\",\"\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA\"],\n[\"d0a1\",\"\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1\"],\n[\"d140\",\"\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067\"],\n[\"d1a1\",\"\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4\"],\n[\"d240\",\"\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278\"],\n[\"d2a1\",\"\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10\"],\n[\"d340\",\"\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322\"],\n[\"d3a1\",\"\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150\"],\n[\"d440\",\"\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545\"],\n[\"d4a1\",\"\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F\"],\n[\"d540\",\"\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F\"],\n[\"d5a1\",\"\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9\"],\n[\"d640\",\"\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF\"],\n[\"d6a1\",\"\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F\"],\n[\"d740\",\"\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7\"],\n[\"d7a1\",\"\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA\"],\n[\"d840\",\"\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837\"],\n[\"d8a1\",\"\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114\"],\n[\"d940\",\"\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2\"],\n[\"d9a1\",\"\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E\"],\n[\"da40\",\"\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416\"],\n[\"daa1\",\"\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65\"],\n[\"db40\",\"\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3\"],\n[\"dba1\",\"\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA\"],\n[\"dc40\",\"\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688\"],\n[\"dca1\",\"\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6\"],\n[\"dd40\",\"\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424\"],\n[\"dda1\",\"\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC\"],\n[\"de40\",\"\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153\"],\n[\"dea1\",\"\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13\"],\n[\"df40\",\"\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F\"],\n[\"dfa1\",\"\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4\"],\n[\"e040\",\"\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F\"],\n[\"e0a1\",\"\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0\"],\n[\"e140\",\"\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0\"],\n[\"e1a1\",\"\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9\"],\n[\"e240\",\"\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A\"],\n[\"e2a1\",\"\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993\"],\n[\"e340\",\"\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE\"],\n[\"e3a1\",\"\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB\"],\n[\"e440\",\"\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D\"],\n[\"e4a1\",\"\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658\"],\n[\"e540\",\"\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189\"],\n[\"e5a1\",\"\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92\"],\n[\"e640\",\"\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359\"],\n[\"e6a1\",\"\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F\"],\n[\"e740\",\"\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662\"],\n[\"e7a1\",\"\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27\"],\n[\"e840\",\"\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3\"],\n[\"e8a1\",\"\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E\"],\n[\"e940\",\"\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA\"],\n[\"e9a1\",\"\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8\"],\n[\"ea40\",\"\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799\"],\n[\"eaa1\",\"\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558\"],\n[\"eb40\",\"\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0\"],\n[\"eba1\",\"\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C\"],\n[\"ec40\",\"\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95\"],\n[\"eca1\",\"\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E\"],\n[\"ed40\",\"\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6\"],\n[\"eda1\",\"\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E\"],\n[\"ee40\",\"\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E\"],\n[\"eea1\",\"\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C\"],\n[\"ef40\",\"\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30\"],\n[\"efa1\",\"\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376\"],\n[\"f040\",\"\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2\"],\n[\"f0a1\",\"\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67\"],\n[\"f140\",\"\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA\"],\n[\"f1a1\",\"\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70\"],\n[\"f240\",\"\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B\"],\n[\"f2a1\",\"\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55\"],\n[\"f340\",\"\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726\"],\n[\"f3a1\",\"\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2\"],\n[\"f440\",\"\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929\"],\n[\"f4a1\",\"\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF\"],\n[\"f540\",\"\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B\"],\n[\"f5a1\",\"\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625\"],\n[\"f640\",\"\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A\"],\n[\"f6a1\",\"\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A\"],\n[\"f740\",\"\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A\"],\n[\"f7a1\",\"\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE\"],\n[\"f840\",\"\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F\"],\n[\"f8a1\",\"\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A\"],\n[\"f940\",\"\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A\"],\n[\"f9a1\",\"\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593\"]\n]\n", "[\n[\"8740\",\"\u43F0\u4C32\u4603\u45A6\u4578\uD85C\uDE67\u4D77\u45B3\uD85F\uDCB1\u4CE2\uD85F\uDCC5\u3B95\u4736\u4744\u4C47\u4C40\uD850\uDEBF\uD84D\uDE17\uD85C\uDF52\uD85B\uDE8B\uD85C\uDCD2\u4C57\uD868\uDF51\u474F\u45DA\u4C85\uD85F\uDC6C\u4D07\u4AA4\u46A1\uD85A\uDF23\u7225\uD856\uDE54\uD846\uDE63\uD84F\uDE06\uD84F\uDF61\u664D\u56FB\"],\n[\"8767\",\"\u7D95\u591D\uD862\uDFB9\u3DF4\u9734\uD85E\uDFEF\u5BDB\uD847\uDD5E\u5AA4\u3625\uD867\uDEB0\u5AD1\u5BB7\u5CFC\u676E\u8593\uD866\uDD45\u7461\u749D\u3875\uD847\uDD53\uD84D\uDE9E\uD858\uDC21\u3EEC\"],\n[\"87a1\",\"\uD856\uDCDE\u3AF5\u7AFC\u9F97\uD850\uDD61\uD862\uDD0D\uD84C\uDDEA\uD842\uDE8A\uD84C\uDE5E\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\uD857\uDDB9\u74C6\u9FC7\u57B3\u492F\u544C\u4131\uD84D\uDE8E\u5818\u7A72\uD85E\uDF65\u8B8F\u46AE\uD85B\uDE88\u4181\uD857\uDD99\u7BAE\uD849\uDCBC\u9FC8\uD849\uDCC1\uD849\uDCC9\uD849\uDCCC\u9FC9\u8504\uD84D\uDDBB\u40B4\u9FCA\u44E1\uD86B\uDDFF\u62C1\u706E\u9FCB\"],\n[\"8840\",\"\u31C0\",4,\"\uD840\uDD0C\u31C5\uD840\uDCD1\uD840\uDCCD\u31C6\u31C7\uD840\uDCCB\uD847\uDFE8\u31C8\uD840\uDCCA\u31C9\u31CA\u31CB\u31CC\uD840\uDD0E\u31CD\u31CE\u0100\u00C1\u01CD\u00C0\u0112\u00C9\u011A\u00C8\u014C\u00D3\u01D1\u00D2\u0FFF\u00CA\u0304\u1EBE\u0FFF\u00CA\u030C\u1EC0\u00CA\u0101\u00E1\u01CE\u00E0\u0251\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\"],\n[\"88a1\",\"\u01DC\u00FC\u0FFF\u00EA\u0304\u1EBF\u0FFF\u00EA\u030C\u1EC1\u00EA\u0261\u23DA\u23DB\"],\n[\"8940\",\"\uD868\uDFA9\uD844\uDD45\"],\n[\"8943\",\"\u650A\"],\n[\"8946\",\"\u4E3D\u6EDD\u9D4E\u91DF\"],\n[\"894c\",\"\uD85D\uDF35\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E\"],\n[\"89a1\",\"\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227\"],\n[\"89ab\",\"\u918C\u78B8\u915E\u80BC\"],\n[\"89b0\",\"\u8D0B\u80F6\uD842\uDDE7\"],\n[\"89b5\",\"\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\uD867\uDDF6\uD85C\uDC0E\u9E0A\uD868\uDD33\u35C1\"],\n[\"89c1\",\"\u6E9A\u823E\u7519\"],\n[\"89c5\",\"\u4911\u9A6C\u9A8F\u9F99\u7987\uD861\uDC6C\uD847\uDDCA\uD841\uDDD0\uD84A\uDEE6\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5\"],\n[\"8a40\",\"\uD85F\uDD84\u5525\"],\n[\"8a43\",\"\uD843\uDC42\uD843\uDD15\uD854\uDD2B\u5590\uD84B\uDCC6\u39EC\uD840\uDF41\u8E46\uD853\uDDB8\uD865\uDCE5\u4053\uD860\uDCBE\u777A\uD84B\uDC38\u3A34\u47D5\uD860\uDD5D\uD85A\uDDF2\uD853\uDDEA\u64DD\uD843\uDD7C\uD843\uDFB4\uD843\uDCD5\uD844\uDCF4\u648D\u8E7E\uD843\uDE96\uD843\uDC0B\uD843\uDF64\uD84B\uDCA9\uD860\uDE56\uD851\uDCD3\"],\n[\"8a64\",\"\uD843\uDD46\uD866\uDE4D\uD860\uDCE9\u47F4\uD853\uDEA7\uD84B\uDCC2\u9AB2\u3A67\uD865\uDDF4\u3FED\u3506\uD854\uDEC7\uD865\uDFD4\uD85E\uDCC8\uD84B\uDD44\u9D6E\u9815\"],\n[\"8a76\",\"\u43D9\uD858\uDCA5\u64B4\u54E3\uD84B\uDD4C\uD84A\uDFCA\uD844\uDC77\u39FB\uD844\uDC6F\"],\n[\"8aa1\",\"\uD859\uDEDA\uD859\uDF16\uD85E\uDDA0\u64EA\uD854\uDC52\uD843\uDC43\u8E68\uD848\uDDA1\uD862\uDF4C\uD841\uDF31\"],\n[\"8aac\",\"\u480B\uD840\uDDA9\u3FFA\u5873\uD84B\uDD8D\"],\n[\"8ab2\",\"\uD851\uDDC8\uD841\uDCFC\uD858\uDC97\uD843\uDF4C\uD843\uDD96\u5579\u40BB\u43BA\"],\n[\"8abb\",\"\u4AB4\uD84A\uDE66\uD844\uDC9D\u81AA\u98F5\uD843\uDD9C\u6379\u39FE\uD849\uDF75\u8DC0\u56A1\u647C\u3E43\"],\n[\"8ac9\",\"\uD869\uDE01\uD843\uDE09\uD84A\uDECF\uD84B\uDCC9\"],\n[\"8ace\",\"\uD844\uDCC8\uD84E\uDDC2\u3992\u3A06\uD860\uDE9B\u3578\uD857\uDE49\uD848\uDCC7\u5652\uD843\uDF31\uD84B\uDCB2\uD865\uDF20\u34BC\u6C3D\uD853\uDE3B\"],\n[\"8adf\",\"\uD85D\uDD74\uD84B\uDE8B\uD848\uDE08\uD869\uDE5B\uD863\uDCCD\uD843\uDE7A\uD843\uDC34\uD85A\uDC1C\u7F93\uD844\uDCCF\uD84A\uDC03\uD84A\uDD39\u35FB\uD854\uDDE3\uD843\uDE8C\uD843\uDF8D\uD843\uDEAA\u3F93\uD843\uDF30\uD843\uDD47\uD844\uDD4F\uD843\uDE4C\"],\n[\"8af6\",\"\uD843\uDEAB\uD842\uDFA9\uD843\uDD48\uD844\uDCC0\uD844\uDD3D\u3FF9\uD849\uDE96\u6432\uD843\uDFAD\"],\n[\"8b40\",\"\uD84C\uDFF4\uD85D\uDE39\uD84A\uDFCE\uD843\uDD7E\uD843\uDD7F\uD84B\uDC51\uD84B\uDC55\u3A18\uD843\uDE98\uD844\uDCC7\uD843\uDF2E\uD869\uDE32\uD85A\uDF50\uD863\uDCD2\uD863\uDD99\uD863\uDCCA\u95AA\u54CC\u82C4\u55B9\"],\n[\"8b55\",\"\uD867\uDEC3\u9C26\u9AB6\uD85D\uDF5E\uD84B\uDDEE\u7140\u816D\u80EC\u5C1C\uD859\uDD72\u8134\u3797\u535F\uD860\uDCBD\u91B6\uD843\uDEFA\uD843\uDE0F\uD843\uDE77\uD843\uDEFB\u35DD\uD853\uDDEB\u3609\uD843\uDCD6\u56AF\uD849\uDFB5\uD844\uDCC9\uD843\uDE10\uD843\uDE78\uD844\uDC78\uD844\uDD48\uD860\uDE07\uD845\uDC55\uD843\uDE79\uD853\uDE50\uD84B\uDDA4\u5A54\uD844\uDC1D\uD844\uDC1E\uD844\uDCF5\uD844\uDCF6\u579C\uD843\uDE11\"],\n[\"8ba1\",\"\uD85D\uDE94\uD860\uDECD\uD843\uDFB5\uD843\uDE7B\uD854\uDD7E\u3703\uD843\uDFB6\uD844\uDD80\uD854\uDED8\uD868\uDEBD\uD852\uDDDA\uD846\uDC3A\uD850\uDD77\uD860\uDE7C\u5899\u5268\u361A\uD855\uDF3D\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\uD856\uDF74\uD84C\uDD3D\u55FB\u35F2\u5689\u4E28\u5902\uD846\uDFC1\uD87E\uDC78\u9751\uD840\uDC86\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\uD852\uDCE9\u7F52\u793B\u7CF9\u7F53\uD858\uDE6A\u34C1\"],\n[\"8bde\",\"\uD858\uDF4B\u8002\u8080\uD859\uDE12\uD85A\uDD51\u535D\u8864\u89C1\uD85E\uDCB2\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\uD863\uDE0F\u97E6\u9875\u98CE\u98DE\u9963\uD866\uDC10\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\uD840\uDC87\u961D\u6237\u94A2\"],\n[\"8c40\",\"\u503B\u6DFE\uD867\uDC73\u9FA6\u3DC9\u888F\uD850\uDD4E\u7077\u5CF5\u4B20\uD854\uDDCD\u3559\uD857\uDD30\u6122\uD862\uDE32\u8FA7\u91F6\u7191\u6719\u73BA\uD84C\uDE81\uD868\uDD07\u3C8B\uD846\uDD80\u4B10\u78E4\u7402\u51AE\uD861\uDF0F\u4009\u6A63\uD868\uDEBA\u4223\u860F\uD842\uDE6F\u7A2A\uD866\uDD47\uD862\uDEEA\u9755\u704D\u5324\uD848\uDC7E\u93F4\u76D9\uD862\uDDE3\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\uD847\uDDB6\u5E92\u5E99\u5FC2\uD849\uDF12\u658B\"],\n[\"8ca1\",\"\uD84C\uDFF9\u6919\u6A43\uD84F\uDC63\u6CFF\"],\n[\"8ca7\",\"\u7200\uD851\uDD05\u738C\u3EDB\uD852\uDE13\u5B15\u74B9\u8B83\uD857\uDCA4\uD855\uDE95\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\uD863\uDDB9\uD845\uDC3F\u4071\u42A2\u5A1A\"],\n[\"8cc9\",\"\u9868\u676B\u4276\u573D\"],\n[\"8cce\",\"\u85D6\uD852\uDD7B\u82BF\uD85C\uDD0D\u4C81\uD85B\uDD74\u5D7B\uD85A\uDF15\uD85B\uDFBE\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\uD84C\uDE56\uD849\uDF96\u439A\u4536\"],\n[\"8ce6\",\"\u5CD5\uD84E\uDF1A\u8AF9\u5C78\u3D12\uD84D\uDD51\u5D78\u9FB2\u7157\u4558\uD850\uDCEC\uD847\uDE23\u4C77\u3978\u344A\uD840\uDDA4\uD85B\uDC41\u8ACC\u4FB4\uD840\uDE39\u59BF\u816C\u9856\uD866\uDCFA\u5F3B\"],\n[\"8d40\",\"\uD842\uDF9F\"],\n[\"8d42\",\"\uD848\uDDC1\uD862\uDD6D\u4102\u46BB\uD864\uDC79\u3F07\u9FB3\uD868\uDDB5\u40F8\u37D6\u46F7\uD85B\uDC46\u417C\uD861\uDEB2\uD85C\uDFFF\u456D\u38D4\uD855\uDC9A\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\uD852\uDF0F\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1\"],\n[\"8da1\",\"\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\uD862\uDDC0\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\uD84F\uDF41\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\uD840\uDF25\u43C1\u35F1\uD843\uDED8\"],\n[\"8e40\",\"\uD84F\uDED7\u57BE\uD85B\uDED3\u713E\uD855\uDFE0\u364E\u69A2\uD862\uDFE9\u5B74\u7A49\uD856\uDCE1\uD865\uDCD9\u7A65\u7A7D\uD856\uDDAC\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\uD859\uDC8D\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\uD857\uDC01\u7B0B\u7B55\u7B29\uD854\uDF0E\uD857\uDCFE\u7BA2\u7B6F\u839C\uD856\uDFB4\uD85B\uDC7F\u7BD0\u8421\u7B92\u7BB8\uD857\uDD20\u3DAD\uD857\uDC65\u8492\u7BFA\u7C06\u7C35\uD857\uDCC1\u7C44\u7C83\uD852\uDC82\u7CA6\u667D\uD851\uDD78\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE\"],\n[\"8ea1\",\"\u7E67\u451D\uD85B\uDE44\u7D5D\uD85B\uDED6\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\uD850\uDC57\uD858\uDC29\u7DE4\u3D13\u7DF5\uD845\uDFF9\u7DE5\uD860\uDF6D\u7E1D\uD858\uDD21\uD858\uDD5A\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\uD858\uDED0\u99E1\u7F97\uD858\uDF51\u7FA3\uD845\uDE61\uD840\uDC68\u455C\uD84D\uDF66\u4503\uD860\uDF3A\u7FFA\uD859\uDC89\u8005\u8008\u801D\u8028\u802F\uD868\uDC87\uD85B\uDCC3\u803B\u803C\u8061\uD849\uDF14\u4989\uD859\uDE26\uD84F\uDDE3\uD859\uDEE8\u6725\u80A7\uD862\uDE48\u8107\u811A\u58B0\uD849\uDEF6\u6C7F\uD859\uDC98\uD853\uDFB8\u64E7\uD845\uDC8A\u8218\uD846\uDC5E\u6A53\uD852\uDE65\uD852\uDE95\u447A\u8229\uD842\uDF0D\uD85A\uDE52\uD84F\uDD7E\u4FF9\uD845\uDCFD\u84E2\u8362\uD85A\uDF0A\uD852\uDDA7\uD84D\uDD30\uD845\uDF73\uD84F\uDDF8\u82AA\u691B\uD87E\uDD94\u41DB\"],\n[\"8f40\",\"\u854B\u82D0\u831A\uD843\uDE16\uD845\uDFB4\u36C1\uD84C\uDD7D\uD84D\uDD5A\u827B\u82E2\u8318\uD84F\uDE8B\uD85B\uDDA3\uD85A\uDF05\uD85A\uDF97\uD84D\uDDCE\u3DBF\u831D\u55EC\u8385\u450B\uD85B\uDDA5\u83AC\u83C1\u83D3\u347E\uD85B\uDED4\u6A57\u855A\u3496\uD85B\uDE42\uD84B\uDEEF\u8458\uD856\uDFE4\u8471\u3DD3\u44E4\u6AA7\u844A\uD84F\uDCB5\u7958\u84A8\uD85A\uDF96\uD85B\uDE77\uD85B\uDE43\u84DE\u840F\u8391\u44A0\u8493\u84E4\uD857\uDC91\u4240\uD857\uDCC0\u4543\u8534\u5AF2\uD85B\uDE99\u4527\u8573\u4516\u67BF\u8616\"],\n[\"8fa1\",\"\uD861\uDE25\uD861\uDE3B\u85C1\uD85C\uDC88\u8602\uD845\uDD82\uD85C\uDCCD\uD87E\uDDB2\u456A\u8628\u3648\uD846\uDCA2\u53F7\uD85C\uDF9A\u867E\u8771\uD868\uDCF8\u87EE\uD84B\uDC27\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\uD85D\uDDE0\uD84F\uDDB9\uD85D\uDDE4\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\uD85D\uDF0F\u8987\u898A\u89A6\u89A9\u89A7\u89BC\uD862\uDE25\u89E7\uD85E\uDD24\uD85E\uDEBD\u8A9C\u7793\u91FE\u8A90\uD85E\uDE59\u7AE9\uD85E\uDF3A\uD84F\uDF8F\u4713\uD85E\uDF38\u717C\u8B0C\u8B1F\uD855\uDC30\uD855\uDD65\u8B3F\u8B4C\u8B4D\u8AA9\uD852\uDE7A\u8B90\u8B9B\u8AAF\uD845\uDEDF\u4615\u884F\u8C9B\uD85F\uDD54\uD85F\uDD8F\uD87E\uDDD4\u3725\uD85F\uDD53\u8CD6\uD85F\uDD98\uD85F\uDDBD\u8D12\u8D03\uD846\uDD10\u8CDB\u705C\u8D11\uD853\uDCC9\u3ED0\u8D77\"],\n[\"9040\",\"\u8DA9\uD860\uDC02\uD844\uDC14\uD852\uDD8A\u3B7C\uD860\uDDBC\uD85C\uDD0C\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\uD860\uDF65\uD861\uDC12\u8FA5\u9303\uD868\uDE9F\uD842\uDE50\u8FB3\u492A\uD862\uDDDE\uD861\uDD3D\uD84F\uDDBB\u5EF8\uD84C\uDE62\u8FF9\uD868\uDC14\uD861\uDEBC\uD861\uDD01\uD848\uDF25\u3980\uD85B\uDED7\u9037\uD861\uDD3C\uD85E\uDEBE\u9061\uD861\uDD6C\uD861\uDE0B\u90A8\uD861\uDF13\u90C4\uD861\uDEE6\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\uD862\uDD33\uD847\uDE89\u920E\u6C9F\u9241\u9262\uD855\uDDB9\u92B9\uD862\uDEC6\uD84F\uDC9B\uD862\uDF0C\uD855\uDDDB\"],\n[\"90a1\",\"\uD843\uDD31\u932C\u936B\uD862\uDEE1\uD862\uDFEB\u708F\u5AC3\uD862\uDEE2\uD862\uDEE5\u4965\u9244\uD862\uDFEC\uD863\uDC39\uD862\uDFFF\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\uD849\uDE7A\uD861\uDED8\uD844\uDE7C\uD84F\uDE2E\u49DF\u6C1C\u967B\u9696\u416C\u96A3\uD85B\uDED5\u61DA\u96B6\u78F5\uD862\uDEE0\u96BD\u53CC\u49A1\uD85B\uDCB8\uD840\uDE74\uD859\uDC10\uD864\uDCAF\uD864\uDCE5\uD852\uDED1\uD846\uDD15\uD84C\uDF0A\u9731\u8642\u9736\u4A0F\u453D\u4585\uD852\uDEE9\u7075\u5B41\u971B\u975C\uD864\uDDD5\u9757\u5B4A\uD864\uDDEB\u975F\u9425\u50D0\uD84C\uDCB7\uD84C\uDCBC\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\uD855\uDC6C\u97EE\u741C\uD865\uDC33\u97FF\u97F5\uD865\uDC1D\uD85E\uDD7A\u4AD1\u9834\u9833\u984B\u9866\u3B0E\uD85C\uDD75\u3D51\uD841\uDE30\uD850\uDD5C\"],\n[\"9140\",\"\uD855\uDF06\u98CA\u98B7\u98C8\u98C7\u4AFF\uD85B\uDD27\uD845\uDED3\u55B0\u98E1\u98E6\u98EC\u9378\u9939\uD852\uDE29\u4B72\uD866\uDC57\uD866\uDD05\u99F5\u9A0C\u9A3B\u9A10\u9A58\uD855\uDF25\u36C4\uD864\uDCB1\uD866\uDFD5\u9AE0\u9AE2\uD866\uDF05\u9AF4\u4C0E\u9B14\u9B2D\uD861\uDE00\u5034\u9B34\uD85A\uDDA8\u38C3\uD84C\uDC7D\u9B50\u9B40\uD867\uDD3E\u5A45\uD846\uDC63\u9B8E\uD850\uDE4B\u9C02\u9BFF\u9C0C\uD867\uDE68\u9DD4\uD867\uDFB7\uD868\uDD92\uD868\uDDAB\uD868\uDCE1\uD868\uDD23\uD868\uDDDF\u9D7E\u9D83\uD868\uDD34\u9E0E\u6888\"],\n[\"91a1\",\"\u9DC4\uD848\uDD5B\uD868\uDD93\uD868\uDE20\uD846\uDD3B\uD868\uDE33\u9D39\uD868\uDCB9\uD868\uDEB4\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\uD850\uDF64\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\uD863\uDC2B\u9F02\u9F08\u4B96\u9424\uD85B\uDDA2\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\uD864\uDC8B\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\uD852\uDD75\uD852\uDDBB\u7177\uD852\uDDF8\uD850\uDF48\uD852\uDE51\u739E\uD862\uDFDA\uD846\uDCFA\u799F\uD862\uDD7E\uD863\uDE36\u9369\u93F3\uD862\uDE44\u92EC\u9381\u93CB\uD862\uDD6C\uD851\uDCB9\u7217\u3EEB\u7772\u7A43\u70D0\uD851\uDC73\uD850\uDFF8\u717E\uD845\uDFEF\u70A3\uD846\uDCBE\uD84D\uDD99\u3EC7\uD846\uDC85\uD855\uDC2F\uD845\uDFF8\u3722\uD845\uDEFB\uD846\uDC39\u36E1\uD845\uDF74\uD846\uDCD1\uD857\uDF4B\u3723\uD845\uDEC0\u575B\uD852\uDE25\uD844\uDFFE\uD844\uDEA8\"],\n[\"9240\",\"\uD844\uDFC6\uD845\uDCB6\u8503\uD84D\uDEA6\u8503\u8455\uD852\uDD94\uD85C\uDD65\uD84F\uDE31\uD855\uDD5C\uD84F\uDEFB\uD85C\uDC52\u44F4\uD84D\uDEEE\uD866\uDD9D\uD85B\uDF26\u67F9\u3733\u3C15\u3DE7\u586C\uD846\uDD22\u6810\u4057\uD84D\uDF3F\uD850\uDCE1\uD850\uDC8B\uD850\uDD0F\uD85B\uDC21\u54CB\u569E\uD859\uDEB1\u5692\uD843\uDFDF\uD842\uDFA8\uD843\uDE0D\u93C6\uD862\uDF13\u939C\u4EF8\u512B\u3819\uD851\uDC36\u4EBC\uD841\uDC65\uD840\uDF7F\u4F4B\u4F8A\uD855\uDE51\u5A68\uD840\uDDAB\uD840\uDFCB\u3999\uD840\uDF0A\uD841\uDC14\u3435\u4F29\uD840\uDEC0\uD863\uDEB3\uD840\uDE75\u8ADA\uD840\uDE0C\u4E98\"],\n[\"92a1\",\"\u50CD\u510D\u4FA2\u4F03\uD852\uDE0E\uD84F\uDE8A\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\uD84D\uDD95\uD84F\uDE39\uD84F\uDEBF\u6D72\uD846\uDC84\uD84F\uDE89\u51A8\u51C3\uD841\uDDE0\u44DD\uD841\uDCA3\uD841\uDC92\uD841\uDC91\u8D7A\uD862\uDE9C\uD841\uDF0E\u5259\u52A4\uD842\uDC73\u52E1\u936E\u467A\u718C\uD850\uDF8C\uD843\uDC20\uD852\uDDAC\uD844\uDCE4\u69D1\uD843\uDE1D\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\uD852\uDEBC\uD850\uDC8D\u53D0\u3584\u720F\uD850\uDCC9\u55B4\uD840\uDF45\u54CD\uD842\uDFC6\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\uD862\uDE46\uD845\uDEFA\uD845\uDF6F\uD845\uDF10\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\uD856\uDD46\uD846\uDDF3\uD846\uDC61\uD850\uDE95\u36F5\u6D05\u7443\u5A21\uD857\uDE83\"],\n[\"9340\",\"\u5A81\uD862\uDFD7\uD841\uDC13\u93E0\u748C\uD844\uDF03\u7105\u4972\u9408\uD862\uDDFB\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\uD846\uDD96\uD846\uDD7C\uD84E\uDEEE\u5ECD\u5B4F\uD846\uDD03\uD846\uDD04\u3701\uD846\uDCA0\u36DD\uD845\uDEFE\u36D3\u812A\uD862\uDE47\uD847\uDDBA\uD84D\uDC72\uD862\uDDA8\u5F0C\u5F0E\uD846\uDD27\uD845\uDFAB\u5A6B\uD845\uDF3B\u5B44\u8614\uD85D\uDDFD\u8860\u607E\uD84A\uDC60\uD849\uDE2B\u5FDB\u3EB8\uD849\uDDAF\uD849\uDDBE\uD864\uDC88\uD85B\uDF73\u61C0\uD840\uDC3E\uD840\uDC46\uD849\uDE1B\u6199\u6198\u6075\uD84B\uDC9B\uD84B\uDD07\uD851\uDED4\uD864\uDD4D\"],\n[\"93a1\",\"\u6471\uD851\uDE65\uD84A\uDF6A\u3A29\uD84A\uDF22\uD84D\uDC50\uD866\uDCEA\uD84B\uDE78\u6337\uD869\uDC5B\u64B6\u6331\u63D1\uD852\uDDE3\uD84B\uDD67\u62A4\uD84B\uDCA1\u643B\u656B\u6972\u3BF4\uD84C\uDC8E\uD84C\uDEAD\uD852\uDD89\uD84C\uDEAB\u550D\uD84C\uDEE0\uD846\uDCD9\uD865\uDC3F\u66CE\uD84C\uDE89\uD84C\uDDB3\u3AE0\u4190\uD855\uDD84\uD862\uDF22\uD855\uDD8F\uD845\uDEFC\uD855\uDD5B\uD855\uDC25\u78EE\uD84C\uDD03\uD846\uDC2A\uD84C\uDE34\u3464\uD84C\uDE0F\uD84C\uDD82\uD850\uDEC9\u668E\uD85B\uDD24\u666B\u4B93\u6630\uD85E\uDC70\uD847\uDDEB\u6663\uD84C\uDED2\uD84C\uDEE1\u661E\uD856\uDC72\u38D1\uD84E\uDC3A\uD84D\uDFBC\u3B99\uD84D\uDFA2\uD84C\uDFFE\u74D0\u3B96\u678F\uD851\uDE2A\u68B6\u681E\u3BC4\u6ABE\u3863\uD84D\uDFD5\uD851\uDC87\u6A33\u6A52\u6AC9\u6B05\uD846\uDD12\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\uD84F\uDFC0\uD84F\uDC9A\u93A0\u92F2\uD862\uDFEA\uD862\uDECB\"],\n[\"9440\",\"\u9289\uD860\uDC1E\uD862\uDDDC\u9467\u6DA5\u6F0B\uD852\uDDEC\u6D67\uD84F\uDF7F\u3D8F\u6E04\uD850\uDC3C\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\uD850\uDF1A\uD850\uDE76\u70F1\u7250\u7287\u7294\uD851\uDF8F\uD851\uDF25\u5179\uD852\uDEA4\uD841\uDDEB\u747A\uD84F\uDEF8\uD84D\uDE5F\uD852\uDE4A\uD852\uDD17\uD857\uDFE1\u3F06\u3EB1\uD852\uDEDF\uD863\uDC23\uD84F\uDF35\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\uD85B\uDDEA\u4551\u7583\u3F63\uD853\uDCD9\uD853\uDD06\u3F58\u7555\u7673\uD869\uDDC6\u3B19\u7468\uD862\uDECC\uD852\uDDAB\uD852\uDD8E\u3AFB\"],\n[\"94a1\",\"\u3DCD\uD852\uDE4E\u3EFF\uD852\uDDC5\uD852\uDCF3\u91FA\u5732\u9342\uD862\uDEE3\uD846\uDC64\u50DF\uD854\uDE21\uD854\uDDE7\u7778\uD84C\uDE32\u770E\u770F\u777B\uD851\uDE97\uD84D\uDF81\u3A5E\uD852\uDCF0\u7438\u749B\u3EBF\uD852\uDEBA\uD852\uDEC7\u40C8\uD852\uDE96\uD858\uDDAE\u9307\uD855\uDD81\u781E\u788D\u7888\u78D2\u73D0\u7959\uD85D\uDF41\uD855\uDEE3\u410E\u799B\u8496\u79A5\u6A2D\uD84F\uDEFA\u7A3A\u79F4\u416E\uD845\uDEE6\u4132\u9235\u79F1\uD843\uDD4C\uD852\uDD8C\uD840\uDE99\uD84F\uDDBA\uD845\uDF6E\u3597\u556B\u3570\u36AA\uD840\uDDD4\uD843\uDC0D\u7AE2\u5A59\uD849\uDEF5\uD856\uDEAF\uD856\uDE9C\u5A0D\uD840\uDE5B\u78F0\u5A2A\uD856\uDFC6\u7AFE\u41F9\u7C5D\u7C6D\u4211\uD856\uDFB3\uD857\uDEBC\uD857\uDEA6\u7CCD\uD852\uDDF9\uD845\uDFB0\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\uD858\uDE61\"],\n[\"9540\",\"\uD858\uDD5C\uD85E\uDF48\u7D97\uD857\uDE82\u426A\uD85A\uDF75\uD842\uDD16\u67D6\uD840\uDC4E\uD84D\uDDCF\u57C4\uD859\uDC12\uD858\uDFF8\uD852\uDD62\u7FDD\u7B27\uD842\uDC2C\uD856\uDEE9\uD857\uDD43\u7B0C\uD857\uDE0E\u99E6\u8645\u9A63\u6A1C\uD84D\uDC3F\u39E2\uD852\uDDF7\uD859\uDDAD\u9A1F\uD859\uDDA0\u8480\uD85C\uDD27\uD85B\uDCD1\u44EA\u8137\u4402\u80C6\u8109\u8142\uD859\uDFB4\u98C3\uD85A\uDE42\u8262\u8265\uD85A\uDE51\u8453\uD85B\uDDA7\u8610\uD85C\uDE1B\u5A86\u417F\uD846\uDC40\u5B2B\uD846\uDCA1\u5AE4\uD846\uDCD8\u86A0\uD87E\uDDBC\uD84F\uDD8F\u882D\uD85D\uDC22\u5A02\"],\n[\"95a1\",\"\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\uD855\uDE83\u8954\uD85D\uDF85\uD85D\uDF84\uD862\uDFF5\uD862\uDFD9\uD862\uDF9C\uD862\uDDF9\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\uD865\uDC48\u5F4D\u922B\uD850\uDE84\u65D4\u7129\u70C4\uD846\uDC45\u9D6D\u8C9F\u8CE9\uD85F\uDDDC\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\uD853\uDC09\u8F30\u8F4A\u42F4\u6C58\u6FBB\uD848\uDF21\u489B\u6F79\u6E8B\uD845\uDFDA\u9BE9\u36B5\uD852\uDD2F\u90BB\u9097\u5571\u4906\u91BB\u9404\uD862\uDE4B\u4062\uD862\uDEFC\u9427\uD863\uDC1D\uD863\uDC3B\u84E5\u8A2B\u9599\u95A7\u9597\u9596\uD863\uDD34\u7445\u3EC2\uD852\uDCFF\uD852\uDE42\uD850\uDFEA\u3EE7\uD84C\uDE25\u968F\uD863\uDEE7\uD863\uDE66\uD863\uDE65\u3ECC\uD852\uDDED\uD852\uDE78\uD84F\uDFEE\u7412\u746B\u3EFC\u9741\uD864\uDCB0\"],\n[\"9640\",\"\u6847\u4A1D\uD864\uDC93\uD855\uDFDF\u975D\u9368\uD862\uDD89\uD863\uDC26\uD862\uDF2F\uD858\uDFBE\u92BA\u5B11\u8B69\u493C\u73F9\uD850\uDE1B\u979B\u9771\u9938\uD843\uDF26\u5DC1\uD862\uDFC5\uD852\uDEB2\u981F\uD865\uDCDA\u92F6\uD865\uDDD7\u91E5\u44C0\uD862\uDF50\uD852\uDE67\uD862\uDF64\u98DC\uD862\uDE45\u3F00\u922A\u4925\u8414\u993B\u994D\uD85E\uDF06\u3DFD\u999B\u4B6F\u99AA\u9A5C\uD862\uDF65\uD856\uDCC8\u6A8F\u9A21\u5AFE\u9A2F\uD866\uDCF1\u4B90\uD866\uDD48\u99BC\u4BBD\u4B97\u937D\u5872\uD844\uDF02\u5822\uD852\uDDB8\"],\n[\"96a1\",\"\uD845\uDCE8\u7844\uD849\uDF1F\uD84F\uDDB8\u68C5\u3D7D\u9458\u3927\u6150\uD849\uDF81\uD84A\uDD6B\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\uD867\uDE2D\u9B9F\uD868\uDDF5\uD868\uDCFE\u9D21\u4CAE\uD850\uDD04\u9E18\u4CB0\u9D0C\uD868\uDDB4\uD868\uDCED\uD868\uDCF3\uD866\uDD2F\u9DA5\u84BD\uD85B\uDE12\uD85B\uDFDF\uD85A\uDF82\u85FC\u4533\uD85B\uDDA4\uD85B\uDE84\uD85B\uDDF0\u8420\u85EE\uD85B\uDE00\uD84D\uDFD7\uD858\uDC64\u79E2\uD84D\uDD9C\uD84D\uDE40\u492D\uD852\uDDDE\u3D62\u93DB\u92BE\u9348\uD840\uDEBF\u78B9\u9277\u944D\u4FE4\u3440\u9064\uD855\uDD5D\u783D\u7854\u78B6\u784B\uD845\uDF57\uD84C\uDDC9\uD852\uDD41\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\uD850\uDDB5\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\uD850\uDDAC\u71EB\uD85B\uDC40\uD853\uDF97\u5B28\uD845\uDFB5\uD862\uDE49\"],\n[\"9740\",\"\u610C\u5ACE\u5A0B\u42BC\uD851\uDC88\u372C\u4B7B\uD862\uDDFC\u93BB\u93B8\uD846\uDCD6\uD843\uDF1D\u8472\uD85B\uDCC0\uD845\uDC13\uD850\uDEFA\uD84B\uDC26\uD850\uDFC1\u5994\uD84F\uDDB7\uD859\uDF41\u7DA8\uD858\uDD5B\uD858\uDCA4\uD852\uDDB9\uD852\uDD8B\uD862\uDDFA\u92E5\u73E2\u3EE9\u74B4\uD862\uDF63\uD846\uDC9F\u3EE1\uD852\uDEB3\u6AD8\u73F3\u73FB\u3ED6\uD852\uDE3E\uD852\uDE94\uD845\uDFD9\uD852\uDE66\uD840\uDFA7\uD845\uDC24\uD852\uDDE5\u7448\uD852\uDD16\u70A5\uD852\uDD76\u9284\u73E6\u935F\uD841\uDCFE\u9331\uD862\uDECE\uD862\uDE16\u9386\uD862\uDFE7\uD855\uDDD5\u4935\uD862\uDE82\u716B\"],\n[\"97a1\",\"\uD852\uDD43\uD843\uDCFF\u56A4\uD841\uDE1A\uD842\uDFEB\uD843\uDCB8\u5502\u79C4\uD845\uDFFA\u7DFE\uD845\uDEC2\uD852\uDE50\uD846\uDC52\u452E\u9401\u370A\uD862\uDEC0\uD852\uDDAD\u59B0\uD846\uDCBF\uD846\uDC83\uD85D\uDC84\u5AA1\u36E2\uD84F\uDD5B\u36B0\u925F\u5A79\uD862\uDE81\uD846\uDC62\u9374\u3CCD\uD842\uDEB4\u4A96\u398A\u50F4\u3D69\u3D4C\uD844\uDF9C\u7175\u42FB\uD860\uDE18\u6E0F\uD864\uDCE4\u44EB\u6D57\uD85F\uDE4F\u7067\u6CAF\u3CD6\uD84F\uDFED\uD84F\uDE2D\u6E02\u6F0C\u3D6F\uD840\uDFF5\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\uD863\uDC1C\uD85A\uDFC0\u5812\u57C8\u36D6\uD845\uDC52\u70FE\uD850\uDF62\uD852\uDE71\uD84B\uDFE3\uD844\uDEB0\uD848\uDFBD\u68B9\u6967\uD844\uDF98\uD84D\uDCE5\uD85E\uDFF4\uD84D\uDEDF\uD862\uDE83\uD84D\uDFD6\uD84C\uDFFA\uD853\uDC9F\u6A1A\uD84D\uDEAD\uD85B\uDCB7\u843E\u44DF\u44CE\"],\n[\"9840\",\"\uD85B\uDD26\uD85B\uDD51\uD85B\uDC82\uD85B\uDFDE\u6F17\uD85C\uDD09\u833D\uD845\uDF3A\u83ED\uD85B\uDC80\uD85C\uDC53\uD845\uDFDB\u5989\u5A82\uD845\uDFB3\u5A61\u5A71\uD846\uDD05\uD850\uDDFC\u372D\u59EF\uD845\uDF3C\u36C7\u718E\u9390\u669A\uD850\uDEA5\u5A6E\u5A2B\uD850\uDE93\u6A2B\uD84F\uDEF9\uD85D\uDF36\uD851\uDC5B\uD850\uDECA\u711D\uD850\uDE59\uD862\uDDE1\u4FB0\uD85B\uDD28\u5CC2\uD851\uDCCE\uD85F\uDE4D\uD850\uDFBD\u6A0C\uD850\uDE56\uD844\uDF04\u70A6\u7133\uD850\uDFE9\u3DA5\u6CDF\uD87E\uDC25\uD852\uDE4F\u7E65\u59EB\u5D2F\u3DF3\u5F5C\uD852\uDE5D\uD845\uDFDF\u7DA4\u8426\"],\n[\"98a1\",\"\u5485\uD84E\uDEFA\uD84C\uDF00\uD840\uDE14\u577E\uD842\uDCD5\uD841\uDE19\u3FE5\uD847\uDF9E\uD868\uDEB6\u7003\uD864\uDD5B\u5D70\u738F\u7CD3\uD862\uDE59\uD865\uDC20\u4FC8\u7FE7\u72CD\u7310\uD85E\uDEF4\u7338\u7339\uD855\uDEF6\u7341\u7348\u3EA9\uD85E\uDF18\u906C\u71F5\uD852\uDCF2\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\uD853\uDF5C\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\uD855\uDD35\u7933\u6803\u7932\u4103\"],\n[\"9940\",\"\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\uD843\uDCCF\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A\"],\n[\"99a1\",\"\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\uD85E\uDD67\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF\"],\n[\"9a40\",\"\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\uD846\uDFC2\u9D49\u9C3A\"],\n[\"9aa1\",\"\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\uD840\uDC94\uD840\uDEB7\uD840\uDFA0\u691A\u94C3\u59AC\uD841\uDCD7\u5840\u94C1\u37B9\uD841\uDDD5\uD841\uDE15\uD841\uDE76\uD845\uDEBA\u5757\u7173\uD842\uDEC2\uD842\uDECD\uD842\uDFBF\u546A\uD87E\uDC3B\uD842\uDFCB\u549E\uD842\uDFFB\uD843\uDC3B\uD843\uDC53\uD843\uDC65\uD843\uDC7C\u60E7\uD843\uDC8D\u567A\uD843\uDCB5\uD843\uDCDD\uD843\uDCED\uD843\uDD6F\uD843\uDDB2\uD843\uDDC8\u6955\u9C2F\u87A5\uD843\uDE04\uD843\uDE0E\uD843\uDED7\uD843\uDF90\uD843\uDF2D\uD843\uDE73\u5C20\uD843\uDFBC\u5E0B\uD844\uDC5C\uD844\uDC4F\uD844\uDC76\u671E\uD844\uDC7B\uD844\uDC88\uD844\uDC96\u3647\uD844\uDCBF\uD844\uDCD3\uD844\uDD2F\uD844\uDD3B\u5364\u84AD\uD844\uDEE3\uD844\uDF75\uD844\uDF36\u8B81\uD845\uDD77\uD845\uDE19\uD845\uDFC3\uD845\uDFC7\u4E78\u70BB\uD846\uDC2D\uD846\uDD6A\"],\n[\"9b40\",\"\uD846\uDE2D\uD846\uDE45\uD847\uDC2A\uD847\uDC70\uD847\uDCAC\uD847\uDEC8\u62C3\uD847\uDED5\uD847\uDF15\u7198\u6855\uD848\uDC45\u69E9\u36C8\uD848\uDE7C\uD848\uDFD7\uD848\uDFFA\uD849\uDF2A\uD84A\uDC71\uD84A\uDD4F\u82FD\uD84A\uDD67\uD84A\uDD93\uD84A\uDED5\u89A5\uD84A\uDEE8\u8FA0\uD84A\uDF0E\u97B8\uD84A\uDF3F\u9847\u9ABD\uD84B\uDC4C\"],\n[\"9b62\",\"\uD84B\uDC88\uD84B\uDCB7\uD856\uDFE8\uD84B\uDD08\uD84B\uDD12\uD84B\uDDB7\uD84B\uDD95\uD84B\uDE42\uD84B\uDF74\uD84B\uDFCC\uD84C\uDC33\uD84C\uDC66\uD84C\uDF1F\uD84C\uDFDE\u5FB1\u6648\u66BF\uD85E\uDE79\uD84D\uDD67\uD84D\uDDF3\u7201\uD852\uDDBA\u77D7\uD84D\uDE1A\uD84D\uDF16\u7E87\uD840\uDF46\u58B5\u670E\"],\n[\"9ba1\",\"\u6918\uD84E\uDEA7\uD85D\uDE57\uD857\uDFE2\uD84F\uDE11\uD84F\uDEB9\uD85D\uDDFE\uD848\uDC9A\u48D0\u4AB8\uD850\uDD19\uD862\uDE9A\uD850\uDEEE\uD850\uDF0D\uD850\uDC3B\uD850\uDF34\uD850\uDF96\uD852\uDE45\uD841\uDDCA\u51D2\uD841\uDE11\u599F\uD847\uDEA8\u3BBE\uD84F\uDCFF\uD851\uDC04\uD851\uDCD6\u5788\uD851\uDE74\u399B\uD851\uDF2F\uD861\uDDE8\uD866\uDDC9\u3762\uD848\uDDC3\u8B5E\uD862\uDF4E\u99D6\uD852\uDC12\uD852\uDCFB\uD852\uDE15\u7209\uD852\uDEC0\uD843\uDC78\u5965\uD853\uDEA5\uD853\uDF86\uD841\uDF79\u8EDA\uD854\uDC2C\u528F\u573F\u7171\uD854\uDE99\uD855\uDC19\uD84F\uDF4A\uD852\uDEA7\u55BC\uD855\uDC46\uD855\uDC6E\uD85A\uDF52\u91D4\u3473\uD855\uDD3F\uD85D\uDE32\uD855\uDD5E\u4718\uD855\uDD62\uD855\uDD66\uD855\uDFC7\uD852\uDD3F\uD856\uDC5D\u5066\u34FB\uD84C\uDFCC\u60DE\uD856\uDD03\u477C\uD862\uDD48\uD856\uDEAE\uD856\uDF89\uD857\uDC06\uD847\uDD90\u57A1\u7151\u6FB6\uD858\uDD02\uD85F\uDC12\u9056\uD858\uDDB2\uD853\uDF9A\u8B62\uD859\uDC02\uD859\uDC4A\"],\n[\"9c40\",\"\u5D5B\uD85A\uDFF7\u8F36\uD859\uDC84\uD846\uDD1C\u8AEA\uD852\uDDF6\uD859\uDC88\uD84F\uDFEF\uD859\uDD12\u4BC0\uD859\uDDBF\uD859\uDEB5\uD849\uDF1B\u9465\uD855\uDFE1\u6195\u5A27\uD87E\uDCCD\u4FBB\u56B9\uD851\uDD21\uD859\uDEFC\u4E6A\uD852\uDD34\u9656\u6D8F\uD85B\uDCBD\u3618\u8977\uD859\uDF99\uD85A\uDC6E\uD859\uDC11\uD85A\uDC5E\u71DF\uD85A\uDCC7\u7B42\uD864\uDCC0\uD842\uDE11\uD85A\uDD26\u9104\uD85A\uDD39\u7A45\u9DF0\uD85A\uDDFA\u9A26\uD85A\uDE2D\u365F\uD859\uDC69\uD840\uDC21\u7983\uD85A\uDE34\uD85A\uDF5B\u5D2C\uD84D\uDD19\u83CF\uD85A\uDF9D\u46D0\uD85B\uDCA4\u753B\u8865\uD85B\uDDAE\u58B6\"],\n[\"9ca1\",\"\u371C\uD849\uDD8D\uD85C\uDC4B\uD85C\uDDCD\u3C54\uD85C\uDE80\uD85C\uDE85\u9281\uD848\uDD7A\uD85C\uDE8B\u9330\uD85C\uDEE6\uD852\uDDD0\u6C39\u949F\uD85D\uDC50\uD843\uDEF8\u8827\u88F5\uD84A\uDD26\uD861\uDC73\uD845\uDFB1\u6EB8\uD852\uDE2A\uD846\uDC20\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\uD867\uDCAD\uD866\uDCA4\u8943\uD85D\uDFCC\uD85E\uDC58\u56D6\u40DF\uD845\uDE0A\u39A1\uD84D\uDF2F\uD860\uDCE8\uD844\uDFC5\u71AD\u8366\uD85E\uDDDD\uD864\uDDA8\u5A67\u4CB7\uD85C\uDCAF\uD862\uDDAB\uD85E\uDDFD\uD85E\uDE0A\uD85E\uDF0B\uD85F\uDD66\uD850\uDD7A\u7B43\u797E\uD860\uDC09\u6FB5\uD868\uDEDF\u6A03\uD860\uDF18\u53A2\uD85B\uDE07\u93BF\u6836\u975D\uD860\uDD6F\uD860\uDC23\uD85A\uDDB5\uD844\uDFED\uD84C\uDE2F\uD860\uDC48\u5D85\uD863\uDC30\uD860\uDC83\u5715\u9823\uD862\uDD49\u5DAB\uD852\uDD88\u65BE\u69D5\u53D2\uD852\uDEA5\uD84F\uDF81\u3C11\u6736\uD860\uDC90\uD860\uDCF4\uD860\uDD2E\uD847\uDFA1\uD860\uDD4F\"],\n[\"9d40\",\"\uD860\uDD89\uD860\uDDAF\uD860\uDE1A\uD860\uDF06\uD860\uDF2F\uD860\uDF8A\u35CA\uD861\uDC68\uD861\uDEAA\u48FA\u63E6\uD862\uDD56\u7808\u9255\uD862\uDDB8\u43F2\uD862\uDDE7\u43DF\uD862\uDDE8\uD862\uDF46\uD862\uDFD4\u59F8\uD863\uDC09\u8F0B\uD863\uDFC5\uD864\uDCEC\u7B51\uD864\uDD10\uD864\uDD3C\u3DF7\uD864\uDD5E\uD852\uDECA\u8FD0\u728F\u568B\uD865\uDCE7\uD865\uDDE9\uD865\uDDB0\uD865\uDDB8\uD865\uDF32\uD866\uDCD1\uD866\uDD49\uD866\uDD6A\uD866\uDDC3\uD866\uDE28\uD866\uDF0E\uD867\uDD5A\uD867\uDD9B\u7E9F\uD867\uDEF8\uD867\uDF23\u4CA4\u9547\uD868\uDE93\u71A2\uD868\uDEFF\u4D91\u9012\uD869\uDDCB\u4D9C\uD843\uDC9C\u8FBE\u55C1\"],\n[\"9da1\",\"\u8FBA\uD849\uDCB0\u8FB9\uD852\uDE93\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\uD862\uDF2C\uD85E\uDC9D\u373A\u8E80\uD845\uDFF5\uD860\uDC24\uD862\uDF6C\uD862\uDF99\uD85E\uDE3E\uD859\uDEAF\u3DEB\uD85D\uDE55\uD84F\uDCB7\uD855\uDE35\uD856\uDD56\u4E9A\uD857\uDE81\uD858\uDE58\u56BF\uD843\uDE6D\u8E0E\u5B6D\uD84F\uDE88\uD853\uDC9E\u63DE\u62D0\uD845\uDFF6\uD846\uDC7B\u6530\u562D\uD857\uDC4A\u541A\uD854\uDF11\u3DC6\uD867\uDD98\u4C7D\u5622\u561E\u7F49\uD857\uDED8\u5975\uD84F\uDD40\u8770\u4E1C\uD843\uDFEA\uD843\uDD49\uD84D\uDEBA\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\uD843\uDE9D\u35CE\u5605\u55F1\u66F1\uD860\uDEE2\u362D\u7534\u55F0\u55BA\u5497\u5572\uD843\uDC41\uD843\uDC96\u5ED0\uD854\uDD48\uD843\uDE76\uD84B\uDC62\"],\n[\"9e40\",\"\uD843\uDEA2\u9EAB\u7D5A\u55DE\uD844\uDC75\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\uD84A\uDF43\u9C72\uD84B\uDEB3\u519A\u34DF\uD843\uDDA7\u51A7\u544D\u551E\u5513\u7666\u8E2D\uD85A\uDC8A\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\uD844\uDCC1\u44EC\u7304\uD851\uDF06\u5B90\u830B\uD85A\uDC93\u567B\uD849\uDEF4\uD85F\uDD2F\uD850\uDDA3\uD85F\uDD73\uD85B\uDED0\uD85C\uDEB6\u9170\uD844\uDDD9\u9208\uD84F\uDCFC\uD869\uDEA9\uD843\uDEAC\uD843\uDEF9\u7266\uD847\uDCA2\u474E\uD853\uDFC2\uD85F\uDFF9\uD843\uDFEB\u40FA\"],\n[\"9ea1\",\"\u9C5D\u651F\uD84B\uDDA0\u48F3\uD851\uDFE0\uD867\uDD7C\uD843\uDFEC\uD843\uDE0A\u6062\uD85D\uDDA3\uD843\uDFED\"],\n[\"9ead\",\"\uD858\uDC48\uD844\uDD87\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\uD851\uDE18\u589A\uD852\uDF6E\u822D\u544B\u57AA\uD856\uDE95\uD842\uDD79\"],\n[\"9ec5\",\"\u3A52\uD849\uDC65\u7374\uD867\uDEAC\u4D09\u9BED\uD84F\uDCFE\uD867\uDF30\u4C5B\uD853\uDFA9\uD865\uDD9E\uD867\uDFDE\u845C\uD84F\uDDB6\uD85C\uDEB2\uD859\uDFB3\uD84D\uDF20\u632E\u7D25\uD84F\uDEF7\uD84F\uDE2C\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\uD841\uDC8E\u7640\u5AF0\uD843\uDEB6\u787A\uD85F\uDF2E\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\uD869\uDC34\u9E85\u4CE1\u75F9\u37FB\u6119\uD84C\uDCDA\uD850\uDFF2\"],\n[\"9ef5\",\"\u565D\uD844\uDEA9\u57A7\uD852\uDD63\uD867\uDE06\u5234\uD85C\uDCAE\u35AD\u6C4A\u9D7C\"],\n[\"9f40\",\"\u7C56\u9B39\u57DE\uD845\uDF6C\u5C53\u64D3\uD865\uDCD0\uD858\uDF35\uD85C\uDD64\u86AD\uD843\uDD28\uD85B\uDD22\uD852\uDEE2\uD843\uDD71\"],\n[\"9f4f\",\"\u51FE\uD847\uDF0F\u5D8E\u9703\uD847\uDDD1\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\uD852\uDD3E\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130\"],\n[\"9fa1\",\"\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\uD845\uDF6D\u99DA\u5273\"],\n[\"9fae\",\"\u9159\u9681\u915C\"],\n[\"9fb2\",\"\u9151\uD863\uDE97\u637F\uD85B\uDD23\u6ACA\u5611\u918E\u757A\u6285\uD840\uDFFC\u734F\u7C70\uD857\uDC21\uD84F\uDCFD\"],\n[\"9fc1\",\"\uD852\uDD19\u76D6\u9B9D\u4E2A\uD843\uDCD4\u83BE\u8842\"],\n[\"9fc9\",\"\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\uD840\uDDF2\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3\"],\n[\"9fdb\",\"\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14\"],\n[\"9fe7\",\"\u6BFA\u8818\u7F78\"],\n[\"9feb\",\"\u5620\uD869\uDE4A\u8E77\u9F53\"],\n[\"9ff0\",\"\u8DD4\u8E4F\u9E1C\u8E01\u6282\uD860\uDF7D\u8E28\u8E75\u7AD3\uD852\uDE77\u7A3E\u78D8\u6CEA\u8A67\u7607\"],\n[\"a040\",\"\uD862\uDE5A\u9F26\u6CCE\u87D6\u75C3\uD868\uDEB2\u7853\uD87E\uDC40\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\uD852\uDEBB\u862F\u5FBA\u88A0\u44B7\"],\n[\"a055\",\"\uD846\uDC3B\uD85B\uDE05\"],\n[\"a058\",\"\u8A7E\uD849\uDD1B\"],\n[\"a05b\",\"\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5\"],\n[\"a063\",\"\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\uD858\uDD59\u6159\u4C04\u9E96\u617D\"],\n[\"a073\",\"\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\uD84C\uDFF5\u6364\u6802\u35D2\"],\n[\"a0a1\",\"\u5D57\uD862\uDFC2\u8FDA\uD863\uDE39\"],\n[\"a0a6\",\"\u50D9\uD847\uDD46\u7906\u5332\u9638\uD843\uDF3B\u4065\"],\n[\"a0ae\",\"\u77FE\"],\n[\"a0b0\",\"\u7CC2\uD857\uDF1A\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\uD85D\uDC86\u805B\u74F0\u8103\u7724\u8989\uD859\uDFCC\u7553\uD85B\uDED1\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6\"],\n[\"a0d4\",\"\u89A9\u7468\u6DB9\u87C1\uD850\uDC11\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077\"],\n[\"a0e2\",\"\u7F71\uD862\uDF2D\u7250\u60E9\u4B7E\u5220\u3C18\uD84F\uDCC7\uD857\uDED7\uD85D\uDE56\uD855\uDD31\uD846\uDD44\uD844\uDEFE\uD866\uDD03\uD85B\uDDDC\uD85C\uDCAD\u5CC1\uD858\uDDAD\uD862\uDE0F\uD84D\uDE77\uD840\uDCEE\uD85A\uDC46\uD853\uDF0E\u4562\u5B1F\uD858\uDF4C\u9F50\u9EA6\uD858\uDE6B\"],\n[\"a3c0\",\"\u2400\",31,\"\u2421\"],\n[\"c6a1\",\"\u2460\",9,\"\u2474\",9,\"\u2170\",9,\"\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\u00A8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041\",23],\n[\"c740\",\"\u3059\",58,\"\u30A1\u30A2\u30A3\u30A4\"],\n[\"c7a1\",\"\u30A5\",81,\"\u0410\",5,\"\u0401\u0416\",4],\n[\"c840\",\"\u041B\",26,\"\u0451\u0436\",25,\"\u21E7\u21B8\u21B9\u31CF\uD840\uDCCC\u4E5A\uD840\uDC8A\u5202\u4491\"],\n[\"c8a1\",\"\u9FB0\u5188\u9FB1\uD85D\uDE07\"],\n[\"c8cd\",\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3\"],\n[\"c8f5\",\"\u0283\u0250\u025B\u0254\u0275\u0153\u00F8\u014B\u028A\u026A\"],\n[\"f9fe\",\"\uFFED\"],\n[\"fa40\",\"\uD841\uDD47\u92DB\uD841\uDDDF\uD84F\uDFC5\u854C\u42B5\u73EF\u51B5\u3649\uD852\uDD42\uD862\uDDE4\u9344\uD846\uDDDB\u82EE\uD84F\uDCC8\u783C\u6744\u62DF\uD852\uDD33\uD862\uDDAA\uD840\uDEA0\uD85A\uDFB3\uD844\uDF05\u4FAB\uD849\uDCED\u5008\uD85B\uDD29\uD85E\uDE84\uD84D\uDE00\uD852\uDEB1\uD849\uDD13\u5029\uD840\uDF7E\u5FA4\uD840\uDF80\uD840\uDF47\u6EDB\uD841\uDC1F\u507D\u5101\u347A\u510E\u986C\u3743\u8416\uD852\uDDA4\uD841\uDC87\u5160\uD84C\uDFB4\u516A\uD842\uDFFF\uD848\uDCFC\uD840\uDEE5\uD849\uDD30\uD841\uDD8E\uD84C\uDE33\uD846\uDD83\u5B82\u877D\uD841\uDDB3\uD84F\uDC99\u51B2\u51B8\"],\n[\"faa1\",\"\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\uD852\uDEA6\u51B3\u51E2\u5342\u51ED\u83CD\u693E\uD84D\uDF2D\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\uD85A\uDF13\u5305\uD862\uDEDE\u5549\u6ED9\uD84F\uDF80\uD842\uDD54\uD84F\uDFEC\u5333\u5344\uD842\uDFE2\u6CCB\uD845\uDF26\u681B\u73D5\u604A\u3EAA\u38CC\uD845\uDEE8\u71DD\u44A2\u536D\u5374\uD861\uDEAB\u537E\u537F\uD845\uDD96\uD845\uDE13\u77E6\u5393\uD862\uDE9B\u53A0\u53AB\u53AE\u73A7\uD855\uDF72\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\uD842\uDF8F\u53E0\uD84F\uDFEB\uD84B\uDDA3\u53F6\uD843\uDC77\u5413\u7079\u552B\u6657\u6D5B\u546D\uD85A\uDF53\uD843\uDD74\u555D\u548F\u54A4\u47A6\uD845\uDF0D\uD843\uDEDD\u3DB4\uD843\uDD4D\"],\n[\"fb40\",\"\uD862\uDDBC\uD849\uDE98\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\uD846\uDCD7\uD850\uDC3A\u4552\uD851\uDC35\u66B3\uD844\uDCB4\u5637\u66CD\uD84C\uDE8A\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\uD862\uDF66\u3623\uD844\uDE4F\u5746\uD850\uDDA5\u6C6E\u708B\u5742\u36B1\uD85B\uDC7E\u57E6\uD845\uDC16\u5803\uD845\uDC54\uD850\uDF63\u5826\uD852\uDFF5\u585C\u58AA\u3561\u58E0\u58DC\uD844\uDE3C\u58FB\u5BFF\u5743\uD868\uDD50\uD850\uDE78\u93D3\u35A1\u591F\u68A6\u36C3\u6E59\"],\n[\"fba1\",\"\uD845\uDE3E\u5A24\u5553\uD845\uDE92\u8505\u59C9\uD843\uDD4E\uD85B\uDC81\uD85B\uDD2A\uD845\uDFDC\u59D9\uD845\uDFFB\uD845\uDFB2\uD85B\uDDA6\u6D71\uD846\uDC28\uD845\uDED5\u59F9\uD85B\uDE45\u5AAB\u5A63\u36E6\uD852\uDDA9\u5A77\u3708\u5A96\u7465\u5AD3\uD85B\uDFA1\uD849\uDD54\u3D85\uD846\uDD11\u3732\uD845\uDEB8\u5E83\u52D0\u5B76\u6588\u5B7C\uD85E\uDE0E\u4004\u485D\uD840\uDE04\u5BD5\u6160\uD846\uDE34\uD856\uDDCC\uD841\uDDA5\u5BF3\u5B9D\u4D10\u5C05\uD846\uDF44\u5C13\u73CE\u5C14\uD847\uDCA5\uD85A\uDF28\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\uD847\uDDF9\uD847\uDE37\u5D10\u5D18\u5D46\uD847\uDEA4\u5CBA\u5DD7\u82FC\u382D\uD852\uDD01\uD848\uDC49\uD848\uDD73\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\uD851\uDCBC\uD843\uDCD3\u53A6\u4EB7\u5ED0\u53A8\uD845\uDF71\u5E09\u5EF4\uD861\uDC82\"],\n[\"fc40\",\"\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\uD840\uDDC1\uD87E\uDC94\u3ADE\u48AE\uD844\uDF3A\u5F3A\uD85A\uDC88\uD848\uDFD0\u5F58\uD849\uDC71\u5F63\u97BD\uD85B\uDE6E\u5F72\u9340\uD862\uDE36\u5FA7\u5DB6\u3D5F\uD854\uDE50\uD847\uDF6A\uD85C\uDCF8\uD849\uDE68\u91D6\uD840\uDE9E\uD862\uDE29\u6031\u6685\uD846\uDC77\u3963\u3DC7\u3639\u5790\uD849\uDFB4\u7971\u3E40\u609E\u60A4\u60B3\uD852\uDD82\uD852\uDD8F\uD85E\uDE53\u74A4\u50E1\u5AA0\u6164\u8424\u6142\uD87E\uDCA6\uD85B\uDED2\u6181\u51F4\uD841\uDE56\u6187\u5BAA\uD84F\uDFB7\"],\n[\"fca1\",\"\uD84A\uDC5F\u61D3\uD862\uDF9D\uD866\uDD5D\u61D0\u3932\uD84A\uDD80\uD84A\uDCC1\u6023\u615C\u651E\u638B\uD840\uDD18\u62C5\uD845\uDF70\u62D5\uD84B\uDE0D\u636C\uD852\uDDDF\u3A17\u6438\u63F8\uD844\uDF8E\uD845\uDFFC\u6490\u6F8A\uD84B\uDE36\u9814\uD850\uDC8C\uD855\uDF1D\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\uD852\uDE28\uD852\uDE23\u6585\u656D\u655F\uD84C\uDC7E\u65B5\uD852\uDD40\u4B37\u65D1\u40D8\uD846\uDC29\u65E0\u65E3\u5FDF\uD84D\uDC00\u6618\uD84C\uDDF7\uD84C\uDDF8\u6644\uD84C\uDDA4\uD84C\uDDA5\u664B\uD843\uDE75\u6667\uD854\uDDE6\u6673\u6674\uD847\uDE3D\uD84C\uDE31\uD861\uDDF4\uD84C\uDDC8\uD854\uDF13\u77C5\uD84A\uDCF7\u99A4\u6702\uD850\uDF9C\uD852\uDE21\u3B2B\u69FA\uD84D\uDFC2\u675E\u6767\u6762\uD850\uDDCD\uD864\uDCED\u67D7\u44E9\u6822\u6E50\u923C\u6801\uD84C\uDFE6\uD85B\uDDA0\u685D\"],\n[\"fd40\",\"\uD84D\uDC6F\u69E1\u6A0B\uD862\uDEDF\u6973\u68C3\uD84D\uDDCD\u6901\u6900\u3D32\u3A01\uD84D\uDE3C\u3B80\u67AC\u6961\uD862\uDE4A\u42FC\u6936\u6998\u3BA1\uD840\uDFC9\u8363\u5090\u69F9\uD84D\uDE59\uD848\uDD2A\u6A45\uD84D\uDF03\u6A9D\u3BF3\u67B1\u6AC8\uD864\uDD9C\u3C0D\u6B1D\uD842\uDD23\u60DE\u6B35\u6B74\uD849\uDFCD\u6EB5\uD84E\uDEDB\uD840\uDFB5\uD846\uDD58\u3740\u5421\uD84E\uDF5A\u6BE1\uD84F\uDEFC\u6BDC\u6C37\uD849\uDC8B\uD852\uDCF1\uD85A\uDF51\u6C5A\u8226\u6C79\uD84F\uDDBC\u44C5\uD84F\uDDBD\uD850\uDDA4\uD852\uDD0C\uD852\uDD00\"],\n[\"fda1\",\"\uD84F\uDCC9\u36E5\u3CEB\uD843\uDD32\u9B83\uD84C\uDDF9\uD849\uDC91\u7F8F\u6837\uD85B\uDD25\uD85B\uDDA1\uD85B\uDDEB\u6D96\u6D5C\u6E7C\u6F04\uD852\uDD7F\uD850\uDC85\uD85B\uDE72\u8533\uD85B\uDF74\u51C7\u6C9C\u6E1D\u842E\uD862\uDF21\u6E2F\uD84F\uDE2F\u7453\uD84F\uDF82\u79CC\u6E4F\u5A91\uD84C\uDC4B\u6FF8\u370D\u6F9D\uD84F\uDE30\u6EFA\uD845\uDC97\uD850\uDC3D\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\uD864\uDD70\u3D3B\u6F9F\uD850\uDD44\u6FD3\uD850\uDC91\uD850\uDD55\uD850\uDC39\uD84F\uDFF0\uD84F\uDFB4\uD850\uDD3F\u51DF\uD850\uDD56\uD850\uDD57\uD850\uDD40\uD858\uDDDD\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\uD850\uDE77\u712B\u7145\u5A88\u714A\u716E\u5C9C\uD850\uDF65\u714F\u9362\uD850\uDEC1\u712C\uD851\uDC5A\uD852\uDE27\uD852\uDE22\u71BA\uD862\uDFE8\u70BD\u720E\"],\n[\"fe40\",\"\u9442\u7215\u5911\u9443\u7224\u9341\uD855\uDE05\u722E\u7240\uD852\uDD74\u68BD\u7255\u7257\u3E55\uD84C\uDC44\u680D\u6F3D\u7282\u732A\u732B\uD852\uDC23\uD862\uDC2B\u48ED\uD862\uDC04\u7328\u732E\u73CF\u73AA\uD843\uDC3A\uD85A\uDE2E\u73C9\u7449\uD850\uDDE2\uD845\uDEE7\uD852\uDE24\u6623\u36C5\uD852\uDDB7\uD852\uDD8D\uD852\uDDFB\u73F7\u7415\u6903\uD852\uDE26\u7439\uD841\uDDC3\u3ED7\u745C\uD84A\uDCAD\u7460\uD863\uDEB2\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\uD852\uDE8C\"],\n[\"fea1\",\"\uD850\uDD5F\uD852\uDE79\uD862\uDF8F\u5B46\uD863\uDC03\uD846\uDC9E\u74C8\uD846\uDD88\u750E\u74E9\u751E\uD863\uDED9\uD846\uDE4B\u5BD7\uD863\uDEAC\u9385\u754D\u754A\u7567\u756E\uD853\uDF82\u3F04\uD853\uDD13\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\uD858\uDFF5\u7690\u81EF\u37F8\uD85A\uDD11\uD85A\uDD0E\u76A1\u76A5\u76B7\u76CC\uD85B\uDF9F\u8462\uD854\uDC9D\uD854\uDD7D\uD847\uDE1C\u771E\u7726\u7740\u64AF\uD854\uDE20\u7758\uD84C\uDEAC\u77AF\uD862\uDD64\uD862\uDD68\uD845\uDEC1\u77F4\u7809\uD844\uDF76\uD852\uDE12\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\uD855\uDDE0\u78D7\u7934\u78B1\uD85D\uDE0C\u8FB8\u8884\uD862\uDF2B\uD858\uDC83\uD849\uDE1C\u7986\u8900\u6902\u7980\uD856\uDC57\u799D\uD85E\uDF39\u793C\u79A9\u6E2A\uD85C\uDD26\u3EA8\u79C6\uD864\uDD0D\u79D4\"]\n]\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n    \n    // == Japanese/ShiftJIS ====================================================\n    // All japanese encodings are based on JIS X set of standards:\n    // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n    //              Has several variations in 1978, 1983, 1990 and 1997.\n    // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n    // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n    //              2 planes, first is superset of 0208, second - revised 0212.\n    //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n    // Byte encodings are:\n    //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n    //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n    //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n    //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n    //               0x00-0x7F       - lower part of 0201\n    //               0x8E, 0xA1-0xDF - upper part of 0201\n    //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n    //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n    //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n    //               Used as-is in ISO2022 family.\n    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n    //                0201-1976 Roman, 0208-1978, 0208-1983.\n    //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n    //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n    //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n    //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n    //\n    // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n    //\n    // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n    'shiftjis': {\n        type: '_dbcs',\n        table: function() { return require('./tables/shiftjis.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n        encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n    },\n    'csshiftjis': 'shiftjis',\n    'mskanji': 'shiftjis',\n    'sjis': 'shiftjis',\n    'windows31j': 'shiftjis',\n    'ms31j': 'shiftjis',\n    'xsjis': 'shiftjis',\n    'windows932': 'shiftjis',\n    'ms932': 'shiftjis',\n    '932': 'shiftjis',\n    'cp932': 'shiftjis',\n\n    'eucjp': {\n        type: '_dbcs',\n        table: function() { return require('./tables/eucjp.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n    },\n\n    // TODO: KDDI extension to Shift_JIS\n    // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n    // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n    // == Chinese/GBK ==========================================================\n    // http://en.wikipedia.org/wiki/GBK\n    // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n    // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n    'gb2312': 'cp936',\n    'gb231280': 'cp936',\n    'gb23121980': 'cp936',\n    'csgb2312': 'cp936',\n    'csiso58gb231280': 'cp936',\n    'euccn': 'cp936',\n\n    // Microsoft's CP936 is a subset and approximation of GBK.\n    'windows936': 'cp936',\n    'ms936': 'cp936',\n    '936': 'cp936',\n    'cp936': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json') },\n    },\n\n    // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n    'gbk': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n    },\n    'xgbk': 'gbk',\n    'isoir58': 'gbk',\n\n    // GB18030 is an algorithmic extension of GBK.\n    // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n    // http://icu-project.org/docs/papers/gb18030.html\n    // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n    // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n    'gb18030': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n        gb18030: function() { return require('./tables/gb18030-ranges.json') },\n        encodeSkipVals: [0x80],\n        encodeAdd: {'\u20AC': 0xA2E3},\n    },\n\n    'chinese': 'gb18030',\n\n\n    // == Korean ===============================================================\n    // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n    'windows949': 'cp949',\n    'ms949': 'cp949',\n    '949': 'cp949',\n    'cp949': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp949.json') },\n    },\n\n    'cseuckr': 'cp949',\n    'csksc56011987': 'cp949',\n    'euckr': 'cp949',\n    'isoir149': 'cp949',\n    'korean': 'cp949',\n    'ksc56011987': 'cp949',\n    'ksc56011989': 'cp949',\n    'ksc5601': 'cp949',\n\n\n    // == Big5/Taiwan/Hong Kong ================================================\n    // There are lots of tables for Big5 and cp950. Please see the following links for history:\n    // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n    // Variations, in roughly number of defined chars:\n    //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n    //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n    //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n    //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n    //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n    //    Plus, it has 4 combining sequences.\n    //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n    //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n    //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n    //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n    //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n    //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n    //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n    //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n    // \n    // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n    // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n    'windows950': 'cp950',\n    'ms950': 'cp950',\n    '950': 'cp950',\n    'cp950': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json') },\n    },\n\n    // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n    'big5': 'big5hkscs',\n    'big5hkscs': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n        encodeSkipVals: [0xa2cc],\n    },\n\n    'cnbig5': 'big5hkscs',\n    'csbig5': 'big5hkscs',\n    'xxbig5': 'big5hkscs',\n};\n", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n    require(\"./internal\"),\n    require(\"./utf16\"),\n    require(\"./utf7\"),\n    require(\"./sbcs-codec\"),\n    require(\"./sbcs-data\"),\n    require(\"./sbcs-data-generated\"),\n    require(\"./dbcs-codec\"),\n    require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it. \nfor (var i = 0; i < modules.length; i++) {\n    var module = modules[i];\n    for (var enc in module)\n        if (Object.prototype.hasOwnProperty.call(module, enc))\n            exports[enc] = module[enc];\n}\n", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer,\n    Transform = require(\"stream\").Transform;\n\n\n// == Exports ==================================================================\nmodule.exports = function(iconv) {\n    \n    // Additional Public API.\n    iconv.encodeStream = function encodeStream(encoding, options) {\n        return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n    }\n\n    iconv.decodeStream = function decodeStream(encoding, options) {\n        return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n    }\n\n    iconv.supportsStreams = true;\n\n\n    // Not published yet.\n    iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;\n    iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;\n    iconv._collect = IconvLiteDecoderStream.prototype.collect;\n};\n\n\n// == Encoder stream =======================================================\nfunction IconvLiteEncoderStream(conv, options) {\n    this.conv = conv;\n    options = options || {};\n    options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n    Transform.call(this, options);\n}\n\nIconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n    constructor: { value: IconvLiteEncoderStream }\n});\n\nIconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n    if (typeof chunk != 'string')\n        return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n    try {\n        var res = this.conv.write(chunk);\n        if (res && res.length) this.push(res);\n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteEncoderStream.prototype._flush = function(done) {\n    try {\n        var res = this.conv.end();\n        if (res && res.length) this.push(res);\n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteEncoderStream.prototype.collect = function(cb) {\n    var chunks = [];\n    this.on('error', cb);\n    this.on('data', function(chunk) { chunks.push(chunk); });\n    this.on('end', function() {\n        cb(null, Buffer.concat(chunks));\n    });\n    return this;\n}\n\n\n// == Decoder stream =======================================================\nfunction IconvLiteDecoderStream(conv, options) {\n    this.conv = conv;\n    options = options || {};\n    options.encoding = this.encoding = 'utf8'; // We output strings.\n    Transform.call(this, options);\n}\n\nIconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n    constructor: { value: IconvLiteDecoderStream }\n});\n\nIconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n    if (!Buffer.isBuffer(chunk))\n        return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n    try {\n        var res = this.conv.write(chunk);\n        if (res && res.length) this.push(res, this.encoding);\n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteDecoderStream.prototype._flush = function(done) {\n    try {\n        var res = this.conv.end();\n        if (res && res.length) this.push(res, this.encoding);                \n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteDecoderStream.prototype.collect = function(cb) {\n    var res = '';\n    this.on('error', cb);\n    this.on('data', function(chunk) { res += chunk; });\n    this.on('end', function() {\n        cb(null, res);\n    });\n    return this;\n}\n\n", "\"use strict\";\nvar Buffer = require(\"buffer\").Buffer;\n// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer\n\n// == Extend Node primitives to use iconv-lite =================================\n\nmodule.exports = function (iconv) {\n    var original = undefined; // Place to keep original methods.\n\n    // Node authors rewrote Buffer internals to make it compatible with\n    // Uint8Array and we cannot patch key functions since then.\n    // Note: this does use older Buffer API on a purpose\n    iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array);\n\n    iconv.extendNodeEncodings = function extendNodeEncodings() {\n        if (original) return;\n        original = {};\n\n        if (!iconv.supportsNodeEncodingsExtension) {\n            console.error(\"ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node\");\n            console.error(\"See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility\");\n            return;\n        }\n\n        var nodeNativeEncodings = {\n            'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, \n            'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,\n        };\n\n        Buffer.isNativeEncoding = function(enc) {\n            return enc && nodeNativeEncodings[enc.toLowerCase()];\n        }\n\n        // -- SlowBuffer -----------------------------------------------------------\n        var SlowBuffer = require('buffer').SlowBuffer;\n\n        original.SlowBufferToString = SlowBuffer.prototype.toString;\n        SlowBuffer.prototype.toString = function(encoding, start, end) {\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.SlowBufferToString.call(this, encoding, start, end);\n\n            // Otherwise, use our decoding method.\n            if (typeof start == 'undefined') start = 0;\n            if (typeof end == 'undefined') end = this.length;\n            return iconv.decode(this.slice(start, end), encoding);\n        }\n\n        original.SlowBufferWrite = SlowBuffer.prototype.write;\n        SlowBuffer.prototype.write = function(string, offset, length, encoding) {\n            // Support both (string, offset, length, encoding)\n            // and the legacy (string, encoding, offset, length)\n            if (isFinite(offset)) {\n                if (!isFinite(length)) {\n                    encoding = length;\n                    length = undefined;\n                }\n            } else {  // legacy\n                var swap = encoding;\n                encoding = offset;\n                offset = length;\n                length = swap;\n            }\n\n            offset = +offset || 0;\n            var remaining = this.length - offset;\n            if (!length) {\n                length = remaining;\n            } else {\n                length = +length;\n                if (length > remaining) {\n                    length = remaining;\n                }\n            }\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.SlowBufferWrite.call(this, string, offset, length, encoding);\n\n            if (string.length > 0 && (length < 0 || offset < 0))\n                throw new RangeError('attempt to write beyond buffer bounds');\n\n            // Otherwise, use our encoding method.\n            var buf = iconv.encode(string, encoding);\n            if (buf.length < length) length = buf.length;\n            buf.copy(this, offset, 0, length);\n            return length;\n        }\n\n        // -- Buffer ---------------------------------------------------------------\n\n        original.BufferIsEncoding = Buffer.isEncoding;\n        Buffer.isEncoding = function(encoding) {\n            return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);\n        }\n\n        original.BufferByteLength = Buffer.byteLength;\n        Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) {\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.BufferByteLength.call(this, str, encoding);\n\n            // Slow, I know, but we don't have a better way yet.\n            return iconv.encode(str, encoding).length;\n        }\n\n        original.BufferToString = Buffer.prototype.toString;\n        Buffer.prototype.toString = function(encoding, start, end) {\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.BufferToString.call(this, encoding, start, end);\n\n            // Otherwise, use our decoding method.\n            if (typeof start == 'undefined') start = 0;\n            if (typeof end == 'undefined') end = this.length;\n            return iconv.decode(this.slice(start, end), encoding);\n        }\n\n        original.BufferWrite = Buffer.prototype.write;\n        Buffer.prototype.write = function(string, offset, length, encoding) {\n            var _offset = offset, _length = length, _encoding = encoding;\n            // Support both (string, offset, length, encoding)\n            // and the legacy (string, encoding, offset, length)\n            if (isFinite(offset)) {\n                if (!isFinite(length)) {\n                    encoding = length;\n                    length = undefined;\n                }\n            } else {  // legacy\n                var swap = encoding;\n                encoding = offset;\n                offset = length;\n                length = swap;\n            }\n\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.BufferWrite.call(this, string, _offset, _length, _encoding);\n\n            offset = +offset || 0;\n            var remaining = this.length - offset;\n            if (!length) {\n                length = remaining;\n            } else {\n                length = +length;\n                if (length > remaining) {\n                    length = remaining;\n                }\n            }\n\n            if (string.length > 0 && (length < 0 || offset < 0))\n                throw new RangeError('attempt to write beyond buffer bounds');\n\n            // Otherwise, use our encoding method.\n            var buf = iconv.encode(string, encoding);\n            if (buf.length < length) length = buf.length;\n            buf.copy(this, offset, 0, length);\n            return length;\n\n            // TODO: Set _charsWritten.\n        }\n\n\n        // -- Readable -------------------------------------------------------------\n        if (iconv.supportsStreams) {\n            var Readable = require('stream').Readable;\n\n            original.ReadableSetEncoding = Readable.prototype.setEncoding;\n            Readable.prototype.setEncoding = function setEncoding(enc, options) {\n                // Use our own decoder, it has the same interface.\n                // We cannot use original function as it doesn't handle BOM-s.\n                this._readableState.decoder = iconv.getDecoder(enc, options);\n                this._readableState.encoding = enc;\n            }\n\n            Readable.prototype.collect = iconv._collect;\n        }\n    }\n\n    // Remove iconv-lite Node primitive extensions.\n    iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {\n        if (!iconv.supportsNodeEncodingsExtension)\n            return;\n        if (!original)\n            throw new Error(\"require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.\")\n\n        delete Buffer.isNativeEncoding;\n\n        var SlowBuffer = require('buffer').SlowBuffer;\n\n        SlowBuffer.prototype.toString = original.SlowBufferToString;\n        SlowBuffer.prototype.write = original.SlowBufferWrite;\n\n        Buffer.isEncoding = original.BufferIsEncoding;\n        Buffer.byteLength = original.BufferByteLength;\n        Buffer.prototype.toString = original.BufferToString;\n        Buffer.prototype.write = original.BufferWrite;\n\n        if (iconv.supportsStreams) {\n            var Readable = require('stream').Readable;\n\n            Readable.prototype.setEncoding = original.ReadableSetEncoding;\n            delete Readable.prototype.collect;\n        }\n\n        original = undefined;\n    }\n}\n", "\"use strict\";\n\n// Some environments don't have global Buffer (e.g. React Native).\n// Solution would be installing npm modules \"buffer\" and \"stream\" explicitly.\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n    iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '\uFFFD';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n    str = \"\" + (str || \"\"); // Ensure string.\n\n    var encoder = iconv.getEncoder(encoding, options);\n\n    var res = encoder.write(str);\n    var trail = encoder.end();\n    \n    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n    if (typeof buf === 'string') {\n        if (!iconv.skipDecodeWarning) {\n            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n            iconv.skipDecodeWarning = true;\n        }\n\n        buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n    }\n\n    var decoder = iconv.getDecoder(encoding, options);\n\n    var res = decoder.write(buf);\n    var trail = decoder.end();\n\n    return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n    try {\n        iconv.getCodec(enc);\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n    if (!iconv.encodings)\n        iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n    \n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    var enc = iconv._canonicalizeEncoding(encoding);\n\n    // Traverse iconv.encodings to find actual codec.\n    var codecOptions = {};\n    while (true) {\n        var codec = iconv._codecDataCache[enc];\n        if (codec)\n            return codec;\n\n        var codecDef = iconv.encodings[enc];\n\n        switch (typeof codecDef) {\n            case \"string\": // Direct alias to other encoding.\n                enc = codecDef;\n                break;\n\n            case \"object\": // Alias with options. Can be layered.\n                for (var key in codecDef)\n                    codecOptions[key] = codecDef[key];\n\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n                \n                enc = codecDef.type;\n                break;\n\n            case \"function\": // Codec itself.\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n\n                // The codec function must load all tables and return object with .encoder and .decoder methods.\n                // It'll be called only once (for each different options object).\n                codec = new codecDef(codecOptions, iconv);\n\n                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n                return codec;\n\n            default:\n                throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n        }\n    }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        encoder = new codec.encoder(options, codec);\n\n    if (codec.bomAware && options && options.addBOM)\n        encoder = new bomHandling.PrependBOM(encoder, options);\n\n    return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        decoder = new codec.decoder(options, codec);\n\n    if (codec.bomAware && !(options && options.stripBOM === false))\n        decoder = new bomHandling.StripBOM(decoder, options);\n\n    return decoder;\n}\n\n\n// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.\nvar nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;\nif (nodeVer) {\n\n    // Load streaming support in Node v0.10+\n    var nodeVerArr = nodeVer.split(\".\").map(Number);\n    if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {\n        require(\"./streams\")(iconv);\n    }\n\n    // Load Node primitive extensions.\n    require(\"./extend-node\")(iconv);\n}\n\nif (\"\u0100\" != \"\\u0100\") {\n    console.error(\"iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n", "/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n  var listeners = stream.listeners('data')\n\n  for (var i = 0; i < listeners.length; i++) {\n    if (listeners[i].name === 'ondata') {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n  if (!stream) {\n    throw new TypeError('argument stream is required')\n  }\n\n  if (typeof stream.unpipe === 'function') {\n    // new-style\n    stream.unpipe()\n    return\n  }\n\n  // Node.js 0.8 hack\n  if (!hasPipeDataListeners(stream)) {\n    return\n  }\n\n  var listener\n  var listeners = stream.listeners('close')\n\n  for (var i = 0; i < listeners.length; i++) {\n    listener = listeners[i]\n\n    if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n      continue\n    }\n\n    // invoke the listener\n    listener.call(stream)\n  }\n}\n", "/*!\n * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar bytes = require('bytes')\nvar createError = require('http-errors')\nvar iconv = require('iconv-lite')\nvar unpipe = require('unpipe')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder (encoding) {\n  if (!encoding) return null\n\n  try {\n    return iconv.getDecoder(encoding)\n  } catch (e) {\n    // error getting decoder\n    if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e\n\n    // the encoding was not found\n    throw createError(415, 'specified encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody (stream, options, callback) {\n  var done = callback\n  var opts = options || {}\n\n  // light validation\n  if (stream === undefined) {\n    throw new TypeError('argument stream is required')\n  } else if (typeof stream !== 'object' || stream === null || typeof stream.on !== 'function') {\n    throw new TypeError('argument stream must be a stream')\n  }\n\n  if (options === true || typeof options === 'string') {\n    // short cut for encoding\n    opts = {\n      encoding: options\n    }\n  }\n\n  if (typeof options === 'function') {\n    done = options\n    opts = {}\n  }\n\n  // validate callback is a function, if provided\n  if (done !== undefined && typeof done !== 'function') {\n    throw new TypeError('argument callback must be a function')\n  }\n\n  // require the callback without promises\n  if (!done && !global.Promise) {\n    throw new TypeError('argument callback is required')\n  }\n\n  // get encoding\n  var encoding = opts.encoding !== true\n    ? opts.encoding\n    : 'utf-8'\n\n  // convert the limit to an integer\n  var limit = bytes.parse(opts.limit)\n\n  // convert the expected length to an integer\n  var length = opts.length != null && !isNaN(opts.length)\n    ? parseInt(opts.length, 10)\n    : null\n\n  if (done) {\n    // classic callback style\n    return readStream(stream, encoding, length, limit, wrap(done))\n  }\n\n  return new Promise(function executor (resolve, reject) {\n    readStream(stream, encoding, length, limit, function onRead (err, buf) {\n      if (err) return reject(err)\n      resolve(buf)\n    })\n  })\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt (stream) {\n  // unpipe everything from the stream\n  unpipe(stream)\n\n  // pause stream\n  if (typeof stream.pause === 'function') {\n    stream.pause()\n  }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream (stream, encoding, length, limit, callback) {\n  var complete = false\n  var sync = true\n\n  // check the length and limit options.\n  // note: we intentionally leave the stream paused,\n  // so users should handle the stream themselves.\n  if (limit !== null && length !== null && length > limit) {\n    return done(createError(413, 'request entity too large', {\n      expected: length,\n      length: length,\n      limit: limit,\n      type: 'entity.too.large'\n    }))\n  }\n\n  // streams1: assert request encoding is buffer.\n  // streams2+: assert the stream encoding is buffer.\n  //   stream._decoder: streams1\n  //   state.encoding: streams2\n  //   state.decoder: streams2, specifically < 0.10.6\n  var state = stream._readableState\n  if (stream._decoder || (state && (state.encoding || state.decoder))) {\n    // developer error\n    return done(createError(500, 'stream encoding should not be set', {\n      type: 'stream.encoding.set'\n    }))\n  }\n\n  if (typeof stream.readable !== 'undefined' && !stream.readable) {\n    return done(createError(500, 'stream is not readable', {\n      type: 'stream.not.readable'\n    }))\n  }\n\n  var received = 0\n  var decoder\n\n  try {\n    decoder = getDecoder(encoding)\n  } catch (err) {\n    return done(err)\n  }\n\n  var buffer = decoder\n    ? ''\n    : []\n\n  // attach listeners\n  stream.on('aborted', onAborted)\n  stream.on('close', cleanup)\n  stream.on('data', onData)\n  stream.on('end', onEnd)\n  stream.on('error', onEnd)\n\n  // mark sync section complete\n  sync = false\n\n  function done () {\n    var args = new Array(arguments.length)\n\n    // copy arguments\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n\n    // mark complete\n    complete = true\n\n    if (sync) {\n      process.nextTick(invokeCallback)\n    } else {\n      invokeCallback()\n    }\n\n    function invokeCallback () {\n      cleanup()\n\n      if (args[0]) {\n        // halt the stream on error\n        halt(stream)\n      }\n\n      callback.apply(null, args)\n    }\n  }\n\n  function onAborted () {\n    if (complete) return\n\n    done(createError(400, 'request aborted', {\n      code: 'ECONNABORTED',\n      expected: length,\n      length: length,\n      received: received,\n      type: 'request.aborted'\n    }))\n  }\n\n  function onData (chunk) {\n    if (complete) return\n\n    received += chunk.length\n\n    if (limit !== null && received > limit) {\n      done(createError(413, 'request entity too large', {\n        limit: limit,\n        received: received,\n        type: 'entity.too.large'\n      }))\n    } else if (decoder) {\n      buffer += decoder.write(chunk)\n    } else {\n      buffer.push(chunk)\n    }\n  }\n\n  function onEnd (err) {\n    if (complete) return\n    if (err) return done(err)\n\n    if (length !== null && received !== length) {\n      done(createError(400, 'request size did not match content length', {\n        expected: length,\n        length: length,\n        received: received,\n        type: 'request.size.invalid'\n      }))\n    } else {\n      var string = decoder\n        ? buffer + (decoder.end() || '')\n        : Buffer.concat(buffer)\n      done(null, string)\n    }\n  }\n\n  function cleanup () {\n    buffer = null\n\n    stream.removeListener('aborted', onAborted)\n    stream.removeListener('data', onData)\n    stream.removeListener('end', onEnd)\n    stream.removeListener('error', onEnd)\n    stream.removeListener('close', cleanup)\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n", "/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n  if (!Array.isArray(stuff))\n    throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n  var cleanups = []\n\n  for (var i = 0; i < stuff.length; i++) {\n    var arr = stuff[i]\n\n    if (!Array.isArray(arr) || arr.length < 2)\n      throw new TypeError('each array member must be [ee, events...]')\n\n    var ee = arr[0]\n\n    for (var j = 1; j < arr.length; j++) {\n      var event = arr[j]\n      var fn = listener(event, callback)\n\n      // listen to the event\n      ee.on(event, fn)\n      // push this listener to the list of cleanups\n      cleanups.push({\n        ee: ee,\n        event: event,\n        fn: fn,\n      })\n    }\n  }\n\n  function callback() {\n    cleanup()\n    done.apply(null, arguments)\n  }\n\n  function cleanup() {\n    var x\n    for (var i = 0; i < cleanups.length; i++) {\n      x = cleanups[i]\n      x.ee.removeListener(x.event, x.fn)\n    }\n  }\n\n  function thunk(fn) {\n    done = fn\n  }\n\n  thunk.cancel = cleanup\n\n  return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n  return function onevent(arg1) {\n    var args = new Array(arguments.length)\n    var ee = this\n    var err = event === 'error'\n      ? arg1\n      : null\n\n    // copy args to prevent arguments escaping scope\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n\n    done(err, ee, event, args)\n  }\n}\n", "/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n  ? setImmediate\n  : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished (msg, listener) {\n  if (isFinished(msg) !== false) {\n    defer(listener, null, msg)\n    return msg\n  }\n\n  // attach the listener to the message\n  attachListener(msg, wrap(listener))\n\n  return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished (msg) {\n  var socket = msg.socket\n\n  if (typeof msg.finished === 'boolean') {\n    // OutgoingMessage\n    return Boolean(msg.finished || (socket && !socket.writable))\n  }\n\n  if (typeof msg.complete === 'boolean') {\n    // IncomingMessage\n    return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n  }\n\n  // don't know\n  return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener (msg, callback) {\n  var eeMsg\n  var eeSocket\n  var finished = false\n\n  function onFinish (error) {\n    eeMsg.cancel()\n    eeSocket.cancel()\n\n    finished = true\n    callback(error)\n  }\n\n  // finished on first message event\n  eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n  function onSocket (socket) {\n    // remove listener\n    msg.removeListener('socket', onSocket)\n\n    if (finished) return\n    if (eeMsg !== eeSocket) return\n\n    // finished on first socket event\n    eeSocket = first([[socket, 'error', 'close']], onFinish)\n  }\n\n  if (msg.socket) {\n    // socket already assigned\n    onSocket(msg.socket)\n    return\n  }\n\n  // wait for socket to be assigned\n  msg.on('socket', onSocket)\n\n  if (msg.socket === undefined) {\n    // istanbul ignore next: node.js 0.8 patch\n    patchAssignSocket(msg, onSocket)\n  }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener (msg, listener) {\n  var attached = msg.__onFinished\n\n  // create a private single listener with queue\n  if (!attached || !attached.queue) {\n    attached = msg.__onFinished = createListener(msg)\n    attachFinishedListener(msg, attached)\n  }\n\n  attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener (msg) {\n  function listener (err) {\n    if (msg.__onFinished === listener) msg.__onFinished = null\n    if (!listener.queue) return\n\n    var queue = listener.queue\n    listener.queue = null\n\n    for (var i = 0; i < queue.length; i++) {\n      queue[i](err, msg)\n    }\n  }\n\n  listener.queue = []\n\n  return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\n// istanbul ignore next: node.js 0.8 patch\nfunction patchAssignSocket (res, callback) {\n  var assignSocket = res.assignSocket\n\n  if (typeof assignSocket !== 'function') return\n\n  // res.on('socket', callback) is broken in 0.8\n  res.assignSocket = function _assignSocket (socket) {\n    assignSocket.call(this, socket)\n    callback(socket)\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar destroy = require('destroy')\nvar getBody = require('raw-body')\nvar iconv = require('iconv-lite')\nvar onFinished = require('on-finished')\nvar unpipe = require('unpipe')\nvar zlib = require('zlib')\n\n/**\n * Module exports.\n */\n\nmodule.exports = read\n\n/**\n * Read a request into a buffer and parse.\n *\n * @param {object} req\n * @param {object} res\n * @param {function} next\n * @param {function} parse\n * @param {function} debug\n * @param {object} options\n * @private\n */\n\nfunction read (req, res, next, parse, debug, options) {\n  var length\n  var opts = options\n  var stream\n\n  // flag as parsed\n  req._body = true\n\n  // read options\n  var encoding = opts.encoding !== null\n    ? opts.encoding\n    : null\n  var verify = opts.verify\n\n  try {\n    // get the content stream\n    stream = contentstream(req, debug, opts.inflate)\n    length = stream.length\n    stream.length = undefined\n  } catch (err) {\n    return next(err)\n  }\n\n  // set raw-body options\n  opts.length = length\n  opts.encoding = verify\n    ? null\n    : encoding\n\n  // assert charset is supported\n  if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {\n    return next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n      charset: encoding.toLowerCase(),\n      type: 'charset.unsupported'\n    }))\n  }\n\n  // read body\n  debug('read body')\n  getBody(stream, opts, function (error, body) {\n    if (error) {\n      var _error\n\n      if (error.type === 'encoding.unsupported') {\n        // echo back charset\n        _error = createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n          charset: encoding.toLowerCase(),\n          type: 'charset.unsupported'\n        })\n      } else {\n        // set status code on error\n        _error = createError(400, error)\n      }\n\n      // unpipe from stream and destroy\n      if (stream !== req) {\n        unpipe(req)\n        destroy(stream, true)\n      }\n\n      // read off entire request\n      dump(req, function onfinished () {\n        next(createError(400, _error))\n      })\n      return\n    }\n\n    // verify\n    if (verify) {\n      try {\n        debug('verify body')\n        verify(req, res, body, encoding)\n      } catch (err) {\n        next(createError(403, err, {\n          body: body,\n          type: err.type || 'entity.verify.failed'\n        }))\n        return\n      }\n    }\n\n    // parse\n    var str = body\n    try {\n      debug('parse body')\n      str = typeof body !== 'string' && encoding !== null\n        ? iconv.decode(body, encoding)\n        : body\n      req.body = parse(str)\n    } catch (err) {\n      next(createError(400, err, {\n        body: str,\n        type: err.type || 'entity.parse.failed'\n      }))\n      return\n    }\n\n    next()\n  })\n}\n\n/**\n * Get the content stream of the request.\n *\n * @param {object} req\n * @param {function} debug\n * @param {boolean} [inflate=true]\n * @return {object}\n * @api private\n */\n\nfunction contentstream (req, debug, inflate) {\n  var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()\n  var length = req.headers['content-length']\n  var stream\n\n  debug('content-encoding \"%s\"', encoding)\n\n  if (inflate === false && encoding !== 'identity') {\n    throw createError(415, 'content encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n\n  switch (encoding) {\n    case 'deflate':\n      stream = zlib.createInflate()\n      debug('inflate body')\n      req.pipe(stream)\n      break\n    case 'gzip':\n      stream = zlib.createGunzip()\n      debug('gunzip body')\n      req.pipe(stream)\n      break\n    case 'identity':\n      stream = req\n      stream.length = length\n      break\n    default:\n      throw createError(415, 'unsupported content encoding \"' + encoding + '\"', {\n        encoding: encoding,\n        type: 'encoding.unsupported'\n      })\n  }\n\n  return stream\n}\n\n/**\n * Dump the contents of a request.\n *\n * @param {object} req\n * @param {function} callback\n * @api private\n */\n\nfunction dump (req, callback) {\n  if (onFinished.isFinished(req)) {\n    callback(null)\n  } else {\n    onFinished(req, callback)\n    req.resume()\n  }\n}\n", "/*!\n * media-typer\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 2616 sec 3.7\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * SHT           = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n */\nvar paramRegExp = /; *([!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) *= *(\"(?:[ !\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u0020-\\u007e])*\"|[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) */g;\nvar textRegExp = /^[\\u0020-\\u007e\\u0080-\\u00ff]+$/\nvar tokenRegExp = /^[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n */\nvar qescRegExp = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\nvar quoteRegExp = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first  = ALPHA / DIGIT\n * restricted-name-chars  = ALPHA / DIGIT / \"!\" / \"#\" /\n *                          \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n *                              ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n *                              ; specify a structured syntax suffix\n * ALPHA =  %x41-5A / %x61-7A   ; A-Z / a-z\n * DIGIT =  %x30-39             ; 0-9\n */\nvar subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @api public\n */\n\nfunction format(obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var subtype = obj.subtype\n  var suffix = obj.suffix\n  var type = obj.type\n\n  if (!type || !typeNameRegExp.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  if (!subtype || !subtypeNameRegExp.test(subtype)) {\n    throw new TypeError('invalid subtype')\n  }\n\n  // format as type/subtype\n  var string = type + '/' + subtype\n\n  // append +suffix\n  if (suffix) {\n    if (!typeNameRegExp.test(suffix)) {\n      throw new TypeError('invalid suffix')\n    }\n\n    string += '+' + suffix\n  }\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!tokenRegExp.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @api public\n */\n\nfunction parse(string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  if (typeof string === 'object') {\n    string = getcontenttype(string)\n  }\n\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = string.indexOf(';')\n  var type = index !== -1\n    ? string.substr(0, index)\n    : string\n\n  var key\n  var match\n  var obj = splitType(type)\n  var params = {}\n  var value\n\n  paramRegExp.lastIndex = index\n\n  while (match = paramRegExp.exec(string)) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(qescRegExp, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  obj.parameters = params\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @api private\n */\n\nfunction getcontenttype(obj) {\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    return obj.getHeader('content-type')\n  }\n\n  if (typeof obj.headers === 'object') {\n    // req-like\n    return obj.headers && obj.headers['content-type']\n  }\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring(val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (tokenRegExp.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !textRegExp.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(quoteRegExp, '\\\\$1') + '\"'\n}\n\n/**\n * Simply \"type/subtype+siffx\" into parts.\n *\n * @param {string} string\n * @return {Object}\n * @api private\n */\n\nfunction splitType(string) {\n  var match = typeRegExp.exec(string.toLowerCase())\n\n  if (!match) {\n    throw new TypeError('invalid media type')\n  }\n\n  var type = match[1]\n  var subtype = match[2]\n  var suffix\n\n  // suffix after last +\n  var index = subtype.lastIndexOf('+')\n  if (index !== -1) {\n    suffix = subtype.substr(index + 1)\n    subtype = subtype.substr(0, index)\n  }\n\n  var obj = {\n    type: type,\n    subtype: subtype,\n    suffix: suffix\n  }\n\n  return obj\n}\n", "{\n  \"application/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpdash-qoe-report+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/3gpp-ims+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphalforms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/a2l\": {\n    \"source\": \"iana\"\n  },\n  \"application/ace+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/activemessage\": {\n    \"source\": \"iana\"\n  },\n  \"application/activity+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-directory+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcost+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcostparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointprop+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointpropparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-error+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamcontrol+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aml\": {\n    \"source\": \"iana\"\n  },\n  \"application/andrew-inset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez\"]\n  },\n  \"application/applefile\": {\n    \"source\": \"iana\"\n  },\n  \"application/applixware\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aw\"]\n  },\n  \"application/at+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/atf\": {\n    \"source\": \"iana\"\n  },\n  \"application/atfx\": {\n    \"source\": \"iana\"\n  },\n  \"application/atom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atom\"]\n  },\n  \"application/atomcat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomcat\"]\n  },\n  \"application/atomdeleted+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomdeleted\"]\n  },\n  \"application/atomicmail\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomsvc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomsvc\"]\n  },\n  \"application/atsc-dwd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dwd\"]\n  },\n  \"application/atsc-dynamic-event-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/atsc-held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"held\"]\n  },\n  \"application/atsc-rdt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/atsc-rsat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsat\"]\n  },\n  \"application/atxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/auth-policy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/bacnet-xdd+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/batch-smtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/beep+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/calendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/calendar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xcs\"]\n  },\n  \"application/call-completion\": {\n    \"source\": \"iana\"\n  },\n  \"application/cals-1840\": {\n    \"source\": \"iana\"\n  },\n  \"application/captive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/cccex\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccmp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ccxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ccxml\"]\n  },\n  \"application/cdfx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdfx\"]\n  },\n  \"application/cdmi-capability\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmia\"]\n  },\n  \"application/cdmi-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmic\"]\n  },\n  \"application/cdmi-domain\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmid\"]\n  },\n  \"application/cdmi-object\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmio\"]\n  },\n  \"application/cdmi-queue\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmiq\"]\n  },\n  \"application/cdni\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea-2018+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cellml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cfw\": {\n    \"source\": \"iana\"\n  },\n  \"application/city+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clr\": {\n    \"source\": \"iana\"\n  },\n  \"application/clue+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clue_info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cms\": {\n    \"source\": \"iana\"\n  },\n  \"application/cnrp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-group+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/commonground\": {\n    \"source\": \"iana\"\n  },\n  \"application/conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key-set\": {\n    \"source\": \"iana\"\n  },\n  \"application/cpl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cpl\"]\n  },\n  \"application/csrattrs\": {\n    \"source\": \"iana\"\n  },\n  \"application/csta+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cstadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/csvm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cu-seeme\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cu\"]\n  },\n  \"application/cwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/cybercash\": {\n    \"source\": \"iana\"\n  },\n  \"application/dart\": {\n    \"compressible\": true\n  },\n  \"application/dash+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpd\"]\n  },\n  \"application/dash-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpp\"]\n  },\n  \"application/dashdelta\": {\n    \"source\": \"iana\"\n  },\n  \"application/davmount+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"davmount\"]\n  },\n  \"application/dca-rft\": {\n    \"source\": \"iana\"\n  },\n  \"application/dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/dec-dx\": {\n    \"source\": \"iana\"\n  },\n  \"application/dialog-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dii\": {\n    \"source\": \"iana\"\n  },\n  \"application/dit\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/docbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dbk\"]\n  },\n  \"application/dots+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/dskpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dssc+der\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dssc\"]\n  },\n  \"application/dssc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdssc\"]\n  },\n  \"application/dvcs\": {\n    \"source\": \"iana\"\n  },\n  \"application/ecmascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es\",\"ecma\"]\n  },\n  \"application/edi-consent\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-x12\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/edifact\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/efi\": {\n    \"source\": \"iana\"\n  },\n  \"application/elm+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/elm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.cap+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.comment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.deviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.ecall.msd\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.providerinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.serviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.subscriberinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.veds+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emma+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emma\"]\n  },\n  \"application/emotionml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emotionml\"]\n  },\n  \"application/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/epp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/epub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"epub\"]\n  },\n  \"application/eshop\": {\n    \"source\": \"iana\"\n  },\n  \"application/exi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exi\"]\n  },\n  \"application/expect-ct-report+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/express\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exp\"]\n  },\n  \"application/fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/fastsoap\": {\n    \"source\": \"iana\"\n  },\n  \"application/fdt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fdt\"]\n  },\n  \"application/fhir+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fhir+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fido.trusted-apps+json\": {\n    \"compressible\": true\n  },\n  \"application/fits\": {\n    \"source\": \"iana\"\n  },\n  \"application/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-tdpfr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pfr\"]\n  },\n  \"application/font-woff\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/framework-attributes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"geojson\"]\n  },\n  \"application/geo+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/geopackage+sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/geoxacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/gltf-buffer\": {\n    \"source\": \"iana\"\n  },\n  \"application/gml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gml\"]\n  },\n  \"application/gpx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"gpx\"]\n  },\n  \"application/gxf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gxf\"]\n  },\n  \"application/gzip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gz\"]\n  },\n  \"application/h224\": {\n    \"source\": \"iana\"\n  },\n  \"application/held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/hjson\": {\n    \"extensions\": [\"hjson\"]\n  },\n  \"application/http\": {\n    \"source\": \"iana\"\n  },\n  \"application/hyperstudio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stk\"]\n  },\n  \"application/ibe-key-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pkg-reply+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pp-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/iges\": {\n    \"source\": \"iana\"\n  },\n  \"application/im-iscomposing+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/index\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.cmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.obj\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.response\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.vnd\": {\n    \"source\": \"iana\"\n  },\n  \"application/inkml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ink\",\"inkml\"]\n  },\n  \"application/iotp\": {\n    \"source\": \"iana\"\n  },\n  \"application/ipfix\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipfix\"]\n  },\n  \"application/ipp\": {\n    \"source\": \"iana\"\n  },\n  \"application/isup\": {\n    \"source\": \"iana\"\n  },\n  \"application/its+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"its\"]\n  },\n  \"application/java-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jar\",\"war\",\"ear\"]\n  },\n  \"application/java-serialized-object\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"ser\"]\n  },\n  \"application/java-vm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"class\"]\n  },\n  \"application/javascript\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\",\"mjs\"]\n  },\n  \"application/jf2feed+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jose\": {\n    \"source\": \"iana\"\n  },\n  \"application/jose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jrd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jscalendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"json\",\"map\"]\n  },\n  \"application/json-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/json5\": {\n    \"extensions\": [\"json5\"]\n  },\n  \"application/jsonml+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonml\"]\n  },\n  \"application/jwk+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/kpml-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ld+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonld\"]\n  },\n  \"application/lgr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lgr\"]\n  },\n  \"application/link-format\": {\n    \"source\": \"iana\"\n  },\n  \"application/load-control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lost+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lostxml\"]\n  },\n  \"application/lostsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lpf+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/lxf\": {\n    \"source\": \"iana\"\n  },\n  \"application/mac-binhex40\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hqx\"]\n  },\n  \"application/mac-compactpro\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpt\"]\n  },\n  \"application/macwriteii\": {\n    \"source\": \"iana\"\n  },\n  \"application/mads+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mads\"]\n  },\n  \"application/manifest+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"webmanifest\"]\n  },\n  \"application/marc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrc\"]\n  },\n  \"application/marcxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mrcx\"]\n  },\n  \"application/mathematica\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ma\",\"nb\",\"mb\"]\n  },\n  \"application/mathml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mathml\"]\n  },\n  \"application/mathml-content+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mathml-presentation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-associated-procedure-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-deregister+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-envelope+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-protection-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-reception-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-schedule+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-user-service-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbox\"]\n  },\n  \"application/media-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpf\"]\n  },\n  \"application/media_control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mediaservercontrol+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mscml\"]\n  },\n  \"application/merge-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/metalink+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"metalink\"]\n  },\n  \"application/metalink4+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"meta4\"]\n  },\n  \"application/mets+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mets\"]\n  },\n  \"application/mf4\": {\n    \"source\": \"iana\"\n  },\n  \"application/mikey\": {\n    \"source\": \"iana\"\n  },\n  \"application/mipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/missing-blocks+cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/mmt-aei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"maei\"]\n  },\n  \"application/mmt-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musd\"]\n  },\n  \"application/mods+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mods\"]\n  },\n  \"application/moss-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/moss-signature\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/mp21\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m21\",\"mp21\"]\n  },\n  \"application/mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mp4s\",\"m4p\"]\n  },\n  \"application/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod-xmt\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-consumer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mrb-publish+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/msc-ivr+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msc-mixer+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msword\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"doc\",\"dot\"]\n  },\n  \"application/mud+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/multipart-core\": {\n    \"source\": \"iana\"\n  },\n  \"application/mxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxf\"]\n  },\n  \"application/n-quads\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nq\"]\n  },\n  \"application/n-triples\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nt\"]\n  },\n  \"application/nasdata\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-checkgroups\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-groupinfo\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-transmission\": {\n    \"source\": \"iana\"\n  },\n  \"application/nlsml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/node\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cjs\"]\n  },\n  \"application/nss\": {\n    \"source\": \"iana\"\n  },\n  \"application/oauth-authz-req+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/oblivious-dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/octet-stream\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n  },\n  \"application/oda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oda\"]\n  },\n  \"application/odm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/odx\": {\n    \"source\": \"iana\"\n  },\n  \"application/oebps-package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"opf\"]\n  },\n  \"application/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogx\"]\n  },\n  \"application/omdoc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"omdoc\"]\n  },\n  \"application/onenote\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n  },\n  \"application/opc-nodeset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/oscore\": {\n    \"source\": \"iana\"\n  },\n  \"application/oxps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oxps\"]\n  },\n  \"application/p21\": {\n    \"source\": \"iana\"\n  },\n  \"application/p21+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/p2p-overlay+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"relo\"]\n  },\n  \"application/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/passport\": {\n    \"source\": \"iana\"\n  },\n  \"application/patch-ops-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xer\"]\n  },\n  \"application/pdf\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pdf\"]\n  },\n  \"application/pdx\": {\n    \"source\": \"iana\"\n  },\n  \"application/pem-certificate-chain\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pgp\"]\n  },\n  \"application/pgp-keys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\"]\n  },\n  \"application/pgp-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\",\"sig\"]\n  },\n  \"application/pics-rules\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prf\"]\n  },\n  \"application/pidf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pidf-diff+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pkcs10\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p10\"]\n  },\n  \"application/pkcs12\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs7-mime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7m\",\"p7c\"]\n  },\n  \"application/pkcs7-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7s\"]\n  },\n  \"application/pkcs8\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p8\"]\n  },\n  \"application/pkcs8-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkix-attr-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ac\"]\n  },\n  \"application/pkix-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cer\"]\n  },\n  \"application/pkix-crl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"crl\"]\n  },\n  \"application/pkix-pkipath\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pkipath\"]\n  },\n  \"application/pkixcmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pki\"]\n  },\n  \"application/pls+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pls\"]\n  },\n  \"application/poc-settings+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/postscript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ai\",\"eps\",\"ps\"]\n  },\n  \"application/ppsp-tracker+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/provenance+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"provx\"]\n  },\n  \"application/prs.alvestrand.titrax-sheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.cww\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cww\"]\n  },\n  \"application/prs.cyn\": {\n    \"source\": \"iana\",\n    \"charset\": \"7-BIT\"\n  },\n  \"application/prs.hpub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/prs.nprend\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.plucker\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.rdf-xml-crypt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.xsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/pskc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pskcxml\"]\n  },\n  \"application/pvd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/qsig\": {\n    \"source\": \"iana\"\n  },\n  \"application/raml+yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"raml\"]\n  },\n  \"application/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/rdap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rdf\",\"owl\"]\n  },\n  \"application/reginfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rif\"]\n  },\n  \"application/relax-ng-compact-syntax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rnc\"]\n  },\n  \"application/remote-printing\": {\n    \"source\": \"iana\"\n  },\n  \"application/reputon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/resource-lists+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rl\"]\n  },\n  \"application/resource-lists-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rld\"]\n  },\n  \"application/rfc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/riscos\": {\n    \"source\": \"iana\"\n  },\n  \"application/rlmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rls-services+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rs\"]\n  },\n  \"application/route-apd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rapd\"]\n  },\n  \"application/route-s-tsid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sls\"]\n  },\n  \"application/route-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rusd\"]\n  },\n  \"application/rpki-ghostbusters\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gbr\"]\n  },\n  \"application/rpki-manifest\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mft\"]\n  },\n  \"application/rpki-publication\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-roa\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"roa\"]\n  },\n  \"application/rpki-updown\": {\n    \"source\": \"iana\"\n  },\n  \"application/rsd+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rsd\"]\n  },\n  \"application/rss+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rss\"]\n  },\n  \"application/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"application/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"application/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlassertion+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/samlmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif-external-properties+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sbe\": {\n    \"source\": \"iana\"\n  },\n  \"application/sbml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sbml\"]\n  },\n  \"application/scaip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scim+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scvp-cv-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scq\"]\n  },\n  \"application/scvp-cv-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scs\"]\n  },\n  \"application/scvp-vp-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spq\"]\n  },\n  \"application/scvp-vp-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spp\"]\n  },\n  \"application/sdp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdp\"]\n  },\n  \"application/secevent+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"senmlx\"]\n  },\n  \"application/senml-etch+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml-etch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sensml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sensmlx\"]\n  },\n  \"application/sensml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sep+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sep-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/session-info\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setpay\"]\n  },\n  \"application/set-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-registration-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setreg\"]\n  },\n  \"application/sgml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sgml-open-catalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/shf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"shf\"]\n  },\n  \"application/sieve\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"siv\",\"sieve\"]\n  },\n  \"application/simple-filter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/simple-message-summary\": {\n    \"source\": \"iana\"\n  },\n  \"application/simplesymbolcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/sipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/slate\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"smi\",\"smil\"]\n  },\n  \"application/smpte336m\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sparql-query\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rq\"]\n  },\n  \"application/sparql-results+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"srx\"]\n  },\n  \"application/spdx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/spirits-event+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sql\": {\n    \"source\": \"iana\"\n  },\n  \"application/srgs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gram\"]\n  },\n  \"application/srgs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"grxml\"]\n  },\n  \"application/sru+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sru\"]\n  },\n  \"application/ssdl+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ssdl\"]\n  },\n  \"application/ssml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ssml\"]\n  },\n  \"application/stix+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/swid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"swidtag\"]\n  },\n  \"application/tamp-apex-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-apex-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-error\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tar\": {\n    \"compressible\": true\n  },\n  \"application/taxii+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/td+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tei\",\"teicorpus\"]\n  },\n  \"application/tetra_isi\": {\n    \"source\": \"iana\"\n  },\n  \"application/thraud+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tfi\"]\n  },\n  \"application/timestamp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamp-reply\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamped-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tsd\"]\n  },\n  \"application/tlsrpt+gzip\": {\n    \"source\": \"iana\"\n  },\n  \"application/tlsrpt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tnauthlist\": {\n    \"source\": \"iana\"\n  },\n  \"application/token-introspection+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/toml\": {\n    \"compressible\": true,\n    \"extensions\": [\"toml\"]\n  },\n  \"application/trickle-ice-sdpfrag\": {\n    \"source\": \"iana\"\n  },\n  \"application/trig\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"trig\"]\n  },\n  \"application/ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttml\"]\n  },\n  \"application/tve-trigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif-leap\": {\n    \"source\": \"iana\"\n  },\n  \"application/ubjson\": {\n    \"compressible\": false,\n    \"extensions\": [\"ubj\"]\n  },\n  \"application/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-grpsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/urc-ressheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsheet\"]\n  },\n  \"application/urc-targetdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"td\"]\n  },\n  \"application/urc-uisocketdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vemmi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vividence.scriptfile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.1000minds.decision-model+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"1km\"]\n  },\n  \"application/vnd.3gpp-prose+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc3ch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-v2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gnas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.access-transfer-events+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.bsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gmop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gtpc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.interworking-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.lpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mc-signalling-ear\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-signalling\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-signed+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mid-call+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ngap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pfcp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pic-bw-large\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-small\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"psb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-var\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pvb\"]\n  },\n  \"application/vnd.3gpp.s1ap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-ext+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.state-and-event-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ussd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.tcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tcap\"]\n  },\n  \"application/vnd.3lightssoftware.imagescal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3m.post-it-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pwn\"]\n  },\n  \"application/vnd.accpac.simply.aso\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aso\"]\n  },\n  \"application/vnd.accpac.simply.imp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"imp\"]\n  },\n  \"application/vnd.acucobol\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acu\"]\n  },\n  \"application/vnd.acucorp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atc\",\"acutc\"]\n  },\n  \"application/vnd.adobe.air-application-installer-package+zip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"air\"]\n  },\n  \"application/vnd.adobe.flash.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.formscentral.fcdt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcdt\"]\n  },\n  \"application/vnd.adobe.fxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fxp\",\"fxpl\"]\n  },\n  \"application/vnd.adobe.partial-upload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.xdp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdp\"]\n  },\n  \"application/vnd.adobe.xfdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/vnd.aether.imp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata-pagedef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.cmoca-cmresource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-charset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codedfont\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codepage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-cmtable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-formdef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-mediummap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-objectcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-overlay\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-pagesegment\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.age\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"age\"]\n  },\n  \"application/vnd.ah-barcode\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ahead.space\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ahead\"]\n  },\n  \"application/vnd.airzip.filesecure.azf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azf\"]\n  },\n  \"application/vnd.airzip.filesecure.azs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azs\"]\n  },\n  \"application/vnd.amadeus+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.amazon.ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"azw\"]\n  },\n  \"application/vnd.amazon.mobi8-ebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.americandynamics.acc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acc\"]\n  },\n  \"application/vnd.amiga.ami\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ami\"]\n  },\n  \"application/vnd.amundsen.maze+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.android.ota\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.android.package-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"apk\"]\n  },\n  \"application/vnd.anki\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.anser-web-certificate-issue-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cii\"]\n  },\n  \"application/vnd.anser-web-funds-transfer-initiation\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fti\"]\n  },\n  \"application/vnd.antix.game-component\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atx\"]\n  },\n  \"application/vnd.apache.arrow.file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.arrow.stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.compact\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.api+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.aplextor.warrp+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apothekende.reservation+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apple.installer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpkg\"]\n  },\n  \"application/vnd.apple.keynote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"key\"]\n  },\n  \"application/vnd.apple.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m3u8\"]\n  },\n  \"application/vnd.apple.numbers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/vnd.apple.pages\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pages\"]\n  },\n  \"application/vnd.apple.pkpass\": {\n    \"compressible\": false,\n    \"extensions\": [\"pkpass\"]\n  },\n  \"application/vnd.arastra.swi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.aristanetworks.swi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"swi\"]\n  },\n  \"application/vnd.artisan+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.artsquare\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.astraea-software.iota\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iota\"]\n  },\n  \"application/vnd.audiograph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aep\"]\n  },\n  \"application/vnd.autopackage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.avalon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.avistar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.balsamiq.bmml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmml\"]\n  },\n  \"application/vnd.balsamiq.bmpr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.banana-accounting\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.error\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bekitzur-stech+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bint.med-content\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.biopax.rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.blink-idb-value-wrapper\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blueice.multipass\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpm\"]\n  },\n  \"application/vnd.bluetooth.ep.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bluetooth.le.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bmi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bmi\"]\n  },\n  \"application/vnd.bpf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bpf3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.businessobjects\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rep\"]\n  },\n  \"application/vnd.byu.uapi+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cab-jscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-cpdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-lips\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.capasystems-pg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cendio.thinlinc.clientconf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.century-systems.tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chemdraw+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdxml\"]\n  },\n  \"application/vnd.chess-pgn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chipnuts.karaoke-mmd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmd\"]\n  },\n  \"application/vnd.ciedi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cinderella\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdy\"]\n  },\n  \"application/vnd.cirpack.isdn-ext\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.citationstyles.style+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csl\"]\n  },\n  \"application/vnd.claymore\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cla\"]\n  },\n  \"application/vnd.cloanto.rp9\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rp9\"]\n  },\n  \"application/vnd.clonk.c4group\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amc\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amz\"]\n  },\n  \"application/vnd.coffeescript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collection+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.doc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.next+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.comicbook+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.comicbook-rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commerce-battelle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commonspace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"csp\"]\n  },\n  \"application/vnd.contact.cmsg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdbcmsg\"]\n  },\n  \"application/vnd.coreos.ignition+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cosmocaller\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmc\"]\n  },\n  \"application/vnd.crick.clicker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkx\"]\n  },\n  \"application/vnd.crick.clicker.keyboard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkk\"]\n  },\n  \"application/vnd.crick.clicker.palette\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkp\"]\n  },\n  \"application/vnd.crick.clicker.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkt\"]\n  },\n  \"application/vnd.crick.clicker.wordbank\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkw\"]\n  },\n  \"application/vnd.criticaltools.wbs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wbs\"]\n  },\n  \"application/vnd.cryptii.pipe+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.crypto-shade-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.vault\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ctc-posml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pml\"]\n  },\n  \"application/vnd.ctct.ws+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cups-pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-postscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-ppd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppd\"]\n  },\n  \"application/vnd.cups-raster\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl.car\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"car\"]\n  },\n  \"application/vnd.curl.pcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcurl\"]\n  },\n  \"application/vnd.cyan.dean.root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cybank\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cyclonedx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cyclonedx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.d2l.coursepackage1p0+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.d3m-dataset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.d3m-problem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dart\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dart\"]\n  },\n  \"application/vnd.data-vision.rdz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rdz\"]\n  },\n  \"application/vnd.datapackage+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dataresource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dbf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dbf\"]\n  },\n  \"application/vnd.debian.binary-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dece.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n  },\n  \"application/vnd.dece.ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uvt\",\"uvvt\"]\n  },\n  \"application/vnd.dece.unspecified\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvx\",\"uvvx\"]\n  },\n  \"application/vnd.dece.zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvz\",\"uvvz\"]\n  },\n  \"application/vnd.denovo.fcselayout-link\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fe_launch\"]\n  },\n  \"application/vnd.desmume.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dm.delegation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dna\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dna\"]\n  },\n  \"application/vnd.document+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dolby.mlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mlp\"]\n  },\n  \"application/vnd.dolby.mobile.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dolby.mobile.2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.doremir.scorecloud-binary-document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dpgraph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpg\"]\n  },\n  \"application/vnd.dreamfactory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dfac\"]\n  },\n  \"application/vnd.drive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ds-keypoint\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"kpxx\"]\n  },\n  \"application/vnd.dtg.local\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.flash\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ait\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ait\"]\n  },\n  \"application/vnd.dvb.dvbisl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.dvbj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.esgcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcdftnotifaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgpdd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcroaming\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-enhancement\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-aggregate-root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-container+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-generic+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-msglist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-init+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.pfr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.service\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svc\"]\n  },\n  \"application/vnd.dxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dynageo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"geo\"]\n  },\n  \"application/vnd.dzr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.easykaraoke.cdgdownload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecdis-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecip.rlp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eclipse.ditto+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ecowin.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mag\"]\n  },\n  \"application/vnd.ecowin.filerequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.fileupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.series\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesrequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.img\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.iso\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.emclient.accessrequest+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.enliven\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nml\"]\n  },\n  \"application/vnd.enphase.envoy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eprints.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.epson.esf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esf\"]\n  },\n  \"application/vnd.epson.msf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msf\"]\n  },\n  \"application/vnd.epson.quickanime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qam\"]\n  },\n  \"application/vnd.epson.salt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"slt\"]\n  },\n  \"application/vnd.epson.ssf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssf\"]\n  },\n  \"application/vnd.ericsson.quickcall\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.espass-espass+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.eszigno3+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es3\",\"et3\"]\n  },\n  \"application/vnd.etsi.aoc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.asic-e+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.asic-s+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.cug+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvcommand+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-bc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-cod+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-npvr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvservice+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mcid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mheg5\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.pstn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.sci+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.simservs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.timestamp-token\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.tsl.der\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eu.kasparian.car+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.eudora.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.profile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.settings\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.theme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.exstream-empower+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.exstream-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ezpix-album\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez2\"]\n  },\n  \"application/vnd.ezpix-package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez3\"]\n  },\n  \"application/vnd.f-secure.mobile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.familysearch.gedcom+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.fastcopy-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/vnd.fdsn.mseed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseed\"]\n  },\n  \"application/vnd.fdsn.seed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"seed\",\"dataless\"]\n  },\n  \"application/vnd.ffsns\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ficlab.flb+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.filmit.zfc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fints\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.firemonkeys.cloudcell\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.flographit\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gph\"]\n  },\n  \"application/vnd.fluxtime.clip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ftc\"]\n  },\n  \"application/vnd.font-fontforge-sfd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.framemaker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n  },\n  \"application/vnd.frogans.fnc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fnc\"]\n  },\n  \"application/vnd.frogans.ltf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ltf\"]\n  },\n  \"application/vnd.fsc.weblaunch\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fsc\"]\n  },\n  \"application/vnd.fujifilm.fb.docuworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.binder\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.jfi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fujitsu.oasys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oas\"]\n  },\n  \"application/vnd.fujitsu.oasys2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa2\"]\n  },\n  \"application/vnd.fujitsu.oasys3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa3\"]\n  },\n  \"application/vnd.fujitsu.oasysgp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fg5\"]\n  },\n  \"application/vnd.fujitsu.oasysprs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bh2\"]\n  },\n  \"application/vnd.fujixerox.art-ex\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.art4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.ddd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ddd\"]\n  },\n  \"application/vnd.fujixerox.docuworks\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdw\"]\n  },\n  \"application/vnd.fujixerox.docuworks.binder\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xbd\"]\n  },\n  \"application/vnd.fujixerox.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.hbpl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fut-misnet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fuzzysheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fzs\"]\n  },\n  \"application/vnd.genomatix.tuxedo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txd\"]\n  },\n  \"application/vnd.gentics.grd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geocube+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geogebra.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggb\"]\n  },\n  \"application/vnd.geogebra.slides\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geogebra.tool\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggt\"]\n  },\n  \"application/vnd.geometry-explorer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gex\",\"gre\"]\n  },\n  \"application/vnd.geonext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gxt\"]\n  },\n  \"application/vnd.geoplan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g2w\"]\n  },\n  \"application/vnd.geospace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3w\"]\n  },\n  \"application/vnd.gerber\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gmx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gmx\"]\n  },\n  \"application/vnd.google-apps.document\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdoc\"]\n  },\n  \"application/vnd.google-apps.presentation\": {\n    \"compressible\": false,\n    \"extensions\": [\"gslides\"]\n  },\n  \"application/vnd.google-apps.spreadsheet\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsheet\"]\n  },\n  \"application/vnd.google-earth.kml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"kml\"]\n  },\n  \"application/vnd.google-earth.kmz\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"kmz\"]\n  },\n  \"application/vnd.gov.sk.e-form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gov.sk.e-form+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.grafeq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gqf\",\"gqs\"]\n  },\n  \"application/vnd.gridmp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.groove-account\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gac\"]\n  },\n  \"application/vnd.groove-help\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ghf\"]\n  },\n  \"application/vnd.groove-identity-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gim\"]\n  },\n  \"application/vnd.groove-injector\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grv\"]\n  },\n  \"application/vnd.groove-tool-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtm\"]\n  },\n  \"application/vnd.groove-tool-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpl\"]\n  },\n  \"application/vnd.groove-vcard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcg\"]\n  },\n  \"application/vnd.hal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"hal\"]\n  },\n  \"application/vnd.handheld-entertainment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zmm\"]\n  },\n  \"application/vnd.hbci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hbci\"]\n  },\n  \"application/vnd.hc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hcl-bireports\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hdt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.heroku+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hhe.lesson-player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"les\"]\n  },\n  \"application/vnd.hl7cda+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hl7v2+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hp-hpgl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpgl\"]\n  },\n  \"application/vnd.hp-hpid\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpid\"]\n  },\n  \"application/vnd.hp-hps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hps\"]\n  },\n  \"application/vnd.hp-jlyt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jlt\"]\n  },\n  \"application/vnd.hp-pcl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcl\"]\n  },\n  \"application/vnd.hp-pclxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pclxl\"]\n  },\n  \"application/vnd.httphone\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hydrostatix.sof-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfd-hdstx\"]\n  },\n  \"application/vnd.hyper+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyper-item+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyperdrive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hzn-3d-crossword\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.electronic-media\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.minipay\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpy\"]\n  },\n  \"application/vnd.ibm.modcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n  },\n  \"application/vnd.ibm.rights-management\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irm\"]\n  },\n  \"application/vnd.ibm.secure-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sc\"]\n  },\n  \"application/vnd.iccprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"icc\",\"icm\"]\n  },\n  \"application/vnd.ieee.1905\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.igloader\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igl\"]\n  },\n  \"application/vnd.imagemeter.folder+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.imagemeter.image+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.immervision-ivp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivp\"]\n  },\n  \"application/vnd.immervision-ivu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivu\"]\n  },\n  \"application/vnd.ims.imsccv1p1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.lis.v2.result+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informedcontrol.rms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informix-visionary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.innopath.wamp.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.insors.igm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igm\"]\n  },\n  \"application/vnd.intercon.formnet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpw\",\"xpx\"]\n  },\n  \"application/vnd.intergeo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"i2g\"]\n  },\n  \"application/vnd.intertrust.digibox\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intertrust.nncp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intu.qbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qbo\"]\n  },\n  \"application/vnd.intu.qfx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qfx\"]\n  },\n  \"application/vnd.iptc.g2.catalogitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.conceptitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.packageitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.planningitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ipunplugged.rcprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rcprofile\"]\n  },\n  \"application/vnd.irepository.package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"irp\"]\n  },\n  \"application/vnd.is-xpr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpr\"]\n  },\n  \"application/vnd.isac.fcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcs\"]\n  },\n  \"application/vnd.iso11783-10+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.jam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jam\"]\n  },\n  \"application/vnd.japannet-directory-service\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-jpnstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-payment-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-setstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.jcp.javame.midlet-rms\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rms\"]\n  },\n  \"application/vnd.jisp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jisp\"]\n  },\n  \"application/vnd.joost.joda-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"joda\"]\n  },\n  \"application/vnd.jsk.isdn-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kahootz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktz\",\"ktr\"]\n  },\n  \"application/vnd.kde.karbon\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"karbon\"]\n  },\n  \"application/vnd.kde.kchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chrt\"]\n  },\n  \"application/vnd.kde.kformula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kfo\"]\n  },\n  \"application/vnd.kde.kivio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flw\"]\n  },\n  \"application/vnd.kde.kontour\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kon\"]\n  },\n  \"application/vnd.kde.kpresenter\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kpr\",\"kpt\"]\n  },\n  \"application/vnd.kde.kspread\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ksp\"]\n  },\n  \"application/vnd.kde.kword\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kwd\",\"kwt\"]\n  },\n  \"application/vnd.kenameaapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"htke\"]\n  },\n  \"application/vnd.kidspiration\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kia\"]\n  },\n  \"application/vnd.kinar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kne\",\"knp\"]\n  },\n  \"application/vnd.koan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n  },\n  \"application/vnd.kodak-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sse\"]\n  },\n  \"application/vnd.las\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.las.las+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.las.las+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lasxml\"]\n  },\n  \"application/vnd.laszip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.leap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.liberty-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.llamagraphics.life-balance.desktop\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbd\"]\n  },\n  \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lbe\"]\n  },\n  \"application/vnd.logipipe.circuit+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.loom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.lotus-1-2-3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"123\"]\n  },\n  \"application/vnd.lotus-approach\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"apr\"]\n  },\n  \"application/vnd.lotus-freelance\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pre\"]\n  },\n  \"application/vnd.lotus-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nsf\"]\n  },\n  \"application/vnd.lotus-organizer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"org\"]\n  },\n  \"application/vnd.lotus-screencam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scm\"]\n  },\n  \"application/vnd.lotus-wordpro\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lwp\"]\n  },\n  \"application/vnd.macports.portpkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"portpkg\"]\n  },\n  \"application/vnd.mapbox-vector-tile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mvt\"]\n  },\n  \"application/vnd.marlin.drm.actiontoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.conftoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.license+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.mdcf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mason+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.maxar.archive.3tz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.maxmind.maxmind-db\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mcd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mcd\"]\n  },\n  \"application/vnd.medcalcdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mc1\"]\n  },\n  \"application/vnd.mediastation.cdkey\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdkey\"]\n  },\n  \"application/vnd.meridian-slingshot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mfer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mwf\"]\n  },\n  \"application/vnd.mfmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mfm\"]\n  },\n  \"application/vnd.micro+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.micrografx.flo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flo\"]\n  },\n  \"application/vnd.micrografx.igx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igx\"]\n  },\n  \"application/vnd.microsoft.portable-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.microsoft.windows.thumbnail-cache\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.miele+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.mif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mif\"]\n  },\n  \"application/vnd.minisoft-hp3000-save\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mobius.daf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"daf\"]\n  },\n  \"application/vnd.mobius.dis\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dis\"]\n  },\n  \"application/vnd.mobius.mbk\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbk\"]\n  },\n  \"application/vnd.mobius.mqy\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mqy\"]\n  },\n  \"application/vnd.mobius.msl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msl\"]\n  },\n  \"application/vnd.mobius.plc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plc\"]\n  },\n  \"application/vnd.mobius.txf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txf\"]\n  },\n  \"application/vnd.mophun.application\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpn\"]\n  },\n  \"application/vnd.mophun.certificate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpc\"]\n  },\n  \"application/vnd.motorola.flexsuite\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.adsi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.fis\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.gotap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.kmr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.ttc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.wem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.iprm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mozilla.xul+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xul\"]\n  },\n  \"application/vnd.ms-3mfdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-artgalry\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cil\"]\n  },\n  \"application/vnd.ms-asf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-cab-compressed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cab\"]\n  },\n  \"application/vnd.ms-color.iccprofile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-excel\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n  },\n  \"application/vnd.ms-excel.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlam\"]\n  },\n  \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsb\"]\n  },\n  \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsm\"]\n  },\n  \"application/vnd.ms-excel.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltm\"]\n  },\n  \"application/vnd.ms-fontobject\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eot\"]\n  },\n  \"application/vnd.ms-htmlhelp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chm\"]\n  },\n  \"application/vnd.ms-ims\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ims\"]\n  },\n  \"application/vnd.ms-lrm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lrm\"]\n  },\n  \"application/vnd.ms-office.activex+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-officetheme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"thmx\"]\n  },\n  \"application/vnd.ms-opentype\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-outlook\": {\n    \"compressible\": false,\n    \"extensions\": [\"msg\"]\n  },\n  \"application/vnd.ms-package.obfuscated-opentype\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-pki.seccat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cat\"]\n  },\n  \"application/vnd.ms-pki.stl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stl\"]\n  },\n  \"application/vnd.ms-playready.initiator+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-powerpoint\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n  },\n  \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppam\"]\n  },\n  \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pptm\"]\n  },\n  \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldm\"]\n  },\n  \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsm\"]\n  },\n  \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potm\"]\n  },\n  \"application/vnd.ms-printdevicecapabilities+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printing.printticket+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printschematicket+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-project\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpp\",\"mpt\"]\n  },\n  \"application/vnd.ms-tnef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.nwprinting.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.printerpairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.wsd.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-word.document.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"docm\"]\n  },\n  \"application/vnd.ms-word.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotm\"]\n  },\n  \"application/vnd.ms-works\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n  },\n  \"application/vnd.ms-wpl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpl\"]\n  },\n  \"application/vnd.ms-xpsdocument\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xps\"]\n  },\n  \"application/vnd.msa-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mseq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseq\"]\n  },\n  \"application/vnd.msign\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator.cif\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.music-niff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.musician\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mus\"]\n  },\n  \"application/vnd.muvee.style\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msty\"]\n  },\n  \"application/vnd.mynfc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"taglet\"]\n  },\n  \"application/vnd.nacamar.ybrid+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ncd.control\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ncd.reference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nearst.inv+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nebumind.line\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nervana\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.netfpx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.neurolanguage.nlu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nlu\"]\n  },\n  \"application/vnd.nimn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.nitro.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.snes.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nitf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ntf\",\"nitf\"]\n  },\n  \"application/vnd.noblenet-directory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnd\"]\n  },\n  \"application/vnd.noblenet-sealer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nns\"]\n  },\n  \"application/vnd.noblenet-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnw\"]\n  },\n  \"application/vnd.nokia.catalogs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.iptv.config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.isds-radio-presets\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.landmarkcollection+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.n-gage.ac+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ac\"]\n  },\n  \"application/vnd.nokia.n-gage.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ngdat\"]\n  },\n  \"application/vnd.nokia.n-gage.symbian.install\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"n-gage\"]\n  },\n  \"application/vnd.nokia.ncd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.radio-preset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpst\"]\n  },\n  \"application/vnd.nokia.radio-presets\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpss\"]\n  },\n  \"application/vnd.novadigm.edm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edm\"]\n  },\n  \"application/vnd.novadigm.edx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edx\"]\n  },\n  \"application/vnd.novadigm.ext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ext\"]\n  },\n  \"application/vnd.ntt-local.content-share\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.file-transfer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.ogw_remote-access\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_remote\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odc\"]\n  },\n  \"application/vnd.oasis.opendocument.chart-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otc\"]\n  },\n  \"application/vnd.oasis.opendocument.database\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odb\"]\n  },\n  \"application/vnd.oasis.opendocument.formula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odf\"]\n  },\n  \"application/vnd.oasis.opendocument.formula-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odft\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odg\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otg\"]\n  },\n  \"application/vnd.oasis.opendocument.image\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odi\"]\n  },\n  \"application/vnd.oasis.opendocument.image-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oti\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odp\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otp\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ods\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ots\"]\n  },\n  \"application/vnd.oasis.opendocument.text\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odt\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odm\"]\n  },\n  \"application/vnd.oasis.opendocument.text-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ott\"]\n  },\n  \"application/vnd.oasis.opendocument.text-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oth\"]\n  },\n  \"application/vnd.obn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ocf+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oci.image.manifest.v1+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oftn.l10n+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessdownload+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessstreaming+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.cspg-hexbinary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.dae.xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.pae.gem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.spdlist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.ueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.userprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.olpc-sugar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xo\"]\n  },\n  \"application/vnd.oma-scws-config\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.drm-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.imd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.ltkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.notification+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.provisioningtrigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgboot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sgdu\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.simple-symbol-container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sprov+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.stkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-address-book+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-feature-handler+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-pcc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-subs-invite+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-user-prefs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcdc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dd2+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dd2\"]\n  },\n  \"application/vnd.oma.drm.risd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.group-usage-list+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.lwm2m+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+tlv\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.pal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.final-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.groups+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.push\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.scidm.messages+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.xcap-directory+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-email+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-file+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-folder+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omaloc-supl-init\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepager\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertat\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"obgx\"]\n  },\n  \"application/vnd.openblox.game-binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openeye.oeb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openofficeorg.extension\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"oxt\"]\n  },\n  \"application/vnd.openstreetmap.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osm\"]\n  },\n  \"application/vnd.opentimestamps.ots\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pptx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xlsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"docx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.core-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.relationships+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oracle.resource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.orange.indata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osa.netdeploy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgeo.mapguide.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgp\"]\n  },\n  \"application/vnd.osgi.bundle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgi.dp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dp\"]\n  },\n  \"application/vnd.osgi.subsystem\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esa\"]\n  },\n  \"application/vnd.otps.ct-kip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oxli.countgraph\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pagerduty+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.palm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n  },\n  \"application/vnd.panoply\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos.xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patentdive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patientecommsdoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pawaafile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"paw\"]\n  },\n  \"application/vnd.pcos\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pg.format\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"str\"]\n  },\n  \"application/vnd.pg.osasli\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ei6\"]\n  },\n  \"application/vnd.piaccess.application-licence\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.picsel\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"efif\"]\n  },\n  \"application/vnd.pmi.widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wg\"]\n  },\n  \"application/vnd.poc.group-advertisement+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.pocketlearn\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plf\"]\n  },\n  \"application/vnd.powerbuilder6\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pbd\"]\n  },\n  \"application/vnd.powerbuilder6-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.preminet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.previewsystems.box\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"box\"]\n  },\n  \"application/vnd.proteus.magazine\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgz\"]\n  },\n  \"application/vnd.psfs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.publishare-delta-tree\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qps\"]\n  },\n  \"application/vnd.pvi.ptid1\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ptid\"]\n  },\n  \"application/vnd.pwg-multiplexed\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pwg-xhtml-print+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.qualcomm.brew-app-res\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quarantainenet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quark.quarkxpress\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n  },\n  \"application/vnd.quobject-quoxdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-stream+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-base+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-group+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-speech+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-transform+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rainstor.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rapid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rar\"]\n  },\n  \"application/vnd.realvnc.bed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bed\"]\n  },\n  \"application/vnd.recordare.musicxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxl\"]\n  },\n  \"application/vnd.recordare.musicxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musicxml\"]\n  },\n  \"application/vnd.renlearn.rlprint\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.resilient.logic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.restful+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rig.cryptonote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cryptonote\"]\n  },\n  \"application/vnd.rim.cod\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cod\"]\n  },\n  \"application/vnd.rn-realmedia\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rm\"]\n  },\n  \"application/vnd.rn-realmedia-vbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmvb\"]\n  },\n  \"application/vnd.route66.link66+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"link66\"]\n  },\n  \"application/vnd.rs-274x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ruckus.download\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.s3sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sailingtracker.track\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"st\"]\n  },\n  \"application/vnd.sar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.cid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.mid2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.scribus\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.3df\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.csf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.doc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.eml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.mht\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.net\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.ppt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.tiff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.xls\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.seemail\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"see\"]\n  },\n  \"application/vnd.seis+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.sema\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sema\"]\n  },\n  \"application/vnd.semd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semd\"]\n  },\n  \"application/vnd.semf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semf\"]\n  },\n  \"application/vnd.shade-save-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shana.informed.formdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ifm\"]\n  },\n  \"application/vnd.shana.informed.formtemplate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"itp\"]\n  },\n  \"application/vnd.shana.informed.interchange\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iif\"]\n  },\n  \"application/vnd.shana.informed.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipk\"]\n  },\n  \"application/vnd.shootproof+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shopkick+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sigrok.session\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.simtech-mindmapper\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"twd\",\"twds\"]\n  },\n  \"application/vnd.siren+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.smaf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmf\"]\n  },\n  \"application/vnd.smart.notebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smart.teacher\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"teacher\"]\n  },\n  \"application/vnd.snesdev-page-table\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.software602.filler.form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fo\"]\n  },\n  \"application/vnd.software602.filler.form-xml-zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.solent.sdkm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sdkm\",\"sdkd\"]\n  },\n  \"application/vnd.spotfire.dxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxp\"]\n  },\n  \"application/vnd.spotfire.sfs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfs\"]\n  },\n  \"application/vnd.sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-cod\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-dtf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-ntf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.stardivision.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdc\"]\n  },\n  \"application/vnd.stardivision.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sda\"]\n  },\n  \"application/vnd.stardivision.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdd\"]\n  },\n  \"application/vnd.stardivision.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smf\"]\n  },\n  \"application/vnd.stardivision.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdw\",\"vor\"]\n  },\n  \"application/vnd.stardivision.writer-global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgl\"]\n  },\n  \"application/vnd.stepmania.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smzip\"]\n  },\n  \"application/vnd.stepmania.stepchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sm\"]\n  },\n  \"application/vnd.street-stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sun.wadl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wadl\"]\n  },\n  \"application/vnd.sun.xml.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxc\"]\n  },\n  \"application/vnd.sun.xml.calc.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stc\"]\n  },\n  \"application/vnd.sun.xml.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxd\"]\n  },\n  \"application/vnd.sun.xml.draw.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"std\"]\n  },\n  \"application/vnd.sun.xml.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxi\"]\n  },\n  \"application/vnd.sun.xml.impress.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sti\"]\n  },\n  \"application/vnd.sun.xml.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxm\"]\n  },\n  \"application/vnd.sun.xml.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxw\"]\n  },\n  \"application/vnd.sun.xml.writer.global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxg\"]\n  },\n  \"application/vnd.sun.xml.writer.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stw\"]\n  },\n  \"application/vnd.sus-calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sus\",\"susp\"]\n  },\n  \"application/vnd.svd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svd\"]\n  },\n  \"application/vnd.swiftview-ics\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sycle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.syft+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sis\",\"sisx\"]\n  },\n  \"application/vnd.syncml+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xsm\"]\n  },\n  \"application/vnd.syncml.dm+wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"bdm\"]\n  },\n  \"application/vnd.syncml.dm+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xdm\"]\n  },\n  \"application/vnd.syncml.dm.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"ddf\"]\n  },\n  \"application/vnd.syncml.dmtnds+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.syncml.ds.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tableschema+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tao.intent-module-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tao\"]\n  },\n  \"application/vnd.tcpdump.pcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n  },\n  \"application/vnd.think-cell.ppttc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tmd.mediaflex.api+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tmobile-livetv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tmo\"]\n  },\n  \"application/vnd.tri.onesource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.trid.tpt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpt\"]\n  },\n  \"application/vnd.triscape.mxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxs\"]\n  },\n  \"application/vnd.trueapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tra\"]\n  },\n  \"application/vnd.truedoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ubisoft.webplayer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ufdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ufd\",\"ufdl\"]\n  },\n  \"application/vnd.uiq.theme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"utz\"]\n  },\n  \"application/vnd.umajin\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"umj\"]\n  },\n  \"application/vnd.unity\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"unityweb\"]\n  },\n  \"application/vnd.uoml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uoml\"]\n  },\n  \"application/vnd.uplanet.alert\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.alert-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.signal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uri-map\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.valve.source.material\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcx\"]\n  },\n  \"application/vnd.vd-study\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vectorworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vel+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.verimatrix.vcas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.veritone.aion+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.veryant.thin\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ves.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vidsoft.vidconference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.visio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n  },\n  \"application/vnd.visionary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vis\"]\n  },\n  \"application/vnd.vividence.scriptfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vsf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsf\"]\n  },\n  \"application/vnd.wap.sic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.slc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"wbxml\"]\n  },\n  \"application/vnd.wap.wmlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlc\"]\n  },\n  \"application/vnd.wap.wmlscriptc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlsc\"]\n  },\n  \"application/vnd.webturbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wtb\"]\n  },\n  \"application/vnd.wfa.dpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.p2p\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.wsc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmf.bootstrap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica.package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nbp\"]\n  },\n  \"application/vnd.wordperfect\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpd\"]\n  },\n  \"application/vnd.wqd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wqd\"]\n  },\n  \"application/vnd.wrq-hp3000-labelled\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wt.stf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stf\"]\n  },\n  \"application/vnd.wv.csp+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.csp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.wv.ssp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xara\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xar\"]\n  },\n  \"application/vnd.xfdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdl\"]\n  },\n  \"application/vnd.xfdl.webform\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xmpie.cpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.dpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.plan\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.ppkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.xlim\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.hv-dic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvd\"]\n  },\n  \"application/vnd.yamaha.hv-script\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvs\"]\n  },\n  \"application/vnd.yamaha.hv-voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvp\"]\n  },\n  \"application/vnd.yamaha.openscoreformat\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osf\"]\n  },\n  \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osfpvg\"]\n  },\n  \"application/vnd.yamaha.remote-setup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.smaf-audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"saf\"]\n  },\n  \"application/vnd.yamaha.smaf-phrase\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spf\"]\n  },\n  \"application/vnd.yamaha.through-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.tunnel-udpencap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yaoweme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yellowriver-custom-menu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmp\"]\n  },\n  \"application/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.zul\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zir\",\"zirz\"]\n  },\n  \"application/vnd.zzazz.deck+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zaz\"]\n  },\n  \"application/voicexml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vxml\"]\n  },\n  \"application/voucher-cms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vq-rtcpxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/wasm\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wasm\"]\n  },\n  \"application/watcherinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wif\"]\n  },\n  \"application/webpush-options+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/whoispp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/whoispp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgt\"]\n  },\n  \"application/winhlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hlp\"]\n  },\n  \"application/wita\": {\n    \"source\": \"iana\"\n  },\n  \"application/wordperfect5.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/wsdl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wsdl\"]\n  },\n  \"application/wspolicy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wspolicy\"]\n  },\n  \"application/x-7z-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"7z\"]\n  },\n  \"application/x-abiword\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"abw\"]\n  },\n  \"application/x-ace-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ace\"]\n  },\n  \"application/x-amf\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-apple-diskimage\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dmg\"]\n  },\n  \"application/x-arj\": {\n    \"compressible\": false,\n    \"extensions\": [\"arj\"]\n  },\n  \"application/x-authorware-bin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n  },\n  \"application/x-authorware-map\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aam\"]\n  },\n  \"application/x-authorware-seg\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aas\"]\n  },\n  \"application/x-bcpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bcpio\"]\n  },\n  \"application/x-bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/x-bittorrent\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"torrent\"]\n  },\n  \"application/x-blorb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"blb\",\"blorb\"]\n  },\n  \"application/x-bzip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz\"]\n  },\n  \"application/x-bzip2\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz2\",\"boz\"]\n  },\n  \"application/x-cbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n  },\n  \"application/x-cdlink\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcd\"]\n  },\n  \"application/x-cfs-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cfs\"]\n  },\n  \"application/x-chat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"chat\"]\n  },\n  \"application/x-chess-pgn\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgn\"]\n  },\n  \"application/x-chrome-extension\": {\n    \"extensions\": [\"crx\"]\n  },\n  \"application/x-cocoa\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"cco\"]\n  },\n  \"application/x-compress\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-conference\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nsc\"]\n  },\n  \"application/x-cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpio\"]\n  },\n  \"application/x-csh\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csh\"]\n  },\n  \"application/x-deb\": {\n    \"compressible\": false\n  },\n  \"application/x-debian-package\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"deb\",\"udeb\"]\n  },\n  \"application/x-dgc-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dgc\"]\n  },\n  \"application/x-director\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n  },\n  \"application/x-doom\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wad\"]\n  },\n  \"application/x-dtbncx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ncx\"]\n  },\n  \"application/x-dtbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dtb\"]\n  },\n  \"application/x-dtbresource+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"res\"]\n  },\n  \"application/x-dvi\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"dvi\"]\n  },\n  \"application/x-envoy\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"evy\"]\n  },\n  \"application/x-eva\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"eva\"]\n  },\n  \"application/x-font-bdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bdf\"]\n  },\n  \"application/x-font-dos\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-framemaker\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-ghostscript\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gsf\"]\n  },\n  \"application/x-font-libgrx\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-linux-psf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"psf\"]\n  },\n  \"application/x-font-pcf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcf\"]\n  },\n  \"application/x-font-snf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"snf\"]\n  },\n  \"application/x-font-speedo\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-sunos-news\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-type1\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n  },\n  \"application/x-font-vfont\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-freearc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"arc\"]\n  },\n  \"application/x-futuresplash\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"spl\"]\n  },\n  \"application/x-gca-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gca\"]\n  },\n  \"application/x-glulx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ulx\"]\n  },\n  \"application/x-gnumeric\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gnumeric\"]\n  },\n  \"application/x-gramps-xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gramps\"]\n  },\n  \"application/x-gtar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gtar\"]\n  },\n  \"application/x-gzip\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-hdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hdf\"]\n  },\n  \"application/x-httpd-php\": {\n    \"compressible\": true,\n    \"extensions\": [\"php\"]\n  },\n  \"application/x-install-instructions\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"install\"]\n  },\n  \"application/x-iso9660-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"iso\"]\n  },\n  \"application/x-iwork-keynote-sffkey\": {\n    \"extensions\": [\"key\"]\n  },\n  \"application/x-iwork-numbers-sffnumbers\": {\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/x-iwork-pages-sffpages\": {\n    \"extensions\": [\"pages\"]\n  },\n  \"application/x-java-archive-diff\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jardiff\"]\n  },\n  \"application/x-java-jnlp-file\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jnlp\"]\n  },\n  \"application/x-javascript\": {\n    \"compressible\": true\n  },\n  \"application/x-keepass2\": {\n    \"extensions\": [\"kdbx\"]\n  },\n  \"application/x-latex\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"latex\"]\n  },\n  \"application/x-lua-bytecode\": {\n    \"extensions\": [\"luac\"]\n  },\n  \"application/x-lzh-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lzh\",\"lha\"]\n  },\n  \"application/x-makeself\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"run\"]\n  },\n  \"application/x-mie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mie\"]\n  },\n  \"application/x-mobipocket-ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prc\",\"mobi\"]\n  },\n  \"application/x-mpegurl\": {\n    \"compressible\": false\n  },\n  \"application/x-ms-application\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"application\"]\n  },\n  \"application/x-ms-shortcut\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lnk\"]\n  },\n  \"application/x-ms-wmd\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmd\"]\n  },\n  \"application/x-ms-wmz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmz\"]\n  },\n  \"application/x-ms-xbap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbap\"]\n  },\n  \"application/x-msaccess\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mdb\"]\n  },\n  \"application/x-msbinder\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obd\"]\n  },\n  \"application/x-mscardfile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"crd\"]\n  },\n  \"application/x-msclip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"clp\"]\n  },\n  \"application/x-msdos-program\": {\n    \"extensions\": [\"exe\"]\n  },\n  \"application/x-msdownload\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n  },\n  \"application/x-msmediaview\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n  },\n  \"application/x-msmetafile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n  },\n  \"application/x-msmoney\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mny\"]\n  },\n  \"application/x-mspublisher\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pub\"]\n  },\n  \"application/x-msschedule\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scd\"]\n  },\n  \"application/x-msterminal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"trm\"]\n  },\n  \"application/x-mswrite\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wri\"]\n  },\n  \"application/x-netcdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nc\",\"cdf\"]\n  },\n  \"application/x-ns-proxy-autoconfig\": {\n    \"compressible\": true,\n    \"extensions\": [\"pac\"]\n  },\n  \"application/x-nzb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nzb\"]\n  },\n  \"application/x-perl\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"pl\",\"pm\"]\n  },\n  \"application/x-pilot\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"prc\",\"pdb\"]\n  },\n  \"application/x-pkcs12\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"p12\",\"pfx\"]\n  },\n  \"application/x-pkcs7-certificates\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7b\",\"spc\"]\n  },\n  \"application/x-pkcs7-certreqresp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7r\"]\n  },\n  \"application/x-pki-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-rar-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-redhat-package-manager\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"rpm\"]\n  },\n  \"application/x-research-info-systems\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ris\"]\n  },\n  \"application/x-sea\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"sea\"]\n  },\n  \"application/x-sh\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"sh\"]\n  },\n  \"application/x-shar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"shar\"]\n  },\n  \"application/x-shockwave-flash\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"swf\"]\n  },\n  \"application/x-silverlight-app\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xap\"]\n  },\n  \"application/x-sql\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/x-stuffit\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"sit\"]\n  },\n  \"application/x-stuffitx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sitx\"]\n  },\n  \"application/x-subrip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"srt\"]\n  },\n  \"application/x-sv4cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4cpio\"]\n  },\n  \"application/x-sv4crc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4crc\"]\n  },\n  \"application/x-t3vm-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"t3\"]\n  },\n  \"application/x-tads\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gam\"]\n  },\n  \"application/x-tar\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"tar\"]\n  },\n  \"application/x-tcl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tcl\",\"tk\"]\n  },\n  \"application/x-tex\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tex\"]\n  },\n  \"application/x-tex-tfm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tfm\"]\n  },\n  \"application/x-texinfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"texinfo\",\"texi\"]\n  },\n  \"application/x-tgif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obj\"]\n  },\n  \"application/x-ustar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ustar\"]\n  },\n  \"application/x-virtualbox-hdd\": {\n    \"compressible\": true,\n    \"extensions\": [\"hdd\"]\n  },\n  \"application/x-virtualbox-ova\": {\n    \"compressible\": true,\n    \"extensions\": [\"ova\"]\n  },\n  \"application/x-virtualbox-ovf\": {\n    \"compressible\": true,\n    \"extensions\": [\"ovf\"]\n  },\n  \"application/x-virtualbox-vbox\": {\n    \"compressible\": true,\n    \"extensions\": [\"vbox\"]\n  },\n  \"application/x-virtualbox-vbox-extpack\": {\n    \"compressible\": false,\n    \"extensions\": [\"vbox-extpack\"]\n  },\n  \"application/x-virtualbox-vdi\": {\n    \"compressible\": true,\n    \"extensions\": [\"vdi\"]\n  },\n  \"application/x-virtualbox-vhd\": {\n    \"compressible\": true,\n    \"extensions\": [\"vhd\"]\n  },\n  \"application/x-virtualbox-vmdk\": {\n    \"compressible\": true,\n    \"extensions\": [\"vmdk\"]\n  },\n  \"application/x-wais-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"src\"]\n  },\n  \"application/x-web-app-manifest+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"webapp\"]\n  },\n  \"application/x-www-form-urlencoded\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/x-x509-ca-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"der\",\"crt\",\"pem\"]\n  },\n  \"application/x-x509-ca-ra-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-x509-next-ca-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-xfig\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fig\"]\n  },\n  \"application/x-xliff+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/x-xpinstall\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"xpi\"]\n  },\n  \"application/x-xz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xz\"]\n  },\n  \"application/x-zmachine\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n  },\n  \"application/x400-bp\": {\n    \"source\": \"iana\"\n  },\n  \"application/xacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xaml+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xaml\"]\n  },\n  \"application/xcap-att+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xav\"]\n  },\n  \"application/xcap-caps+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xca\"]\n  },\n  \"application/xcap-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdf\"]\n  },\n  \"application/xcap-el+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xel\"]\n  },\n  \"application/xcap-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcap-ns+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xns\"]\n  },\n  \"application/xcon-conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcon-conference-info-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xenc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xenc\"]\n  },\n  \"application/xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtml\",\"xht\"]\n  },\n  \"application/xhtml-voice+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/xliff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n  },\n  \"application/xml-dtd\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dtd\"]\n  },\n  \"application/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"application/xml-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xmpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xop\"]\n  },\n  \"application/xproc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xpl\"]\n  },\n  \"application/xslt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xsl\",\"xslt\"]\n  },\n  \"application/xspf+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xspf\"]\n  },\n  \"application/xv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n  },\n  \"application/yang\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yang\"]\n  },\n  \"application/yang-data+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yin+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"yin\"]\n  },\n  \"application/zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"zip\"]\n  },\n  \"application/zlib\": {\n    \"source\": \"iana\"\n  },\n  \"application/zstd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/3gpp\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"3gpp\"]\n  },\n  \"audio/3gpp2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/adpcm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"adp\"]\n  },\n  \"audio/amr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"amr\"]\n  },\n  \"audio/amr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb+\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aptx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/asc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-advanced-lossless\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/basic\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"au\",\"snd\"]\n  },\n  \"audio/bv16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/bv32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/clearmode\": {\n    \"source\": \"iana\"\n  },\n  \"audio/cn\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dat12\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dls\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es201108\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202050\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202211\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202212\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dvi4\": {\n    \"source\": \"iana\"\n  },\n  \"audio/eac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evs\": {\n    \"source\": \"iana\"\n  },\n  \"audio/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g711-0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g719\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g722\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7221\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g723\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-24\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-40\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g728\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7291\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729d\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729e\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-efr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-hr-08\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ilbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ip-mr_v2.5\": {\n    \"source\": \"iana\"\n  },\n  \"audio/isac\": {\n    \"source\": \"apache\"\n  },\n  \"audio/l16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l20\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l24\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/l8\": {\n    \"source\": \"iana\"\n  },\n  \"audio/lpc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp1200\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp2400\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp600\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mhas\": {\n    \"source\": \"iana\"\n  },\n  \"audio/midi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n  },\n  \"audio/mobile-xmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxmf\"]\n  },\n  \"audio/mp3\": {\n    \"compressible\": false,\n    \"extensions\": [\"mp3\"]\n  },\n  \"audio/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"m4a\",\"mp4a\"]\n  },\n  \"audio/mp4a-latm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa-robust\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n  },\n  \"audio/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"audio/musepack\": {\n    \"source\": \"apache\"\n  },\n  \"audio/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n  },\n  \"audio/opus\": {\n    \"source\": \"iana\"\n  },\n  \"audio/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/prs.sid\": {\n    \"source\": \"iana\"\n  },\n  \"audio/qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/red\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/s3m\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s3m\"]\n  },\n  \"audio/scip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/silk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sil\"]\n  },\n  \"audio/smv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sofa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/speex\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t140c\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t38\": {\n    \"source\": \"iana\"\n  },\n  \"audio/telephone-event\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp_bb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tone\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tsvcis\": {\n    \"source\": \"iana\"\n  },\n  \"audio/uemclip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/usac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vdvi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vmr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.3gpp.iufp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.4sb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.audiokoz\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.celp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cisco.nse\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cmles.radio-events\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.anp1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.inf1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dece.audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uva\",\"uvva\"]\n  },\n  \"audio/vnd.digital-winds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"eol\"]\n  },\n  \"audio/vnd.dlna.adts\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mlp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mps\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2z\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pulse.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dra\"]\n  },\n  \"audio/vnd.dts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dts\"]\n  },\n  \"audio/vnd.dts.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dtshd\"]\n  },\n  \"audio/vnd.dts.uhd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dvb.file\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.everad.plj\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.hns.audio\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.lucent.voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lvp\"]\n  },\n  \"audio/vnd.ms-playready.media.pya\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pya\"]\n  },\n  \"audio/vnd.nokia.mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nortel.vbk\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nuera.ecelp4800\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp4800\"]\n  },\n  \"audio/vnd.nuera.ecelp7470\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp7470\"]\n  },\n  \"audio/vnd.nuera.ecelp9600\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp9600\"]\n  },\n  \"audio/vnd.octel.sbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.presonus.multitrack\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rhetorex.32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rip\"]\n  },\n  \"audio/vnd.rn-realaudio\": {\n    \"compressible\": false\n  },\n  \"audio/vnd.sealedmedia.softseal.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.vmx.cvsd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.wave\": {\n    \"compressible\": false\n  },\n  \"audio/vorbis\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/vorbis-config\": {\n    \"source\": \"iana\"\n  },\n  \"audio/wav\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/wave\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"weba\"]\n  },\n  \"audio/x-aac\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"aac\"]\n  },\n  \"audio/x-aiff\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n  },\n  \"audio/x-caf\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"caf\"]\n  },\n  \"audio/x-flac\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"flac\"]\n  },\n  \"audio/x-m4a\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"m4a\"]\n  },\n  \"audio/x-matroska\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mka\"]\n  },\n  \"audio/x-mpegurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m3u\"]\n  },\n  \"audio/x-ms-wax\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wax\"]\n  },\n  \"audio/x-ms-wma\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wma\"]\n  },\n  \"audio/x-pn-realaudio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ram\",\"ra\"]\n  },\n  \"audio/x-pn-realaudio-plugin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmp\"]\n  },\n  \"audio/x-realaudio\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"ra\"]\n  },\n  \"audio/x-tta\": {\n    \"source\": \"apache\"\n  },\n  \"audio/x-wav\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/xm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xm\"]\n  },\n  \"chemical/x-cdx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cdx\"]\n  },\n  \"chemical/x-cif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cif\"]\n  },\n  \"chemical/x-cmdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmdf\"]\n  },\n  \"chemical/x-cml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cml\"]\n  },\n  \"chemical/x-csml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csml\"]\n  },\n  \"chemical/x-pdb\": {\n    \"source\": \"apache\"\n  },\n  \"chemical/x-xyz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xyz\"]\n  },\n  \"font/collection\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttc\"]\n  },\n  \"font/otf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"otf\"]\n  },\n  \"font/sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"font/ttf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttf\"]\n  },\n  \"font/woff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff\"]\n  },\n  \"font/woff2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff2\"]\n  },\n  \"image/aces\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exr\"]\n  },\n  \"image/apng\": {\n    \"compressible\": false,\n    \"extensions\": [\"apng\"]\n  },\n  \"image/avci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avci\"]\n  },\n  \"image/avcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avcs\"]\n  },\n  \"image/avif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"avif\"]\n  },\n  \"image/bmp\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/cgm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cgm\"]\n  },\n  \"image/dicom-rle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"drle\"]\n  },\n  \"image/emf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"emf\"]\n  },\n  \"image/fits\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fits\"]\n  },\n  \"image/g3fax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3\"]\n  },\n  \"image/gif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gif\"]\n  },\n  \"image/heic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heic\"]\n  },\n  \"image/heic-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heics\"]\n  },\n  \"image/heif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heif\"]\n  },\n  \"image/heif-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heifs\"]\n  },\n  \"image/hej2k\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hej2\"]\n  },\n  \"image/hsj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hsj2\"]\n  },\n  \"image/ief\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ief\"]\n  },\n  \"image/jls\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jls\"]\n  },\n  \"image/jp2\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jp2\",\"jpg2\"]\n  },\n  \"image/jpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n  },\n  \"image/jph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jph\"]\n  },\n  \"image/jphc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jhc\"]\n  },\n  \"image/jpm\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpm\"]\n  },\n  \"image/jpx\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpx\",\"jpf\"]\n  },\n  \"image/jxr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxr\"]\n  },\n  \"image/jxra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxra\"]\n  },\n  \"image/jxrs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxrs\"]\n  },\n  \"image/jxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxs\"]\n  },\n  \"image/jxsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsc\"]\n  },\n  \"image/jxsi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsi\"]\n  },\n  \"image/jxss\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxss\"]\n  },\n  \"image/ktx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx\"]\n  },\n  \"image/ktx2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx2\"]\n  },\n  \"image/naplps\": {\n    \"source\": \"iana\"\n  },\n  \"image/pjpeg\": {\n    \"compressible\": false\n  },\n  \"image/png\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"png\"]\n  },\n  \"image/prs.btif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"btif\"]\n  },\n  \"image/prs.pti\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pti\"]\n  },\n  \"image/pwg-raster\": {\n    \"source\": \"iana\"\n  },\n  \"image/sgi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgi\"]\n  },\n  \"image/svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"svg\",\"svgz\"]\n  },\n  \"image/t38\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t38\"]\n  },\n  \"image/tiff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"tif\",\"tiff\"]\n  },\n  \"image/tiff-fx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tfx\"]\n  },\n  \"image/vnd.adobe.photoshop\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"psd\"]\n  },\n  \"image/vnd.airzip.accelerator.azv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azv\"]\n  },\n  \"image/vnd.cns.inf2\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.dece.graphic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n  },\n  \"image/vnd.djvu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"djvu\",\"djv\"]\n  },\n  \"image/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"image/vnd.dwg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwg\"]\n  },\n  \"image/vnd.dxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxf\"]\n  },\n  \"image/vnd.fastbidsheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fbs\"]\n  },\n  \"image/vnd.fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fpx\"]\n  },\n  \"image/vnd.fst\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fst\"]\n  },\n  \"image/vnd.fujixerox.edmics-mmr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmr\"]\n  },\n  \"image/vnd.fujixerox.edmics-rlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rlc\"]\n  },\n  \"image/vnd.globalgraphics.pgb\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.microsoft.icon\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/vnd.mix\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mozilla.apng\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.ms-dds\": {\n    \"compressible\": true,\n    \"extensions\": [\"dds\"]\n  },\n  \"image/vnd.ms-modi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mdi\"]\n  },\n  \"image/vnd.ms-photo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wdp\"]\n  },\n  \"image/vnd.net-fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"npx\"]\n  },\n  \"image/vnd.pco.b16\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"b16\"]\n  },\n  \"image/vnd.radiance\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealed.png\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.gif\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.jpg\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.svf\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.tencent.tap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tap\"]\n  },\n  \"image/vnd.valve.source.texture\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtf\"]\n  },\n  \"image/vnd.wap.wbmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbmp\"]\n  },\n  \"image/vnd.xiff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xif\"]\n  },\n  \"image/vnd.zbrush.pcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/webp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"webp\"]\n  },\n  \"image/wmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmf\"]\n  },\n  \"image/x-3ds\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"3ds\"]\n  },\n  \"image/x-cmu-raster\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ras\"]\n  },\n  \"image/x-cmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmx\"]\n  },\n  \"image/x-freehand\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n  },\n  \"image/x-icon\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/x-jng\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jng\"]\n  },\n  \"image/x-mrsid-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sid\"]\n  },\n  \"image/x-ms-bmp\": {\n    \"source\": \"nginx\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/x-pcx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/x-pict\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pic\",\"pct\"]\n  },\n  \"image/x-portable-anymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pnm\"]\n  },\n  \"image/x-portable-bitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pbm\"]\n  },\n  \"image/x-portable-graymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgm\"]\n  },\n  \"image/x-portable-pixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ppm\"]\n  },\n  \"image/x-rgb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rgb\"]\n  },\n  \"image/x-tga\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tga\"]\n  },\n  \"image/x-xbitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbm\"]\n  },\n  \"image/x-xcf\": {\n    \"compressible\": false\n  },\n  \"image/x-xpixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpm\"]\n  },\n  \"image/x-xwindowdump\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xwd\"]\n  },\n  \"message/cpim\": {\n    \"source\": \"iana\"\n  },\n  \"message/delivery-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\n      \"disposition-notification\"\n    ]\n  },\n  \"message/external-body\": {\n    \"source\": \"iana\"\n  },\n  \"message/feedback-report\": {\n    \"source\": \"iana\"\n  },\n  \"message/global\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8msg\"]\n  },\n  \"message/global-delivery-status\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8dsn\"]\n  },\n  \"message/global-disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8mdn\"]\n  },\n  \"message/global-headers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8hdr\"]\n  },\n  \"message/http\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/imdn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"message/news\": {\n    \"source\": \"iana\"\n  },\n  \"message/partial\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/rfc822\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eml\",\"mime\"]\n  },\n  \"message/s-http\": {\n    \"source\": \"iana\"\n  },\n  \"message/sip\": {\n    \"source\": \"iana\"\n  },\n  \"message/sipfrag\": {\n    \"source\": \"iana\"\n  },\n  \"message/tracking-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.si.simp\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.wfa.wsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsc\"]\n  },\n  \"model/3mf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3mf\"]\n  },\n  \"model/e57\": {\n    \"source\": \"iana\"\n  },\n  \"model/gltf+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gltf\"]\n  },\n  \"model/gltf-binary\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"glb\"]\n  },\n  \"model/iges\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"igs\",\"iges\"]\n  },\n  \"model/mesh\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n  },\n  \"model/mtl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mtl\"]\n  },\n  \"model/obj\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"obj\"]\n  },\n  \"model/step\": {\n    \"source\": \"iana\"\n  },\n  \"model/step+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"stpx\"]\n  },\n  \"model/step+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpz\"]\n  },\n  \"model/step-xml+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpxz\"]\n  },\n  \"model/stl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stl\"]\n  },\n  \"model/vnd.collada+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dae\"]\n  },\n  \"model/vnd.dwf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwf\"]\n  },\n  \"model/vnd.flatland.3dml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gdl\"]\n  },\n  \"model/vnd.gs-gdl\": {\n    \"source\": \"apache\"\n  },\n  \"model/vnd.gs.gdl\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gtw\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtw\"]\n  },\n  \"model/vnd.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"model/vnd.mts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mts\"]\n  },\n  \"model/vnd.opengex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ogex\"]\n  },\n  \"model/vnd.parasolid.transmit.binary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_b\"]\n  },\n  \"model/vnd.parasolid.transmit.text\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_t\"]\n  },\n  \"model/vnd.pytha.pyox\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.rosette.annotated-data-model\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.sap.vds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vds\"]\n  },\n  \"model/vnd.usdz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"usdz\"]\n  },\n  \"model/vnd.valve.source.compiled-map\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bsp\"]\n  },\n  \"model/vnd.vtu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtu\"]\n  },\n  \"model/vrml\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"wrl\",\"vrml\"]\n  },\n  \"model/x3d+binary\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3db\",\"x3dbz\"]\n  },\n  \"model/x3d+fastinfoset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3db\"]\n  },\n  \"model/x3d+vrml\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3dv\",\"x3dvz\"]\n  },\n  \"model/x3d+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"x3d\",\"x3dz\"]\n  },\n  \"model/x3d-vrml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3dv\"]\n  },\n  \"multipart/alternative\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/appledouble\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/byteranges\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/digest\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/form-data\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/header-set\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/mixed\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/multilingual\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/parallel\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/related\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/report\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/signed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/vnd.bint.med-plus\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/voice-message\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/x-mixed-replace\": {\n    \"source\": \"iana\"\n  },\n  \"text/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/cache-manifest\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"appcache\",\"manifest\"]\n  },\n  \"text/calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ics\",\"ifb\"]\n  },\n  \"text/calender\": {\n    \"compressible\": true\n  },\n  \"text/cmd\": {\n    \"compressible\": true\n  },\n  \"text/coffeescript\": {\n    \"extensions\": [\"coffee\",\"litcoffee\"]\n  },\n  \"text/cql\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-expression\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-identifier\": {\n    \"source\": \"iana\"\n  },\n  \"text/css\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"css\"]\n  },\n  \"text/csv\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csv\"]\n  },\n  \"text/csv-schema\": {\n    \"source\": \"iana\"\n  },\n  \"text/directory\": {\n    \"source\": \"iana\"\n  },\n  \"text/dns\": {\n    \"source\": \"iana\"\n  },\n  \"text/ecmascript\": {\n    \"source\": \"iana\"\n  },\n  \"text/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"text/enriched\": {\n    \"source\": \"iana\"\n  },\n  \"text/fhirpath\": {\n    \"source\": \"iana\"\n  },\n  \"text/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"text/gff3\": {\n    \"source\": \"iana\"\n  },\n  \"text/grammar-ref-list\": {\n    \"source\": \"iana\"\n  },\n  \"text/html\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"html\",\"htm\",\"shtml\"]\n  },\n  \"text/jade\": {\n    \"extensions\": [\"jade\"]\n  },\n  \"text/javascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"text/jcr-cnd\": {\n    \"source\": \"iana\"\n  },\n  \"text/jsx\": {\n    \"compressible\": true,\n    \"extensions\": [\"jsx\"]\n  },\n  \"text/less\": {\n    \"compressible\": true,\n    \"extensions\": [\"less\"]\n  },\n  \"text/markdown\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"markdown\",\"md\"]\n  },\n  \"text/mathml\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"mml\"]\n  },\n  \"text/mdx\": {\n    \"compressible\": true,\n    \"extensions\": [\"mdx\"]\n  },\n  \"text/mizar\": {\n    \"source\": \"iana\"\n  },\n  \"text/n3\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"n3\"]\n  },\n  \"text/parameters\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/plain\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n  },\n  \"text/provenance-notation\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/prs.fallenstein.rst\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.lines.tag\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dsc\"]\n  },\n  \"text/prs.prop.logic\": {\n    \"source\": \"iana\"\n  },\n  \"text/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/red\": {\n    \"source\": \"iana\"\n  },\n  \"text/rfc822-headers\": {\n    \"source\": \"iana\"\n  },\n  \"text/richtext\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtx\"]\n  },\n  \"text/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"text/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"text/sgml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sgml\",\"sgm\"]\n  },\n  \"text/shaclc\": {\n    \"source\": \"iana\"\n  },\n  \"text/shex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"shex\"]\n  },\n  \"text/slim\": {\n    \"extensions\": [\"slim\",\"slm\"]\n  },\n  \"text/spdx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spdx\"]\n  },\n  \"text/strings\": {\n    \"source\": \"iana\"\n  },\n  \"text/stylus\": {\n    \"extensions\": [\"stylus\",\"styl\"]\n  },\n  \"text/t140\": {\n    \"source\": \"iana\"\n  },\n  \"text/tab-separated-values\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tsv\"]\n  },\n  \"text/troff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n  },\n  \"text/turtle\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"ttl\"]\n  },\n  \"text/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/uri-list\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uri\",\"uris\",\"urls\"]\n  },\n  \"text/vcard\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vcard\"]\n  },\n  \"text/vnd.a\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.abc\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ascii-art\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.curl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"curl\"]\n  },\n  \"text/vnd.curl.dcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dcurl\"]\n  },\n  \"text/vnd.curl.mcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mcurl\"]\n  },\n  \"text/vnd.curl.scurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scurl\"]\n  },\n  \"text/vnd.debian.copyright\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.dmclientscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"text/vnd.esmertec.theme-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.familysearch.gedcom\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ged\"]\n  },\n  \"text/vnd.ficlab.flt\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.fly\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fly\"]\n  },\n  \"text/vnd.fmi.flexstor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flx\"]\n  },\n  \"text/vnd.gml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.graphviz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gv\"]\n  },\n  \"text/vnd.hans\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.hgl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.in3d.3dml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3dml\"]\n  },\n  \"text/vnd.in3d.spot\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spot\"]\n  },\n  \"text/vnd.iptc.newsml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.iptc.nitf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.latex-z\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.motorola.reflex\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ms-mediapackage\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.net2phone.commcenter.command\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.radisys.msml-basic-layout\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.senx.warpscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.si.uricatalogue\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sosi\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sun.j2me.app-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"jad\"]\n  },\n  \"text/vnd.trolltech.linguist\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.wap.si\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.sl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.wml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wml\"]\n  },\n  \"text/vnd.wap.wmlscript\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmls\"]\n  },\n  \"text/vtt\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"vtt\"]\n  },\n  \"text/x-asm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s\",\"asm\"]\n  },\n  \"text/x-c\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n  },\n  \"text/x-component\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"htc\"]\n  },\n  \"text/x-fortran\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n  },\n  \"text/x-gwt-rpc\": {\n    \"compressible\": true\n  },\n  \"text/x-handlebars-template\": {\n    \"extensions\": [\"hbs\"]\n  },\n  \"text/x-java-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"java\"]\n  },\n  \"text/x-jquery-tmpl\": {\n    \"compressible\": true\n  },\n  \"text/x-lua\": {\n    \"extensions\": [\"lua\"]\n  },\n  \"text/x-markdown\": {\n    \"compressible\": true,\n    \"extensions\": [\"mkd\"]\n  },\n  \"text/x-nfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nfo\"]\n  },\n  \"text/x-opml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"opml\"]\n  },\n  \"text/x-org\": {\n    \"compressible\": true,\n    \"extensions\": [\"org\"]\n  },\n  \"text/x-pascal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p\",\"pas\"]\n  },\n  \"text/x-processing\": {\n    \"compressible\": true,\n    \"extensions\": [\"pde\"]\n  },\n  \"text/x-sass\": {\n    \"extensions\": [\"sass\"]\n  },\n  \"text/x-scss\": {\n    \"extensions\": [\"scss\"]\n  },\n  \"text/x-setext\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"etx\"]\n  },\n  \"text/x-sfv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sfv\"]\n  },\n  \"text/x-suse-ymp\": {\n    \"compressible\": true,\n    \"extensions\": [\"ymp\"]\n  },\n  \"text/x-uuencode\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"uu\"]\n  },\n  \"text/x-vcalendar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcs\"]\n  },\n  \"text/x-vcard\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcf\"]\n  },\n  \"text/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\"]\n  },\n  \"text/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"text/yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"yaml\",\"yml\"]\n  },\n  \"video/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3gp\",\"3gpp\"]\n  },\n  \"video/3gpp-tt\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3g2\"]\n  },\n  \"video/av1\": {\n    \"source\": \"iana\"\n  },\n  \"video/bmpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/bt656\": {\n    \"source\": \"iana\"\n  },\n  \"video/celb\": {\n    \"source\": \"iana\"\n  },\n  \"video/dv\": {\n    \"source\": \"iana\"\n  },\n  \"video/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"video/ffv1\": {\n    \"source\": \"iana\"\n  },\n  \"video/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/h261\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h261\"]\n  },\n  \"video/h263\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h263\"]\n  },\n  \"video/h263-1998\": {\n    \"source\": \"iana\"\n  },\n  \"video/h263-2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h264\"]\n  },\n  \"video/h264-rcdo\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264-svc\": {\n    \"source\": \"iana\"\n  },\n  \"video/h265\": {\n    \"source\": \"iana\"\n  },\n  \"video/iso.segment\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m4s\"]\n  },\n  \"video/jpeg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jpgv\"]\n  },\n  \"video/jpeg2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"video/jxsv\": {\n    \"source\": \"iana\"\n  },\n  \"video/mj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mj2\",\"mjp2\"]\n  },\n  \"video/mp1s\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2p\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2t\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ts\"]\n  },\n  \"video/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n  },\n  \"video/mp4v-es\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n  },\n  \"video/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpv\": {\n    \"source\": \"iana\"\n  },\n  \"video/nv\": {\n    \"source\": \"iana\"\n  },\n  \"video/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogv\"]\n  },\n  \"video/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/pointer\": {\n    \"source\": \"iana\"\n  },\n  \"video/quicktime\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"qt\",\"mov\"]\n  },\n  \"video/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/raw\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"video/scip\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte291\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte292m\": {\n    \"source\": \"iana\"\n  },\n  \"video/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.cctv\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvh\",\"uvvh\"]\n  },\n  \"video/vnd.dece.mobile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvm\",\"uvvm\"]\n  },\n  \"video/vnd.dece.mp4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.pd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvp\",\"uvvp\"]\n  },\n  \"video/vnd.dece.sd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvs\",\"uvvs\"]\n  },\n  \"video/vnd.dece.video\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvv\",\"uvvv\"]\n  },\n  \"video/vnd.directv.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.directv.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dlna.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dvb.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dvb\"]\n  },\n  \"video/vnd.fvt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fvt\"]\n  },\n  \"video/vnd.hns.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsavc\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsmpeg2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.videop\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxu\",\"m4u\"]\n  },\n  \"video/vnd.ms-playready.media.pyv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyv\"]\n  },\n  \"video/vnd.nokia.interleaved-multimedia\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.mp4vr\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.videovoip\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.objectvideo\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.bink\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.smacker\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.swf\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealedmedia.softseal.mov\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.uvvu.mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvu\",\"uvvu\"]\n  },\n  \"video/vnd.vivo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"viv\"]\n  },\n  \"video/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp8\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp9\": {\n    \"source\": \"iana\"\n  },\n  \"video/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"webm\"]\n  },\n  \"video/x-f4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f4v\"]\n  },\n  \"video/x-fli\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fli\"]\n  },\n  \"video/x-flv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"flv\"]\n  },\n  \"video/x-m4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m4v\"]\n  },\n  \"video/x-matroska\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n  },\n  \"video/x-mng\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mng\"]\n  },\n  \"video/x-ms-asf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"asf\",\"asx\"]\n  },\n  \"video/x-ms-vob\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vob\"]\n  },\n  \"video/x-ms-wm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wm\"]\n  },\n  \"video/x-ms-wmv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"wmv\"]\n  },\n  \"video/x-ms-wmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmx\"]\n  },\n  \"video/x-ms-wvx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wvx\"]\n  },\n  \"video/x-msvideo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"avi\"]\n  },\n  \"video/x-sgi-movie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"movie\"]\n  },\n  \"video/x-smv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smv\"]\n  },\n  \"x-conference/x-cooltalk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ice\"]\n  },\n  \"x-shader/x-fragment\": {\n    \"compressible\": true\n  },\n  \"x-shader/x-vertex\": {\n    \"compressible\": true\n  }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n", "/*!\n * type-is\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar typer = require('media-typer')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = typeofrequest\nmodule.exports.is = typeis\nmodule.exports.hasBody = hasbody\nmodule.exports.normalize = normalize\nmodule.exports.match = mimeMatch\n\n/**\n * Compare a `value` content-type with `types`.\n * Each `type` can be an extension like `html`,\n * a special shortcut like `multipart` or `urlencoded`,\n * or a mime type.\n *\n * If no types match, `false` is returned.\n * Otherwise, the first `type` that matches is returned.\n *\n * @param {String} value\n * @param {Array} types\n * @public\n */\n\nfunction typeis (value, types_) {\n  var i\n  var types = types_\n\n  // remove parameters and normalize\n  var val = tryNormalizeType(value)\n\n  // no type or invalid\n  if (!val) {\n    return false\n  }\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length - 1)\n    for (i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1]\n    }\n  }\n\n  // no types, return the content type\n  if (!types || !types.length) {\n    return val\n  }\n\n  var type\n  for (i = 0; i < types.length; i++) {\n    if (mimeMatch(normalize(type = types[i]), val)) {\n      return type[0] === '+' || type.indexOf('*') !== -1\n        ? val\n        : type\n    }\n  }\n\n  // no matches\n  return false\n}\n\n/**\n * Check if a request has a request body.\n * A request with a body __must__ either have `transfer-encoding`\n * or `content-length` headers set.\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3\n *\n * @param {Object} request\n * @return {Boolean}\n * @public\n */\n\nfunction hasbody (req) {\n  return req.headers['transfer-encoding'] !== undefined ||\n    !isNaN(req.headers['content-length'])\n}\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n *     // With Content-Type: text/html; charset=utf-8\n *     this.is('html'); // => 'html'\n *     this.is('text/html'); // => 'text/html'\n *     this.is('text/*', 'application/json'); // => 'text/html'\n *\n *     // When Content-Type is application/json\n *     this.is('json', 'urlencoded'); // => 'json'\n *     this.is('application/json'); // => 'application/json'\n *     this.is('html', 'application/*'); // => 'application/json'\n *\n *     this.is('html'); // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nfunction typeofrequest (req, types_) {\n  var types = types_\n\n  // no body\n  if (!hasbody(req)) {\n    return null\n  }\n\n  // support flattened arguments\n  if (arguments.length > 2) {\n    types = new Array(arguments.length - 1)\n    for (var i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1]\n    }\n  }\n\n  // request content type\n  var value = req.headers['content-type']\n\n  return typeis(value, types)\n}\n\n/**\n * Normalize a mime type.\n * If it's a shorthand, expand it to a valid mime type.\n *\n * In general, you probably want:\n *\n *   var type = is(req, ['urlencoded', 'json', 'multipart']);\n *\n * Then use the appropriate body parsers.\n * These three are the most common request body types\n * and are thus ensured to work.\n *\n * @param {String} type\n * @private\n */\n\nfunction normalize (type) {\n  if (typeof type !== 'string') {\n    // invalid type\n    return false\n  }\n\n  switch (type) {\n    case 'urlencoded':\n      return 'application/x-www-form-urlencoded'\n    case 'multipart':\n      return 'multipart/*'\n  }\n\n  if (type[0] === '+') {\n    // \"+json\" -> \"*/*+json\" expando\n    return '*/*' + type\n  }\n\n  return type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type\n}\n\n/**\n * Check if `expected` mime type\n * matches `actual` mime type with\n * wildcard and +suffix support.\n *\n * @param {String} expected\n * @param {String} actual\n * @return {Boolean}\n * @private\n */\n\nfunction mimeMatch (expected, actual) {\n  // invalid type\n  if (expected === false) {\n    return false\n  }\n\n  // split types\n  var actualParts = actual.split('/')\n  var expectedParts = expected.split('/')\n\n  // invalid format\n  if (actualParts.length !== 2 || expectedParts.length !== 2) {\n    return false\n  }\n\n  // validate type\n  if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {\n    return false\n  }\n\n  // validate suffix wildcard\n  if (expectedParts[1].substr(0, 2) === '*+') {\n    return expectedParts[1].length <= actualParts[1].length + 1 &&\n      expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length)\n  }\n\n  // validate subtype\n  if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * Normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction normalizeType (value) {\n  // parse the type\n  var type = typer.parse(value)\n\n  // remove the parameters\n  type.parameters = undefined\n\n  // reformat it\n  return typer.format(type)\n}\n\n/**\n * Try to normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction tryNormalizeType (value) {\n  if (!value) {\n    return null\n  }\n\n  try {\n    return normalizeType(value)\n  } catch (err) {\n    return null\n  }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:json')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = json\n\n/**\n * RegExp to match the first non-space in a string.\n *\n * Allowed whitespace is defined in RFC 7159:\n *\n *    ws = *(\n *            %x20 /              ; Space\n *            %x09 /              ; Horizontal tab\n *            %x0A /              ; Line feed or New line\n *            %x0D )              ; Carriage return\n */\n\nvar FIRST_CHAR_REGEXP = /^[\\x20\\x09\\x0a\\x0d]*([^\\x20\\x09\\x0a\\x0d])/ // eslint-disable-line no-control-regex\n\nvar JSON_SYNTAX_CHAR = '#'\nvar JSON_SYNTAX_REGEXP = /#+/g\n\n/**\n * Create a middleware to parse JSON bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction json (options) {\n  var opts = options || {}\n\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var inflate = opts.inflate !== false\n  var reviver = opts.reviver\n  var strict = opts.strict !== false\n  var type = opts.type || 'application/json'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (body) {\n    if (body.length === 0) {\n      // special-case empty json body, as it's a common client-side mistake\n      // TODO: maybe make this configurable or part of \"strict\" option\n      return {}\n    }\n\n    if (strict) {\n      var first = firstchar(body)\n\n      if (first !== '{' && first !== '[') {\n        debug('strict violation')\n        throw createStrictSyntaxError(body, first)\n      }\n    }\n\n    try {\n      debug('parse json')\n      return JSON.parse(body, reviver)\n    } catch (e) {\n      throw normalizeJsonSyntaxError(e, {\n        message: e.message,\n        stack: e.stack\n      })\n    }\n  }\n\n  return function jsonParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // assert charset per RFC 7159 sec 8.1\n    var charset = getCharset(req) || 'utf-8'\n    if (charset.slice(0, 4) !== 'utf-') {\n      debug('invalid charset')\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }))\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Create strict violation syntax error matching native error.\n *\n * @param {string} str\n * @param {string} char\n * @return {Error}\n * @private\n */\n\nfunction createStrictSyntaxError (str, char) {\n  var index = str.indexOf(char)\n  var partial = ''\n\n  if (index !== -1) {\n    partial = str.substring(0, index) + JSON_SYNTAX_CHAR\n\n    for (var i = index + 1; i < str.length; i++) {\n      partial += JSON_SYNTAX_CHAR\n    }\n  }\n\n  try {\n    JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')\n  } catch (e) {\n    return normalizeJsonSyntaxError(e, {\n      message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) {\n        return str.substring(index, index + placeholder.length)\n      }),\n      stack: e.stack\n    })\n  }\n}\n\n/**\n * Get the first non-whitespace character in a string.\n *\n * @param {string} str\n * @return {function}\n * @private\n */\n\nfunction firstchar (str) {\n  var match = FIRST_CHAR_REGEXP.exec(str)\n\n  return match\n    ? match[1]\n    : undefined\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Normalize a SyntaxError for JSON.parse.\n *\n * @param {SyntaxError} error\n * @param {object} obj\n * @return {SyntaxError}\n */\n\nfunction normalizeJsonSyntaxError (error, obj) {\n  var keys = Object.getOwnPropertyNames(error)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    if (key !== 'stack' && key !== 'message') {\n      delete error[key]\n    }\n  }\n\n  // replace stack before message for Node.js 0.10 and below\n  error.stack = obj.stack.replace(error.message, obj.message)\n  error.message = obj.message\n\n  return error\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar debug = require('debug')('body-parser:raw')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = raw\n\n/**\n * Create a middleware to parse raw bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction raw (options) {\n  var opts = options || {}\n\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'application/octet-stream'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (buf) {\n    return buf\n  }\n\n  return function rawParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: null,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar debug = require('debug')('body-parser:text')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = text\n\n/**\n * Create a middleware to parse text bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction text (options) {\n  var opts = options || {}\n\n  var defaultCharset = opts.defaultCharset || 'utf-8'\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'text/plain'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (buf) {\n    return buf\n  }\n\n  return function textParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // get charset\n    var charset = getCharset(req) || defaultCharset\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n", "module.exports = require('util').inspect;\n", "var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n    ? Symbol.toStringTag\n    : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n    [].__proto__ === Array.prototype // eslint-disable-line no-proto\n        ? function (O) {\n            return O.__proto__; // eslint-disable-line no-proto\n        }\n        : null\n);\n\nfunction addNumericSeparator(num, str) {\n    if (\n        num === Infinity\n        || num === -Infinity\n        || num !== num\n        || (num && num > -1000 && num < 1000)\n        || $test.call(/e/, str)\n    ) {\n        return str;\n    }\n    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n    if (typeof num === 'number') {\n        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n        if (int !== num) {\n            var intStr = String(int);\n            var dec = $slice.call(str, intStr.length + 1);\n            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n        }\n    }\n    return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nvar quotes = {\n    __proto__: null,\n    'double': '\"',\n    single: \"'\"\n};\nvar quoteREs = {\n    __proto__: null,\n    'double': /([\"\\\\])/g,\n    single: /(['\\\\])/g\n};\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n    var opts = options || {};\n\n    if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n        throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n    }\n    if (\n        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n            : opts.maxStringLength !== null\n        )\n    ) {\n        throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n    }\n    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n        throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n    }\n\n    if (\n        has(opts, 'indent')\n        && opts.indent !== null\n        && opts.indent !== '\\t'\n        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n    ) {\n        throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n    }\n    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n        throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n    }\n    var numericSeparator = opts.numericSeparator;\n\n    if (typeof obj === 'undefined') {\n        return 'undefined';\n    }\n    if (obj === null) {\n        return 'null';\n    }\n    if (typeof obj === 'boolean') {\n        return obj ? 'true' : 'false';\n    }\n\n    if (typeof obj === 'string') {\n        return inspectString(obj, opts);\n    }\n    if (typeof obj === 'number') {\n        if (obj === 0) {\n            return Infinity / obj > 0 ? '0' : '-0';\n        }\n        var str = String(obj);\n        return numericSeparator ? addNumericSeparator(obj, str) : str;\n    }\n    if (typeof obj === 'bigint') {\n        var bigIntStr = String(obj) + 'n';\n        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n    }\n\n    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n    if (typeof depth === 'undefined') { depth = 0; }\n    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n        return isArray(obj) ? '[Array]' : '[Object]';\n    }\n\n    var indent = getIndent(opts, depth);\n\n    if (typeof seen === 'undefined') {\n        seen = [];\n    } else if (indexOf(seen, obj) >= 0) {\n        return '[Circular]';\n    }\n\n    function inspect(value, from, noIndent) {\n        if (from) {\n            seen = $arrSlice.call(seen);\n            seen.push(from);\n        }\n        if (noIndent) {\n            var newOpts = {\n                depth: opts.depth\n            };\n            if (has(opts, 'quoteStyle')) {\n                newOpts.quoteStyle = opts.quoteStyle;\n            }\n            return inspect_(value, newOpts, depth + 1, seen);\n        }\n        return inspect_(value, opts, depth + 1, seen);\n    }\n\n    if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n        var name = nameOf(obj);\n        var keys = arrObjKeys(obj, inspect);\n        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n    }\n    if (isSymbol(obj)) {\n        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n    }\n    if (isElement(obj)) {\n        var s = '<' + $toLowerCase.call(String(obj.nodeName));\n        var attrs = obj.attributes || [];\n        for (var i = 0; i < attrs.length; i++) {\n            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n        }\n        s += '>';\n        if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n        return s;\n    }\n    if (isArray(obj)) {\n        if (obj.length === 0) { return '[]'; }\n        var xs = arrObjKeys(obj, inspect);\n        if (indent && !singleLineValues(xs)) {\n            return '[' + indentedJoin(xs, indent) + ']';\n        }\n        return '[ ' + $join.call(xs, ', ') + ' ]';\n    }\n    if (isError(obj)) {\n        var parts = arrObjKeys(obj, inspect);\n        if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n        }\n        if (parts.length === 0) { return '[' + String(obj) + ']'; }\n        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n    }\n    if (typeof obj === 'object' && customInspect) {\n        if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n            return utilInspect(obj, { depth: maxDepth - depth });\n        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n            return obj.inspect();\n        }\n    }\n    if (isMap(obj)) {\n        var mapParts = [];\n        if (mapForEach) {\n            mapForEach.call(obj, function (value, key) {\n                mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n            });\n        }\n        return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n    }\n    if (isSet(obj)) {\n        var setParts = [];\n        if (setForEach) {\n            setForEach.call(obj, function (value) {\n                setParts.push(inspect(value, obj));\n            });\n        }\n        return collectionOf('Set', setSize.call(obj), setParts, indent);\n    }\n    if (isWeakMap(obj)) {\n        return weakCollectionOf('WeakMap');\n    }\n    if (isWeakSet(obj)) {\n        return weakCollectionOf('WeakSet');\n    }\n    if (isWeakRef(obj)) {\n        return weakCollectionOf('WeakRef');\n    }\n    if (isNumber(obj)) {\n        return markBoxed(inspect(Number(obj)));\n    }\n    if (isBigInt(obj)) {\n        return markBoxed(inspect(bigIntValueOf.call(obj)));\n    }\n    if (isBoolean(obj)) {\n        return markBoxed(booleanValueOf.call(obj));\n    }\n    if (isString(obj)) {\n        return markBoxed(inspect(String(obj)));\n    }\n    // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n    /* eslint-env browser */\n    if (typeof window !== 'undefined' && obj === window) {\n        return '{ [object Window] }';\n    }\n    if (\n        (typeof globalThis !== 'undefined' && obj === globalThis)\n        || (typeof global !== 'undefined' && obj === global)\n    ) {\n        return '{ [object globalThis] }';\n    }\n    if (!isDate(obj) && !isRegExp(obj)) {\n        var ys = arrObjKeys(obj, inspect);\n        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n        var protoTag = obj instanceof Object ? '' : 'null prototype';\n        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n        if (ys.length === 0) { return tag + '{}'; }\n        if (indent) {\n            return tag + '{' + indentedJoin(ys, indent) + '}';\n        }\n        return tag + '{ ' + $join.call(ys, ', ') + ' }';\n    }\n    return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n    var style = opts.quoteStyle || defaultStyle;\n    var quoteChar = quotes[style];\n    return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n    return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction canTrustToString(obj) {\n    return !toStringTag || !(typeof obj === 'object' && (toStringTag in obj || typeof obj[toStringTag] !== 'undefined'));\n}\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && canTrustToString(obj); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && canTrustToString(obj); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && canTrustToString(obj); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && canTrustToString(obj); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && canTrustToString(obj); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && canTrustToString(obj); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && canTrustToString(obj); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n    if (hasShammedSymbols) {\n        return obj && typeof obj === 'object' && obj instanceof Symbol;\n    }\n    if (typeof obj === 'symbol') {\n        return true;\n    }\n    if (!obj || typeof obj !== 'object' || !symToString) {\n        return false;\n    }\n    try {\n        symToString.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isBigInt(obj) {\n    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n        return false;\n    }\n    try {\n        bigIntValueOf.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n    return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n    return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n    if (f.name) { return f.name; }\n    var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n    if (m) { return m[1]; }\n    return null;\n}\n\nfunction indexOf(xs, x) {\n    if (xs.indexOf) { return xs.indexOf(x); }\n    for (var i = 0, l = xs.length; i < l; i++) {\n        if (xs[i] === x) { return i; }\n    }\n    return -1;\n}\n\nfunction isMap(x) {\n    if (!mapSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        mapSize.call(x);\n        try {\n            setSize.call(x);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof Map; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakMap(x) {\n    if (!weakMapHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakMapHas.call(x, weakMapHas);\n        try {\n            weakSetHas.call(x, weakSetHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakRef(x) {\n    if (!weakRefDeref || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakRefDeref.call(x);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isSet(x) {\n    if (!setSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        setSize.call(x);\n        try {\n            mapSize.call(x);\n        } catch (m) {\n            return true;\n        }\n        return x instanceof Set; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakSet(x) {\n    if (!weakSetHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakSetHas.call(x, weakSetHas);\n        try {\n            weakMapHas.call(x, weakMapHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isElement(x) {\n    if (!x || typeof x !== 'object') { return false; }\n    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n        return true;\n    }\n    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n    if (str.length > opts.maxStringLength) {\n        var remaining = str.length - opts.maxStringLength;\n        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n    }\n    var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n    quoteRE.lastIndex = 0;\n    // eslint-disable-next-line no-control-regex\n    var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n    return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n    var n = c.charCodeAt(0);\n    var x = {\n        8: 'b',\n        9: 't',\n        10: 'n',\n        12: 'f',\n        13: 'r'\n    }[n];\n    if (x) { return '\\\\' + x; }\n    return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n    return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n    return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n    return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n    for (var i = 0; i < xs.length; i++) {\n        if (indexOf(xs[i], '\\n') >= 0) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getIndent(opts, depth) {\n    var baseIndent;\n    if (opts.indent === '\\t') {\n        baseIndent = '\\t';\n    } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n        baseIndent = $join.call(Array(opts.indent + 1), ' ');\n    } else {\n        return null;\n    }\n    return {\n        base: baseIndent,\n        prev: $join.call(Array(depth + 1), baseIndent)\n    };\n}\n\nfunction indentedJoin(xs, indent) {\n    if (xs.length === 0) { return ''; }\n    var lineJoiner = '\\n' + indent.prev + indent.base;\n    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n    var isArr = isArray(obj);\n    var xs = [];\n    if (isArr) {\n        xs.length = obj.length;\n        for (var i = 0; i < obj.length; i++) {\n            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n        }\n    }\n    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n    var symMap;\n    if (hasShammedSymbols) {\n        symMap = {};\n        for (var k = 0; k < syms.length; k++) {\n            symMap['$' + syms[k]] = syms[k];\n        }\n    }\n\n    for (var key in obj) { // eslint-disable-line no-restricted-syntax\n        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n            continue; // eslint-disable-line no-restricted-syntax, no-continue\n        } else if ($test.call(/[^\\w$]/, key)) {\n            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n        } else {\n            xs.push(key + ': ' + inspect(obj[key], obj));\n        }\n    }\n    if (typeof gOPS === 'function') {\n        for (var j = 0; j < syms.length; j++) {\n            if (isEnumerable.call(obj, syms[j])) {\n                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n            }\n        }\n    }\n    return xs;\n}\n", "'use strict';\n\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\t// eslint-disable-next-line eqeqeq\n\tfor (; (curr = prev.next) != null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tif (!isDelete) {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tcurr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);\n\t\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\t}\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n\tif (!objects) {\n\t\treturn void undefined;\n\t}\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n\tif (!objects) {\n\t\treturn false;\n\t}\n\treturn !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n\tif (objects) {\n\t\treturn listGetNode(objects, key, true);\n\t}\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n\t/** @typedef {ReturnType<typeof getSideChannelList>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {import('./list.d.ts').RootNode<V, K> | undefined} */ var $o;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tvar root = $o && $o.next;\n\t\t\tvar deletedNode = listDelete($o, key);\n\t\t\tif (deletedNode && root && root === deletedNode) {\n\t\t\t\t$o = void undefined;\n\t\t\t}\n\t\t\treturn !!deletedNode;\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn listGet($o, key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn listHas($o, key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$o) {\n\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t$o = {\n\t\t\t\t\tnext: void undefined\n\t\t\t\t};\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tlistSet(/** @type {NonNullable<typeof $o>} */ ($o), key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n", "'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n", "'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n", "'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n", "'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n", "'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {<K, V>(thisArg: Map<K, V>) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude<import('.'), false>} */ function getSideChannelMap() {\n\t/** @typedef {ReturnType<typeof getSideChannelMap>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {Map<K, V> | undefined} */ var $m;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tif ($m) {\n\t\t\t\tvar result = $mapDelete($m, key);\n\t\t\t\tif ($mapSize($m) === 0) {\n\t\t\t\t\t$m = void undefined;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($m) {\n\t\t\t\treturn $mapGet($m, key);\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($m) {\n\t\t\t\treturn $mapHas($m, key);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$m) {\n\t\t\t\t// @ts-expect-error TS can't handle narrowing a variable inside a closure\n\t\t\t\t$m = new $Map();\n\t\t\t}\n\t\t\t$mapSet($m, key, value);\n\t\t}\n\t};\n\n\t// @ts-expect-error TODO: figure out why TS is erroring here\n\treturn channel;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap\n\t? /** @type {Exclude<import('.'), false>} */ function getSideChannelWeakMap() {\n\t\t/** @typedef {ReturnType<typeof getSideChannelWeakMap>} Channel */\n\t\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t\t/** @type {WeakMap<K & object, V> | undefined} */ var $wm;\n\t\t/** @type {Channel | undefined} */ var $m;\n\n\t\t/** @type {Channel} */\n\t\tvar channel = {\n\t\t\tassert: function (key) {\n\t\t\t\tif (!channel.has(key)) {\n\t\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapDelete($wm, key);\n\t\t\t\t\t}\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif ($m) {\n\t\t\t\t\t\treturn $m['delete'](key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tget: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $m && $m.get(key);\n\t\t\t},\n\t\t\thas: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!$m && $m.has(key);\n\t\t\t},\n\t\t\tset: function (key, value) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif (!$wm) {\n\t\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t\t}\n\t\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif (!$m) {\n\t\t\t\t\t\t$m = getSideChannelMap();\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\t\t/** @type {NonNullable<typeof $m>} */ ($m).set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// @ts-expect-error TODO: figure out why this is erroring\n\t\treturn channel;\n\t}\n\t: getSideChannelMap;\n", "'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\n\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @typedef {ReturnType<typeof getSideChannel>} Channel */\n\n\t/** @type {Channel | undefined} */ var $channelData;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\treturn !!$channelData && $channelData['delete'](key);\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn $channelData && $channelData.get(key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn !!$channelData && $channelData.has(key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$channelData) {\n\t\t\t\t$channelData = makeChannel();\n\t\t\t}\n\n\t\t\t$channelData.set(key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n", "'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n    'default': Format.RFC3986,\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: Format.RFC1738,\n    RFC3986: Format.RFC3986\n};\n", "'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    /* eslint no-param-reassign: 0 */\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var j = 0; j < string.length; j += limit) {\n        var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n        var arr = [];\n\n        for (var i = 0; i < segment.length; ++i) {\n            var c = segment.charCodeAt(i);\n            if (\n                c === 0x2D // -\n                || c === 0x2E // .\n                || c === 0x5F // _\n                || c === 0x7E // ~\n                || (c >= 0x30 && c <= 0x39) // 0-9\n                || (c >= 0x41 && c <= 0x5A) // a-z\n                || (c >= 0x61 && c <= 0x7A) // A-Z\n                || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n            ) {\n                arr[arr.length] = segment.charAt(i);\n                continue;\n            }\n\n            if (c < 0x80) {\n                arr[arr.length] = hexTable[c];\n                continue;\n            }\n\n            if (c < 0x800) {\n                arr[arr.length] = hexTable[0xC0 | (c >> 6)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            if (c < 0xD800 || c >= 0xE000) {\n                arr[arr.length] = hexTable[0xE0 | (c >> 12)]\n                    + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            i += 1;\n            c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));\n\n            arr[arr.length] = hexTable[0xF0 | (c >> 18)]\n                + hexTable[0x80 | ((c >> 12) & 0x3F)]\n                + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                + hexTable[0x80 | (c & 0x3F)];\n        }\n\n        out += arr.join('');\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n    return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped.push(fn(val[i]));\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    maybeMap: maybeMap,\n    merge: merge\n};\n", "'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    allowEmptyArrays: false,\n    arrayFormat: 'indices',\n    charset: 'utf-8',\n    charsetSentinel: false,\n    delimiter: '&',\n    encode: true,\n    encodeDotInKeys: false,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    commaRoundTrip,\n    allowEmptyArrays,\n    strictNullHandling,\n    skipNulls,\n    encodeDotInKeys,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    format,\n    formatter,\n    encodeValuesOnly,\n    charset,\n    sideChannel\n) {\n    var obj = object;\n\n    var tmpSc = sideChannel;\n    var step = 0;\n    var findFlag = false;\n    while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n        // Where object last appeared in the ref tree\n        var pos = tmpSc.get(object);\n        step += 1;\n        if (typeof pos !== 'undefined') {\n            if (pos === step) {\n                throw new RangeError('Cyclic object value');\n            } else {\n                findFlag = true; // Break while\n            }\n        }\n        if (typeof tmpSc.get(sentinel) === 'undefined') {\n            step = 0;\n        }\n    }\n\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = utils.maybeMap(obj, function (value) {\n            if (value instanceof Date) {\n                return serializeDate(value);\n            }\n            return value;\n        });\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        // we need to join elements in\n        if (encodeValuesOnly && encoder) {\n            obj = utils.maybeMap(obj, encoder);\n        }\n        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n    } else if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    var encodedPrefix = encodeDotInKeys ? prefix.replace(/\\./g, '%2E') : prefix;\n\n    var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n\n    if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n        return adjustedPrefix + '[]';\n    }\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var encodedKey = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix\n            : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n\n        sideChannel.set(object, step);\n        var valueSideChannel = getSideChannel();\n        valueSideChannel.set(sentinel, sideChannel);\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            commaRoundTrip,\n            allowEmptyArrays,\n            strictNullHandling,\n            skipNulls,\n            encodeDotInKeys,\n            generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            format,\n            formatter,\n            encodeValuesOnly,\n            charset,\n            valueSideChannel\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n        throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    var arrayFormat;\n    if (opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if ('indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = defaults.arrayFormat;\n    }\n\n    if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n        throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        arrayFormat: arrayFormat,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        commaRoundTrip: opts.commaRoundTrip,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        format: format,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n    var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    var sideChannel = getSideChannel();\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (options.skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            commaRoundTrip,\n            options.allowEmptyArrays,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encodeDotInKeys,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.format,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset,\n            sideChannel\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B&';\n        } else {\n            // encodeURIComponent('\u2713')\n            prefix += 'utf8=%E2%9C%93&';\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n", "'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowEmptyArrays: false,\n    allowPrototypes: false,\n    allowSparse: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decodeDotInKeys: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    duplicates: 'combine',\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictDepth: false,\n    strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        return val.split(',');\n    }\n\n    return val;\n};\n\n// This is what browsers will submit when the \u2713 character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the \u2713 character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('\u2713')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = { __proto__: null };\n\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    cleanStr = cleanStr.replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset, 'key');\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n            val = utils.maybeMap(\n                parseArrayValue(part.slice(pos + 1), options),\n                function (encodedVal) {\n                    return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n                }\n            );\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(val);\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        var existing = has.call(obj, key);\n        if (existing && options.duplicates === 'combine') {\n            obj[key] = utils.combine(obj[key], val);\n        } else if (!existing || options.duplicates === 'last') {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = options.allowEmptyArrays && (leaf === '' || (options.strictNullHandling && leaf === null))\n                ? []\n                : [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n            var index = parseInt(decodedRoot, 10);\n            if (!options.parseArrays && decodedRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== decodedRoot\n                && String(index) === decodedRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (decodedRoot !== '__proto__') {\n                obj[decodedRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = options.depth > 0 && brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, check strictDepth option for throw, else just add whatever is left\n\n    if (segment) {\n        if (options.strictDepth === true) {\n            throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');\n        }\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n        throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n\n    if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n        throw new TypeError('The duplicates option must be either combine, first, or last');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        duplicates: duplicates,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    if (options.allowSparse === true) {\n        return obj;\n    }\n\n    return utils.compact(obj);\n};\n", "'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:urlencoded')\nvar deprecate = require('depd')('body-parser')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = urlencoded\n\n/**\n * Cache of parser modules.\n */\n\nvar parsers = Object.create(null)\n\n/**\n * Create a middleware to parse urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction urlencoded (options) {\n  var opts = options || {}\n\n  // notice because option default will flip in next major\n  if (opts.extended === undefined) {\n    deprecate('undefined extended: provide extended option')\n  }\n\n  var extended = opts.extended !== false\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'application/x-www-form-urlencoded'\n  var verify = opts.verify || false\n  var depth = typeof opts.depth !== 'number'\n    ? Number(opts.depth || 32)\n    : opts.depth\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate query parser\n  var queryparse = extended\n    ? extendedparser(opts)\n    : simpleparser(opts)\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (body) {\n    return body.length\n      ? queryparse(body)\n      : {}\n  }\n\n  return function urlencodedParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // assert charset\n    var charset = getCharset(req) || 'utf-8'\n    if (charset !== 'utf-8') {\n      debug('invalid charset')\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }))\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      debug: debug,\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify,\n      depth: depth\n    })\n  }\n}\n\n/**\n * Get the extended query parser.\n *\n * @param {object} options\n */\n\nfunction extendedparser (options) {\n  var parameterLimit = options.parameterLimit !== undefined\n    ? options.parameterLimit\n    : 1000\n\n  var depth = typeof options.depth !== 'number'\n    ? Number(options.depth || 32)\n    : options.depth\n  var parse = parser('qs')\n\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number')\n  }\n\n  if (isNaN(depth) || depth < 0) {\n    throw new TypeError('option depth must be a zero or a positive number')\n  }\n\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0\n  }\n\n  return function queryparse (body) {\n    var paramCount = parameterCount(body, parameterLimit)\n\n    if (paramCount === undefined) {\n      debug('too many parameters')\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      })\n    }\n\n    var arrayLimit = Math.max(100, paramCount)\n\n    debug('parse extended urlencoding')\n    try {\n      return parse(body, {\n        allowPrototypes: true,\n        arrayLimit: arrayLimit,\n        depth: depth,\n        strictDepth: true,\n        parameterLimit: parameterLimit\n      })\n    } catch (err) {\n      if (err instanceof RangeError) {\n        throw createError(400, 'The input exceeded the depth', {\n          type: 'querystring.parse.rangeError'\n        })\n      } else {\n        throw err\n      }\n    }\n  }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Count the number of parameters, stopping once limit reached\n *\n * @param {string} body\n * @param {number} limit\n * @api private\n */\n\nfunction parameterCount (body, limit) {\n  var count = 0\n  var index = 0\n\n  while ((index = body.indexOf('&', index)) !== -1) {\n    count++\n    index++\n\n    if (count === limit) {\n      return undefined\n    }\n  }\n\n  return count\n}\n\n/**\n * Get parser for module name dynamically.\n *\n * @param {string} name\n * @return {function}\n * @api private\n */\n\nfunction parser (name) {\n  var mod = parsers[name]\n\n  if (mod !== undefined) {\n    return mod.parse\n  }\n\n  // this uses a switch for static require analysis\n  switch (name) {\n    case 'qs':\n      mod = require('qs')\n      break\n    case 'querystring':\n      mod = require('querystring')\n      break\n  }\n\n  // store to prevent invoking require()\n  parsers[name] = mod\n\n  return mod.parse\n}\n\n/**\n * Get the simple query parser.\n *\n * @param {object} options\n */\n\nfunction simpleparser (options) {\n  var parameterLimit = options.parameterLimit !== undefined\n    ? options.parameterLimit\n    : 1000\n  var parse = parser('querystring')\n\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number')\n  }\n\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0\n  }\n\n  return function queryparse (body) {\n    var paramCount = parameterCount(body, parameterLimit)\n\n    if (paramCount === undefined) {\n      debug('too many parameters')\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      })\n    }\n\n    debug('parse urlencoding')\n    return parse(body, undefined, undefined, { maxKeys: parameterLimit })\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('body-parser')\n\n/**\n * Cache of loaded parsers.\n * @private\n */\n\nvar parsers = Object.create(null)\n\n/**\n * @typedef Parsers\n * @type {function}\n * @property {function} json\n * @property {function} raw\n * @property {function} text\n * @property {function} urlencoded\n */\n\n/**\n * Module exports.\n * @type {Parsers}\n */\n\nexports = module.exports = deprecate.function(bodyParser,\n  'bodyParser: use individual json/urlencoded middlewares')\n\n/**\n * JSON parser.\n * @public\n */\n\nObject.defineProperty(exports, 'json', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('json')\n})\n\n/**\n * Raw parser.\n * @public\n */\n\nObject.defineProperty(exports, 'raw', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('raw')\n})\n\n/**\n * Text parser.\n * @public\n */\n\nObject.defineProperty(exports, 'text', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('text')\n})\n\n/**\n * URL-encoded parser.\n * @public\n */\n\nObject.defineProperty(exports, 'urlencoded', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('urlencoded')\n})\n\n/**\n * Create a middleware to parse json and urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @deprecated\n * @public\n */\n\nfunction bodyParser (options) {\n  // use default type for parsers\n  var opts = Object.create(options || null, {\n    type: {\n      configurable: true,\n      enumerable: true,\n      value: undefined,\n      writable: true\n    }\n  })\n\n  var _urlencoded = exports.urlencoded(opts)\n  var _json = exports.json(opts)\n\n  return function bodyParser (req, res, next) {\n    _json(req, res, function (err) {\n      if (err) return next(err)\n      _urlencoded(req, res, next)\n    })\n  }\n}\n\n/**\n * Create a getter for loading a parser.\n * @private\n */\n\nfunction createParserGetter (name) {\n  return function get () {\n    return loadParser(name)\n  }\n}\n\n/**\n * Load a parser module.\n * @private\n */\n\nfunction loadParser (parserName) {\n  var parser = parsers[parserName]\n\n  if (parser !== undefined) {\n    return parser\n  }\n\n  // this uses a switch for static require analysis\n  switch (parserName) {\n    case 'json':\n      parser = require('./lib/types/json')\n      break\n    case 'raw':\n      parser = require('./lib/types/raw')\n      break\n    case 'text':\n      parser = require('./lib/types/text')\n      break\n    case 'urlencoded':\n      parser = require('./lib/types/urlencoded')\n      break\n  }\n\n  // store to prevent invoking require()\n  return (parsers[parserName] = parser)\n}\n", "/*!\n * merge-descriptors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = merge\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Merge the property descriptors of `src` into `dest`\n *\n * @param {object} dest Object to add descriptors to\n * @param {object} src Object to clone descriptors from\n * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties\n * @returns {object} Reference to dest\n * @public\n */\n\nfunction merge (dest, src, redefine) {\n  if (!dest) {\n    throw new TypeError('argument dest is required')\n  }\n\n  if (!src) {\n    throw new TypeError('argument src is required')\n  }\n\n  if (redefine === undefined) {\n    // Default to true\n    redefine = true\n  }\n\n  Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName (name) {\n    if (!redefine && hasOwnProperty.call(dest, name)) {\n      // Skip descriptor\n      return\n    }\n\n    // Copy descriptor\n    var descriptor = Object.getOwnPropertyDescriptor(src, name)\n    Object.defineProperty(dest, name, descriptor)\n  })\n\n  return dest\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key\n    .substring(6)\n    .toLowerCase()\n    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n  else if (val === 'null') val = null;\n  else val = Number(val);\n\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n             2 === fd ? process.stderr :\n             createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts\n    ? Boolean(exports.inspectOpts.colors)\n    : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts)\n    .split('\\n').map(function(str) {\n      return str.trim()\n    }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString()\n      + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, { autoClose: false });\n      stream._type = 'fs';\n      break;\n\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n\n  stream._isStdio = true;\n\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n  debug.inspectOpts = {};\n\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}\n", "/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x23-\\x3B\\x3D\\x3F-\\x5F\\x61-\\x7A\\x7C\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n  return String(url)\n    .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n    .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34: // \"\n        escape = '&quot;';\n        break;\n      case 38: // &\n        escape = '&amp;';\n        break;\n      case 39: // '\n        escape = '&#39;';\n        break;\n      case 60: // <\n        escape = '&lt;';\n        break;\n      case 62: // >\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index\n    ? html + str.substring(lastIndex, index)\n    : html;\n}\n", "/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar url = require('url')\nvar parse = url.parse\nvar Url = url.Url\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl\nmodule.exports.original = originalurl\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl (req) {\n  var url = req.url\n\n  if (url === undefined) {\n    // URL is undefined\n    return undefined\n  }\n\n  var parsed = req._parsedUrl\n\n  if (fresh(url, parsed)) {\n    // Return cached URL parse\n    return parsed\n  }\n\n  // Parse the URL\n  parsed = fastparse(url)\n  parsed._raw = url\n\n  return (req._parsedUrl = parsed)\n};\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl (req) {\n  var url = req.originalUrl\n\n  if (typeof url !== 'string') {\n    // Fallback\n    return parseurl(req)\n  }\n\n  var parsed = req._parsedOriginalUrl\n\n  if (fresh(url, parsed)) {\n    // Return cached URL parse\n    return parsed\n  }\n\n  // Parse the URL\n  parsed = fastparse(url)\n  parsed._raw = url\n\n  return (req._parsedOriginalUrl = parsed)\n};\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse (str) {\n  if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n    return parse(str)\n  }\n\n  var pathname = str\n  var query = null\n  var search = null\n\n  // This takes the regexp from https://github.com/joyent/node/pull/7878\n  // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n  // And unrolls it into a for loop\n  for (var i = 1; i < str.length; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x3f: /* ?  */\n        if (search === null) {\n          pathname = str.substring(0, i)\n          query = str.substring(i + 1)\n          search = str.substring(i)\n        }\n        break\n      case 0x09: /* \\t */\n      case 0x0a: /* \\n */\n      case 0x0c: /* \\f */\n      case 0x0d: /* \\r */\n      case 0x20: /*    */\n      case 0x23: /* #  */\n      case 0xa0:\n      case 0xfeff:\n        return parse(str)\n    }\n  }\n\n  var url = Url !== undefined\n    ? new Url()\n    : {}\n\n  url.path = str\n  url.href = str\n  url.pathname = pathname\n\n  if (search !== null) {\n    url.query = query\n    url.search = search\n  }\n\n  return url\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh (url, parsedUrl) {\n  return typeof parsedUrl === 'object' &&\n    parsedUrl !== null &&\n    (Url === undefined || parsedUrl instanceof Url) &&\n    parsedUrl._raw === url\n}\n", "/*!\n * finalhandler\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('finalhandler')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar onFinished = require('on-finished')\nvar parseUrl = require('parseurl')\nvar statuses = require('statuses')\nvar unpipe = require('unpipe')\n\n/**\n * Module variables.\n * @private\n */\n\nvar DOUBLE_SPACE_REGEXP = /\\x20{2}/g\nvar NEWLINE_REGEXP = /\\n/g\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n  ? setImmediate\n  : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\nvar isFinished = onFinished.isFinished\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument (message) {\n  var body = escapeHtml(message)\n    .replace(NEWLINE_REGEXP, '<br>')\n    .replace(DOUBLE_SPACE_REGEXP, ' &nbsp;')\n\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>Error</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler (req, res, options) {\n  var opts = options || {}\n\n  // get environment\n  var env = opts.env || process.env.NODE_ENV || 'development'\n\n  // get error callback\n  var onerror = opts.onerror\n\n  return function (err) {\n    var headers\n    var msg\n    var status\n\n    // ignore 404 on in-flight response\n    if (!err && headersSent(res)) {\n      debug('cannot 404 after headers sent')\n      return\n    }\n\n    // unhandled error\n    if (err) {\n      // respect status code from error\n      status = getErrorStatusCode(err)\n\n      if (status === undefined) {\n        // fallback to status code on response\n        status = getResponseStatusCode(res)\n      } else {\n        // respect headers from error\n        headers = getErrorHeaders(err)\n      }\n\n      // get error message\n      msg = getErrorMessage(err, status, env)\n    } else {\n      // not found\n      status = 404\n      msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))\n    }\n\n    debug('default %s', status)\n\n    // schedule onerror callback\n    if (err && onerror) {\n      defer(onerror, err, req, res)\n    }\n\n    // cannot actually respond\n    if (headersSent(res)) {\n      debug('cannot %d after headers sent', status)\n      if (req.socket) {\n        req.socket.destroy()\n      }\n      return\n    }\n\n    // send response\n    send(req, res, status, headers, msg)\n  }\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders (err) {\n  if (!err.headers || typeof err.headers !== 'object') {\n    return undefined\n  }\n\n  var headers = Object.create(null)\n  var keys = Object.keys(err.headers)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    headers[key] = err.headers[key]\n  }\n\n  return headers\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage (err, status, env) {\n  var msg\n\n  if (env !== 'production') {\n    // use err.stack, which typically includes err.message\n    msg = err.stack\n\n    // fallback to err.toString() when possible\n    if (!msg && typeof err.toString === 'function') {\n      msg = err.toString()\n    }\n  }\n\n  return msg || statuses.message[status]\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode (err) {\n  // check err.status\n  if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n    return err.status\n  }\n\n  // check err.statusCode\n  if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n    return err.statusCode\n  }\n\n  return undefined\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName (req) {\n  try {\n    return parseUrl.original(req).pathname\n  } catch (e) {\n    return 'resource'\n  }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode (res) {\n  var status = res.statusCode\n\n  // default status code to 500 if outside valid range\n  if (typeof status !== 'number' || status < 400 || status > 599) {\n    status = 500\n  }\n\n  return status\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n  return typeof res.headersSent !== 'boolean'\n    ? Boolean(res._header)\n    : res.headersSent\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send (req, res, status, headers, message) {\n  function write () {\n    // response body\n    var body = createHtmlDocument(message)\n\n    // response status\n    res.statusCode = status\n\n    if (req.httpVersionMajor < 2) {\n      res.statusMessage = statuses.message[status]\n    }\n\n    // remove any content headers\n    res.removeHeader('Content-Encoding')\n    res.removeHeader('Content-Language')\n    res.removeHeader('Content-Range')\n\n    // response headers\n    setHeaders(res, headers)\n\n    // security headers\n    res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n    res.setHeader('X-Content-Type-Options', 'nosniff')\n\n    // standard headers\n    res.setHeader('Content-Type', 'text/html; charset=utf-8')\n    res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))\n\n    if (req.method === 'HEAD') {\n      res.end()\n      return\n    }\n\n    res.end(body, 'utf8')\n  }\n\n  if (isFinished(req)) {\n    write()\n    return\n  }\n\n  // unpipe everything from the request\n  unpipe(req)\n\n  // flush the request\n  onFinished(req, write)\n  req.resume()\n}\n\n/**\n * Set response headers from an object.\n *\n * @param {OutgoingMessage} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n  if (!headers) {\n    return\n  }\n\n  var keys = Object.keys(headers)\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    res.setHeader(key, headers[key])\n  }\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key\n    .substring(6)\n    .toLowerCase()\n    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n  else if (val === 'null') val = null;\n  else val = Number(val);\n\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n             2 === fd ? process.stderr :\n             createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts\n    ? Boolean(exports.inspectOpts.colors)\n    : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts)\n    .split('\\n').map(function(str) {\n      return str.trim()\n    }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString()\n      + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, { autoClose: false });\n      stream._type = 'fs';\n      break;\n\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n\n  stream._isStdio = true;\n\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n  debug.inspectOpts = {};\n\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}\n", "'use strict'\n\n/**\n * Expose `arrayFlatten`.\n */\nmodule.exports = arrayFlatten\n\n/**\n * Recursive flatten function with depth.\n *\n * @param  {Array}  array\n * @param  {Array}  result\n * @param  {Number} depth\n * @return {Array}\n */\nfunction flattenWithDepth (array, result, depth) {\n  for (var i = 0; i < array.length; i++) {\n    var value = array[i]\n\n    if (depth > 0 && Array.isArray(value)) {\n      flattenWithDepth(value, result, depth - 1)\n    } else {\n      result.push(value)\n    }\n  }\n\n  return result\n}\n\n/**\n * Recursive flatten function. Omitting depth is slightly faster.\n *\n * @param  {Array} array\n * @param  {Array} result\n * @return {Array}\n */\nfunction flattenForever (array, result) {\n  for (var i = 0; i < array.length; i++) {\n    var value = array[i]\n\n    if (Array.isArray(value)) {\n      flattenForever(value, result)\n    } else {\n      result.push(value)\n    }\n  }\n\n  return result\n}\n\n/**\n * Flatten an array, with the ability to define a depth.\n *\n * @param  {Array}  array\n * @param  {Number} depth\n * @return {Array}\n */\nfunction arrayFlatten (array, depth) {\n  if (depth == null) {\n    return flattenForever(array, [])\n  }\n\n  return flattenWithDepth(array, [], depth)\n}\n", "/**\n * Expose `pathToRegexp`.\n */\n\nmodule.exports = pathToRegexp;\n\n/**\n * Match matching groups in a regular expression.\n */\nvar MATCHING_GROUP_REGEXP = /\\\\.|\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n/**\n * Normalize the given path string,\n * returning a regular expression.\n *\n * An empty array should be passed,\n * which will contain the placeholder\n * key names. For example \"/user/:id\" will\n * then contain [\"id\"].\n *\n * @param  {String|RegExp|Array} path\n * @param  {Array} keys\n * @param  {Object} options\n * @return {RegExp}\n * @api private\n */\n\nfunction pathToRegexp(path, keys, options) {\n  options = options || {};\n  keys = keys || [];\n  var strict = options.strict;\n  var end = options.end !== false;\n  var flags = options.sensitive ? '' : 'i';\n  var lookahead = options.lookahead !== false;\n  var extraOffset = 0;\n  var keysOffset = keys.length;\n  var i = 0;\n  var name = 0;\n  var pos = 0;\n  var backtrack = '';\n  var m;\n\n  if (path instanceof RegExp) {\n    while (m = MATCHING_GROUP_REGEXP.exec(path.source)) {\n      if (m[0][0] === '\\\\') continue;\n\n      keys.push({\n        name: m[1] || name++,\n        optional: false,\n        offset: m.index\n      });\n    }\n\n    return path;\n  }\n\n  if (Array.isArray(path)) {\n    // Map array parts into regexps and return their source. We also pass\n    // the same keys and options instance into every generation to get\n    // consistent matching groups before we join the sources together.\n    path = path.map(function (value) {\n      return pathToRegexp(value, keys, options).source;\n    });\n\n    return new RegExp(path.join('|'), flags);\n  }\n\n  if (typeof path !== 'string') {\n    throw new TypeError('path must be a string, array of strings, or regular expression');\n  }\n\n  path = path.replace(\n    /\\\\.|(\\/)?(\\.)?:(\\w+)(\\(.*?\\))?(\\*)?(\\?)?|[.*]|\\/\\(/g,\n    function (match, slash, format, key, capture, star, optional, offset) {\n      if (match[0] === '\\\\') {\n        backtrack += match;\n        pos += 2;\n        return match;\n      }\n\n      if (match === '.') {\n        backtrack += '\\\\.';\n        extraOffset += 1;\n        pos += 1;\n        return '\\\\.';\n      }\n\n      if (slash || format) {\n        backtrack = '';\n      } else {\n        backtrack += path.slice(pos, offset);\n      }\n\n      pos = offset + match.length;\n\n      if (match === '*') {\n        extraOffset += 3;\n        return '(.*)';\n      }\n\n      if (match === '/(') {\n        backtrack += '/';\n        extraOffset += 2;\n        return '/(?:';\n      }\n\n      slash = slash || '';\n      format = format ? '\\\\.' : '';\n      optional = optional || '';\n      capture = capture ?\n        capture.replace(/\\\\.|\\*/, function (m) { return m === '*' ? '(.*)' : m; }) :\n        (backtrack ? '((?:(?!/|' + backtrack + ').)+?)' : '([^/' + format + ']+?)');\n\n      keys.push({\n        name: key,\n        optional: !!optional,\n        offset: offset + extraOffset\n      });\n\n      var result = '(?:'\n        + format + slash + capture\n        + (star ? '((?:[/' + format + '].+?)?)' : '')\n        + ')'\n        + optional;\n\n      extraOffset += result.length - match.length;\n\n      return result;\n    });\n\n  // This is a workaround for handling unnamed matching groups.\n  while (m = MATCHING_GROUP_REGEXP.exec(path)) {\n    if (m[0][0] === '\\\\') continue;\n\n    if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) {\n      keys.splice(keysOffset + i, 0, {\n        name: name++, // Unnamed matching groups must be consistently linear.\n        optional: false,\n        offset: m.index\n      });\n    }\n\n    i++;\n  }\n\n  path += strict ? '' : path[path.length - 1] === '/' ? '?' : '/?';\n\n  // If the path is non-ending, match until the end or a slash.\n  if (end) {\n    path += '$';\n  } else if (path[path.length - 1] !== '/') {\n    path += lookahead ? '(?=/|$)' : '(?:/|$)';\n  }\n\n  return new RegExp('^' + path, flags);\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar pathRegexp = require('path-to-regexp');\nvar debug = require('debug')('express:router:layer');\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Layer;\n\nfunction Layer(path, options, fn) {\n  if (!(this instanceof Layer)) {\n    return new Layer(path, options, fn);\n  }\n\n  debug('new %o', path)\n  var opts = options || {};\n\n  this.handle = fn;\n  this.name = fn.name || '<anonymous>';\n  this.params = undefined;\n  this.path = undefined;\n  this.regexp = pathRegexp(path, this.keys = [], opts);\n\n  // set fast path flags\n  this.regexp.fast_star = path === '*'\n  this.regexp.fast_slash = path === '/' && opts.end === false\n}\n\n/**\n * Handle the error for the layer.\n *\n * @param {Error} error\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_error = function handle_error(error, req, res, next) {\n  var fn = this.handle;\n\n  if (fn.length !== 4) {\n    // not a standard error handler\n    return next(error);\n  }\n\n  try {\n    fn(error, req, res, next);\n  } catch (err) {\n    next(err);\n  }\n};\n\n/**\n * Handle the request for the layer.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_request = function handle(req, res, next) {\n  var fn = this.handle;\n\n  if (fn.length > 3) {\n    // not a standard request handler\n    return next();\n  }\n\n  try {\n    fn(req, res, next);\n  } catch (err) {\n    next(err);\n  }\n};\n\n/**\n * Check if this route matches `path`, if so\n * populate `.params`.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nLayer.prototype.match = function match(path) {\n  var match\n\n  if (path != null) {\n    // fast path non-ending match for / (any path matches)\n    if (this.regexp.fast_slash) {\n      this.params = {}\n      this.path = ''\n      return true\n    }\n\n    // fast path for * (everything matched in a param)\n    if (this.regexp.fast_star) {\n      this.params = {'0': decode_param(path)}\n      this.path = path\n      return true\n    }\n\n    // match the path\n    match = this.regexp.exec(path)\n  }\n\n  if (!match) {\n    this.params = undefined;\n    this.path = undefined;\n    return false;\n  }\n\n  // store values\n  this.params = {};\n  this.path = match[0]\n\n  var keys = this.keys;\n  var params = this.params;\n\n  for (var i = 1; i < match.length; i++) {\n    var key = keys[i - 1];\n    var prop = key.name;\n    var val = decode_param(match[i])\n\n    if (val !== undefined || !(hasOwnProperty.call(params, prop))) {\n      params[prop] = val;\n    }\n  }\n\n  return true;\n};\n\n/**\n * Decode param value.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction decode_param(val) {\n  if (typeof val !== 'string' || val.length === 0) {\n    return val;\n  }\n\n  try {\n    return decodeURIComponent(val);\n  } catch (err) {\n    if (err instanceof URIError) {\n      err.message = 'Failed to decode param \\'' + val + '\\'';\n      err.status = err.statusCode = 400;\n    }\n\n    throw err;\n  }\n}\n", "/*!\n * methods\n * Copyright(c) 2013-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar http = require('http');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getCurrentNodeMethods() || getBasicNodeMethods();\n\n/**\n * Get the current Node.js methods.\n * @private\n */\n\nfunction getCurrentNodeMethods() {\n  return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {\n    return method.toLowerCase();\n  });\n}\n\n/**\n * Get the \"basic\" Node.js methods, a snapshot from Node.js 0.10.\n * @private\n */\n\nfunction getBasicNodeMethods() {\n  return [\n    'get',\n    'post',\n    'put',\n    'head',\n    'delete',\n    'options',\n    'trace',\n    'copy',\n    'lock',\n    'mkcol',\n    'move',\n    'purge',\n    'propfind',\n    'proppatch',\n    'unlock',\n    'report',\n    'mkactivity',\n    'checkout',\n    'merge',\n    'm-search',\n    'notify',\n    'subscribe',\n    'unsubscribe',\n    'patch',\n    'search',\n    'connect'\n  ];\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('express:router:route');\nvar flatten = require('array-flatten');\nvar Layer = require('./layer');\nvar methods = require('methods');\n\n/**\n * Module variables.\n * @private\n */\n\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Route;\n\n/**\n * Initialize `Route` with the given `path`,\n *\n * @param {String} path\n * @public\n */\n\nfunction Route(path) {\n  this.path = path;\n  this.stack = [];\n\n  debug('new %o', path)\n\n  // route handlers for various http methods\n  this.methods = {};\n}\n\n/**\n * Determine if the route handles a given method.\n * @private\n */\n\nRoute.prototype._handles_method = function _handles_method(method) {\n  if (this.methods._all) {\n    return true;\n  }\n\n  // normalize name\n  var name = typeof method === 'string'\n    ? method.toLowerCase()\n    : method\n\n  if (name === 'head' && !this.methods['head']) {\n    name = 'get';\n  }\n\n  return Boolean(this.methods[name]);\n};\n\n/**\n * @return {Array} supported HTTP methods\n * @private\n */\n\nRoute.prototype._options = function _options() {\n  var methods = Object.keys(this.methods);\n\n  // append automatic head\n  if (this.methods.get && !this.methods.head) {\n    methods.push('head');\n  }\n\n  for (var i = 0; i < methods.length; i++) {\n    // make upper case\n    methods[i] = methods[i].toUpperCase();\n  }\n\n  return methods;\n};\n\n/**\n * dispatch req, res into this route\n * @private\n */\n\nRoute.prototype.dispatch = function dispatch(req, res, done) {\n  var idx = 0;\n  var stack = this.stack;\n  var sync = 0\n\n  if (stack.length === 0) {\n    return done();\n  }\n  var method = typeof req.method === 'string'\n    ? req.method.toLowerCase()\n    : req.method\n\n  if (method === 'head' && !this.methods['head']) {\n    method = 'get';\n  }\n\n  req.route = this;\n\n  next();\n\n  function next(err) {\n    // signal to exit route\n    if (err && err === 'route') {\n      return done();\n    }\n\n    // signal to exit router\n    if (err && err === 'router') {\n      return done(err)\n    }\n\n    // max sync stack\n    if (++sync > 100) {\n      return setImmediate(next, err)\n    }\n\n    var layer = stack[idx++]\n\n    // end of layers\n    if (!layer) {\n      return done(err)\n    }\n\n    if (layer.method && layer.method !== method) {\n      next(err)\n    } else if (err) {\n      layer.handle_error(err, req, res, next);\n    } else {\n      layer.handle_request(req, res, next);\n    }\n\n    sync = 0\n  }\n};\n\n/**\n * Add a handler for all HTTP verbs to this route.\n *\n * Behaves just like middleware and can respond or call `next`\n * to continue processing.\n *\n * You can use multiple `.all` call to add multiple handlers.\n *\n *   function check_something(req, res, next){\n *     next();\n *   };\n *\n *   function validate_user(req, res, next){\n *     next();\n *   };\n *\n *   route\n *   .all(validate_user)\n *   .all(check_something)\n *   .get(function(req, res, next){\n *     res.send('hello world');\n *   });\n *\n * @param {function} handler\n * @return {Route} for chaining\n * @api public\n */\n\nRoute.prototype.all = function all() {\n  var handles = flatten(slice.call(arguments));\n\n  for (var i = 0; i < handles.length; i++) {\n    var handle = handles[i];\n\n    if (typeof handle !== 'function') {\n      var type = toString.call(handle);\n      var msg = 'Route.all() requires a callback function but got a ' + type\n      throw new TypeError(msg);\n    }\n\n    var layer = Layer('/', {}, handle);\n    layer.method = undefined;\n\n    this.methods._all = true;\n    this.stack.push(layer);\n  }\n\n  return this;\n};\n\nmethods.forEach(function(method){\n  Route.prototype[method] = function(){\n    var handles = flatten(slice.call(arguments));\n\n    for (var i = 0; i < handles.length; i++) {\n      var handle = handles[i];\n\n      if (typeof handle !== 'function') {\n        var type = toString.call(handle);\n        var msg = 'Route.' + method + '() requires a callback function but got a ' + type\n        throw new Error(msg);\n      }\n\n      debug('%s %o', method, this.path)\n\n      var layer = Layer('/', {}, handle);\n      layer.method = method;\n\n      this.methods[method] = true;\n      this.stack.push(layer);\n    }\n\n    return this;\n  };\n});\n", "/**\n * Merge object b with object a.\n *\n *     var a = { foo: 'bar' }\n *       , b = { bar: 'baz' };\n *\n *     merge(a, b);\n *     // => { foo: 'bar', bar: 'baz' }\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexports = module.exports = function(a, b){\n  if (a && b) {\n    for (var key in b) {\n      a[key] = b[key];\n    }\n  }\n  return a;\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Route = require('./route');\nvar Layer = require('./layer');\nvar methods = require('methods');\nvar mixin = require('utils-merge');\nvar debug = require('debug')('express:router');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar parseUrl = require('parseurl');\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar objectRegExp = /^\\[object (\\S+)\\]$/;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Initialize a new `Router` with the given `options`.\n *\n * @param {Object} [options]\n * @return {Router} which is a callable function\n * @public\n */\n\nvar proto = module.exports = function(options) {\n  var opts = options || {};\n\n  function router(req, res, next) {\n    router.handle(req, res, next);\n  }\n\n  // mixin Router class functions\n  setPrototypeOf(router, proto)\n\n  router.params = {};\n  router._params = [];\n  router.caseSensitive = opts.caseSensitive;\n  router.mergeParams = opts.mergeParams;\n  router.strict = opts.strict;\n  router.stack = [];\n\n  return router;\n};\n\n/**\n * Map the given param placeholder `name`(s) to the given callback.\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the same signature as middleware, the only difference\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * Just like in middleware, you must either respond to the request or call next\n * to avoid stalling the request.\n *\n *  app.param('user_id', function(req, res, next, id){\n *    User.find(id, function(err, user){\n *      if (err) {\n *        return next(err);\n *      } else if (!user) {\n *        return next(new Error('failed to load user'));\n *      }\n *      req.user = user;\n *      next();\n *    });\n *  });\n *\n * @param {String} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\nproto.param = function param(name, fn) {\n  // param logic\n  if (typeof name === 'function') {\n    deprecate('router.param(fn): Refactor to use path params');\n    this._params.push(name);\n    return;\n  }\n\n  // apply param functions\n  var params = this._params;\n  var len = params.length;\n  var ret;\n\n  if (name[0] === ':') {\n    deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.slice(1)) + ', fn) instead')\n    name = name.slice(1)\n  }\n\n  for (var i = 0; i < len; ++i) {\n    if (ret = params[i](name, fn)) {\n      fn = ret;\n    }\n  }\n\n  // ensure we end up with a\n  // middleware function\n  if ('function' !== typeof fn) {\n    throw new Error('invalid param() call for ' + name + ', got ' + fn);\n  }\n\n  (this.params[name] = this.params[name] || []).push(fn);\n  return this;\n};\n\n/**\n * Dispatch a req, res into the router.\n * @private\n */\n\nproto.handle = function handle(req, res, out) {\n  var self = this;\n\n  debug('dispatching %s %s', req.method, req.url);\n\n  var idx = 0;\n  var protohost = getProtohost(req.url) || ''\n  var removed = '';\n  var slashAdded = false;\n  var sync = 0\n  var paramcalled = {};\n\n  // store options for OPTIONS request\n  // only used if OPTIONS request\n  var options = [];\n\n  // middleware and routes\n  var stack = self.stack;\n\n  // manage inter-router variables\n  var parentParams = req.params;\n  var parentUrl = req.baseUrl || '';\n  var done = restore(out, req, 'baseUrl', 'next', 'params');\n\n  // setup next layer\n  req.next = next;\n\n  // for options requests, respond with a default if nothing else responds\n  if (req.method === 'OPTIONS') {\n    done = wrap(done, function(old, err) {\n      if (err || options.length === 0) return old(err);\n      sendOptionsResponse(res, options, old);\n    });\n  }\n\n  // setup basic req values\n  req.baseUrl = parentUrl;\n  req.originalUrl = req.originalUrl || req.url;\n\n  next();\n\n  function next(err) {\n    var layerError = err === 'route'\n      ? null\n      : err;\n\n    // remove added slash\n    if (slashAdded) {\n      req.url = req.url.slice(1)\n      slashAdded = false;\n    }\n\n    // restore altered req.url\n    if (removed.length !== 0) {\n      req.baseUrl = parentUrl;\n      req.url = protohost + removed + req.url.slice(protohost.length)\n      removed = '';\n    }\n\n    // signal to exit router\n    if (layerError === 'router') {\n      setImmediate(done, null)\n      return\n    }\n\n    // no more matching layers\n    if (idx >= stack.length) {\n      setImmediate(done, layerError);\n      return;\n    }\n\n    // max sync stack\n    if (++sync > 100) {\n      return setImmediate(next, err)\n    }\n\n    // get pathname of request\n    var path = getPathname(req);\n\n    if (path == null) {\n      return done(layerError);\n    }\n\n    // find next matching layer\n    var layer;\n    var match;\n    var route;\n\n    while (match !== true && idx < stack.length) {\n      layer = stack[idx++];\n      match = matchLayer(layer, path);\n      route = layer.route;\n\n      if (typeof match !== 'boolean') {\n        // hold on to layerError\n        layerError = layerError || match;\n      }\n\n      if (match !== true) {\n        continue;\n      }\n\n      if (!route) {\n        // process non-route handlers normally\n        continue;\n      }\n\n      if (layerError) {\n        // routes do not match with a pending error\n        match = false;\n        continue;\n      }\n\n      var method = req.method;\n      var has_method = route._handles_method(method);\n\n      // build up automatic options response\n      if (!has_method && method === 'OPTIONS') {\n        appendMethods(options, route._options());\n      }\n\n      // don't even bother matching route\n      if (!has_method && method !== 'HEAD') {\n        match = false;\n      }\n    }\n\n    // no match\n    if (match !== true) {\n      return done(layerError);\n    }\n\n    // store route for dispatch on change\n    if (route) {\n      req.route = route;\n    }\n\n    // Capture one-time layer values\n    req.params = self.mergeParams\n      ? mergeParams(layer.params, parentParams)\n      : layer.params;\n    var layerPath = layer.path;\n\n    // this should be done for the layer\n    self.process_params(layer, paramcalled, req, res, function (err) {\n      if (err) {\n        next(layerError || err)\n      } else if (route) {\n        layer.handle_request(req, res, next)\n      } else {\n        trim_prefix(layer, layerError, layerPath, path)\n      }\n\n      sync = 0\n    });\n  }\n\n  function trim_prefix(layer, layerError, layerPath, path) {\n    if (layerPath.length !== 0) {\n      // Validate path is a prefix match\n      if (layerPath !== path.slice(0, layerPath.length)) {\n        next(layerError)\n        return\n      }\n\n      // Validate path breaks on a path separator\n      var c = path[layerPath.length]\n      if (c && c !== '/' && c !== '.') return next(layerError)\n\n      // Trim off the part of the url that matches the route\n      // middleware (.use stuff) needs to have the path stripped\n      debug('trim prefix (%s) from url %s', layerPath, req.url);\n      removed = layerPath;\n      req.url = protohost + req.url.slice(protohost.length + removed.length)\n\n      // Ensure leading slash\n      if (!protohost && req.url[0] !== '/') {\n        req.url = '/' + req.url;\n        slashAdded = true;\n      }\n\n      // Setup base URL (no trailing slash)\n      req.baseUrl = parentUrl + (removed[removed.length - 1] === '/'\n        ? removed.substring(0, removed.length - 1)\n        : removed);\n    }\n\n    debug('%s %s : %s', layer.name, layerPath, req.originalUrl);\n\n    if (layerError) {\n      layer.handle_error(layerError, req, res, next);\n    } else {\n      layer.handle_request(req, res, next);\n    }\n  }\n};\n\n/**\n * Process any parameters for the layer.\n * @private\n */\n\nproto.process_params = function process_params(layer, called, req, res, done) {\n  var params = this.params;\n\n  // captured parameters from the layer, keys and values\n  var keys = layer.keys;\n\n  // fast track\n  if (!keys || keys.length === 0) {\n    return done();\n  }\n\n  var i = 0;\n  var name;\n  var paramIndex = 0;\n  var key;\n  var paramVal;\n  var paramCallbacks;\n  var paramCalled;\n\n  // process params in order\n  // param callbacks can be async\n  function param(err) {\n    if (err) {\n      return done(err);\n    }\n\n    if (i >= keys.length ) {\n      return done();\n    }\n\n    paramIndex = 0;\n    key = keys[i++];\n    name = key.name;\n    paramVal = req.params[name];\n    paramCallbacks = params[name];\n    paramCalled = called[name];\n\n    if (paramVal === undefined || !paramCallbacks) {\n      return param();\n    }\n\n    // param previously called with same value or error occurred\n    if (paramCalled && (paramCalled.match === paramVal\n      || (paramCalled.error && paramCalled.error !== 'route'))) {\n      // restore value\n      req.params[name] = paramCalled.value;\n\n      // next param\n      return param(paramCalled.error);\n    }\n\n    called[name] = paramCalled = {\n      error: null,\n      match: paramVal,\n      value: paramVal\n    };\n\n    paramCallback();\n  }\n\n  // single param callbacks\n  function paramCallback(err) {\n    var fn = paramCallbacks[paramIndex++];\n\n    // store updated value\n    paramCalled.value = req.params[key.name];\n\n    if (err) {\n      // store error\n      paramCalled.error = err;\n      param(err);\n      return;\n    }\n\n    if (!fn) return param();\n\n    try {\n      fn(req, res, paramCallback, paramVal, key.name);\n    } catch (e) {\n      paramCallback(e);\n    }\n  }\n\n  param();\n};\n\n/**\n * Use the given middleware function, with optional path, defaulting to \"/\".\n *\n * Use (like `.all`) will run for any http METHOD, but it will not add\n * handlers for those methods so OPTIONS requests will not consider `.use`\n * functions even if they could respond.\n *\n * The other difference is that _route_ path is stripped and not visible\n * to the handler function. The main effect of this feature is that mounted\n * handlers can operate without any code changes regardless of the \"prefix\"\n * pathname.\n *\n * @public\n */\n\nproto.use = function use(fn) {\n  var offset = 0;\n  var path = '/';\n\n  // default path to '/'\n  // disambiguate router.use([fn])\n  if (typeof fn !== 'function') {\n    var arg = fn;\n\n    while (Array.isArray(arg) && arg.length !== 0) {\n      arg = arg[0];\n    }\n\n    // first arg is the path\n    if (typeof arg !== 'function') {\n      offset = 1;\n      path = fn;\n    }\n  }\n\n  var callbacks = flatten(slice.call(arguments, offset));\n\n  if (callbacks.length === 0) {\n    throw new TypeError('Router.use() requires a middleware function')\n  }\n\n  for (var i = 0; i < callbacks.length; i++) {\n    var fn = callbacks[i];\n\n    if (typeof fn !== 'function') {\n      throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))\n    }\n\n    // add the middleware\n    debug('use %o %s', path, fn.name || '<anonymous>')\n\n    var layer = new Layer(path, {\n      sensitive: this.caseSensitive,\n      strict: false,\n      end: false\n    }, fn);\n\n    layer.route = undefined;\n\n    this.stack.push(layer);\n  }\n\n  return this;\n};\n\n/**\n * Create a new Route for the given path.\n *\n * Each route contains a separate middleware stack and VERB handlers.\n *\n * See the Route api documentation for details on adding handlers\n * and middleware to routes.\n *\n * @param {String} path\n * @return {Route}\n * @public\n */\n\nproto.route = function route(path) {\n  var route = new Route(path);\n\n  var layer = new Layer(path, {\n    sensitive: this.caseSensitive,\n    strict: this.strict,\n    end: true\n  }, route.dispatch.bind(route));\n\n  layer.route = route;\n\n  this.stack.push(layer);\n  return route;\n};\n\n// create Router#VERB functions\nmethods.concat('all').forEach(function(method){\n  proto[method] = function(path){\n    var route = this.route(path)\n    route[method].apply(route, slice.call(arguments, 1));\n    return this;\n  };\n});\n\n// append methods to a list of methods\nfunction appendMethods(list, addition) {\n  for (var i = 0; i < addition.length; i++) {\n    var method = addition[i];\n    if (list.indexOf(method) === -1) {\n      list.push(method);\n    }\n  }\n}\n\n// get pathname of request\nfunction getPathname(req) {\n  try {\n    return parseUrl(req).pathname;\n  } catch (err) {\n    return undefined;\n  }\n}\n\n// Get get protocol + host for a URL\nfunction getProtohost(url) {\n  if (typeof url !== 'string' || url.length === 0 || url[0] === '/') {\n    return undefined\n  }\n\n  var searchIndex = url.indexOf('?')\n  var pathLength = searchIndex !== -1\n    ? searchIndex\n    : url.length\n  var fqdnIndex = url.slice(0, pathLength).indexOf('://')\n\n  return fqdnIndex !== -1\n    ? url.substring(0, url.indexOf('/', 3 + fqdnIndex))\n    : undefined\n}\n\n// get type for error message\nfunction gettype(obj) {\n  var type = typeof obj;\n\n  if (type !== 'object') {\n    return type;\n  }\n\n  // inspect [[Class]] for objects\n  return toString.call(obj)\n    .replace(objectRegExp, '$1');\n}\n\n/**\n * Match path to a layer.\n *\n * @param {Layer} layer\n * @param {string} path\n * @private\n */\n\nfunction matchLayer(layer, path) {\n  try {\n    return layer.match(path);\n  } catch (err) {\n    return err;\n  }\n}\n\n// merge params with parent params\nfunction mergeParams(params, parent) {\n  if (typeof parent !== 'object' || !parent) {\n    return params;\n  }\n\n  // make copy of parent for base\n  var obj = mixin({}, parent);\n\n  // simple non-numeric merging\n  if (!(0 in params) || !(0 in parent)) {\n    return mixin(obj, params);\n  }\n\n  var i = 0;\n  var o = 0;\n\n  // determine numeric gaps\n  while (i in params) {\n    i++;\n  }\n\n  while (o in parent) {\n    o++;\n  }\n\n  // offset numeric indices in params before merge\n  for (i--; i >= 0; i--) {\n    params[i + o] = params[i];\n\n    // create holes for the merge when necessary\n    if (i < o) {\n      delete params[i];\n    }\n  }\n\n  return mixin(obj, params);\n}\n\n// restore obj props after function\nfunction restore(fn, obj) {\n  var props = new Array(arguments.length - 2);\n  var vals = new Array(arguments.length - 2);\n\n  for (var i = 0; i < props.length; i++) {\n    props[i] = arguments[i + 2];\n    vals[i] = obj[props[i]];\n  }\n\n  return function () {\n    // restore vals\n    for (var i = 0; i < props.length; i++) {\n      obj[props[i]] = vals[i];\n    }\n\n    return fn.apply(this, arguments);\n  };\n}\n\n// send an OPTIONS response\nfunction sendOptionsResponse(res, options, next) {\n  try {\n    var body = options.join(',');\n    res.set('Allow', body);\n    res.send(body);\n  } catch (err) {\n    next(err);\n  }\n}\n\n// wrap a function\nfunction wrap(old, fn) {\n  return function proxy() {\n    var args = new Array(arguments.length + 1);\n\n    args[0] = old;\n    for (var i = 0, len = arguments.length; i < len; i++) {\n      args[i + 1] = arguments[i];\n    }\n\n    fn.apply(this, args);\n  };\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Initialization middleware, exposing the\n * request and response to each other, as well\n * as defaulting the X-Powered-By header field.\n *\n * @param {Function} app\n * @return {Function}\n * @api private\n */\n\nexports.init = function(app){\n  return function expressInit(req, res, next){\n    if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');\n    req.res = res;\n    res.req = req;\n    req.next = next;\n\n    setPrototypeOf(req, app.request)\n    setPrototypeOf(res, app.response)\n\n    res.locals = res.locals || Object.create(null);\n\n    next();\n  };\n};\n\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar merge = require('utils-merge')\nvar parseUrl = require('parseurl');\nvar qs = require('qs');\n\n/**\n * @param {Object} options\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function query(options) {\n  var opts = merge({}, options)\n  var queryparse = qs.parse;\n\n  if (typeof options === 'function') {\n    queryparse = options;\n    opts = undefined;\n  }\n\n  if (opts !== undefined && opts.allowPrototypes === undefined) {\n    // back-compat for qs module\n    opts.allowPrototypes = true;\n  }\n\n  return function query(req, res, next){\n    if (!req.query) {\n      var val = parseUrl(req).query;\n      req.query = queryparse(val, opts);\n    }\n\n    next();\n  };\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('express:view');\nvar path = require('path');\nvar fs = require('fs');\n\n/**\n * Module variables.\n * @private\n */\n\nvar dirname = path.dirname;\nvar basename = path.basename;\nvar extname = path.extname;\nvar join = path.join;\nvar resolve = path.resolve;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = View;\n\n/**\n * Initialize a new `View` with the given `name`.\n *\n * Options:\n *\n *   - `defaultEngine` the default template engine name\n *   - `engines` template engine require() cache\n *   - `root` root path for view lookup\n *\n * @param {string} name\n * @param {object} options\n * @public\n */\n\nfunction View(name, options) {\n  var opts = options || {};\n\n  this.defaultEngine = opts.defaultEngine;\n  this.ext = extname(name);\n  this.name = name;\n  this.root = opts.root;\n\n  if (!this.ext && !this.defaultEngine) {\n    throw new Error('No default engine was specified and no extension was provided.');\n  }\n\n  var fileName = name;\n\n  if (!this.ext) {\n    // get extension from default engine name\n    this.ext = this.defaultEngine[0] !== '.'\n      ? '.' + this.defaultEngine\n      : this.defaultEngine;\n\n    fileName += this.ext;\n  }\n\n  if (!opts.engines[this.ext]) {\n    // load engine\n    var mod = this.ext.slice(1)\n    debug('require \"%s\"', mod)\n\n    // default engine export\n    var fn = require(mod).__express\n\n    if (typeof fn !== 'function') {\n      throw new Error('Module \"' + mod + '\" does not provide a view engine.')\n    }\n\n    opts.engines[this.ext] = fn\n  }\n\n  // store loaded engine\n  this.engine = opts.engines[this.ext];\n\n  // lookup path\n  this.path = this.lookup(fileName);\n}\n\n/**\n * Lookup view by the given `name`\n *\n * @param {string} name\n * @private\n */\n\nView.prototype.lookup = function lookup(name) {\n  var path;\n  var roots = [].concat(this.root);\n\n  debug('lookup \"%s\"', name);\n\n  for (var i = 0; i < roots.length && !path; i++) {\n    var root = roots[i];\n\n    // resolve the path\n    var loc = resolve(root, name);\n    var dir = dirname(loc);\n    var file = basename(loc);\n\n    // resolve the file\n    path = this.resolve(dir, file);\n  }\n\n  return path;\n};\n\n/**\n * Render with the given options.\n *\n * @param {object} options\n * @param {function} callback\n * @private\n */\n\nView.prototype.render = function render(options, callback) {\n  debug('render \"%s\"', this.path);\n  this.engine(this.path, options, callback);\n};\n\n/**\n * Resolve the file within the given directory.\n *\n * @param {string} dir\n * @param {string} file\n * @private\n */\n\nView.prototype.resolve = function resolve(dir, file) {\n  var ext = this.ext;\n\n  // <path>.<ext>\n  var path = join(dir, file);\n  var stat = tryStat(path);\n\n  if (stat && stat.isFile()) {\n    return path;\n  }\n\n  // <path>/index.<ext>\n  path = join(dir, basename(file, ext), 'index' + ext);\n  stat = tryStat(path);\n\n  if (stat && stat.isFile()) {\n    return path;\n  }\n};\n\n/**\n * Return a stat, maybe.\n *\n * @param {string} path\n * @return {fs.Stats}\n * @private\n */\n\nfunction tryStat(path) {\n  debug('stat \"%s\"', path);\n\n  try {\n    return fs.statSync(path);\n  } catch (e) {\n    return undefined;\n  }\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "/*!\n * content-disposition\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar basename = require('path').basename\nvar Buffer = require('safe-buffer').Buffer\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n * @private\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n * @private\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n * @private\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n * @private\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n * @private\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * HT            = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n * @private\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value     = charset  \"'\" [ language ] \"'\" value-chars\n * charset       = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset  = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n *               / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n *               / \"{\" / \"}\" / \"~\"\n * language      = ( 2*3ALPHA [ extlang ] )\n *               / 4ALPHA\n *               / 5*8ALPHA\n * extlang       = *3( \"-\" 3ALPHA )\n * value-chars   = *( pct-encoded / attr-char )\n * pct-encoded   = \"%\" HEXDIG HEXDIG\n * attr-char     = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n *               / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * @private\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type    = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm    = \"filename\" \"=\" value\n *                  | \"filename*\" \"=\" ext-value\n * disp-ext-parm    = token \"=\" value\n *                  | ext-token \"=\" ext-value\n * ext-token        = <the characters in token, followed by \"*\">\n * @private\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @public\n */\n\nfunction contentDisposition (filename, options) {\n  var opts = options || {}\n\n  // get type\n  var type = opts.type || 'attachment'\n\n  // get parameters\n  var params = createparams(filename, opts.fallback)\n\n  // format into string\n  return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @private\n */\n\nfunction createparams (filename, fallback) {\n  if (filename === undefined) {\n    return\n  }\n\n  var params = {}\n\n  if (typeof filename !== 'string') {\n    throw new TypeError('filename must be a string')\n  }\n\n  // fallback defaults to true\n  if (fallback === undefined) {\n    fallback = true\n  }\n\n  if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n    throw new TypeError('fallback must be a string or boolean')\n  }\n\n  if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n    throw new TypeError('fallback must be ISO-8859-1 string')\n  }\n\n  // restrict to file base name\n  var name = basename(filename)\n\n  // determine if name is suitable for quoted string\n  var isQuotedString = TEXT_REGEXP.test(name)\n\n  // generate fallback name\n  var fallbackName = typeof fallback !== 'string'\n    ? fallback && getlatin1(name)\n    : basename(fallback)\n  var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n  // set extended filename parameter\n  if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n    params['filename*'] = name\n  }\n\n  // set filename parameter\n  if (isQuotedString || hasFallback) {\n    params.filename = hasFallback\n      ? fallbackName\n      : name\n  }\n\n  return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @private\n */\n\nfunction format (obj) {\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  // start with normalized type\n  var string = String(type).toLowerCase()\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      var val = param.substr(-1) === '*'\n        ? ustring(parameters[param])\n        : qstring(parameters[param])\n\n      string += '; ' + param + '=' + val\n    }\n  }\n\n  return string\n}\n\n/**\n * Decode a RFC 5987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction decodefield (str) {\n  var match = EXT_VALUE_REGEXP.exec(str)\n\n  if (!match) {\n    throw new TypeError('invalid extended field value')\n  }\n\n  var charset = match[1].toLowerCase()\n  var encoded = match[2]\n  var value\n\n  // to binary string\n  var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n  switch (charset) {\n    case 'iso-8859-1':\n      value = getlatin1(binary)\n      break\n    case 'utf-8':\n      value = Buffer.from(binary, 'binary').toString('utf8')\n      break\n    default:\n      throw new TypeError('unsupported charset in extended field')\n  }\n\n  return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction getlatin1 (val) {\n  // simple Unicode -> ISO-8859-1 transformation\n  return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string || typeof string !== 'string') {\n    throw new TypeError('argument string is required')\n  }\n\n  var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n  if (!match) {\n    throw new TypeError('invalid type format')\n  }\n\n  // normalize type\n  var index = match[0].length\n  var type = match[1].toLowerCase()\n\n  var key\n  var names = []\n  var params = {}\n  var value\n\n  // calculate index to start at\n  index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n    ? index - 1\n    : index\n\n  // match parameters\n  while ((match = PARAM_REGEXP.exec(string))) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (names.indexOf(key) !== -1) {\n      throw new TypeError('invalid duplicate parameter')\n    }\n\n    names.push(key)\n\n    if (key.indexOf('*') + 1 === key.length) {\n      // decode extended value\n      key = key.slice(0, -1)\n      value = decodefield(value)\n\n      // overwrite existing value\n      params[key] = value\n      continue\n    }\n\n    if (typeof params[key] === 'string') {\n      continue\n    }\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(QESC_REGEXP, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @private\n */\n\nfunction pdecode (str, hex) {\n  return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @private\n */\n\nfunction pencode (char) {\n  return '%' + String(char)\n    .charCodeAt(0)\n    .toString(16)\n    .toUpperCase()\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction ustring (val) {\n  var str = String(val)\n\n  // percent encode as UTF-8\n  var encoded = encodeURIComponent(str)\n    .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n  return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n *\n * @public\n * @param {string} type\n * @param {object} parameters\n * @constructor\n */\n\nfunction ContentDisposition (type, parameters) {\n  this.type = type\n  this.parameters = parameters\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key\n    .substring(6)\n    .toLowerCase()\n    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n  else if (val === 'null') val = null;\n  else val = Number(val);\n\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n             2 === fd ? process.stderr :\n             createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts\n    ? Boolean(exports.inspectOpts.colors)\n    : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts)\n    .split('\\n').map(function(str) {\n      return str.trim()\n    }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString()\n      + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, { autoClose: false });\n      stream._type = 'fs';\n      break;\n\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n\n  stream._isStdio = true;\n\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n  debug.inspectOpts = {};\n\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}\n", "/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x25\\x26-\\x3B\\x3D\\x3F-\\x5B\\x5D\\x5F\\x61-\\x7A\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n  return String(url)\n    .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n    .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n", "/*!\n * etag\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = etag\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar crypto = require('crypto')\nvar Stats = require('fs').Stats\n\n/**\n * Module variables.\n * @private\n */\n\nvar toString = Object.prototype.toString\n\n/**\n * Generate an entity tag.\n *\n * @param {Buffer|string} entity\n * @return {string}\n * @private\n */\n\nfunction entitytag (entity) {\n  if (entity.length === 0) {\n    // fast-path empty\n    return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"'\n  }\n\n  // compute hash of entity\n  var hash = crypto\n    .createHash('sha1')\n    .update(entity, 'utf8')\n    .digest('base64')\n    .substring(0, 27)\n\n  // compute length of entity\n  var len = typeof entity === 'string'\n    ? Buffer.byteLength(entity, 'utf8')\n    : entity.length\n\n  return '\"' + len.toString(16) + '-' + hash + '\"'\n}\n\n/**\n * Create a simple ETag.\n *\n * @param {string|Buffer|Stats} entity\n * @param {object} [options]\n * @param {boolean} [options.weak]\n * @return {String}\n * @public\n */\n\nfunction etag (entity, options) {\n  if (entity == null) {\n    throw new TypeError('argument entity is required')\n  }\n\n  // support fs.Stats object\n  var isStats = isstats(entity)\n  var weak = options && typeof options.weak === 'boolean'\n    ? options.weak\n    : isStats\n\n  // validate argument\n  if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {\n    throw new TypeError('argument entity must be string, Buffer, or fs.Stats')\n  }\n\n  // generate entity tag\n  var tag = isStats\n    ? stattag(entity)\n    : entitytag(entity)\n\n  return weak\n    ? 'W/' + tag\n    : tag\n}\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\n\nfunction isstats (obj) {\n  // genuine fs.Stats\n  if (typeof Stats === 'function' && obj instanceof Stats) {\n    return true\n  }\n\n  // quack quack\n  return obj && typeof obj === 'object' &&\n    'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&\n    'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&\n    'ino' in obj && typeof obj.ino === 'number' &&\n    'size' in obj && typeof obj.size === 'number'\n}\n\n/**\n * Generate a tag for a stat.\n *\n * @param {object} stat\n * @return {string}\n * @private\n */\n\nfunction stattag (stat) {\n  var mtime = stat.mtime.getTime().toString(16)\n  var size = stat.size.toString(16)\n\n  return '\"' + size + '-' + mtime + '\"'\n}\n", "/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n  // fields\n  var modifiedSince = reqHeaders['if-modified-since']\n  var noneMatch = reqHeaders['if-none-match']\n\n  // unconditional request\n  if (!modifiedSince && !noneMatch) {\n    return false\n  }\n\n  // Always return stale when Cache-Control: no-cache\n  // to support end-to-end reload requests\n  // https://tools.ietf.org/html/rfc2616#section-14.9.4\n  var cacheControl = reqHeaders['cache-control']\n  if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n    return false\n  }\n\n  // if-none-match\n  if (noneMatch && noneMatch !== '*') {\n    var etag = resHeaders['etag']\n\n    if (!etag) {\n      return false\n    }\n\n    var etagStale = true\n    var matches = parseTokenList(noneMatch)\n    for (var i = 0; i < matches.length; i++) {\n      var match = matches[i]\n      if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n        etagStale = false\n        break\n      }\n    }\n\n    if (etagStale) {\n      return false\n    }\n  }\n\n  // if-modified-since\n  if (modifiedSince) {\n    var lastModified = resHeaders['last-modified']\n    var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n    if (modifiedStale) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n  var timestamp = date && Date.parse(date)\n\n  // istanbul ignore next: guard against date.js Date.parse patching\n  return typeof timestamp === 'number'\n    ? timestamp\n    : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        list.push(str.substring(start, end))\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  list.push(str.substring(start, end))\n\n  return list\n}\n", "{\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/bdoc\":[\"bdoc\"],\"application/ccxml+xml\":[\"ccxml\"],\"application/cdmi-capability\":[\"cdmia\"],\"application/cdmi-container\":[\"cdmic\"],\"application/cdmi-domain\":[\"cdmid\"],\"application/cdmi-object\":[\"cdmio\"],\"application/cdmi-queue\":[\"cdmiq\"],\"application/cu-seeme\":[\"cu\"],\"application/dash+xml\":[\"mpd\"],\"application/davmount+xml\":[\"davmount\"],\"application/docbook+xml\":[\"dbk\"],\"application/dssc+der\":[\"dssc\"],\"application/dssc+xml\":[\"xdssc\"],\"application/ecmascript\":[\"ecma\"],\"application/emma+xml\":[\"emma\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/font-tdpfr\":[\"pfr\"],\"application/font-woff\":[],\"application/font-woff2\":[],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"application/java-archive\":[\"jar\",\"war\",\"ear\"],\"application/java-serialized-object\":[\"ser\"],\"application/java-vm\":[\"class\"],\"application/javascript\":[\"js\",\"mjs\"],\"application/json\":[\"json\",\"map\"],\"application/json5\":[\"json5\"],\"application/jsonml+json\":[\"jsonml\"],\"application/ld+json\":[\"jsonld\"],\"application/lost+xml\":[\"lostxml\"],\"application/mac-binhex40\":[\"hqx\"],\"application/mac-compactpro\":[\"cpt\"],\"application/mads+xml\":[\"mads\"],\"application/manifest+json\":[\"webmanifest\"],\"application/marc\":[\"mrc\"],\"application/marcxml+xml\":[\"mrcx\"],\"application/mathematica\":[\"ma\",\"nb\",\"mb\"],\"application/mathml+xml\":[\"mathml\"],\"application/mbox\":[\"mbox\"],\"application/mediaservercontrol+xml\":[\"mscml\"],\"application/metalink+xml\":[\"metalink\"],\"application/metalink4+xml\":[\"meta4\"],\"application/mets+xml\":[\"mets\"],\"application/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"application/octet-stream\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"],\"application/oda\":[\"oda\"],\"application/oebps-package+xml\":[\"opf\"],\"application/ogg\":[\"ogx\"],\"application/omdoc+xml\":[\"omdoc\"],\"application/onenote\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"],\"application/oxps\":[\"oxps\"],\"application/patch-ops-error+xml\":[\"xer\"],\"application/pdf\":[\"pdf\"],\"application/pgp-encrypted\":[\"pgp\"],\"application/pgp-signature\":[\"asc\",\"sig\"],\"application/pics-rules\":[\"prf\"],\"application/pkcs10\":[\"p10\"],\"application/pkcs7-mime\":[\"p7m\",\"p7c\"],\"application/pkcs7-signature\":[\"p7s\"],\"application/pkcs8\":[\"p8\"],\"application/pkix-attr-cert\":[\"ac\"],\"application/pkix-cert\":[\"cer\"],\"application/pkix-crl\":[\"crl\"],\"application/pkix-pkipath\":[\"pkipath\"],\"application/pkixcmp\":[\"pki\"],\"application/pls+xml\":[\"pls\"],\"application/postscript\":[\"ai\",\"eps\",\"ps\"],\"application/prs.cww\":[\"cww\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\"],\"application/reginfo+xml\":[\"rif\"],\"application/relax-ng-compact-syntax\":[\"rnc\"],\"application/resource-lists+xml\":[\"rl\"],\"application/resource-lists-diff+xml\":[\"rld\"],\"application/rls-services+xml\":[\"rs\"],\"application/rpki-ghostbusters\":[\"gbr\"],\"application/rpki-manifest\":[\"mft\"],\"application/rpki-roa\":[\"roa\"],\"application/rsd+xml\":[\"rsd\"],\"application/rss+xml\":[\"rss\"],\"application/rtf\":[\"rtf\"],\"application/sbml+xml\":[\"sbml\"],\"application/scvp-cv-request\":[\"scq\"],\"application/scvp-cv-response\":[\"scs\"],\"application/scvp-vp-request\":[\"spq\"],\"application/scvp-vp-response\":[\"spp\"],\"application/sdp\":[\"sdp\"],\"application/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"application/smil+xml\":[\"smi\",\"smil\"],\"application/sparql-query\":[\"rq\"],\"application/sparql-results+xml\":[\"srx\"],\"application/srgs\":[\"gram\"],\"application/srgs+xml\":[\"grxml\"],\"application/sru+xml\":[\"sru\"],\"application/ssdl+xml\":[\"ssdl\"],\"application/ssml+xml\":[\"ssml\"],\"application/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"xfdf\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"mpp\",\"mpt\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-iso9660-image\":[],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[],\"application/x-msdownload\":[\"com\",\"bat\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"wmf\",\"emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[],\"audio/adpcm\":[\"adp\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mp3\":[],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[],\"audio/webm\":[\"weba\"],\"audio/x-aac\":[\"aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[],\"audio/x-wav\":[],\"audio/xm\":[\"xm\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/apng\":[\"apng\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/ief\":[\"ief\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/ktx\":[\"ktx\"],\"image/png\":[\"png\"],\"image/prs.btif\":[\"btif\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/tiff\":[\"tiff\",\"tif\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/webp\":[\"webp\"],\"image/x-3ds\":[\"3ds\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[],\"image/x-pcx\":[\"pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"mts\"],\"model/vnd.vtu\":[\"vtu\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"x3db\",\"x3dbz\"],\"model/x3d+vrml\":[\"x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/hjson\":[\"hjson\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/slim\":[\"slim\",\"slm\"],\"text/stylus\":[\"stylus\",\"styl\"],\"text/tab-separated-values\":[\"tsv\"],\"text/troff\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"],\"text/turtle\":[\"ttl\"],\"text/uri-list\":[\"uri\",\"uris\",\"urls\"],\"text/vcard\":[\"vcard\"],\"text/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/vtt\":[\"vtt\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"text/xml\":[],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/jpeg\":[\"jpgv\"],\"video/jpm\":[\"jpgm\"],\"video/mj2\":[\"mj2\",\"mjp2\"],\"video/mp2t\":[\"ts\"],\"video/mp4\":[\"mp4\",\"mp4v\",\"mpg4\"],\"video/mpeg\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"],\"video/ogg\":[\"ogv\"],\"video/quicktime\":[\"qt\",\"mov\"],\"video/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/webm\":[\"webm\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]}", "var path = require('path');\nvar fs = require('fs');\n\nfunction Mime() {\n  // Map of extension -> mime type\n  this.types = Object.create(null);\n\n  // Map of mime type -> extension\n  this.extensions = Object.create(null);\n}\n\n/**\n * Define mimetype -> extension mappings.  Each key is a mime-type that maps\n * to an array of extensions associated with the type.  The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * @param map (Object) type definitions\n */\nMime.prototype.define = function (map) {\n  for (var type in map) {\n    var exts = map[type];\n    for (var i = 0; i < exts.length; i++) {\n      if (process.env.DEBUG_MIME && this.types[exts[i]]) {\n        console.warn((this._loading || \"define()\").replace(/.*\\//, ''), 'changes \"' + exts[i] + '\" extension type from ' +\n          this.types[exts[i]] + ' to ' + type);\n      }\n\n      this.types[exts[i]] = type;\n    }\n\n    // Default extension is the first one we encounter\n    if (!this.extensions[type]) {\n      this.extensions[type] = exts[0];\n    }\n  }\n};\n\n/**\n * Load an Apache2-style \".types\" file\n *\n * This may be called multiple times (it's expected).  Where files declare\n * overlapping types/extensions, the last file wins.\n *\n * @param file (String) path of file to load.\n */\nMime.prototype.load = function(file) {\n  this._loading = file;\n  // Read file and split into lines\n  var map = {},\n      content = fs.readFileSync(file, 'ascii'),\n      lines = content.split(/[\\r\\n]+/);\n\n  lines.forEach(function(line) {\n    // Clean up whitespace/comments, and split into fields\n    var fields = line.replace(/\\s*#.*|^\\s*|\\s*$/g, '').split(/\\s+/);\n    map[fields.shift()] = fields;\n  });\n\n  this.define(map);\n\n  this._loading = null;\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.lookup = function(path, fallback) {\n  var ext = path.replace(/^.*[\\.\\/\\\\]/, '').toLowerCase();\n\n  return this.types[ext] || fallback || this.default_type;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.extension = function(mimeType) {\n  var type = mimeType.match(/^\\s*([^;\\s]*)(?:;|\\s|$)/)[1].toLowerCase();\n  return this.extensions[type];\n};\n\n// Default instance\nvar mime = new Mime();\n\n// Define built-in types\nmime.define(require('./types.json'));\n\n// Default type\nmime.default_type = mime.lookup('bin');\n\n//\n// Additional API specific to the default instance\n//\n\nmime.Mime = Mime;\n\n/**\n * Lookup a charset based on mime type.\n */\nmime.charsets = {\n  lookup: function(mimeType, fallback) {\n    // Assume text types are utf8\n    return (/^text\\/|^application\\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback;\n  }\n};\n\nmodule.exports = mime;\n", "/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string')\n  }\n\n  var index = str.indexOf('=')\n\n  if (index === -1) {\n    return -2\n  }\n\n  // split the range string\n  var arr = str.slice(index + 1).split(',')\n  var ranges = []\n\n  // add ranges type\n  ranges.type = str.slice(0, index)\n\n  // parse all ranges\n  for (var i = 0; i < arr.length; i++) {\n    var range = arr[i].split('-')\n    var start = parseInt(range[0], 10)\n    var end = parseInt(range[1], 10)\n\n    // -nnn\n    if (isNaN(start)) {\n      start = size - end\n      end = size - 1\n    // nnn-\n    } else if (isNaN(end)) {\n      end = size - 1\n    }\n\n    // limit last-byte-pos to current length\n    if (end > size - 1) {\n      end = size - 1\n    }\n\n    // invalid or unsatisifiable\n    if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n      continue\n    }\n\n    // add range\n    ranges.push({\n      start: start,\n      end: end\n    })\n  }\n\n  if (ranges.length < 1) {\n    // unsatisifiable\n    return -1\n  }\n\n  return options && options.combine\n    ? combineRanges(ranges)\n    : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n  var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n  for (var j = 0, i = 1; i < ordered.length; i++) {\n    var range = ordered[i]\n    var current = ordered[j]\n\n    if (range.start > current.end + 1) {\n      // next range\n      ordered[++j] = range\n    } else if (range.end > current.end) {\n      // extend range\n      current.end = range.end\n      current.index = Math.min(current.index, range.index)\n    }\n  }\n\n  // trim ordered array\n  ordered.length = j + 1\n\n  // generate combined range\n  var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n  // copy ranges type\n  combined.type = ranges.type\n\n  return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n  return {\n    start: range.start,\n    end: range.end,\n    index: index\n  }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n  return {\n    start: range.start,\n    end: range.end\n  }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n  return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n  return a.start - b.start\n}\n", "/*!\n * send\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar debug = require('debug')('send')\nvar deprecate = require('depd')('send')\nvar destroy = require('destroy')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar etag = require('etag')\nvar fresh = require('fresh')\nvar fs = require('fs')\nvar mime = require('mime')\nvar ms = require('ms')\nvar onFinished = require('on-finished')\nvar parseRange = require('range-parser')\nvar path = require('path')\nvar statuses = require('statuses')\nvar Stream = require('stream')\nvar util = require('util')\n\n/**\n * Path function references.\n * @private\n */\n\nvar extname = path.extname\nvar join = path.join\nvar normalize = path.normalize\nvar resolve = path.resolve\nvar sep = path.sep\n\n/**\n * Regular expression for identifying a bytes Range header.\n * @private\n */\n\nvar BYTES_RANGE_REGEXP = /^ *bytes=/\n\n/**\n * Maximum value allowed for the max age.\n * @private\n */\n\nvar MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year\n\n/**\n * Regular expression to match a path with a directory up component.\n * @private\n */\n\nvar UP_PATH_REGEXP = /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = send\nmodule.exports.mime = mime\n\n/**\n * Return a `SendStream` for `req` and `path`.\n *\n * @param {object} req\n * @param {string} path\n * @param {object} [options]\n * @return {SendStream}\n * @public\n */\n\nfunction send (req, path, options) {\n  return new SendStream(req, path, options)\n}\n\n/**\n * Initialize a `SendStream` with the given `path`.\n *\n * @param {Request} req\n * @param {String} path\n * @param {object} [options]\n * @private\n */\n\nfunction SendStream (req, path, options) {\n  Stream.call(this)\n\n  var opts = options || {}\n\n  this.options = opts\n  this.path = path\n  this.req = req\n\n  this._acceptRanges = opts.acceptRanges !== undefined\n    ? Boolean(opts.acceptRanges)\n    : true\n\n  this._cacheControl = opts.cacheControl !== undefined\n    ? Boolean(opts.cacheControl)\n    : true\n\n  this._etag = opts.etag !== undefined\n    ? Boolean(opts.etag)\n    : true\n\n  this._dotfiles = opts.dotfiles !== undefined\n    ? opts.dotfiles\n    : 'ignore'\n\n  if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {\n    throw new TypeError('dotfiles option must be \"allow\", \"deny\", or \"ignore\"')\n  }\n\n  this._hidden = Boolean(opts.hidden)\n\n  if (opts.hidden !== undefined) {\n    deprecate('hidden: use dotfiles: \\'' + (this._hidden ? 'allow' : 'ignore') + '\\' instead')\n  }\n\n  // legacy support\n  if (opts.dotfiles === undefined) {\n    this._dotfiles = undefined\n  }\n\n  this._extensions = opts.extensions !== undefined\n    ? normalizeList(opts.extensions, 'extensions option')\n    : []\n\n  this._immutable = opts.immutable !== undefined\n    ? Boolean(opts.immutable)\n    : false\n\n  this._index = opts.index !== undefined\n    ? normalizeList(opts.index, 'index option')\n    : ['index.html']\n\n  this._lastModified = opts.lastModified !== undefined\n    ? Boolean(opts.lastModified)\n    : true\n\n  this._maxage = opts.maxAge || opts.maxage\n  this._maxage = typeof this._maxage === 'string'\n    ? ms(this._maxage)\n    : Number(this._maxage)\n  this._maxage = !isNaN(this._maxage)\n    ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n    : 0\n\n  this._root = opts.root\n    ? resolve(opts.root)\n    : null\n\n  if (!this._root && opts.from) {\n    this.from(opts.from)\n  }\n}\n\n/**\n * Inherits from `Stream`.\n */\n\nutil.inherits(SendStream, Stream)\n\n/**\n * Enable or disable etag generation.\n *\n * @param {Boolean} val\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.etag = deprecate.function(function etag (val) {\n  this._etag = Boolean(val)\n  debug('etag %s', this._etag)\n  return this\n}, 'send.etag: pass etag as option')\n\n/**\n * Enable or disable \"hidden\" (dot) files.\n *\n * @param {Boolean} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.hidden = deprecate.function(function hidden (val) {\n  this._hidden = Boolean(val)\n  this._dotfiles = undefined\n  debug('hidden %s', this._hidden)\n  return this\n}, 'send.hidden: use dotfiles option')\n\n/**\n * Set index `paths`, set to a falsy\n * value to disable index support.\n *\n * @param {String|Boolean|Array} paths\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.index = deprecate.function(function index (paths) {\n  var index = !paths ? [] : normalizeList(paths, 'paths argument')\n  debug('index %o', paths)\n  this._index = index\n  return this\n}, 'send.index: pass index as option')\n\n/**\n * Set root `path`.\n *\n * @param {String} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.root = function root (path) {\n  this._root = resolve(String(path))\n  debug('root %s', this._root)\n  return this\n}\n\nSendStream.prototype.from = deprecate.function(SendStream.prototype.root,\n  'send.from: pass root as option')\n\nSendStream.prototype.root = deprecate.function(SendStream.prototype.root,\n  'send.root: pass root as option')\n\n/**\n * Set max-age to `maxAge`.\n *\n * @param {Number} maxAge\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.maxage = deprecate.function(function maxage (maxAge) {\n  this._maxage = typeof maxAge === 'string'\n    ? ms(maxAge)\n    : Number(maxAge)\n  this._maxage = !isNaN(this._maxage)\n    ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n    : 0\n  debug('max-age %d', this._maxage)\n  return this\n}, 'send.maxage: pass maxAge as option')\n\n/**\n * Emit error with `status`.\n *\n * @param {number} status\n * @param {Error} [err]\n * @private\n */\n\nSendStream.prototype.error = function error (status, err) {\n  // emit if listeners instead of responding\n  if (hasListeners(this, 'error')) {\n    return this.emit('error', createHttpError(status, err))\n  }\n\n  var res = this.res\n  var msg = statuses.message[status] || String(status)\n  var doc = createHtmlDocument('Error', escapeHtml(msg))\n\n  // clear existing headers\n  clearHeaders(res)\n\n  // add error headers\n  if (err && err.headers) {\n    setHeaders(res, err.headers)\n  }\n\n  // send basic response\n  res.statusCode = status\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', Buffer.byteLength(doc))\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n  res.setHeader('X-Content-Type-Options', 'nosniff')\n  res.end(doc)\n}\n\n/**\n * Check if the pathname ends with \"/\".\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {\n  return this.path[this.path.length - 1] === '/'\n}\n\n/**\n * Check if this is a conditional GET request.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isConditionalGET = function isConditionalGET () {\n  return this.req.headers['if-match'] ||\n    this.req.headers['if-unmodified-since'] ||\n    this.req.headers['if-none-match'] ||\n    this.req.headers['if-modified-since']\n}\n\n/**\n * Check if the request preconditions failed.\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {\n  var req = this.req\n  var res = this.res\n\n  // if-match\n  var match = req.headers['if-match']\n  if (match) {\n    var etag = res.getHeader('ETag')\n    return !etag || (match !== '*' && parseTokenList(match).every(function (match) {\n      return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag\n    }))\n  }\n\n  // if-unmodified-since\n  var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since'])\n  if (!isNaN(unmodifiedSince)) {\n    var lastModified = parseHttpDate(res.getHeader('Last-Modified'))\n    return isNaN(lastModified) || lastModified > unmodifiedSince\n  }\n\n  return false\n}\n\n/**\n * Strip various content header fields for a change in entity.\n *\n * @private\n */\n\nSendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {\n  var res = this.res\n\n  res.removeHeader('Content-Encoding')\n  res.removeHeader('Content-Language')\n  res.removeHeader('Content-Length')\n  res.removeHeader('Content-Range')\n  res.removeHeader('Content-Type')\n}\n\n/**\n * Respond with 304 not modified.\n *\n * @api private\n */\n\nSendStream.prototype.notModified = function notModified () {\n  var res = this.res\n  debug('not modified')\n  this.removeContentHeaderFields()\n  res.statusCode = 304\n  res.end()\n}\n\n/**\n * Raise error that headers already sent.\n *\n * @api private\n */\n\nSendStream.prototype.headersAlreadySent = function headersAlreadySent () {\n  var err = new Error('Can\\'t set headers after they are sent.')\n  debug('headers already sent')\n  this.error(500, err)\n}\n\n/**\n * Check if the request is cacheable, aka\n * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isCachable = function isCachable () {\n  var statusCode = this.res.statusCode\n  return (statusCode >= 200 && statusCode < 300) ||\n    statusCode === 304\n}\n\n/**\n * Handle stat() error.\n *\n * @param {Error} error\n * @private\n */\n\nSendStream.prototype.onStatError = function onStatError (error) {\n  switch (error.code) {\n    case 'ENAMETOOLONG':\n    case 'ENOENT':\n    case 'ENOTDIR':\n      this.error(404, error)\n      break\n    default:\n      this.error(500, error)\n      break\n  }\n}\n\n/**\n * Check if the cache is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isFresh = function isFresh () {\n  return fresh(this.req.headers, {\n    etag: this.res.getHeader('ETag'),\n    'last-modified': this.res.getHeader('Last-Modified')\n  })\n}\n\n/**\n * Check if the range is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isRangeFresh = function isRangeFresh () {\n  var ifRange = this.req.headers['if-range']\n\n  if (!ifRange) {\n    return true\n  }\n\n  // if-range as etag\n  if (ifRange.indexOf('\"') !== -1) {\n    var etag = this.res.getHeader('ETag')\n    return Boolean(etag && ifRange.indexOf(etag) !== -1)\n  }\n\n  // if-range as modified date\n  var lastModified = this.res.getHeader('Last-Modified')\n  return parseHttpDate(lastModified) <= parseHttpDate(ifRange)\n}\n\n/**\n * Redirect to path.\n *\n * @param {string} path\n * @private\n */\n\nSendStream.prototype.redirect = function redirect (path) {\n  var res = this.res\n\n  if (hasListeners(this, 'directory')) {\n    this.emit('directory', res, path)\n    return\n  }\n\n  if (this.hasTrailingSlash()) {\n    this.error(403)\n    return\n  }\n\n  var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'))\n  var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc))\n\n  // redirect\n  res.statusCode = 301\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', Buffer.byteLength(doc))\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n  res.setHeader('X-Content-Type-Options', 'nosniff')\n  res.setHeader('Location', loc)\n  res.end(doc)\n}\n\n/**\n * Pipe to `res.\n *\n * @param {Stream} res\n * @return {Stream} res\n * @api public\n */\n\nSendStream.prototype.pipe = function pipe (res) {\n  // root path\n  var root = this._root\n\n  // references\n  this.res = res\n\n  // decode the path\n  var path = decode(this.path)\n  if (path === -1) {\n    this.error(400)\n    return res\n  }\n\n  // null byte(s)\n  if (~path.indexOf('\\0')) {\n    this.error(400)\n    return res\n  }\n\n  var parts\n  if (root !== null) {\n    // normalize\n    if (path) {\n      path = normalize('.' + sep + path)\n    }\n\n    // malicious path\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path)\n      this.error(403)\n      return res\n    }\n\n    // explode path parts\n    parts = path.split(sep)\n\n    // join / normalize from optional root dir\n    path = normalize(join(root, path))\n  } else {\n    // \"..\" is malicious without \"root\"\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path)\n      this.error(403)\n      return res\n    }\n\n    // explode path parts\n    parts = normalize(path).split(sep)\n\n    // resolve the path\n    path = resolve(path)\n  }\n\n  // dotfile handling\n  if (containsDotFile(parts)) {\n    var access = this._dotfiles\n\n    // legacy support\n    if (access === undefined) {\n      access = parts[parts.length - 1][0] === '.'\n        ? (this._hidden ? 'allow' : 'ignore')\n        : 'allow'\n    }\n\n    debug('%s dotfile \"%s\"', access, path)\n    switch (access) {\n      case 'allow':\n        break\n      case 'deny':\n        this.error(403)\n        return res\n      case 'ignore':\n      default:\n        this.error(404)\n        return res\n    }\n  }\n\n  // index file support\n  if (this._index.length && this.hasTrailingSlash()) {\n    this.sendIndex(path)\n    return res\n  }\n\n  this.sendFile(path)\n  return res\n}\n\n/**\n * Transfer `path`.\n *\n * @param {String} path\n * @api public\n */\n\nSendStream.prototype.send = function send (path, stat) {\n  var len = stat.size\n  var options = this.options\n  var opts = {}\n  var res = this.res\n  var req = this.req\n  var ranges = req.headers.range\n  var offset = options.start || 0\n\n  if (headersSent(res)) {\n    // impossible to send now\n    this.headersAlreadySent()\n    return\n  }\n\n  debug('pipe \"%s\"', path)\n\n  // set header fields\n  this.setHeader(path, stat)\n\n  // set content-type\n  this.type(path)\n\n  // conditional GET support\n  if (this.isConditionalGET()) {\n    if (this.isPreconditionFailure()) {\n      this.error(412)\n      return\n    }\n\n    if (this.isCachable() && this.isFresh()) {\n      this.notModified()\n      return\n    }\n  }\n\n  // adjust len to start/end options\n  len = Math.max(0, len - offset)\n  if (options.end !== undefined) {\n    var bytes = options.end - offset + 1\n    if (len > bytes) len = bytes\n  }\n\n  // Range support\n  if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {\n    // parse\n    ranges = parseRange(len, ranges, {\n      combine: true\n    })\n\n    // If-Range support\n    if (!this.isRangeFresh()) {\n      debug('range stale')\n      ranges = -2\n    }\n\n    // unsatisfiable\n    if (ranges === -1) {\n      debug('range unsatisfiable')\n\n      // Content-Range\n      res.setHeader('Content-Range', contentRange('bytes', len))\n\n      // 416 Requested Range Not Satisfiable\n      return this.error(416, {\n        headers: { 'Content-Range': res.getHeader('Content-Range') }\n      })\n    }\n\n    // valid (syntactically invalid/multiple ranges are treated as a regular response)\n    if (ranges !== -2 && ranges.length === 1) {\n      debug('range %j', ranges)\n\n      // Content-Range\n      res.statusCode = 206\n      res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]))\n\n      // adjust for requested range\n      offset += ranges[0].start\n      len = ranges[0].end - ranges[0].start + 1\n    }\n  }\n\n  // clone options\n  for (var prop in options) {\n    opts[prop] = options[prop]\n  }\n\n  // set read options\n  opts.start = offset\n  opts.end = Math.max(offset, offset + len - 1)\n\n  // content-length\n  res.setHeader('Content-Length', len)\n\n  // HEAD support\n  if (req.method === 'HEAD') {\n    res.end()\n    return\n  }\n\n  this.stream(path, opts)\n}\n\n/**\n * Transfer file for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendFile = function sendFile (path) {\n  var i = 0\n  var self = this\n\n  debug('stat \"%s\"', path)\n  fs.stat(path, function onstat (err, stat) {\n    if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) {\n      // not found, check extensions\n      return next(err)\n    }\n    if (err) return self.onStatError(err)\n    if (stat.isDirectory()) return self.redirect(path)\n    self.emit('file', path, stat)\n    self.send(path, stat)\n  })\n\n  function next (err) {\n    if (self._extensions.length <= i) {\n      return err\n        ? self.onStatError(err)\n        : self.error(404)\n    }\n\n    var p = path + '.' + self._extensions[i++]\n\n    debug('stat \"%s\"', p)\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err)\n      if (stat.isDirectory()) return next()\n      self.emit('file', p, stat)\n      self.send(p, stat)\n    })\n  }\n}\n\n/**\n * Transfer index for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendIndex = function sendIndex (path) {\n  var i = -1\n  var self = this\n\n  function next (err) {\n    if (++i >= self._index.length) {\n      if (err) return self.onStatError(err)\n      return self.error(404)\n    }\n\n    var p = join(path, self._index[i])\n\n    debug('stat \"%s\"', p)\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err)\n      if (stat.isDirectory()) return next()\n      self.emit('file', p, stat)\n      self.send(p, stat)\n    })\n  }\n\n  next()\n}\n\n/**\n * Stream `path` to the response.\n *\n * @param {String} path\n * @param {Object} options\n * @api private\n */\n\nSendStream.prototype.stream = function stream (path, options) {\n  var self = this\n  var res = this.res\n\n  // pipe\n  var stream = fs.createReadStream(path, options)\n  this.emit('stream', stream)\n  stream.pipe(res)\n\n  // cleanup\n  function cleanup () {\n    destroy(stream, true)\n  }\n\n  // response finished, cleanup\n  onFinished(res, cleanup)\n\n  // error handling\n  stream.on('error', function onerror (err) {\n    // clean up stream early\n    cleanup()\n\n    // error\n    self.onStatError(err)\n  })\n\n  // end\n  stream.on('end', function onend () {\n    self.emit('end')\n  })\n}\n\n/**\n * Set content-type based on `path`\n * if it hasn't been explicitly set.\n *\n * @param {String} path\n * @api private\n */\n\nSendStream.prototype.type = function type (path) {\n  var res = this.res\n\n  if (res.getHeader('Content-Type')) return\n\n  var type = mime.lookup(path)\n\n  if (!type) {\n    debug('no content-type')\n    return\n  }\n\n  var charset = mime.charsets.lookup(type)\n\n  debug('content-type %s', type)\n  res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''))\n}\n\n/**\n * Set response header fields, most\n * fields may be pre-defined.\n *\n * @param {String} path\n * @param {Object} stat\n * @api private\n */\n\nSendStream.prototype.setHeader = function setHeader (path, stat) {\n  var res = this.res\n\n  this.emit('headers', res, path, stat)\n\n  if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {\n    debug('accept ranges')\n    res.setHeader('Accept-Ranges', 'bytes')\n  }\n\n  if (this._cacheControl && !res.getHeader('Cache-Control')) {\n    var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000)\n\n    if (this._immutable) {\n      cacheControl += ', immutable'\n    }\n\n    debug('cache-control %s', cacheControl)\n    res.setHeader('Cache-Control', cacheControl)\n  }\n\n  if (this._lastModified && !res.getHeader('Last-Modified')) {\n    var modified = stat.mtime.toUTCString()\n    debug('modified %s', modified)\n    res.setHeader('Last-Modified', modified)\n  }\n\n  if (this._etag && !res.getHeader('ETag')) {\n    var val = etag(stat)\n    debug('etag %s', val)\n    res.setHeader('ETag', val)\n  }\n}\n\n/**\n * Clear all headers from a response.\n *\n * @param {object} res\n * @private\n */\n\nfunction clearHeaders (res) {\n  var headers = getHeaderNames(res)\n\n  for (var i = 0; i < headers.length; i++) {\n    res.removeHeader(headers[i])\n  }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n *\n * @param {string} str\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str[i] !== '/') {\n      break\n    }\n  }\n\n  return i > 1\n    ? '/' + str.substr(i)\n    : str\n}\n\n/**\n * Determine if path parts contain a dotfile.\n *\n * @api private\n */\n\nfunction containsDotFile (parts) {\n  for (var i = 0; i < parts.length; i++) {\n    var part = parts[i]\n    if (part.length > 1 && part[0] === '.') {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Create a Content-Range header.\n *\n * @param {string} type\n * @param {number} size\n * @param {array} [range]\n */\n\nfunction contentRange (type, size, range) {\n  return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>' + title + '</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Create a HttpError object from simple arguments.\n *\n * @param {number} status\n * @param {Error|object} err\n * @private\n */\n\nfunction createHttpError (status, err) {\n  if (!err) {\n    return createError(status)\n  }\n\n  return err instanceof Error\n    ? createError(status, err, { expose: false })\n    : createError(status, err)\n}\n\n/**\n * decodeURIComponent.\n *\n * Allows V8 to only deoptimize this fn instead of all\n * of send().\n *\n * @param {String} path\n * @api private\n */\n\nfunction decode (path) {\n  try {\n    return decodeURIComponent(path)\n  } catch (err) {\n    return -1\n  }\n}\n\n/**\n * Get the header names on a respnse.\n *\n * @param {object} res\n * @returns {array[string]}\n * @private\n */\n\nfunction getHeaderNames (res) {\n  return typeof res.getHeaderNames !== 'function'\n    ? Object.keys(res._headers || {})\n    : res.getHeaderNames()\n}\n\n/**\n * Determine if emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction hasListeners (emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function'\n    ? emitter.listeners(type).length\n    : emitter.listenerCount(type)\n\n  return count > 0\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n  return typeof res.headersSent !== 'boolean'\n    ? Boolean(res._header)\n    : res.headersSent\n}\n\n/**\n * Normalize the index option into an array.\n *\n * @param {boolean|string|array} val\n * @param {string} name\n * @private\n */\n\nfunction normalizeList (val, name) {\n  var list = [].concat(val || [])\n\n  for (var i = 0; i < list.length; i++) {\n    if (typeof list[i] !== 'string') {\n      throw new TypeError(name + ' must be array of strings or false')\n    }\n  }\n\n  return list\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n  var timestamp = date && Date.parse(date)\n\n  return typeof timestamp === 'number'\n    ? timestamp\n    : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        if (start !== end) {\n          list.push(str.substring(start, end))\n        }\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  if (start !== end) {\n    list.push(str.substring(start, end))\n  }\n\n  return list\n}\n\n/**\n * Set an object of headers on a response.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n  var keys = Object.keys(headers)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    res.setHeader(key, headers[key])\n  }\n}\n", "/*!\n * forwarded\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = forwarded\n\n/**\n * Get all addresses in the request, using the `X-Forwarded-For` header.\n *\n * @param {object} req\n * @return {array}\n * @public\n */\n\nfunction forwarded (req) {\n  if (!req) {\n    throw new TypeError('argument req is required')\n  }\n\n  // simple header parsing\n  var proxyAddrs = parse(req.headers['x-forwarded-for'] || '')\n  var socketAddr = getSocketAddr(req)\n  var addrs = [socketAddr].concat(proxyAddrs)\n\n  // return all addresses\n  return addrs\n}\n\n/**\n * Get the socket address for a request.\n *\n * @param {object} req\n * @return {string}\n * @private\n */\n\nfunction getSocketAddr (req) {\n  return req.socket\n    ? req.socket.remoteAddress\n    : req.connection.remoteAddress\n}\n\n/**\n * Parse the X-Forwarded-For header.\n *\n * @param {string} header\n * @private\n */\n\nfunction parse (header) {\n  var end = header.length\n  var list = []\n  var start = header.length\n\n  // gather addresses, backwards\n  for (var i = header.length - 1; i >= 0; i--) {\n    switch (header.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i\n        }\n        break\n      case 0x2c: /* , */\n        if (start !== end) {\n          list.push(header.substring(start, end))\n        }\n        start = end = i\n        break\n      default:\n        start = i\n        break\n    }\n  }\n\n  // final address\n  if (start !== end) {\n    list.push(header.substring(start, end))\n  }\n\n  return list\n}\n", "(function() {\n  var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n  ipaddr = {};\n\n  root = this;\n\n  if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n    module.exports = ipaddr;\n  } else {\n    root['ipaddr'] = ipaddr;\n  }\n\n  matchCIDR = function(first, second, partSize, cidrBits) {\n    var part, shift;\n    if (first.length !== second.length) {\n      throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n    }\n    part = 0;\n    while (cidrBits > 0) {\n      shift = partSize - cidrBits;\n      if (shift < 0) {\n        shift = 0;\n      }\n      if (first[part] >> shift !== second[part] >> shift) {\n        return false;\n      }\n      cidrBits -= partSize;\n      part += 1;\n    }\n    return true;\n  };\n\n  ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n    var k, len, rangeName, rangeSubnets, subnet;\n    if (defaultName == null) {\n      defaultName = 'unicast';\n    }\n    for (rangeName in rangeList) {\n      rangeSubnets = rangeList[rangeName];\n      if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n        rangeSubnets = [rangeSubnets];\n      }\n      for (k = 0, len = rangeSubnets.length; k < len; k++) {\n        subnet = rangeSubnets[k];\n        if (address.kind() === subnet[0].kind()) {\n          if (address.match.apply(address, subnet)) {\n            return rangeName;\n          }\n        }\n      }\n    }\n    return defaultName;\n  };\n\n  ipaddr.IPv4 = (function() {\n    function IPv4(octets) {\n      var k, len, octet;\n      if (octets.length !== 4) {\n        throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n      }\n      for (k = 0, len = octets.length; k < len; k++) {\n        octet = octets[k];\n        if (!((0 <= octet && octet <= 255))) {\n          throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n        }\n      }\n      this.octets = octets;\n    }\n\n    IPv4.prototype.kind = function() {\n      return 'ipv4';\n    };\n\n    IPv4.prototype.toString = function() {\n      return this.octets.join(\".\");\n    };\n\n    IPv4.prototype.toNormalizedString = function() {\n      return this.toString();\n    };\n\n    IPv4.prototype.toByteArray = function() {\n      return this.octets.slice(0);\n    };\n\n    IPv4.prototype.match = function(other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv4') {\n        throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n      }\n      return matchCIDR(this.octets, other.octets, 8, cidrRange);\n    };\n\n    IPv4.prototype.SpecialRanges = {\n      unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n      broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n      multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n      linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n      loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n      carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n      \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n      reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n    };\n\n    IPv4.prototype.range = function() {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n\n    IPv4.prototype.toIPv4MappedAddress = function() {\n      return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n    };\n\n    IPv4.prototype.prefixLengthFromSubnetMask = function() {\n      var cidr, i, k, octet, stop, zeros, zerotable;\n      zerotable = {\n        0: 8,\n        128: 7,\n        192: 6,\n        224: 5,\n        240: 4,\n        248: 3,\n        252: 2,\n        254: 1,\n        255: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 3; k >= 0; i = k += -1) {\n        octet = this.octets[i];\n        if (octet in zerotable) {\n          zeros = zerotable[octet];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 8) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 32 - cidr;\n    };\n\n    return IPv4;\n\n  })();\n\n  ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n  ipv4Regexes = {\n    fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n    longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n  };\n\n  ipaddr.IPv4.parser = function(string) {\n    var match, parseIntAuto, part, shift, value;\n    parseIntAuto = function(string) {\n      if (string[0] === \"0\" && string[1] !== \"x\") {\n        return parseInt(string, 8);\n      } else {\n        return parseInt(string);\n      }\n    };\n    if (match = string.match(ipv4Regexes.fourOctet)) {\n      return (function() {\n        var k, len, ref, results;\n        ref = match.slice(1, 6);\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(parseIntAuto(part));\n        }\n        return results;\n      })();\n    } else if (match = string.match(ipv4Regexes.longValue)) {\n      value = parseIntAuto(match[1]);\n      if (value > 0xffffffff || value < 0) {\n        throw new Error(\"ipaddr: address outside defined range\");\n      }\n      return ((function() {\n        var k, results;\n        results = [];\n        for (shift = k = 0; k <= 24; shift = k += 8) {\n          results.push((value >> shift) & 0xff);\n        }\n        return results;\n      })()).reverse();\n    } else {\n      return null;\n    }\n  };\n\n  ipaddr.IPv6 = (function() {\n    function IPv6(parts, zoneId) {\n      var i, k, l, len, part, ref;\n      if (parts.length === 16) {\n        this.parts = [];\n        for (i = k = 0; k <= 14; i = k += 2) {\n          this.parts.push((parts[i] << 8) | parts[i + 1]);\n        }\n      } else if (parts.length === 8) {\n        this.parts = parts;\n      } else {\n        throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n      }\n      ref = this.parts;\n      for (l = 0, len = ref.length; l < len; l++) {\n        part = ref[l];\n        if (!((0 <= part && part <= 0xffff))) {\n          throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n        }\n      }\n      if (zoneId) {\n        this.zoneId = zoneId;\n      }\n    }\n\n    IPv6.prototype.kind = function() {\n      return 'ipv6';\n    };\n\n    IPv6.prototype.toString = function() {\n      return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n    };\n\n    IPv6.prototype.toRFC5952String = function() {\n      var bestMatchIndex, bestMatchLength, match, regex, string;\n      regex = /((^|:)(0(:|$)){2,})/g;\n      string = this.toNormalizedString();\n      bestMatchIndex = 0;\n      bestMatchLength = -1;\n      while ((match = regex.exec(string))) {\n        if (match[0].length > bestMatchLength) {\n          bestMatchIndex = match.index;\n          bestMatchLength = match[0].length;\n        }\n      }\n      if (bestMatchLength < 0) {\n        return string;\n      }\n      return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n    };\n\n    IPv6.prototype.toByteArray = function() {\n      var bytes, k, len, part, ref;\n      bytes = [];\n      ref = this.parts;\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        bytes.push(part >> 8);\n        bytes.push(part & 0xff);\n      }\n      return bytes;\n    };\n\n    IPv6.prototype.toNormalizedString = function() {\n      var addr, part, suffix;\n      addr = ((function() {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16));\n        }\n        return results;\n      }).call(this)).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n\n    IPv6.prototype.toFixedLengthString = function() {\n      var addr, part, suffix;\n      addr = ((function() {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16).padStart(4, '0'));\n        }\n        return results;\n      }).call(this)).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n\n    IPv6.prototype.match = function(other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv6') {\n        throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n      }\n      return matchCIDR(this.parts, other.parts, 16, cidrRange);\n    };\n\n    IPv6.prototype.SpecialRanges = {\n      unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n      linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n      multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n      loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n      uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n      ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n      rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n      rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n      '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n      teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n      reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n    };\n\n    IPv6.prototype.range = function() {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n\n    IPv6.prototype.isIPv4MappedAddress = function() {\n      return this.range() === 'ipv4Mapped';\n    };\n\n    IPv6.prototype.toIPv4Address = function() {\n      var high, low, ref;\n      if (!this.isIPv4MappedAddress()) {\n        throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n      }\n      ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n      return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n    };\n\n    IPv6.prototype.prefixLengthFromSubnetMask = function() {\n      var cidr, i, k, part, stop, zeros, zerotable;\n      zerotable = {\n        0: 16,\n        32768: 15,\n        49152: 14,\n        57344: 13,\n        61440: 12,\n        63488: 11,\n        64512: 10,\n        65024: 9,\n        65280: 8,\n        65408: 7,\n        65472: 6,\n        65504: 5,\n        65520: 4,\n        65528: 3,\n        65532: 2,\n        65534: 1,\n        65535: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 7; k >= 0; i = k += -1) {\n        part = this.parts[i];\n        if (part in zerotable) {\n          zeros = zerotable[part];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 16) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 128 - cidr;\n    };\n\n    return IPv6;\n\n  })();\n\n  ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n  zoneIndex = \"%[0-9a-z]{1,}\";\n\n  ipv6Regexes = {\n    zoneIndex: new RegExp(zoneIndex, 'i'),\n    \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n    transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n  };\n\n  expandIPv6 = function(string, parts) {\n    var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n    if (string.indexOf('::') !== string.lastIndexOf('::')) {\n      return null;\n    }\n    zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n    if (zoneId) {\n      zoneId = zoneId.substring(1);\n      string = string.replace(/%.+$/, '');\n    }\n    colonCount = 0;\n    lastColon = -1;\n    while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n      colonCount++;\n    }\n    if (string.substr(0, 2) === '::') {\n      colonCount--;\n    }\n    if (string.substr(-2, 2) === '::') {\n      colonCount--;\n    }\n    if (colonCount > parts) {\n      return null;\n    }\n    replacementCount = parts - colonCount;\n    replacement = ':';\n    while (replacementCount--) {\n      replacement += '0:';\n    }\n    string = string.replace('::', replacement);\n    if (string[0] === ':') {\n      string = string.slice(1);\n    }\n    if (string[string.length - 1] === ':') {\n      string = string.slice(0, -1);\n    }\n    parts = (function() {\n      var k, len, ref, results;\n      ref = string.split(\":\");\n      results = [];\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        results.push(parseInt(part, 16));\n      }\n      return results;\n    })();\n    return {\n      parts: parts,\n      zoneId: zoneId\n    };\n  };\n\n  ipaddr.IPv6.parser = function(string) {\n    var addr, k, len, match, octet, octets, zoneId;\n    if (ipv6Regexes['native'].test(string)) {\n      return expandIPv6(string, 8);\n    } else if (match = string.match(ipv6Regexes['transitional'])) {\n      zoneId = match[6] || '';\n      addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n      if (addr.parts) {\n        octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n        for (k = 0, len = octets.length; k < len; k++) {\n          octet = octets[k];\n          if (!((0 <= octet && octet <= 255))) {\n            return null;\n          }\n        }\n        addr.parts.push(octets[0] << 8 | octets[1]);\n        addr.parts.push(octets[2] << 8 | octets[3]);\n        return {\n          parts: addr.parts,\n          zoneId: addr.zoneId\n        };\n      }\n    }\n    return null;\n  };\n\n  ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n    return this.parser(string) !== null;\n  };\n\n  ipaddr.IPv4.isValid = function(string) {\n    var e;\n    try {\n      new this(this.parser(string));\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n\n  ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n    if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  ipaddr.IPv6.isValid = function(string) {\n    var addr, e;\n    if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n      return false;\n    }\n    try {\n      addr = this.parser(string);\n      new this(addr.parts, addr.zoneId);\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n\n  ipaddr.IPv4.parse = function(string) {\n    var parts;\n    parts = this.parser(string);\n    if (parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(parts);\n  };\n\n  ipaddr.IPv6.parse = function(string) {\n    var addr;\n    addr = this.parser(string);\n    if (addr.parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(addr.parts, addr.zoneId);\n  };\n\n  ipaddr.IPv4.parseCIDR = function(string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 32) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function() {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n  };\n\n  ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n    var filledOctetCount, j, octets;\n    prefix = parseInt(prefix);\n    if (prefix < 0 || prefix > 32) {\n      throw new Error('ipaddr: invalid IPv4 prefix length');\n    }\n    octets = [0, 0, 0, 0];\n    j = 0;\n    filledOctetCount = Math.floor(prefix / 8);\n    while (j < filledOctetCount) {\n      octets[j] = 255;\n      j++;\n    }\n    if (filledOctetCount < 4) {\n      octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n    }\n    return new this(octets);\n  };\n\n  ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n\n  ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n\n  ipaddr.IPv6.parseCIDR = function(string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 128) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function() {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n  };\n\n  ipaddr.isValid = function(string) {\n    return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n  };\n\n  ipaddr.parse = function(string) {\n    if (ipaddr.IPv6.isValid(string)) {\n      return ipaddr.IPv6.parse(string);\n    } else if (ipaddr.IPv4.isValid(string)) {\n      return ipaddr.IPv4.parse(string);\n    } else {\n      throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n    }\n  };\n\n  ipaddr.parseCIDR = function(string) {\n    var e;\n    try {\n      return ipaddr.IPv6.parseCIDR(string);\n    } catch (error1) {\n      e = error1;\n      try {\n        return ipaddr.IPv4.parseCIDR(string);\n      } catch (error1) {\n        e = error1;\n        throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n      }\n    }\n  };\n\n  ipaddr.fromByteArray = function(bytes) {\n    var length;\n    length = bytes.length;\n    if (length === 4) {\n      return new ipaddr.IPv4(bytes);\n    } else if (length === 16) {\n      return new ipaddr.IPv6(bytes);\n    } else {\n      throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n    }\n  };\n\n  ipaddr.process = function(string) {\n    var addr;\n    addr = this.parse(string);\n    if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n      return addr.toIPv4Address();\n    } else {\n      return addr;\n    }\n  };\n\n}).call(this);\n", "/*!\n * proxy-addr\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = proxyaddr\nmodule.exports.all = alladdrs\nmodule.exports.compile = compile\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar forwarded = require('forwarded')\nvar ipaddr = require('ipaddr.js')\n\n/**\n * Variables.\n * @private\n */\n\nvar DIGIT_REGEXP = /^[0-9]+$/\nvar isip = ipaddr.isValid\nvar parseip = ipaddr.parse\n\n/**\n * Pre-defined IP ranges.\n * @private\n */\n\nvar IP_RANGES = {\n  linklocal: ['169.254.0.0/16', 'fe80::/10'],\n  loopback: ['127.0.0.1/8', '::1/128'],\n  uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']\n}\n\n/**\n * Get all addresses in the request, optionally stopping\n * at the first untrusted.\n *\n * @param {Object} request\n * @param {Function|Array|String} [trust]\n * @public\n */\n\nfunction alladdrs (req, trust) {\n  // get addresses\n  var addrs = forwarded(req)\n\n  if (!trust) {\n    // Return all addresses\n    return addrs\n  }\n\n  if (typeof trust !== 'function') {\n    trust = compile(trust)\n  }\n\n  for (var i = 0; i < addrs.length - 1; i++) {\n    if (trust(addrs[i], i)) continue\n\n    addrs.length = i + 1\n  }\n\n  return addrs\n}\n\n/**\n * Compile argument into trust function.\n *\n * @param {Array|String} val\n * @private\n */\n\nfunction compile (val) {\n  if (!val) {\n    throw new TypeError('argument is required')\n  }\n\n  var trust\n\n  if (typeof val === 'string') {\n    trust = [val]\n  } else if (Array.isArray(val)) {\n    trust = val.slice()\n  } else {\n    throw new TypeError('unsupported trust argument')\n  }\n\n  for (var i = 0; i < trust.length; i++) {\n    val = trust[i]\n\n    if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {\n      continue\n    }\n\n    // Splice in pre-defined range\n    val = IP_RANGES[val]\n    trust.splice.apply(trust, [i, 1].concat(val))\n    i += val.length - 1\n  }\n\n  return compileTrust(compileRangeSubnets(trust))\n}\n\n/**\n * Compile `arr` elements into range subnets.\n *\n * @param {Array} arr\n * @private\n */\n\nfunction compileRangeSubnets (arr) {\n  var rangeSubnets = new Array(arr.length)\n\n  for (var i = 0; i < arr.length; i++) {\n    rangeSubnets[i] = parseipNotation(arr[i])\n  }\n\n  return rangeSubnets\n}\n\n/**\n * Compile range subnet array into trust function.\n *\n * @param {Array} rangeSubnets\n * @private\n */\n\nfunction compileTrust (rangeSubnets) {\n  // Return optimized function based on length\n  var len = rangeSubnets.length\n  return len === 0\n    ? trustNone\n    : len === 1\n      ? trustSingle(rangeSubnets[0])\n      : trustMulti(rangeSubnets)\n}\n\n/**\n * Parse IP notation string into range subnet.\n *\n * @param {String} note\n * @private\n */\n\nfunction parseipNotation (note) {\n  var pos = note.lastIndexOf('/')\n  var str = pos !== -1\n    ? note.substring(0, pos)\n    : note\n\n  if (!isip(str)) {\n    throw new TypeError('invalid IP address: ' + str)\n  }\n\n  var ip = parseip(str)\n\n  if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {\n    // Store as IPv4\n    ip = ip.toIPv4Address()\n  }\n\n  var max = ip.kind() === 'ipv6'\n    ? 128\n    : 32\n\n  var range = pos !== -1\n    ? note.substring(pos + 1, note.length)\n    : null\n\n  if (range === null) {\n    range = max\n  } else if (DIGIT_REGEXP.test(range)) {\n    range = parseInt(range, 10)\n  } else if (ip.kind() === 'ipv4' && isip(range)) {\n    range = parseNetmask(range)\n  } else {\n    range = null\n  }\n\n  if (range <= 0 || range > max) {\n    throw new TypeError('invalid range on address: ' + note)\n  }\n\n  return [ip, range]\n}\n\n/**\n * Parse netmask string into CIDR range.\n *\n * @param {String} netmask\n * @private\n */\n\nfunction parseNetmask (netmask) {\n  var ip = parseip(netmask)\n  var kind = ip.kind()\n\n  return kind === 'ipv4'\n    ? ip.prefixLengthFromSubnetMask()\n    : null\n}\n\n/**\n * Determine address of proxied request.\n *\n * @param {Object} request\n * @param {Function|Array|String} trust\n * @public\n */\n\nfunction proxyaddr (req, trust) {\n  if (!req) {\n    throw new TypeError('req argument is required')\n  }\n\n  if (!trust) {\n    throw new TypeError('trust argument is required')\n  }\n\n  var addrs = alladdrs(req, trust)\n  var addr = addrs[addrs.length - 1]\n\n  return addr\n}\n\n/**\n * Static trust function to trust nothing.\n *\n * @private\n */\n\nfunction trustNone () {\n  return false\n}\n\n/**\n * Compile trust function for multiple subnets.\n *\n * @param {Array} subnets\n * @private\n */\n\nfunction trustMulti (subnets) {\n  return function trust (addr) {\n    if (!isip(addr)) return false\n\n    var ip = parseip(addr)\n    var ipconv\n    var kind = ip.kind()\n\n    for (var i = 0; i < subnets.length; i++) {\n      var subnet = subnets[i]\n      var subnetip = subnet[0]\n      var subnetkind = subnetip.kind()\n      var subnetrange = subnet[1]\n      var trusted = ip\n\n      if (kind !== subnetkind) {\n        if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {\n          // Incompatible IP addresses\n          continue\n        }\n\n        if (!ipconv) {\n          // Convert IP to match subnet IP kind\n          ipconv = subnetkind === 'ipv4'\n            ? ip.toIPv4Address()\n            : ip.toIPv4MappedAddress()\n        }\n\n        trusted = ipconv\n      }\n\n      if (trusted.match(subnetip, subnetrange)) {\n        return true\n      }\n    }\n\n    return false\n  }\n}\n\n/**\n * Compile trust function for single subnet.\n *\n * @param {Object} subnet\n * @private\n */\n\nfunction trustSingle (subnet) {\n  var subnetip = subnet[0]\n  var subnetkind = subnetip.kind()\n  var subnetisipv4 = subnetkind === 'ipv4'\n  var subnetrange = subnet[1]\n\n  return function trust (addr) {\n    if (!isip(addr)) return false\n\n    var ip = parseip(addr)\n    var kind = ip.kind()\n\n    if (kind !== subnetkind) {\n      if (subnetisipv4 && !ip.isIPv4MappedAddress()) {\n        // Incompatible IP addresses\n        return false\n      }\n\n      // Convert IP to match subnet IP kind\n      ip = subnetisipv4\n        ? ip.toIPv4Address()\n        : ip.toIPv4MappedAddress()\n    }\n\n    return ip.match(subnetip, subnetrange)\n  }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @api private\n */\n\nvar Buffer = require('safe-buffer').Buffer\nvar contentDisposition = require('content-disposition');\nvar contentType = require('content-type');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar mime = require('send').mime;\nvar etag = require('etag');\nvar proxyaddr = require('proxy-addr');\nvar qs = require('qs');\nvar querystring = require('querystring');\n\n/**\n * Return strong ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.etag = createETagGenerator({ weak: false })\n\n/**\n * Return weak ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.wetag = createETagGenerator({ weak: true })\n\n/**\n * Check if `path` looks absolute.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nexports.isAbsolute = function(path){\n  if ('/' === path[0]) return true;\n  if (':' === path[1] && ('\\\\' === path[2] || '/' === path[2])) return true; // Windows device path\n  if ('\\\\\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path\n};\n\n/**\n * Flatten the given `arr`.\n *\n * @param {Array} arr\n * @return {Array}\n * @api private\n */\n\nexports.flatten = deprecate.function(flatten,\n  'utils.flatten: use array-flatten npm module instead');\n\n/**\n * Normalize the given `type`, for example \"html\" becomes \"text/html\".\n *\n * @param {String} type\n * @return {Object}\n * @api private\n */\n\nexports.normalizeType = function(type){\n  return ~type.indexOf('/')\n    ? acceptParams(type)\n    : { value: mime.lookup(type), params: {} };\n};\n\n/**\n * Normalize `types`, for example \"html\" becomes \"text/html\".\n *\n * @param {Array} types\n * @return {Array}\n * @api private\n */\n\nexports.normalizeTypes = function(types){\n  var ret = [];\n\n  for (var i = 0; i < types.length; ++i) {\n    ret.push(exports.normalizeType(types[i]));\n  }\n\n  return ret;\n};\n\n/**\n * Generate Content-Disposition header appropriate for the filename.\n * non-ascii filenames are urlencoded and a filename* parameter is added\n *\n * @param {String} filename\n * @return {String}\n * @api private\n */\n\nexports.contentDisposition = deprecate.function(contentDisposition,\n  'utils.contentDisposition: use content-disposition npm module instead');\n\n/**\n * Parse accept params `str` returning an\n * object with `.value`, `.quality` and `.params`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction acceptParams (str) {\n  var parts = str.split(/ *; */);\n  var ret = { value: parts[0], quality: 1, params: {} }\n\n  for (var i = 1; i < parts.length; ++i) {\n    var pms = parts[i].split(/ *= */);\n    if ('q' === pms[0]) {\n      ret.quality = parseFloat(pms[1]);\n    } else {\n      ret.params[pms[0]] = pms[1];\n    }\n  }\n\n  return ret;\n}\n\n/**\n * Compile \"etag\" value to function.\n *\n * @param  {Boolean|String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileETag = function(val) {\n  var fn;\n\n  if (typeof val === 'function') {\n    return val;\n  }\n\n  switch (val) {\n    case true:\n    case 'weak':\n      fn = exports.wetag;\n      break;\n    case false:\n      break;\n    case 'strong':\n      fn = exports.etag;\n      break;\n    default:\n      throw new TypeError('unknown value for etag function: ' + val);\n  }\n\n  return fn;\n}\n\n/**\n * Compile \"query parser\" value to function.\n *\n * @param  {String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileQueryParser = function compileQueryParser(val) {\n  var fn;\n\n  if (typeof val === 'function') {\n    return val;\n  }\n\n  switch (val) {\n    case true:\n    case 'simple':\n      fn = querystring.parse;\n      break;\n    case false:\n      fn = newObject;\n      break;\n    case 'extended':\n      fn = parseExtendedQueryString;\n      break;\n    default:\n      throw new TypeError('unknown value for query parser function: ' + val);\n  }\n\n  return fn;\n}\n\n/**\n * Compile \"proxy trust\" value to function.\n *\n * @param  {Boolean|String|Number|Array|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileTrust = function(val) {\n  if (typeof val === 'function') return val;\n\n  if (val === true) {\n    // Support plain true/false\n    return function(){ return true };\n  }\n\n  if (typeof val === 'number') {\n    // Support trusting hop count\n    return function(a, i){ return i < val };\n  }\n\n  if (typeof val === 'string') {\n    // Support comma-separated values\n    val = val.split(',')\n      .map(function (v) { return v.trim() })\n  }\n\n  return proxyaddr.compile(val || []);\n}\n\n/**\n * Set the charset in a given Content-Type string.\n *\n * @param {String} type\n * @param {String} charset\n * @return {String}\n * @api private\n */\n\nexports.setCharset = function setCharset(type, charset) {\n  if (!type || !charset) {\n    return type;\n  }\n\n  // parse type\n  var parsed = contentType.parse(type);\n\n  // set charset\n  parsed.parameters.charset = charset;\n\n  // format type\n  return contentType.format(parsed);\n};\n\n/**\n * Create an ETag generator function, generating ETags with\n * the given options.\n *\n * @param {object} options\n * @return {function}\n * @private\n */\n\nfunction createETagGenerator (options) {\n  return function generateETag (body, encoding) {\n    var buf = !Buffer.isBuffer(body)\n      ? Buffer.from(body, encoding)\n      : body\n\n    return etag(buf, options)\n  }\n}\n\n/**\n * Parse an extended query string with qs.\n *\n * @param {String} str\n * @return {Object}\n * @private\n */\n\nfunction parseExtendedQueryString(str) {\n  return qs.parse(str, {\n    allowPrototypes: true\n  });\n}\n\n/**\n * Return new empty object.\n *\n * @return {Object}\n * @api private\n */\n\nfunction newObject() {\n  return {};\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar finalhandler = require('finalhandler');\nvar Router = require('./router');\nvar methods = require('methods');\nvar middleware = require('./middleware/init');\nvar query = require('./middleware/query');\nvar debug = require('debug')('express:application');\nvar View = require('./view');\nvar http = require('http');\nvar compileETag = require('./utils').compileETag;\nvar compileQueryParser = require('./utils').compileQueryParser;\nvar compileTrust = require('./utils').compileTrust;\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar merge = require('utils-merge');\nvar resolve = require('path').resolve;\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\nvar slice = Array.prototype.slice;\n\n/**\n * Application prototype.\n */\n\nvar app = exports = module.exports = {};\n\n/**\n * Variable for trust proxy inheritance back-compat\n * @private\n */\n\nvar trustProxyDefaultSymbol = '@@symbol:trust_proxy_default';\n\n/**\n * Initialize the server.\n *\n *   - setup default configuration\n *   - setup default middleware\n *   - setup route reflection methods\n *\n * @private\n */\n\napp.init = function init() {\n  this.cache = {};\n  this.engines = {};\n  this.settings = {};\n\n  this.defaultConfiguration();\n};\n\n/**\n * Initialize application configuration.\n * @private\n */\n\napp.defaultConfiguration = function defaultConfiguration() {\n  var env = process.env.NODE_ENV || 'development';\n\n  // default settings\n  this.enable('x-powered-by');\n  this.set('etag', 'weak');\n  this.set('env', env);\n  this.set('query parser', 'extended');\n  this.set('subdomain offset', 2);\n  this.set('trust proxy', false);\n\n  // trust proxy inherit back-compat\n  Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n    configurable: true,\n    value: true\n  });\n\n  debug('booting in %s mode', env);\n\n  this.on('mount', function onmount(parent) {\n    // inherit trust proxy\n    if (this.settings[trustProxyDefaultSymbol] === true\n      && typeof parent.settings['trust proxy fn'] === 'function') {\n      delete this.settings['trust proxy'];\n      delete this.settings['trust proxy fn'];\n    }\n\n    // inherit protos\n    setPrototypeOf(this.request, parent.request)\n    setPrototypeOf(this.response, parent.response)\n    setPrototypeOf(this.engines, parent.engines)\n    setPrototypeOf(this.settings, parent.settings)\n  });\n\n  // setup locals\n  this.locals = Object.create(null);\n\n  // top-most app is mounted at /\n  this.mountpath = '/';\n\n  // default locals\n  this.locals.settings = this.settings;\n\n  // default configuration\n  this.set('view', View);\n  this.set('views', resolve('views'));\n  this.set('jsonp callback name', 'callback');\n\n  if (env === 'production') {\n    this.enable('view cache');\n  }\n\n  Object.defineProperty(this, 'router', {\n    get: function() {\n      throw new Error('\\'app.router\\' is deprecated!\\nPlease see the 3.x to 4.x migration guide for details on how to update your app.');\n    }\n  });\n};\n\n/**\n * lazily adds the base router if it has not yet been added.\n *\n * We cannot add the base router in the defaultConfiguration because\n * it reads app settings which might be set after that has run.\n *\n * @private\n */\napp.lazyrouter = function lazyrouter() {\n  if (!this._router) {\n    this._router = new Router({\n      caseSensitive: this.enabled('case sensitive routing'),\n      strict: this.enabled('strict routing')\n    });\n\n    this._router.use(query(this.get('query parser fn')));\n    this._router.use(middleware.init(this));\n  }\n};\n\n/**\n * Dispatch a req, res pair into the application. Starts pipeline processing.\n *\n * If no callback is provided, then default error handlers will respond\n * in the event of an error bubbling through the stack.\n *\n * @private\n */\n\napp.handle = function handle(req, res, callback) {\n  var router = this._router;\n\n  // final handler\n  var done = callback || finalhandler(req, res, {\n    env: this.get('env'),\n    onerror: logerror.bind(this)\n  });\n\n  // no routes\n  if (!router) {\n    debug('no routes defined on app');\n    done();\n    return;\n  }\n\n  router.handle(req, res, done);\n};\n\n/**\n * Proxy `Router#use()` to add middleware to the app router.\n * See Router#use() documentation for details.\n *\n * If the _fn_ parameter is an express app, then it will be\n * mounted at the _route_ specified.\n *\n * @public\n */\n\napp.use = function use(fn) {\n  var offset = 0;\n  var path = '/';\n\n  // default path to '/'\n  // disambiguate app.use([fn])\n  if (typeof fn !== 'function') {\n    var arg = fn;\n\n    while (Array.isArray(arg) && arg.length !== 0) {\n      arg = arg[0];\n    }\n\n    // first arg is the path\n    if (typeof arg !== 'function') {\n      offset = 1;\n      path = fn;\n    }\n  }\n\n  var fns = flatten(slice.call(arguments, offset));\n\n  if (fns.length === 0) {\n    throw new TypeError('app.use() requires a middleware function')\n  }\n\n  // setup router\n  this.lazyrouter();\n  var router = this._router;\n\n  fns.forEach(function (fn) {\n    // non-express app\n    if (!fn || !fn.handle || !fn.set) {\n      return router.use(path, fn);\n    }\n\n    debug('.use app under %s', path);\n    fn.mountpath = path;\n    fn.parent = this;\n\n    // restore .app property on req and res\n    router.use(path, function mounted_app(req, res, next) {\n      var orig = req.app;\n      fn.handle(req, res, function (err) {\n        setPrototypeOf(req, orig.request)\n        setPrototypeOf(res, orig.response)\n        next(err);\n      });\n    });\n\n    // mounted an app\n    fn.emit('mount', this);\n  }, this);\n\n  return this;\n};\n\n/**\n * Proxy to the app `Router#route()`\n * Returns a new `Route` instance for the _path_.\n *\n * Routes are isolated middleware stacks for specific paths.\n * See the Route api docs for details.\n *\n * @public\n */\n\napp.route = function route(path) {\n  this.lazyrouter();\n  return this._router.route(path);\n};\n\n/**\n * Register the given template engine callback `fn`\n * as `ext`.\n *\n * By default will `require()` the engine based on the\n * file extension. For example if you try to render\n * a \"foo.ejs\" file Express will invoke the following internally:\n *\n *     app.engine('ejs', require('ejs').__express);\n *\n * For engines that do not provide `.__express` out of the box,\n * or if you wish to \"map\" a different extension to the template engine\n * you may use this method. For example mapping the EJS template engine to\n * \".html\" files:\n *\n *     app.engine('html', require('ejs').renderFile);\n *\n * In this case EJS provides a `.renderFile()` method with\n * the same signature that Express expects: `(path, options, callback)`,\n * though note that it aliases this method as `ejs.__express` internally\n * so if you're using \".ejs\" extensions you don't need to do anything.\n *\n * Some template engines do not follow this convention, the\n * [Consolidate.js](https://github.com/tj/consolidate.js)\n * library was created to map all of node's popular template\n * engines to follow this convention, thus allowing them to\n * work seamlessly within Express.\n *\n * @param {String} ext\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.engine = function engine(ext, fn) {\n  if (typeof fn !== 'function') {\n    throw new Error('callback function required');\n  }\n\n  // get file extension\n  var extension = ext[0] !== '.'\n    ? '.' + ext\n    : ext;\n\n  // store engine\n  this.engines[extension] = fn;\n\n  return this;\n};\n\n/**\n * Proxy to `Router#param()` with one added api feature. The _name_ parameter\n * can be an array of names.\n *\n * See the Router#param() docs for more details.\n *\n * @param {String|Array} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.param = function param(name, fn) {\n  this.lazyrouter();\n\n  if (Array.isArray(name)) {\n    for (var i = 0; i < name.length; i++) {\n      this.param(name[i], fn);\n    }\n\n    return this;\n  }\n\n  this._router.param(name, fn);\n\n  return this;\n};\n\n/**\n * Assign `setting` to `val`, or return `setting`'s value.\n *\n *    app.set('foo', 'bar');\n *    app.set('foo');\n *    // => \"bar\"\n *\n * Mounted servers inherit their parent server's settings.\n *\n * @param {String} setting\n * @param {*} [val]\n * @return {Server} for chaining\n * @public\n */\n\napp.set = function set(setting, val) {\n  if (arguments.length === 1) {\n    // app.get(setting)\n    var settings = this.settings\n\n    while (settings && settings !== Object.prototype) {\n      if (hasOwnProperty.call(settings, setting)) {\n        return settings[setting]\n      }\n\n      settings = Object.getPrototypeOf(settings)\n    }\n\n    return undefined\n  }\n\n  debug('set \"%s\" to %o', setting, val);\n\n  // set value\n  this.settings[setting] = val;\n\n  // trigger matched settings\n  switch (setting) {\n    case 'etag':\n      this.set('etag fn', compileETag(val));\n      break;\n    case 'query parser':\n      this.set('query parser fn', compileQueryParser(val));\n      break;\n    case 'trust proxy':\n      this.set('trust proxy fn', compileTrust(val));\n\n      // trust proxy inherit back-compat\n      Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n        configurable: true,\n        value: false\n      });\n\n      break;\n  }\n\n  return this;\n};\n\n/**\n * Return the app's absolute pathname\n * based on the parent(s) that have\n * mounted it.\n *\n * For example if the application was\n * mounted as \"/admin\", which itself\n * was mounted as \"/blog\" then the\n * return value would be \"/blog/admin\".\n *\n * @return {String}\n * @private\n */\n\napp.path = function path() {\n  return this.parent\n    ? this.parent.path() + this.mountpath\n    : '';\n};\n\n/**\n * Check if `setting` is enabled (truthy).\n *\n *    app.enabled('foo')\n *    // => false\n *\n *    app.enable('foo')\n *    app.enabled('foo')\n *    // => true\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.enabled = function enabled(setting) {\n  return Boolean(this.set(setting));\n};\n\n/**\n * Check if `setting` is disabled.\n *\n *    app.disabled('foo')\n *    // => true\n *\n *    app.enable('foo')\n *    app.disabled('foo')\n *    // => false\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.disabled = function disabled(setting) {\n  return !this.set(setting);\n};\n\n/**\n * Enable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.enable = function enable(setting) {\n  return this.set(setting, true);\n};\n\n/**\n * Disable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.disable = function disable(setting) {\n  return this.set(setting, false);\n};\n\n/**\n * Delegate `.VERB(...)` calls to `router.VERB(...)`.\n */\n\nmethods.forEach(function(method){\n  app[method] = function(path){\n    if (method === 'get' && arguments.length === 1) {\n      // app.get(setting)\n      return this.set(path);\n    }\n\n    this.lazyrouter();\n\n    var route = this._router.route(path);\n    route[method].apply(route, slice.call(arguments, 1));\n    return this;\n  };\n});\n\n/**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n *\n * @param {String} path\n * @param {Function} ...\n * @return {app} for chaining\n * @public\n */\n\napp.all = function all(path) {\n  this.lazyrouter();\n\n  var route = this._router.route(path);\n  var args = slice.call(arguments, 1);\n\n  for (var i = 0; i < methods.length; i++) {\n    route[methods[i]].apply(route, args);\n  }\n\n  return this;\n};\n\n// del -> delete alias\n\napp.del = deprecate.function(app.delete, 'app.del: Use app.delete instead');\n\n/**\n * Render the given view `name` name with `options`\n * and a callback accepting an error and the\n * rendered template string.\n *\n * Example:\n *\n *    app.render('email', { name: 'Tobi' }, function(err, html){\n *      // ...\n *    })\n *\n * @param {String} name\n * @param {Object|Function} options or fn\n * @param {Function} callback\n * @public\n */\n\napp.render = function render(name, options, callback) {\n  var cache = this.cache;\n  var done = callback;\n  var engines = this.engines;\n  var opts = options;\n  var renderOptions = {};\n  var view;\n\n  // support callback function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // merge app.locals\n  merge(renderOptions, this.locals);\n\n  // merge options._locals\n  if (opts._locals) {\n    merge(renderOptions, opts._locals);\n  }\n\n  // merge options\n  merge(renderOptions, opts);\n\n  // set .cache unless explicitly provided\n  if (renderOptions.cache == null) {\n    renderOptions.cache = this.enabled('view cache');\n  }\n\n  // primed cache\n  if (renderOptions.cache) {\n    view = cache[name];\n  }\n\n  // view\n  if (!view) {\n    var View = this.get('view');\n\n    view = new View(name, {\n      defaultEngine: this.get('view engine'),\n      root: this.get('views'),\n      engines: engines\n    });\n\n    if (!view.path) {\n      var dirs = Array.isArray(view.root) && view.root.length > 1\n        ? 'directories \"' + view.root.slice(0, -1).join('\", \"') + '\" or \"' + view.root[view.root.length - 1] + '\"'\n        : 'directory \"' + view.root + '\"'\n      var err = new Error('Failed to lookup view \"' + name + '\" in views ' + dirs);\n      err.view = view;\n      return done(err);\n    }\n\n    // prime the cache\n    if (renderOptions.cache) {\n      cache[name] = view;\n    }\n  }\n\n  // render\n  tryRender(view, renderOptions, done);\n};\n\n/**\n * Listen for connections.\n *\n * A node `http.Server` is returned, with this\n * application (which is a `Function`) as its\n * callback. If you wish to create both an HTTP\n * and HTTPS server you may do so with the \"http\"\n * and \"https\" modules as shown here:\n *\n *    var http = require('http')\n *      , https = require('https')\n *      , express = require('express')\n *      , app = express();\n *\n *    http.createServer(app).listen(80);\n *    https.createServer({ ... }, app).listen(443);\n *\n * @return {http.Server}\n * @public\n */\n\napp.listen = function listen() {\n  var server = http.createServer(this);\n  return server.listen.apply(server, arguments);\n};\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n  /* istanbul ignore next */\n  if (this.get('env') !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Try rendering a view.\n * @private\n */\n\nfunction tryRender(view, options, callback) {\n  try {\n    view.render(options, callback);\n  } catch (err) {\n    callback(err);\n  }\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredCharsets;\nmodule.exports.preferredCharsets = preferredCharsets;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleCharsetRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Charset header.\n * @private\n */\n\nfunction parseAcceptCharset(accept) {\n  var accepts = accept.split(',');\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var charset = parseCharset(accepts[i].trim(), i);\n\n    if (charset) {\n      accepts[j++] = charset;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse a charset from the Accept-Charset header.\n * @private\n */\n\nfunction parseCharset(str, i) {\n  var match = simpleCharsetRegExp.exec(str);\n  if (!match) return null;\n\n  var charset = match[1];\n  var q = 1;\n  if (match[2]) {\n    var params = match[2].split(';')\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].trim().split('=');\n      if (p[0] === 'q') {\n        q = parseFloat(p[1]);\n        break;\n      }\n    }\n  }\n\n  return {\n    charset: charset,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of a charset.\n * @private\n */\n\nfunction getCharsetPriority(charset, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(charset, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the charset.\n * @private\n */\n\nfunction specify(charset, spec, index) {\n  var s = 0;\n  if(spec.charset.toLowerCase() === charset.toLowerCase()){\n    s |= 1;\n  } else if (spec.charset !== '*' ) {\n    return null\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  }\n}\n\n/**\n * Get the preferred charsets from an Accept-Charset header.\n * @public\n */\n\nfunction preferredCharsets(accept, provided) {\n  // RFC 2616 sec 14.2: no header = *\n  var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');\n\n  if (!provided) {\n    // sorted list of all charsets\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullCharset);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getCharsetPriority(type, accepts, index);\n  });\n\n  // sorted list of accepted charsets\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full charset string.\n * @private\n */\n\nfunction getFullCharset(spec) {\n  return spec.charset;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredEncodings;\nmodule.exports.preferredEncodings = preferredEncodings;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleEncodingRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Encoding header.\n * @private\n */\n\nfunction parseAcceptEncoding(accept) {\n  var accepts = accept.split(',');\n  var hasIdentity = false;\n  var minQuality = 1;\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var encoding = parseEncoding(accepts[i].trim(), i);\n\n    if (encoding) {\n      accepts[j++] = encoding;\n      hasIdentity = hasIdentity || specify('identity', encoding);\n      minQuality = Math.min(minQuality, encoding.q || 1);\n    }\n  }\n\n  if (!hasIdentity) {\n    /*\n     * If identity doesn't explicitly appear in the accept-encoding header,\n     * it's added to the list of acceptable encoding with the lowest q\n     */\n    accepts[j++] = {\n      encoding: 'identity',\n      q: minQuality,\n      i: i\n    };\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse an encoding from the Accept-Encoding header.\n * @private\n */\n\nfunction parseEncoding(str, i) {\n  var match = simpleEncodingRegExp.exec(str);\n  if (!match) return null;\n\n  var encoding = match[1];\n  var q = 1;\n  if (match[2]) {\n    var params = match[2].split(';');\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].trim().split('=');\n      if (p[0] === 'q') {\n        q = parseFloat(p[1]);\n        break;\n      }\n    }\n  }\n\n  return {\n    encoding: encoding,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of an encoding.\n * @private\n */\n\nfunction getEncodingPriority(encoding, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(encoding, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the encoding.\n * @private\n */\n\nfunction specify(encoding, spec, index) {\n  var s = 0;\n  if(spec.encoding.toLowerCase() === encoding.toLowerCase()){\n    s |= 1;\n  } else if (spec.encoding !== '*' ) {\n    return null\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  }\n};\n\n/**\n * Get the preferred encodings from an Accept-Encoding header.\n * @public\n */\n\nfunction preferredEncodings(accept, provided) {\n  var accepts = parseAcceptEncoding(accept || '');\n\n  if (!provided) {\n    // sorted list of all encodings\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullEncoding);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getEncodingPriority(type, accepts, index);\n  });\n\n  // sorted list of accepted encodings\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full encoding string.\n * @private\n */\n\nfunction getFullEncoding(spec) {\n  return spec.encoding;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredLanguages;\nmodule.exports.preferredLanguages = preferredLanguages;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleLanguageRegExp = /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Language header.\n * @private\n */\n\nfunction parseAcceptLanguage(accept) {\n  var accepts = accept.split(',');\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var language = parseLanguage(accepts[i].trim(), i);\n\n    if (language) {\n      accepts[j++] = language;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse a language from the Accept-Language header.\n * @private\n */\n\nfunction parseLanguage(str, i) {\n  var match = simpleLanguageRegExp.exec(str);\n  if (!match) return null;\n\n  var prefix = match[1]\n  var suffix = match[2]\n  var full = prefix\n\n  if (suffix) full += \"-\" + suffix;\n\n  var q = 1;\n  if (match[3]) {\n    var params = match[3].split(';')\n    for (var j = 0; j < params.length; j++) {\n      var p = params[j].split('=');\n      if (p[0] === 'q') q = parseFloat(p[1]);\n    }\n  }\n\n  return {\n    prefix: prefix,\n    suffix: suffix,\n    q: q,\n    i: i,\n    full: full\n  };\n}\n\n/**\n * Get the priority of a language.\n * @private\n */\n\nfunction getLanguagePriority(language, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(language, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the language.\n * @private\n */\n\nfunction specify(language, spec, index) {\n  var p = parseLanguage(language)\n  if (!p) return null;\n  var s = 0;\n  if(spec.full.toLowerCase() === p.full.toLowerCase()){\n    s |= 4;\n  } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {\n    s |= 2;\n  } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {\n    s |= 1;\n  } else if (spec.full !== '*' ) {\n    return null\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s\n  }\n};\n\n/**\n * Get the preferred languages from an Accept-Language header.\n * @public\n */\n\nfunction preferredLanguages(accept, provided) {\n  // RFC 2616 sec 14.4: no header = *\n  var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');\n\n  if (!provided) {\n    // sorted list of all languages\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullLanguage);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getLanguagePriority(type, accepts, index);\n  });\n\n  // sorted list of accepted languages\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full language string.\n * @private\n */\n\nfunction getFullLanguage(spec) {\n  return spec.full;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredMediaTypes;\nmodule.exports.preferredMediaTypes = preferredMediaTypes;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept header.\n * @private\n */\n\nfunction parseAccept(accept) {\n  var accepts = splitMediaTypes(accept);\n\n  for (var i = 0, j = 0; i < accepts.length; i++) {\n    var mediaType = parseMediaType(accepts[i].trim(), i);\n\n    if (mediaType) {\n      accepts[j++] = mediaType;\n    }\n  }\n\n  // trim accepts\n  accepts.length = j;\n\n  return accepts;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\n\nfunction parseMediaType(str, i) {\n  var match = simpleMediaTypeRegExp.exec(str);\n  if (!match) return null;\n\n  var params = Object.create(null);\n  var q = 1;\n  var subtype = match[2];\n  var type = match[1];\n\n  if (match[3]) {\n    var kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n    for (var j = 0; j < kvps.length; j++) {\n      var pair = kvps[j];\n      var key = pair[0].toLowerCase();\n      var val = pair[1];\n\n      // get the value, unwrapping quotes\n      var value = val && val[0] === '\"' && val[val.length - 1] === '\"'\n        ? val.substr(1, val.length - 2)\n        : val;\n\n      if (key === 'q') {\n        q = parseFloat(value);\n        break;\n      }\n\n      // store parameter\n      params[key] = value;\n    }\n  }\n\n  return {\n    type: type,\n    subtype: subtype,\n    params: params,\n    q: q,\n    i: i\n  };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\n\nfunction getMediaTypePriority(type, accepted, index) {\n  var priority = {o: -1, q: 0, s: 0};\n\n  for (var i = 0; i < accepted.length; i++) {\n    var spec = specify(type, accepted[i], index);\n\n    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n      priority = spec;\n    }\n  }\n\n  return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\n\nfunction specify(type, spec, index) {\n  var p = parseMediaType(type);\n  var s = 0;\n\n  if (!p) {\n    return null;\n  }\n\n  if(spec.type.toLowerCase() == p.type.toLowerCase()) {\n    s |= 4\n  } else if(spec.type != '*') {\n    return null;\n  }\n\n  if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n    s |= 2\n  } else if(spec.subtype != '*') {\n    return null;\n  }\n\n  var keys = Object.keys(spec.params);\n  if (keys.length > 0) {\n    if (keys.every(function (k) {\n      return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();\n    })) {\n      s |= 1\n    } else {\n      return null\n    }\n  }\n\n  return {\n    i: index,\n    o: spec.i,\n    q: spec.q,\n    s: s,\n  }\n}\n\n/**\n * Get the preferred media types from an Accept header.\n * @public\n */\n\nfunction preferredMediaTypes(accept, provided) {\n  // RFC 2616 sec 14.2: no header = */*\n  var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');\n\n  if (!provided) {\n    // sorted list of all types\n    return accepts\n      .filter(isQuality)\n      .sort(compareSpecs)\n      .map(getFullType);\n  }\n\n  var priorities = provided.map(function getPriority(type, index) {\n    return getMediaTypePriority(type, accepts, index);\n  });\n\n  // sorted list of accepted types\n  return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {\n    return provided[priorities.indexOf(priority)];\n  });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\n\nfunction getFullType(spec) {\n  return spec.type + '/' + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n  return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\n\nfunction quoteCount(string) {\n  var count = 0;\n  var index = 0;\n\n  while ((index = string.indexOf('\"', index)) !== -1) {\n    count++;\n    index++;\n  }\n\n  return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\n\nfunction splitKeyValuePair(str) {\n  var index = str.indexOf('=');\n  var key;\n  var val;\n\n  if (index === -1) {\n    key = str;\n  } else {\n    key = str.substr(0, index);\n    val = str.substr(index + 1);\n  }\n\n  return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\n\nfunction splitMediaTypes(accept) {\n  var accepts = accept.split(',');\n\n  for (var i = 1, j = 0; i < accepts.length; i++) {\n    if (quoteCount(accepts[j]) % 2 == 0) {\n      accepts[++j] = accepts[i];\n    } else {\n      accepts[j] += ',' + accepts[i];\n    }\n  }\n\n  // trim accepts\n  accepts.length = j + 1;\n\n  return accepts;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\n\nfunction splitParameters(str) {\n  var parameters = str.split(';');\n\n  for (var i = 1, j = 0; i < parameters.length; i++) {\n    if (quoteCount(parameters[j]) % 2 == 0) {\n      parameters[++j] = parameters[i];\n    } else {\n      parameters[j] += ';' + parameters[i];\n    }\n  }\n\n  // trim parameters\n  parameters.length = j + 1;\n\n  for (var i = 0; i < parameters.length; i++) {\n    parameters[i] = parameters[i].trim();\n  }\n\n  return parameters;\n}\n", "/*!\n * negotiator\n * Copyright(c) 2012 Federico Romero\n * Copyright(c) 2012-2014 Isaac Z. Schlueter\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nvar preferredCharsets = require('./lib/charset')\nvar preferredEncodings = require('./lib/encoding')\nvar preferredLanguages = require('./lib/language')\nvar preferredMediaTypes = require('./lib/mediaType')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Negotiator;\nmodule.exports.Negotiator = Negotiator;\n\n/**\n * Create a Negotiator instance from a request.\n * @param {object} request\n * @public\n */\n\nfunction Negotiator(request) {\n  if (!(this instanceof Negotiator)) {\n    return new Negotiator(request);\n  }\n\n  this.request = request;\n}\n\nNegotiator.prototype.charset = function charset(available) {\n  var set = this.charsets(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.charsets = function charsets(available) {\n  return preferredCharsets(this.request.headers['accept-charset'], available);\n};\n\nNegotiator.prototype.encoding = function encoding(available) {\n  var set = this.encodings(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.encodings = function encodings(available) {\n  return preferredEncodings(this.request.headers['accept-encoding'], available);\n};\n\nNegotiator.prototype.language = function language(available) {\n  var set = this.languages(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.languages = function languages(available) {\n  return preferredLanguages(this.request.headers['accept-language'], available);\n};\n\nNegotiator.prototype.mediaType = function mediaType(available) {\n  var set = this.mediaTypes(available);\n  return set && set[0];\n};\n\nNegotiator.prototype.mediaTypes = function mediaTypes(available) {\n  return preferredMediaTypes(this.request.headers.accept, available);\n};\n\n// Backwards compatibility\nNegotiator.prototype.preferredCharset = Negotiator.prototype.charset;\nNegotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;\nNegotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;\nNegotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;\nNegotiator.prototype.preferredLanguage = Negotiator.prototype.language;\nNegotiator.prototype.preferredLanguages = Negotiator.prototype.languages;\nNegotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;\nNegotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;\n", "/*!\n * accepts\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Negotiator = require('negotiator')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Accepts\n\n/**\n * Create a new Accepts object for the given req.\n *\n * @param {object} req\n * @public\n */\n\nfunction Accepts (req) {\n  if (!(this instanceof Accepts)) {\n    return new Accepts(req)\n  }\n\n  this.headers = req.headers\n  this.negotiator = new Negotiator(req)\n}\n\n/**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n *     // Accept: text/html\n *     this.types('html');\n *     // => \"html\"\n *\n *     // Accept: text/*, application/json\n *     this.types('html');\n *     // => \"html\"\n *     this.types('text/html');\n *     // => \"text/html\"\n *     this.types('json', 'text');\n *     // => \"json\"\n *     this.types('application/json');\n *     // => \"application/json\"\n *\n *     // Accept: text/*, application/json\n *     this.types('image/png');\n *     this.types('png');\n *     // => undefined\n *\n *     // Accept: text/*;q=.5, application/json\n *     this.types(['html', 'json']);\n *     this.types('html', 'json');\n *     // => \"json\"\n *\n * @param {String|Array} types...\n * @return {String|Array|Boolean}\n * @public\n */\n\nAccepts.prototype.type =\nAccepts.prototype.types = function (types_) {\n  var types = types_\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length)\n    for (var i = 0; i < types.length; i++) {\n      types[i] = arguments[i]\n    }\n  }\n\n  // no types, return all requested types\n  if (!types || types.length === 0) {\n    return this.negotiator.mediaTypes()\n  }\n\n  // no accept header, return first given type\n  if (!this.headers.accept) {\n    return types[0]\n  }\n\n  var mimes = types.map(extToMime)\n  var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))\n  var first = accepts[0]\n\n  return first\n    ? types[mimes.indexOf(first)]\n    : false\n}\n\n/**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n *     ['gzip', 'deflate']\n *\n * @param {String|Array} encodings...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.encoding =\nAccepts.prototype.encodings = function (encodings_) {\n  var encodings = encodings_\n\n  // support flattened arguments\n  if (encodings && !Array.isArray(encodings)) {\n    encodings = new Array(arguments.length)\n    for (var i = 0; i < encodings.length; i++) {\n      encodings[i] = arguments[i]\n    }\n  }\n\n  // no encodings, return all requested encodings\n  if (!encodings || encodings.length === 0) {\n    return this.negotiator.encodings()\n  }\n\n  return this.negotiator.encodings(encodings)[0] || false\n}\n\n/**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n *     ['utf-8', 'utf-7', 'iso-8859-1']\n *\n * @param {String|Array} charsets...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.charset =\nAccepts.prototype.charsets = function (charsets_) {\n  var charsets = charsets_\n\n  // support flattened arguments\n  if (charsets && !Array.isArray(charsets)) {\n    charsets = new Array(arguments.length)\n    for (var i = 0; i < charsets.length; i++) {\n      charsets[i] = arguments[i]\n    }\n  }\n\n  // no charsets, return all requested charsets\n  if (!charsets || charsets.length === 0) {\n    return this.negotiator.charsets()\n  }\n\n  return this.negotiator.charsets(charsets)[0] || false\n}\n\n/**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n *     ['es', 'pt', 'en']\n *\n * @param {String|Array} langs...\n * @return {Array|String}\n * @public\n */\n\nAccepts.prototype.lang =\nAccepts.prototype.langs =\nAccepts.prototype.language =\nAccepts.prototype.languages = function (languages_) {\n  var languages = languages_\n\n  // support flattened arguments\n  if (languages && !Array.isArray(languages)) {\n    languages = new Array(arguments.length)\n    for (var i = 0; i < languages.length; i++) {\n      languages[i] = arguments[i]\n    }\n  }\n\n  // no languages, return all requested languages\n  if (!languages || languages.length === 0) {\n    return this.negotiator.languages()\n  }\n\n  return this.negotiator.languages(languages)[0] || false\n}\n\n/**\n * Convert extnames to mime.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction extToMime (type) {\n  return type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type\n}\n\n/**\n * Check if mime is valid.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction validMime (type) {\n  return typeof type === 'string'\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar accepts = require('accepts');\nvar deprecate = require('depd')('express');\nvar isIP = require('net').isIP;\nvar typeis = require('type-is');\nvar http = require('http');\nvar fresh = require('fresh');\nvar parseRange = require('range-parser');\nvar parse = require('parseurl');\nvar proxyaddr = require('proxy-addr');\n\n/**\n * Request prototype.\n * @public\n */\n\nvar req = Object.create(http.IncomingMessage.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = req\n\n/**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n *     req.get('Content-Type');\n *     // => \"text/plain\"\n *\n *     req.get('content-type');\n *     // => \"text/plain\"\n *\n *     req.get('Something');\n *     // => undefined\n *\n * Aliased as `req.header()`.\n *\n * @param {String} name\n * @return {String}\n * @public\n */\n\nreq.get =\nreq.header = function header(name) {\n  if (!name) {\n    throw new TypeError('name argument is required to req.get');\n  }\n\n  if (typeof name !== 'string') {\n    throw new TypeError('name must be a string to req.get');\n  }\n\n  var lc = name.toLowerCase();\n\n  switch (lc) {\n    case 'referer':\n    case 'referrer':\n      return this.headers.referrer\n        || this.headers.referer;\n    default:\n      return this.headers[lc];\n  }\n};\n\n/**\n * To do: update docs.\n *\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single MIME type string\n * such as \"application/json\", an extension name\n * such as \"json\", a comma-delimited list such as \"json, html, text/plain\",\n * an argument list such as `\"json\", \"html\", \"text/plain\"`,\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given, the _best_ match, if any is returned.\n *\n * Examples:\n *\n *     // Accept: text/html\n *     req.accepts('html');\n *     // => \"html\"\n *\n *     // Accept: text/*, application/json\n *     req.accepts('html');\n *     // => \"html\"\n *     req.accepts('text/html');\n *     // => \"text/html\"\n *     req.accepts('json, text');\n *     // => \"json\"\n *     req.accepts('application/json');\n *     // => \"application/json\"\n *\n *     // Accept: text/*, application/json\n *     req.accepts('image/png');\n *     req.accepts('png');\n *     // => undefined\n *\n *     // Accept: text/*;q=.5, application/json\n *     req.accepts(['html', 'json']);\n *     req.accepts('html', 'json');\n *     req.accepts('html, json');\n *     // => \"json\"\n *\n * @param {String|Array} type(s)\n * @return {String|Array|Boolean}\n * @public\n */\n\nreq.accepts = function(){\n  var accept = accepts(this);\n  return accept.types.apply(accept, arguments);\n};\n\n/**\n * Check if the given `encoding`s are accepted.\n *\n * @param {String} ...encoding\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsEncodings = function(){\n  var accept = accepts(this);\n  return accept.encodings.apply(accept, arguments);\n};\n\nreq.acceptsEncoding = deprecate.function(req.acceptsEncodings,\n  'req.acceptsEncoding: Use acceptsEncodings instead');\n\n/**\n * Check if the given `charset`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...charset\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsCharsets = function(){\n  var accept = accepts(this);\n  return accept.charsets.apply(accept, arguments);\n};\n\nreq.acceptsCharset = deprecate.function(req.acceptsCharsets,\n  'req.acceptsCharset: Use acceptsCharsets instead');\n\n/**\n * Check if the given `lang`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...lang\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsLanguages = function(){\n  var accept = accepts(this);\n  return accept.languages.apply(accept, arguments);\n};\n\nreq.acceptsLanguage = deprecate.function(req.acceptsLanguages,\n  'req.acceptsLanguage: Use acceptsLanguages instead');\n\n/**\n * Parse Range header field, capping to the given `size`.\n *\n * Unspecified ranges such as \"0-\" require knowledge of your resource length. In\n * the case of a byte range this is of course the total number of bytes. If the\n * Range header field is not given `undefined` is returned, `-1` when unsatisfiable,\n * and `-2` when syntactically invalid.\n *\n * When ranges are returned, the array has a \"type\" property which is the type of\n * range that is required (most commonly, \"bytes\"). Each array element is an object\n * with a \"start\" and \"end\" property for the portion of the range.\n *\n * The \"combine\" option can be set to `true` and overlapping & adjacent ranges\n * will be combined into a single range.\n *\n * NOTE: remember that ranges are inclusive, so for example \"Range: users=0-3\"\n * should respond with 4 users when available, not 3.\n *\n * @param {number} size\n * @param {object} [options]\n * @param {boolean} [options.combine=false]\n * @return {number|array}\n * @public\n */\n\nreq.range = function range(size, options) {\n  var range = this.get('Range');\n  if (!range) return;\n  return parseRange(size, range, options);\n};\n\n/**\n * Return the value of param `name` when present or `defaultValue`.\n *\n *  - Checks route placeholders, ex: _/user/:id_\n *  - Checks body params, ex: id=12, {\"id\":12}\n *  - Checks query string params, ex: ?id=12\n *\n * To utilize request bodies, `req.body`\n * should be an object. This can be done by using\n * the `bodyParser()` middleware.\n *\n * @param {String} name\n * @param {Mixed} [defaultValue]\n * @return {String}\n * @public\n */\n\nreq.param = function param(name, defaultValue) {\n  var params = this.params || {};\n  var body = this.body || {};\n  var query = this.query || {};\n\n  var args = arguments.length === 1\n    ? 'name'\n    : 'name, default';\n  deprecate('req.param(' + args + '): Use req.params, req.body, or req.query instead');\n\n  if (null != params[name] && params.hasOwnProperty(name)) return params[name];\n  if (null != body[name]) return body[name];\n  if (null != query[name]) return query[name];\n\n  return defaultValue;\n};\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains the given mime `type`.\n *\n * Examples:\n *\n *      // With Content-Type: text/html; charset=utf-8\n *      req.is('html');\n *      req.is('text/html');\n *      req.is('text/*');\n *      // => true\n *\n *      // When Content-Type is application/json\n *      req.is('json');\n *      req.is('application/json');\n *      req.is('application/*');\n *      // => true\n *\n *      req.is('html');\n *      // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nreq.is = function is(types) {\n  var arr = types;\n\n  // support flattened arguments\n  if (!Array.isArray(types)) {\n    arr = new Array(arguments.length);\n    for (var i = 0; i < arr.length; i++) {\n      arr[i] = arguments[i];\n    }\n  }\n\n  return typeis(this, arr);\n};\n\n/**\n * Return the protocol string \"http\" or \"https\"\n * when requested with TLS. When the \"trust proxy\"\n * setting trusts the socket address, the\n * \"X-Forwarded-Proto\" header field will be trusted\n * and used if present.\n *\n * If you're running behind a reverse proxy that\n * supplies https for you this may be enabled.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'protocol', function protocol(){\n  var proto = this.connection.encrypted\n    ? 'https'\n    : 'http';\n  var trust = this.app.get('trust proxy fn');\n\n  if (!trust(this.connection.remoteAddress, 0)) {\n    return proto;\n  }\n\n  // Note: X-Forwarded-Proto is normally only ever a\n  //       single value, but this is to be safe.\n  var header = this.get('X-Forwarded-Proto') || proto\n  var index = header.indexOf(',')\n\n  return index !== -1\n    ? header.substring(0, index).trim()\n    : header.trim()\n});\n\n/**\n * Short-hand for:\n *\n *    req.protocol === 'https'\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'secure', function secure(){\n  return this.protocol === 'https';\n});\n\n/**\n * Return the remote address from the trusted proxy.\n *\n * The is the remote address on the socket unless\n * \"trust proxy\" is set.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'ip', function ip(){\n  var trust = this.app.get('trust proxy fn');\n  return proxyaddr(this, trust);\n});\n\n/**\n * When \"trust proxy\" is set, trusted proxy addresses + client.\n *\n * For example if the value were \"client, proxy1, proxy2\"\n * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n * where \"proxy2\" is the furthest down-stream and \"proxy1\" and\n * \"proxy2\" were trusted.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'ips', function ips() {\n  var trust = this.app.get('trust proxy fn');\n  var addrs = proxyaddr.all(this, trust);\n\n  // reverse the order (to farthest -> closest)\n  // and remove socket address\n  addrs.reverse().pop()\n\n  return addrs\n});\n\n/**\n * Return subdomains as an array.\n *\n * Subdomains are the dot-separated parts of the host before the main domain of\n * the app. By default, the domain of the app is assumed to be the last two\n * parts of the host. This can be changed by setting \"subdomain offset\".\n *\n * For example, if the domain is \"tobi.ferrets.example.com\":\n * If \"subdomain offset\" is not set, req.subdomains is `[\"ferrets\", \"tobi\"]`.\n * If \"subdomain offset\" is 3, req.subdomains is `[\"tobi\"]`.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'subdomains', function subdomains() {\n  var hostname = this.hostname;\n\n  if (!hostname) return [];\n\n  var offset = this.app.get('subdomain offset');\n  var subdomains = !isIP(hostname)\n    ? hostname.split('.').reverse()\n    : [hostname];\n\n  return subdomains.slice(offset);\n});\n\n/**\n * Short-hand for `url.parse(req.url).pathname`.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'path', function path() {\n  return parse(this).pathname;\n});\n\n/**\n * Parse the \"Host\" header field to a hostname.\n *\n * When the \"trust proxy\" setting trusts the socket\n * address, the \"X-Forwarded-Host\" header field will\n * be trusted.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'hostname', function hostname(){\n  var trust = this.app.get('trust proxy fn');\n  var host = this.get('X-Forwarded-Host');\n\n  if (!host || !trust(this.connection.remoteAddress, 0)) {\n    host = this.get('Host');\n  } else if (host.indexOf(',') !== -1) {\n    // Note: X-Forwarded-Host is normally only ever a\n    //       single value, but this is to be safe.\n    host = host.substring(0, host.indexOf(',')).trimRight()\n  }\n\n  if (!host) return;\n\n  // IPv6 literal support\n  var offset = host[0] === '['\n    ? host.indexOf(']') + 1\n    : 0;\n  var index = host.indexOf(':', offset);\n\n  return index !== -1\n    ? host.substring(0, index)\n    : host;\n});\n\n// TODO: change req.host to return host in next major\n\ndefineGetter(req, 'host', deprecate.function(function host(){\n  return this.hostname;\n}, 'req.host: Use req.hostname instead'));\n\n/**\n * Check if the request is fresh, aka\n * Last-Modified and/or the ETag\n * still match.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'fresh', function(){\n  var method = this.method;\n  var res = this.res\n  var status = res.statusCode\n\n  // GET or HEAD for weak freshness validation only\n  if ('GET' !== method && 'HEAD' !== method) return false;\n\n  // 2xx or 304 as per rfc2616 14.26\n  if ((status >= 200 && status < 300) || 304 === status) {\n    return fresh(this.headers, {\n      'etag': res.get('ETag'),\n      'last-modified': res.get('Last-Modified')\n    })\n  }\n\n  return false;\n});\n\n/**\n * Check if the request is stale, aka\n * \"Last-Modified\" and / or the \"ETag\" for the\n * resource has changed.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'stale', function stale(){\n  return !this.fresh;\n});\n\n/**\n * Check if the request was an _XMLHttpRequest_.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'xhr', function xhr(){\n  var val = this.get('X-Requested-With') || '';\n  return val.toLowerCase() === 'xmlhttprequest';\n});\n\n/**\n * Helper function for creating a getter on an object.\n *\n * @param {Object} obj\n * @param {String} name\n * @param {Function} getter\n * @private\n */\nfunction defineGetter(obj, name, getter) {\n  Object.defineProperty(obj, name, {\n    configurable: true,\n    enumerable: true,\n    get: getter\n  });\n}\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name       = token\n * token             = 1*tchar\n * tchar             = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n *                     \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n *                     \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n */\n\nvar cookieNameRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n *                     ; US-ASCII characters excluding CTLs,\n *                     ; whitespace DQUOTE, comma, semicolon,\n *                     ; and backslash\n */\n\nvar cookieValueRegExp = /^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value      = <subdomain>\n *                     ; defined in [RFC1034], Section 3.5, as\n *                     ; enhanced by [RFC1123], Section 2.1\n * <subdomain>       = <label> | <subdomain> \".\" <label>\n * <label>           = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n *                     Labels must be 63 characters or less.\n *                     'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str>         = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp>     = <let-dig> | \"-\"\n * <let-dig>         = <letter> | <digit>\n * <letter>          = any one of the 52 alphabetic characters A through Z in\n *                     upper case and a through z in lower case\n * <digit>           = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\n\nvar domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value        = <any CHAR except CTLs or \";\">\n * CHAR              = %x01-7F\n *                     ; defined in RFC 5234 appendix B.1\n */\n\nvar pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [opt]\n * @return {object}\n * @public\n */\n\nfunction parse(str, opt) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {};\n  var len = str.length;\n  // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n  if (len < 2) return obj;\n\n  var dec = (opt && opt.decode) || decode;\n  var index = 0;\n  var eqIdx = 0;\n  var endIdx = 0;\n\n  do {\n    eqIdx = str.indexOf('=', index);\n    if (eqIdx === -1) break; // No more cookie pairs.\n\n    endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = len;\n    } else if (eqIdx > endIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    var keyStartIdx = startIndex(str, index, eqIdx);\n    var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n    var key = str.slice(keyStartIdx, keyEndIdx);\n\n    // only assign once\n    if (!obj.hasOwnProperty(key)) {\n      var valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n      var valEndIdx = endIndex(str, endIdx, valStartIdx);\n\n      if (str.charCodeAt(valStartIdx) === 0x22 /* \" */ && str.charCodeAt(valEndIdx - 1) === 0x22 /* \" */) {\n        valStartIdx++;\n        valEndIdx--;\n      }\n\n      var val = str.slice(valStartIdx, valEndIdx);\n      obj[key] = tryDecode(val, dec);\n    }\n\n    index = endIdx + 1\n  } while (index < len);\n\n  return obj;\n}\n\nfunction startIndex(str, index, max) {\n  do {\n    var code = str.charCodeAt(index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index;\n  } while (++index < max);\n  return max;\n}\n\nfunction endIndex(str, index, min) {\n  while (index > min) {\n    var code = str.charCodeAt(--index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index + 1;\n  }\n  return min;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [opt]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, opt) {\n  var enc = (opt && opt.encode) || encodeURIComponent;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!cookieNameRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (!cookieValueRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n  if (!opt) return str;\n\n  if (null != opt.maxAge) {\n    var maxAge = Math.floor(opt.maxAge);\n\n    if (!isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + maxAge;\n  }\n\n  if (opt.domain) {\n    if (!domainValueRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!pathValueRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    var expires = opt.expires\n\n    if (!isDate(expires) || isNaN(expires.valueOf())) {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + expires.toUTCString()\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.partitioned) {\n    str += '; Partitioned'\n  }\n\n  if (opt.priority) {\n    var priority = typeof opt.priority === 'string'\n      ? opt.priority.toLowerCase() : opt.priority;\n\n    switch (priority) {\n      case 'low':\n        str += '; Priority=Low'\n        break\n      case 'medium':\n        str += '; Priority=Medium'\n        break\n      case 'high':\n        str += '; Priority=High'\n        break\n      default:\n        throw new TypeError('option priority is invalid')\n    }\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n  return str.indexOf('%') !== -1\n    ? decodeURIComponent(str)\n    : str\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n  return __toString.call(val) === '[object Date]';\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}\n", "/*!\n * vary\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = vary\nmodule.exports.append = append\n\n/**\n * RegExp to match field-name in RFC 7230 sec 3.2\n *\n * field-name    = token\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n */\n\nvar FIELD_NAME_REGEXP = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/\n\n/**\n * Append a field to a vary header.\n *\n * @param {String} header\n * @param {String|Array} field\n * @return {String}\n * @public\n */\n\nfunction append (header, field) {\n  if (typeof header !== 'string') {\n    throw new TypeError('header argument is required')\n  }\n\n  if (!field) {\n    throw new TypeError('field argument is required')\n  }\n\n  // get fields array\n  var fields = !Array.isArray(field)\n    ? parse(String(field))\n    : field\n\n  // assert on invalid field names\n  for (var j = 0; j < fields.length; j++) {\n    if (!FIELD_NAME_REGEXP.test(fields[j])) {\n      throw new TypeError('field argument contains an invalid header name')\n    }\n  }\n\n  // existing, unspecified vary\n  if (header === '*') {\n    return header\n  }\n\n  // enumerate current values\n  var val = header\n  var vals = parse(header.toLowerCase())\n\n  // unspecified vary\n  if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {\n    return '*'\n  }\n\n  for (var i = 0; i < fields.length; i++) {\n    var fld = fields[i].toLowerCase()\n\n    // append value (case-preserving)\n    if (vals.indexOf(fld) === -1) {\n      vals.push(fld)\n      val = val\n        ? val + ', ' + fields[i]\n        : fields[i]\n    }\n  }\n\n  return val\n}\n\n/**\n * Parse a vary header into an array.\n *\n * @param {String} header\n * @return {Array}\n * @private\n */\n\nfunction parse (header) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = header.length; i < len; i++) {\n    switch (header.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        list.push(header.substring(start, end))\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  list.push(header.substring(start, end))\n\n  return list\n}\n\n/**\n * Mark that a request is varied on a header field.\n *\n * @param {Object} res\n * @param {String|Array} field\n * @public\n */\n\nfunction vary (res, field) {\n  if (!res || !res.getHeader || !res.setHeader) {\n    // quack quack\n    throw new TypeError('res argument is required')\n  }\n\n  // get existing header\n  var val = res.getHeader('Vary') || ''\n  var header = Array.isArray(val)\n    ? val.join(', ')\n    : String(val)\n\n  // set new header\n  if ((val = append(header, field))) {\n    res.setHeader('Vary', val)\n  }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Buffer = require('safe-buffer').Buffer\nvar contentDisposition = require('content-disposition');\nvar createError = require('http-errors')\nvar deprecate = require('depd')('express');\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar http = require('http');\nvar isAbsolute = require('./utils').isAbsolute;\nvar onFinished = require('on-finished');\nvar path = require('path');\nvar statuses = require('statuses')\nvar merge = require('utils-merge');\nvar sign = require('cookie-signature').sign;\nvar normalizeType = require('./utils').normalizeType;\nvar normalizeTypes = require('./utils').normalizeTypes;\nvar setCharset = require('./utils').setCharset;\nvar cookie = require('cookie');\nvar send = require('send');\nvar extname = path.extname;\nvar mime = send.mime;\nvar resolve = path.resolve;\nvar vary = require('vary');\n\n/**\n * Response prototype.\n * @public\n */\n\nvar res = Object.create(http.ServerResponse.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = res\n\n/**\n * Module variables.\n * @private\n */\n\nvar charsetRegExp = /;\\s*charset\\s*=/;\n\n/**\n * Set status `code`.\n *\n * @param {Number} code\n * @return {ServerResponse}\n * @public\n */\n\nres.status = function status(code) {\n  if ((typeof code === 'string' || Math.floor(code) !== code) && code > 99 && code < 1000) {\n    deprecate('res.status(' + JSON.stringify(code) + '): use res.status(' + Math.floor(code) + ') instead')\n  }\n  this.statusCode = code;\n  return this;\n};\n\n/**\n * Set Link header field with the given `links`.\n *\n * Examples:\n *\n *    res.links({\n *      next: 'http://api.example.com/users?page=2',\n *      last: 'http://api.example.com/users?page=5'\n *    });\n *\n * @param {Object} links\n * @return {ServerResponse}\n * @public\n */\n\nres.links = function(links){\n  var link = this.get('Link') || '';\n  if (link) link += ', ';\n  return this.set('Link', link + Object.keys(links).map(function(rel){\n    return '<' + links[rel] + '>; rel=\"' + rel + '\"';\n  }).join(', '));\n};\n\n/**\n * Send a response.\n *\n * Examples:\n *\n *     res.send(Buffer.from('wahoo'));\n *     res.send({ some: 'json' });\n *     res.send('<p>some html</p>');\n *\n * @param {string|number|boolean|object|Buffer} body\n * @public\n */\n\nres.send = function send(body) {\n  var chunk = body;\n  var encoding;\n  var req = this.req;\n  var type;\n\n  // settings\n  var app = this.app;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.send(body, status) backwards compat\n    if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') {\n      deprecate('res.send(body, status): Use res.status(status).send(body) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.send(status, body): Use res.status(status).send(body) instead');\n      this.statusCode = arguments[0];\n      chunk = arguments[1];\n    }\n  }\n\n  // disambiguate res.send(status) and res.send(status, num)\n  if (typeof chunk === 'number' && arguments.length === 1) {\n    // res.send(status) will set status message as text string\n    if (!this.get('Content-Type')) {\n      this.type('txt');\n    }\n\n    deprecate('res.send(status): Use res.sendStatus(status) instead');\n    this.statusCode = chunk;\n    chunk = statuses.message[chunk]\n  }\n\n  switch (typeof chunk) {\n    // string defaulting to html\n    case 'string':\n      if (!this.get('Content-Type')) {\n        this.type('html');\n      }\n      break;\n    case 'boolean':\n    case 'number':\n    case 'object':\n      if (chunk === null) {\n        chunk = '';\n      } else if (Buffer.isBuffer(chunk)) {\n        if (!this.get('Content-Type')) {\n          this.type('bin');\n        }\n      } else {\n        return this.json(chunk);\n      }\n      break;\n  }\n\n  // write strings in utf-8\n  if (typeof chunk === 'string') {\n    encoding = 'utf8';\n    type = this.get('Content-Type');\n\n    // reflect this in content-type\n    if (typeof type === 'string') {\n      this.set('Content-Type', setCharset(type, 'utf-8'));\n    }\n  }\n\n  // determine if ETag should be generated\n  var etagFn = app.get('etag fn')\n  var generateETag = !this.get('ETag') && typeof etagFn === 'function'\n\n  // populate Content-Length\n  var len\n  if (chunk !== undefined) {\n    if (Buffer.isBuffer(chunk)) {\n      // get length of Buffer\n      len = chunk.length\n    } else if (!generateETag && chunk.length < 1000) {\n      // just calculate length when no ETag + small chunk\n      len = Buffer.byteLength(chunk, encoding)\n    } else {\n      // convert chunk to Buffer and calculate\n      chunk = Buffer.from(chunk, encoding)\n      encoding = undefined;\n      len = chunk.length\n    }\n\n    this.set('Content-Length', len);\n  }\n\n  // populate ETag\n  var etag;\n  if (generateETag && len !== undefined) {\n    if ((etag = etagFn(chunk, encoding))) {\n      this.set('ETag', etag);\n    }\n  }\n\n  // freshness\n  if (req.fresh) this.statusCode = 304;\n\n  // strip irrelevant headers\n  if (204 === this.statusCode || 304 === this.statusCode) {\n    this.removeHeader('Content-Type');\n    this.removeHeader('Content-Length');\n    this.removeHeader('Transfer-Encoding');\n    chunk = '';\n  }\n\n  // alter headers for 205\n  if (this.statusCode === 205) {\n    this.set('Content-Length', '0')\n    this.removeHeader('Transfer-Encoding')\n    chunk = ''\n  }\n\n  if (req.method === 'HEAD') {\n    // skip body for HEAD\n    this.end();\n  } else {\n    // respond\n    this.end(chunk, encoding);\n  }\n\n  return this;\n};\n\n/**\n * Send JSON response.\n *\n * Examples:\n *\n *     res.json(null);\n *     res.json({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.json = function json(obj) {\n  var val = obj;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.json(body, status) backwards compat\n    if (typeof arguments[1] === 'number') {\n      deprecate('res.json(obj, status): Use res.status(status).json(obj) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.json(status, obj): Use res.status(status).json(obj) instead');\n      this.statusCode = arguments[0];\n      val = arguments[1];\n    }\n  }\n\n  // settings\n  var app = this.app;\n  var escape = app.get('json escape')\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(val, replacer, spaces, escape)\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('Content-Type', 'application/json');\n  }\n\n  return this.send(body);\n};\n\n/**\n * Send JSON response with JSONP callback support.\n *\n * Examples:\n *\n *     res.jsonp(null);\n *     res.jsonp({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.jsonp = function jsonp(obj) {\n  var val = obj;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.jsonp(body, status) backwards compat\n    if (typeof arguments[1] === 'number') {\n      deprecate('res.jsonp(obj, status): Use res.status(status).jsonp(obj) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead');\n      this.statusCode = arguments[0];\n      val = arguments[1];\n    }\n  }\n\n  // settings\n  var app = this.app;\n  var escape = app.get('json escape')\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(val, replacer, spaces, escape)\n  var callback = this.req.query[app.get('jsonp callback name')];\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'application/json');\n  }\n\n  // fixup callback\n  if (Array.isArray(callback)) {\n    callback = callback[0];\n  }\n\n  // jsonp\n  if (typeof callback === 'string' && callback.length !== 0) {\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'text/javascript');\n\n    // restrict callback charset\n    callback = callback.replace(/[^\\[\\]\\w$.]/g, '');\n\n    if (body === undefined) {\n      // empty argument\n      body = ''\n    } else if (typeof body === 'string') {\n      // replace chars not allowed in JavaScript that are in JSON\n      body = body\n        .replace(/\\u2028/g, '\\\\u2028')\n        .replace(/\\u2029/g, '\\\\u2029')\n    }\n\n    // the /**/ is a specific security mitigation for \"Rosetta Flash JSONP abuse\"\n    // the typeof check is just to reduce client error noise\n    body = '/**/ typeof ' + callback + ' === \\'function\\' && ' + callback + '(' + body + ');';\n  }\n\n  return this.send(body);\n};\n\n/**\n * Send given HTTP status code.\n *\n * Sets the response status to `statusCode` and the body of the\n * response to the standard description from node's http.STATUS_CODES\n * or the statusCode number if no description.\n *\n * Examples:\n *\n *     res.sendStatus(200);\n *\n * @param {number} statusCode\n * @public\n */\n\nres.sendStatus = function sendStatus(statusCode) {\n  var body = statuses.message[statusCode] || String(statusCode)\n\n  this.statusCode = statusCode;\n  this.type('txt');\n\n  return this.send(body);\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n *   - `root`     root directory for relative filenames\n *   - `headers`  object of headers to serve with file\n *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n *  The following example illustrates how `res.sendFile()` may\n *  be used as an alternative for the `static()` middleware for\n *  dynamic situations. The code backing `res.sendFile()` is actually\n *  the same code, so HTTP cache support etc is identical.\n *\n *     app.get('/user/:uid/photos/:file', function(req, res){\n *       var uid = req.params.uid\n *         , file = req.params.file;\n *\n *       req.user.mayViewFilesFrom(uid, function(yes){\n *         if (yes) {\n *           res.sendFile('/uploads/' + uid + '/' + file);\n *         } else {\n *           res.send(403, 'Sorry! you cant see that.');\n *         }\n *       });\n *     });\n *\n * @public\n */\n\nres.sendFile = function sendFile(path, options, callback) {\n  var done = callback;\n  var req = this.req;\n  var res = this;\n  var next = req.next;\n  var opts = options || {};\n\n  if (!path) {\n    throw new TypeError('path argument is required to res.sendFile');\n  }\n\n  if (typeof path !== 'string') {\n    throw new TypeError('path must be a string to res.sendFile')\n  }\n\n  // support function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  if (!opts.root && !isAbsolute(path)) {\n    throw new TypeError('path must be absolute or specify root to res.sendFile');\n  }\n\n  // create file stream\n  var pathname = encodeURI(path);\n  var file = send(req, pathname, opts);\n\n  // transfer\n  sendfile(res, file, opts, function (err) {\n    if (done) return done(err);\n    if (err && err.code === 'EISDIR') return next();\n\n    // next() all but write errors\n    if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n      next(err);\n    }\n  });\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n *   - `root`     root directory for relative filenames\n *   - `headers`  object of headers to serve with file\n *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n *  The following example illustrates how `res.sendfile()` may\n *  be used as an alternative for the `static()` middleware for\n *  dynamic situations. The code backing `res.sendfile()` is actually\n *  the same code, so HTTP cache support etc is identical.\n *\n *     app.get('/user/:uid/photos/:file', function(req, res){\n *       var uid = req.params.uid\n *         , file = req.params.file;\n *\n *       req.user.mayViewFilesFrom(uid, function(yes){\n *         if (yes) {\n *           res.sendfile('/uploads/' + uid + '/' + file);\n *         } else {\n *           res.send(403, 'Sorry! you cant see that.');\n *         }\n *       });\n *     });\n *\n * @public\n */\n\nres.sendfile = function (path, options, callback) {\n  var done = callback;\n  var req = this.req;\n  var res = this;\n  var next = req.next;\n  var opts = options || {};\n\n  // support function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // create file stream\n  var file = send(req, path, opts);\n\n  // transfer\n  sendfile(res, file, opts, function (err) {\n    if (done) return done(err);\n    if (err && err.code === 'EISDIR') return next();\n\n    // next() all but write errors\n    if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n      next(err);\n    }\n  });\n};\n\nres.sendfile = deprecate.function(res.sendfile,\n  'res.sendfile: Use res.sendFile instead');\n\n/**\n * Transfer the file at the given `path` as an attachment.\n *\n * Optionally providing an alternate attachment `filename`,\n * and optional callback `callback(err)`. The callback is invoked\n * when the data transfer is complete, or when an error has\n * occurred. Be sure to check `res.headersSent` if you plan to respond.\n *\n * Optionally providing an `options` object to use with `res.sendFile()`.\n * This function will set the `Content-Disposition` header, overriding\n * any `Content-Disposition` header passed as header options in order\n * to set the attachment and filename.\n *\n * This method uses `res.sendFile()`.\n *\n * @public\n */\n\nres.download = function download (path, filename, options, callback) {\n  var done = callback;\n  var name = filename;\n  var opts = options || null\n\n  // support function as second or third arg\n  if (typeof filename === 'function') {\n    done = filename;\n    name = null;\n    opts = null\n  } else if (typeof options === 'function') {\n    done = options\n    opts = null\n  }\n\n  // support optional filename, where options may be in it's place\n  if (typeof filename === 'object' &&\n    (typeof options === 'function' || options === undefined)) {\n    name = null\n    opts = filename\n  }\n\n  // set Content-Disposition when file is sent\n  var headers = {\n    'Content-Disposition': contentDisposition(name || path)\n  };\n\n  // merge user-provided headers\n  if (opts && opts.headers) {\n    var keys = Object.keys(opts.headers)\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i]\n      if (key.toLowerCase() !== 'content-disposition') {\n        headers[key] = opts.headers[key]\n      }\n    }\n  }\n\n  // merge user-provided options\n  opts = Object.create(opts)\n  opts.headers = headers\n\n  // Resolve the full path for sendFile\n  var fullPath = !opts.root\n    ? resolve(path)\n    : path\n\n  // send file\n  return this.sendFile(fullPath, opts, done)\n};\n\n/**\n * Set _Content-Type_ response header with `type` through `mime.lookup()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n *\n * Examples:\n *\n *     res.type('.html');\n *     res.type('html');\n *     res.type('json');\n *     res.type('application/json');\n *     res.type('png');\n *\n * @param {String} type\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.contentType =\nres.type = function contentType(type) {\n  var ct = type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type;\n\n  return this.set('Content-Type', ct);\n};\n\n/**\n * Respond to the Acceptable formats using an `obj`\n * of mime-type callbacks.\n *\n * This method uses `req.accepted`, an array of\n * acceptable types ordered by their quality values.\n * When \"Accept\" is not present the _first_ callback\n * is invoked, otherwise the first match is used. When\n * no match is performed the server responds with\n * 406 \"Not Acceptable\".\n *\n * Content-Type is set for you, however if you choose\n * you may alter this within the callback using `res.type()`\n * or `res.set('Content-Type', ...)`.\n *\n *    res.format({\n *      'text/plain': function(){\n *        res.send('hey');\n *      },\n *\n *      'text/html': function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      'application/json': function () {\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * In addition to canonicalized MIME types you may\n * also use extnames mapped to these types:\n *\n *    res.format({\n *      text: function(){\n *        res.send('hey');\n *      },\n *\n *      html: function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      json: function(){\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * By default Express passes an `Error`\n * with a `.status` of 406 to `next(err)`\n * if a match is not made. If you provide\n * a `.default` callback it will be invoked\n * instead.\n *\n * @param {Object} obj\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.format = function(obj){\n  var req = this.req;\n  var next = req.next;\n\n  var keys = Object.keys(obj)\n    .filter(function (v) { return v !== 'default' })\n\n  var key = keys.length > 0\n    ? req.accepts(keys)\n    : false;\n\n  this.vary(\"Accept\");\n\n  if (key) {\n    this.set('Content-Type', normalizeType(key).value);\n    obj[key](req, this, next);\n  } else if (obj.default) {\n    obj.default(req, this, next)\n  } else {\n    next(createError(406, {\n      types: normalizeTypes(keys).map(function (o) { return o.value })\n    }))\n  }\n\n  return this;\n};\n\n/**\n * Set _Content-Disposition_ header to _attachment_ with optional `filename`.\n *\n * @param {String} filename\n * @return {ServerResponse}\n * @public\n */\n\nres.attachment = function attachment(filename) {\n  if (filename) {\n    this.type(extname(filename));\n  }\n\n  this.set('Content-Disposition', contentDisposition(filename));\n\n  return this;\n};\n\n/**\n * Append additional header `field` with value `val`.\n *\n * Example:\n *\n *    res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);\n *    res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');\n *    res.append('Warning', '199 Miscellaneous warning');\n *\n * @param {String} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.append = function append(field, val) {\n  var prev = this.get(field);\n  var value = val;\n\n  if (prev) {\n    // concat the new and prev vals\n    value = Array.isArray(prev) ? prev.concat(val)\n      : Array.isArray(val) ? [prev].concat(val)\n        : [prev, val]\n  }\n\n  return this.set(field, value);\n};\n\n/**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n *\n *    res.set('Foo', ['bar', 'baz']);\n *    res.set('Accept', 'application/json');\n *    res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n *\n * Aliased as `res.header()`.\n *\n * @param {String|Object} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.set =\nres.header = function header(field, val) {\n  if (arguments.length === 2) {\n    var value = Array.isArray(val)\n      ? val.map(String)\n      : String(val);\n\n    // add charset to content-type\n    if (field.toLowerCase() === 'content-type') {\n      if (Array.isArray(value)) {\n        throw new TypeError('Content-Type cannot be set to an Array');\n      }\n      if (!charsetRegExp.test(value)) {\n        var charset = mime.charsets.lookup(value.split(';')[0]);\n        if (charset) value += '; charset=' + charset.toLowerCase();\n      }\n    }\n\n    this.setHeader(field, value);\n  } else {\n    for (var key in field) {\n      this.set(key, field[key]);\n    }\n  }\n  return this;\n};\n\n/**\n * Get value for header `field`.\n *\n * @param {String} field\n * @return {String}\n * @public\n */\n\nres.get = function(field){\n  return this.getHeader(field);\n};\n\n/**\n * Clear cookie `name`.\n *\n * @param {String} name\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.clearCookie = function clearCookie(name, options) {\n  if (options) {\n    if (options.maxAge) {\n      deprecate('res.clearCookie: Passing \"options.maxAge\" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.');\n    }\n    if (options.expires) {\n      deprecate('res.clearCookie: Passing \"options.expires\" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.');\n    }\n  }\n  var opts = merge({ expires: new Date(1), path: '/' }, options);\n\n  return this.cookie(name, '', opts);\n};\n\n/**\n * Set cookie `name` to `value`, with the given `options`.\n *\n * Options:\n *\n *    - `maxAge`   max-age in milliseconds, converted to `expires`\n *    - `signed`   sign the cookie\n *    - `path`     defaults to \"/\"\n *\n * Examples:\n *\n *    // \"Remember Me\" for 15 minutes\n *    res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });\n *\n *    // same as above\n *    res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })\n *\n * @param {String} name\n * @param {String|Object} value\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.cookie = function (name, value, options) {\n  var opts = merge({}, options);\n  var secret = this.req.secret;\n  var signed = opts.signed;\n\n  if (signed && !secret) {\n    throw new Error('cookieParser(\"secret\") required for signed cookies');\n  }\n\n  var val = typeof value === 'object'\n    ? 'j:' + JSON.stringify(value)\n    : String(value);\n\n  if (signed) {\n    val = 's:' + sign(val, secret);\n  }\n\n  if (opts.maxAge != null) {\n    var maxAge = opts.maxAge - 0\n\n    if (!isNaN(maxAge)) {\n      opts.expires = new Date(Date.now() + maxAge)\n      opts.maxAge = Math.floor(maxAge / 1000)\n    }\n  }\n\n  if (opts.path == null) {\n    opts.path = '/';\n  }\n\n  this.append('Set-Cookie', cookie.serialize(name, String(val), opts));\n\n  return this;\n};\n\n/**\n * Set the location header to `url`.\n *\n * The given `url` can also be \"back\", which redirects\n * to the _Referrer_ or _Referer_ headers or \"/\".\n *\n * Examples:\n *\n *    res.location('/foo/bar').;\n *    res.location('http://example.com');\n *    res.location('../login');\n *\n * @param {String} url\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.location = function location(url) {\n  var loc;\n\n  // \"back\" is an alias for the referrer\n  if (url === 'back') {\n    deprecate('res.location(\"back\"): use res.location(req.get(\"Referrer\") || \"/\") and refer to https://dub.sh/security-redirect for best practices');\n    loc = this.req.get('Referrer') || '/';\n  } else {\n    loc = String(url);\n  }\n\n  return this.set('Location', encodeUrl(loc));\n};\n\n/**\n * Redirect to the given `url` with optional response `status`\n * defaulting to 302.\n *\n * The resulting `url` is determined by `res.location()`, so\n * it will play nicely with mounted apps, relative paths,\n * `\"back\"` etc.\n *\n * Examples:\n *\n *    res.redirect('/foo/bar');\n *    res.redirect('http://example.com');\n *    res.redirect(301, 'http://example.com');\n *    res.redirect('../login'); // /blog/post/1 -> /blog/login\n *\n * @public\n */\n\nres.redirect = function redirect(url) {\n  var address = url;\n  var body;\n  var status = 302;\n\n  // allow status / url\n  if (arguments.length === 2) {\n    if (typeof arguments[0] === 'number') {\n      status = arguments[0];\n      address = arguments[1];\n    } else {\n      deprecate('res.redirect(url, status): Use res.redirect(status, url) instead');\n      status = arguments[1];\n    }\n  }\n\n  // Set location header\n  address = this.location(address).get('Location');\n\n  // Support text/{plain,html} by default\n  this.format({\n    text: function(){\n      body = statuses.message[status] + '. Redirecting to ' + address\n    },\n\n    html: function(){\n      var u = escapeHtml(address);\n      body = '<p>' + statuses.message[status] + '. Redirecting to ' + u + '</p>'\n    },\n\n    default: function(){\n      body = '';\n    }\n  });\n\n  // Respond\n  this.statusCode = status;\n  this.set('Content-Length', Buffer.byteLength(body));\n\n  if (this.req.method === 'HEAD') {\n    this.end();\n  } else {\n    this.end(body);\n  }\n};\n\n/**\n * Add `field` to Vary. If already present in the Vary set, then\n * this call is simply ignored.\n *\n * @param {Array|String} field\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.vary = function(field){\n  // checks for back-compat\n  if (!field || (Array.isArray(field) && !field.length)) {\n    deprecate('res.vary(): Provide a field name');\n    return this;\n  }\n\n  vary(this, field);\n\n  return this;\n};\n\n/**\n * Render `view` with the given `options` and optional callback `fn`.\n * When a callback function is given a response will _not_ be made\n * automatically, otherwise a response of _200_ and _text/html_ is given.\n *\n * Options:\n *\n *  - `cache`     boolean hinting to the engine it should cache\n *  - `filename`  filename of the view being rendered\n *\n * @public\n */\n\nres.render = function render(view, options, callback) {\n  var app = this.req.app;\n  var done = callback;\n  var opts = options || {};\n  var req = this.req;\n  var self = this;\n\n  // support callback function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // merge res.locals\n  opts._locals = self.locals;\n\n  // default callback to respond\n  done = done || function (err, str) {\n    if (err) return req.next(err);\n    self.send(str);\n  };\n\n  // render\n  app.render(view, opts, done);\n};\n\n// pipe the send file stream\nfunction sendfile(res, file, options, callback) {\n  var done = false;\n  var streaming;\n\n  // request aborted\n  function onaborted() {\n    if (done) return;\n    done = true;\n\n    var err = new Error('Request aborted');\n    err.code = 'ECONNABORTED';\n    callback(err);\n  }\n\n  // directory\n  function ondirectory() {\n    if (done) return;\n    done = true;\n\n    var err = new Error('EISDIR, read');\n    err.code = 'EISDIR';\n    callback(err);\n  }\n\n  // errors\n  function onerror(err) {\n    if (done) return;\n    done = true;\n    callback(err);\n  }\n\n  // ended\n  function onend() {\n    if (done) return;\n    done = true;\n    callback();\n  }\n\n  // file\n  function onfile() {\n    streaming = false;\n  }\n\n  // finished\n  function onfinish(err) {\n    if (err && err.code === 'ECONNRESET') return onaborted();\n    if (err) return onerror(err);\n    if (done) return;\n\n    setImmediate(function () {\n      if (streaming !== false && !done) {\n        onaborted();\n        return;\n      }\n\n      if (done) return;\n      done = true;\n      callback();\n    });\n  }\n\n  // streaming\n  function onstream() {\n    streaming = true;\n  }\n\n  file.on('directory', ondirectory);\n  file.on('end', onend);\n  file.on('error', onerror);\n  file.on('file', onfile);\n  file.on('stream', onstream);\n  onFinished(res, onfinish);\n\n  if (options.headers) {\n    // set headers on successful transfer\n    file.on('headers', function headers(res) {\n      var obj = options.headers;\n      var keys = Object.keys(obj);\n\n      for (var i = 0; i < keys.length; i++) {\n        var k = keys[i];\n        res.setHeader(k, obj[k]);\n      }\n    });\n  }\n\n  // pipe\n  file.pipe(res);\n}\n\n/**\n * Stringify JSON, like JSON.stringify, but v8 optimized, with the\n * ability to escape characters that can trigger HTML sniffing.\n *\n * @param {*} value\n * @param {function} replacer\n * @param {number} spaces\n * @param {boolean} escape\n * @returns {string}\n * @private\n */\n\nfunction stringify (value, replacer, spaces, escape) {\n  // v8 checks arguments.length for optimizing simple call\n  // https://bugs.chromium.org/p/v8/issues/detail?id=4730\n  var json = replacer || spaces\n    ? JSON.stringify(value, replacer, spaces)\n    : JSON.stringify(value);\n\n  if (escape && typeof json === 'string') {\n    json = json.replace(/[<>&]/g, function (c) {\n      switch (c.charCodeAt(0)) {\n        case 0x3c:\n          return '\\\\u003c'\n        case 0x3e:\n          return '\\\\u003e'\n        case 0x26:\n          return '\\\\u0026'\n        /* istanbul ignore next: unreachable default */\n        default:\n          return c\n      }\n    })\n  }\n\n  return json\n}\n", "/*!\n * serve-static\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar parseUrl = require('parseurl')\nvar resolve = require('path').resolve\nvar send = require('send')\nvar url = require('url')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = serveStatic\nmodule.exports.mime = send.mime\n\n/**\n * @param {string} root\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction serveStatic (root, options) {\n  if (!root) {\n    throw new TypeError('root path required')\n  }\n\n  if (typeof root !== 'string') {\n    throw new TypeError('root path must be a string')\n  }\n\n  // copy options object\n  var opts = Object.create(options || null)\n\n  // fall-though\n  var fallthrough = opts.fallthrough !== false\n\n  // default redirect\n  var redirect = opts.redirect !== false\n\n  // headers listener\n  var setHeaders = opts.setHeaders\n\n  if (setHeaders && typeof setHeaders !== 'function') {\n    throw new TypeError('option setHeaders must be function')\n  }\n\n  // setup options for send\n  opts.maxage = opts.maxage || opts.maxAge || 0\n  opts.root = resolve(root)\n\n  // construct directory listener\n  var onDirectory = redirect\n    ? createRedirectDirectoryListener()\n    : createNotFoundDirectoryListener()\n\n  return function serveStatic (req, res, next) {\n    if (req.method !== 'GET' && req.method !== 'HEAD') {\n      if (fallthrough) {\n        return next()\n      }\n\n      // method not allowed\n      res.statusCode = 405\n      res.setHeader('Allow', 'GET, HEAD')\n      res.setHeader('Content-Length', '0')\n      res.end()\n      return\n    }\n\n    var forwardError = !fallthrough\n    var originalUrl = parseUrl.original(req)\n    var path = parseUrl(req).pathname\n\n    // make sure redirect occurs at mount\n    if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {\n      path = ''\n    }\n\n    // create send stream\n    var stream = send(req, path, opts)\n\n    // add directory handler\n    stream.on('directory', onDirectory)\n\n    // add headers listener\n    if (setHeaders) {\n      stream.on('headers', setHeaders)\n    }\n\n    // add file listener for fallthrough\n    if (fallthrough) {\n      stream.on('file', function onFile () {\n        // once file is determined, always forward error\n        forwardError = true\n      })\n    }\n\n    // forward errors\n    stream.on('error', function error (err) {\n      if (forwardError || !(err.statusCode < 500)) {\n        next(err)\n        return\n      }\n\n      next()\n    })\n\n    // pipe\n    stream.pipe(res)\n  }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str.charCodeAt(i) !== 0x2f /* / */) {\n      break\n    }\n  }\n\n  return i > 1\n    ? '/' + str.substr(i)\n    : str\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>' + title + '</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Create a directory listener that just 404s.\n * @private\n */\n\nfunction createNotFoundDirectoryListener () {\n  return function notFound () {\n    this.error(404)\n  }\n}\n\n/**\n * Create a directory listener that performs a redirect.\n * @private\n */\n\nfunction createRedirectDirectoryListener () {\n  return function redirect (res) {\n    if (this.hasTrailingSlash()) {\n      this.error(404)\n      return\n    }\n\n    // get original URL\n    var originalUrl = parseUrl.original(this.req)\n\n    // append trailing slash\n    originalUrl.path = null\n    originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/')\n\n    // reformat the URL\n    var loc = encodeUrl(url.format(originalUrl))\n    var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc))\n\n    // send redirect response\n    res.statusCode = 301\n    res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n    res.setHeader('Content-Length', Buffer.byteLength(doc))\n    res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n    res.setHeader('X-Content-Type-Options', 'nosniff')\n    res.setHeader('Location', loc)\n    res.end(doc)\n  }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar bodyParser = require('body-parser')\nvar EventEmitter = require('events').EventEmitter;\nvar mixin = require('merge-descriptors');\nvar proto = require('./application');\nvar Route = require('./router/route');\nvar Router = require('./router');\nvar req = require('./request');\nvar res = require('./response');\n\n/**\n * Expose `createApplication()`.\n */\n\nexports = module.exports = createApplication;\n\n/**\n * Create an express application.\n *\n * @return {Function}\n * @api public\n */\n\nfunction createApplication() {\n  var app = function(req, res, next) {\n    app.handle(req, res, next);\n  };\n\n  mixin(app, EventEmitter.prototype, false);\n  mixin(app, proto, false);\n\n  // expose the prototype that will get set on requests\n  app.request = Object.create(req, {\n    app: { configurable: true, enumerable: true, writable: true, value: app }\n  })\n\n  // expose the prototype that will get set on responses\n  app.response = Object.create(res, {\n    app: { configurable: true, enumerable: true, writable: true, value: app }\n  })\n\n  app.init();\n  return app;\n}\n\n/**\n * Expose the prototypes.\n */\n\nexports.application = proto;\nexports.request = req;\nexports.response = res;\n\n/**\n * Expose constructors.\n */\n\nexports.Route = Route;\nexports.Router = Router;\n\n/**\n * Expose middleware\n */\n\nexports.json = bodyParser.json\nexports.query = require('./middleware/query');\nexports.raw = bodyParser.raw\nexports.static = require('serve-static');\nexports.text = bodyParser.text\nexports.urlencoded = bodyParser.urlencoded\n\n/**\n * Replace removed middleware with an appropriate error message.\n */\n\nvar removedMiddlewares = [\n  'bodyParser',\n  'compress',\n  'cookieSession',\n  'session',\n  'logger',\n  'cookieParser',\n  'favicon',\n  'responseTime',\n  'errorHandler',\n  'timeout',\n  'methodOverride',\n  'vhost',\n  'csrf',\n  'directory',\n  'limit',\n  'multipart',\n  'staticCache'\n]\n\nremovedMiddlewares.forEach(function (name) {\n  Object.defineProperty(exports, name, {\n    get: function () {\n      throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.');\n    },\n    configurable: true\n  });\n});\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nmodule.exports = require('./lib/express');\n", "'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n  BINARY_TYPES,\n  EMPTY_BUFFER: Buffer.alloc(0),\n  GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n  hasBlob,\n  kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n  kListener: Symbol('kListener'),\n  kStatusCode: Symbol('status-code'),\n  kWebSocket: Symbol('websocket'),\n  NOOP: () => {}\n};\n", "var fs = require('fs')\nvar path = require('path')\nvar os = require('os')\n\n// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'\nvar runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\n\nvar vars = (process.config && process.config.variables) || {}\nvar prebuildsOnly = !!process.env.PREBUILDS_ONLY\nvar abi = process.versions.modules // TODO: support old node where this is undef\nvar runtime = isElectron() ? 'electron' : (isNwjs() ? 'node-webkit' : 'node')\n\nvar arch = process.env.npm_config_arch || os.arch()\nvar platform = process.env.npm_config_platform || os.platform()\nvar libc = process.env.LIBC || (isAlpine(platform) ? 'musl' : 'glibc')\nvar armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : vars.arm_version) || ''\nvar uv = (process.versions.uv || '').split('.')[0]\n\nmodule.exports = load\n\nfunction load (dir) {\n  return runtimeRequire(load.resolve(dir))\n}\n\nload.resolve = load.path = function (dir) {\n  dir = path.resolve(dir || '.')\n\n  try {\n    var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_')\n    if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD']\n  } catch (err) {}\n\n  if (!prebuildsOnly) {\n    var release = getFirst(path.join(dir, 'build/Release'), matchBuild)\n    if (release) return release\n\n    var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild)\n    if (debug) return debug\n  }\n\n  var prebuild = resolve(dir)\n  if (prebuild) return prebuild\n\n  var nearby = resolve(path.dirname(process.execPath))\n  if (nearby) return nearby\n\n  var target = [\n    'platform=' + platform,\n    'arch=' + arch,\n    'runtime=' + runtime,\n    'abi=' + abi,\n    'uv=' + uv,\n    armv ? 'armv=' + armv : '',\n    'libc=' + libc,\n    'node=' + process.versions.node,\n    process.versions.electron ? 'electron=' + process.versions.electron : '',\n    typeof __webpack_require__ === 'function' ? 'webpack=true' : '' // eslint-disable-line\n  ].filter(Boolean).join(' ')\n\n  throw new Error('No native build was found for ' + target + '\\n    loaded from: ' + dir + '\\n')\n\n  function resolve (dir) {\n    // Find matching \"prebuilds/<platform>-<arch>\" directory\n    var tuples = readdirSync(path.join(dir, 'prebuilds')).map(parseTuple)\n    var tuple = tuples.filter(matchTuple(platform, arch)).sort(compareTuples)[0]\n    if (!tuple) return\n\n    // Find most specific flavor first\n    var prebuilds = path.join(dir, 'prebuilds', tuple.name)\n    var parsed = readdirSync(prebuilds).map(parseTags)\n    var candidates = parsed.filter(matchTags(runtime, abi))\n    var winner = candidates.sort(compareTags(runtime))[0]\n    if (winner) return path.join(prebuilds, winner.file)\n  }\n}\n\nfunction readdirSync (dir) {\n  try {\n    return fs.readdirSync(dir)\n  } catch (err) {\n    return []\n  }\n}\n\nfunction getFirst (dir, filter) {\n  var files = readdirSync(dir).filter(filter)\n  return files[0] && path.join(dir, files[0])\n}\n\nfunction matchBuild (name) {\n  return /\\.node$/.test(name)\n}\n\nfunction parseTuple (name) {\n  // Example: darwin-x64+arm64\n  var arr = name.split('-')\n  if (arr.length !== 2) return\n\n  var platform = arr[0]\n  var architectures = arr[1].split('+')\n\n  if (!platform) return\n  if (!architectures.length) return\n  if (!architectures.every(Boolean)) return\n\n  return { name, platform, architectures }\n}\n\nfunction matchTuple (platform, arch) {\n  return function (tuple) {\n    if (tuple == null) return false\n    if (tuple.platform !== platform) return false\n    return tuple.architectures.includes(arch)\n  }\n}\n\nfunction compareTuples (a, b) {\n  // Prefer single-arch prebuilds over multi-arch\n  return a.architectures.length - b.architectures.length\n}\n\nfunction parseTags (file) {\n  var arr = file.split('.')\n  var extension = arr.pop()\n  var tags = { file: file, specificity: 0 }\n\n  if (extension !== 'node') return\n\n  for (var i = 0; i < arr.length; i++) {\n    var tag = arr[i]\n\n    if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') {\n      tags.runtime = tag\n    } else if (tag === 'napi') {\n      tags.napi = true\n    } else if (tag.slice(0, 3) === 'abi') {\n      tags.abi = tag.slice(3)\n    } else if (tag.slice(0, 2) === 'uv') {\n      tags.uv = tag.slice(2)\n    } else if (tag.slice(0, 4) === 'armv') {\n      tags.armv = tag.slice(4)\n    } else if (tag === 'glibc' || tag === 'musl') {\n      tags.libc = tag\n    } else {\n      continue\n    }\n\n    tags.specificity++\n  }\n\n  return tags\n}\n\nfunction matchTags (runtime, abi) {\n  return function (tags) {\n    if (tags == null) return false\n    if (tags.runtime && tags.runtime !== runtime && !runtimeAgnostic(tags)) return false\n    if (tags.abi && tags.abi !== abi && !tags.napi) return false\n    if (tags.uv && tags.uv !== uv) return false\n    if (tags.armv && tags.armv !== armv) return false\n    if (tags.libc && tags.libc !== libc) return false\n\n    return true\n  }\n}\n\nfunction runtimeAgnostic (tags) {\n  return tags.runtime === 'node' && tags.napi\n}\n\nfunction compareTags (runtime) {\n  // Precedence: non-agnostic runtime, abi over napi, then by specificity.\n  return function (a, b) {\n    if (a.runtime !== b.runtime) {\n      return a.runtime === runtime ? -1 : 1\n    } else if (a.abi !== b.abi) {\n      return a.abi ? -1 : 1\n    } else if (a.specificity !== b.specificity) {\n      return a.specificity > b.specificity ? -1 : 1\n    } else {\n      return 0\n    }\n  }\n}\n\nfunction isNwjs () {\n  return !!(process.versions && process.versions.nw)\n}\n\nfunction isElectron () {\n  if (process.versions && process.versions.electron) return true\n  if (process.env.ELECTRON_RUN_AS_NODE) return true\n  return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'\n}\n\nfunction isAlpine (platform) {\n  return platform === 'linux' && fs.existsSync('/etc/alpine-release')\n}\n\n// Exposed for unit tests\n// TODO: move to lib\nload.parseTags = parseTags\nload.matchTags = matchTags\nload.compareTags = compareTags\nload.parseTuple = parseTuple\nload.matchTuple = matchTuple\nload.compareTuples = compareTuples\n", "const runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\nif (typeof runtimeRequire.addon === 'function') { // if the platform supports native resolving prefer that\n  module.exports = runtimeRequire.addon.bind(runtimeRequire)\n} else { // else use the runtime version here\n  module.exports = require('./node-gyp-build.js')\n}\n", "'use strict';\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nconst mask = (source, mask, output, offset, length) => {\n  for (var i = 0; i < length; i++) {\n    output[offset + i] = source[i] ^ mask[i & 3];\n  }\n};\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nconst unmask = (buffer, mask) => {\n  // Required until https://github.com/nodejs/node/issues/9006 is resolved.\n  const length = buffer.length;\n  for (var i = 0; i < length; i++) {\n    buffer[i] ^= mask[i & 3];\n  }\n};\n\nmodule.exports = { mask, unmask };\n", "'use strict';\n\ntry {\n  module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n  module.exports = require('./fallback');\n}\n", "'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n  if (list.length === 0) return EMPTY_BUFFER;\n  if (list.length === 1) return list[0];\n\n  const target = Buffer.allocUnsafe(totalLength);\n  let offset = 0;\n\n  for (let i = 0; i < list.length; i++) {\n    const buf = list[i];\n    target.set(buf, offset);\n    offset += buf.length;\n  }\n\n  if (offset < totalLength) {\n    return new FastBuffer(target.buffer, target.byteOffset, offset);\n  }\n\n  return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n  for (let i = 0; i < length; i++) {\n    output[offset + i] = source[i] ^ mask[i & 3];\n  }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n  for (let i = 0; i < buffer.length; i++) {\n    buffer[i] ^= mask[i & 3];\n  }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n  if (buf.length === buf.buffer.byteLength) {\n    return buf.buffer;\n  }\n\n  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n  toBuffer.readOnly = true;\n\n  if (Buffer.isBuffer(data)) return data;\n\n  let buf;\n\n  if (data instanceof ArrayBuffer) {\n    buf = new FastBuffer(data);\n  } else if (ArrayBuffer.isView(data)) {\n    buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n  } else {\n    buf = Buffer.from(data);\n    toBuffer.readOnly = false;\n  }\n\n  return buf;\n}\n\nmodule.exports = {\n  concat,\n  mask: _mask,\n  toArrayBuffer,\n  toBuffer,\n  unmask: _unmask\n};\n\n/* istanbul ignore else  */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n  try {\n    const bufferUtil = require('bufferutil');\n\n    module.exports.mask = function (source, mask, output, offset, length) {\n      if (length < 48) _mask(source, mask, output, offset, length);\n      else bufferUtil.mask(source, mask, output, offset, length);\n    };\n\n    module.exports.unmask = function (buffer, mask) {\n      if (buffer.length < 32) _unmask(buffer, mask);\n      else bufferUtil.unmask(buffer, mask);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n", "'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n  /**\n   * Creates a new `Limiter`.\n   *\n   * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n   *     to run concurrently\n   */\n  constructor(concurrency) {\n    this[kDone] = () => {\n      this.pending--;\n      this[kRun]();\n    };\n    this.concurrency = concurrency || Infinity;\n    this.jobs = [];\n    this.pending = 0;\n  }\n\n  /**\n   * Adds a job to the queue.\n   *\n   * @param {Function} job The job to run\n   * @public\n   */\n  add(job) {\n    this.jobs.push(job);\n    this[kRun]();\n  }\n\n  /**\n   * Removes a job from the queue and runs it if possible.\n   *\n   * @private\n   */\n  [kRun]() {\n    if (this.pending === this.concurrency) return;\n\n    if (this.jobs.length) {\n      const job = this.jobs.shift();\n\n      this.pending++;\n      job(this[kDone]);\n    }\n  }\n}\n\nmodule.exports = Limiter;\n", "'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n  /**\n   * Creates a PerMessageDeflate instance.\n   *\n   * @param {Object} [options] Configuration options\n   * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n   *     for, or request, a custom client window size\n   * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n   *     acknowledge disabling of client context takeover\n   * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n   *     calls to zlib\n   * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n   *     use of a custom server window size\n   * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n   *     disabling of server context takeover\n   * @param {Number} [options.threshold=1024] Size (in bytes) below which\n   *     messages should not be compressed if context takeover is disabled\n   * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n   *     deflate\n   * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n   *     inflate\n   * @param {Boolean} [isServer=false] Create the instance in either server or\n   *     client mode\n   * @param {Number} [maxPayload=0] The maximum allowed message length\n   */\n  constructor(options, isServer, maxPayload) {\n    this._maxPayload = maxPayload | 0;\n    this._options = options || {};\n    this._threshold =\n      this._options.threshold !== undefined ? this._options.threshold : 1024;\n    this._isServer = !!isServer;\n    this._deflate = null;\n    this._inflate = null;\n\n    this.params = null;\n\n    if (!zlibLimiter) {\n      const concurrency =\n        this._options.concurrencyLimit !== undefined\n          ? this._options.concurrencyLimit\n          : 10;\n      zlibLimiter = new Limiter(concurrency);\n    }\n  }\n\n  /**\n   * @type {String}\n   */\n  static get extensionName() {\n    return 'permessage-deflate';\n  }\n\n  /**\n   * Create an extension negotiation offer.\n   *\n   * @return {Object} Extension parameters\n   * @public\n   */\n  offer() {\n    const params = {};\n\n    if (this._options.serverNoContextTakeover) {\n      params.server_no_context_takeover = true;\n    }\n    if (this._options.clientNoContextTakeover) {\n      params.client_no_context_takeover = true;\n    }\n    if (this._options.serverMaxWindowBits) {\n      params.server_max_window_bits = this._options.serverMaxWindowBits;\n    }\n    if (this._options.clientMaxWindowBits) {\n      params.client_max_window_bits = this._options.clientMaxWindowBits;\n    } else if (this._options.clientMaxWindowBits == null) {\n      params.client_max_window_bits = true;\n    }\n\n    return params;\n  }\n\n  /**\n   * Accept an extension negotiation offer/response.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Object} Accepted configuration\n   * @public\n   */\n  accept(configurations) {\n    configurations = this.normalizeParams(configurations);\n\n    this.params = this._isServer\n      ? this.acceptAsServer(configurations)\n      : this.acceptAsClient(configurations);\n\n    return this.params;\n  }\n\n  /**\n   * Releases all resources used by the extension.\n   *\n   * @public\n   */\n  cleanup() {\n    if (this._inflate) {\n      this._inflate.close();\n      this._inflate = null;\n    }\n\n    if (this._deflate) {\n      const callback = this._deflate[kCallback];\n\n      this._deflate.close();\n      this._deflate = null;\n\n      if (callback) {\n        callback(\n          new Error(\n            'The deflate stream was closed while data was being processed'\n          )\n        );\n      }\n    }\n  }\n\n  /**\n   *  Accept an extension negotiation offer.\n   *\n   * @param {Array} offers The extension negotiation offers\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsServer(offers) {\n    const opts = this._options;\n    const accepted = offers.find((params) => {\n      if (\n        (opts.serverNoContextTakeover === false &&\n          params.server_no_context_takeover) ||\n        (params.server_max_window_bits &&\n          (opts.serverMaxWindowBits === false ||\n            (typeof opts.serverMaxWindowBits === 'number' &&\n              opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n        (typeof opts.clientMaxWindowBits === 'number' &&\n          !params.client_max_window_bits)\n      ) {\n        return false;\n      }\n\n      return true;\n    });\n\n    if (!accepted) {\n      throw new Error('None of the extension offers can be accepted');\n    }\n\n    if (opts.serverNoContextTakeover) {\n      accepted.server_no_context_takeover = true;\n    }\n    if (opts.clientNoContextTakeover) {\n      accepted.client_no_context_takeover = true;\n    }\n    if (typeof opts.serverMaxWindowBits === 'number') {\n      accepted.server_max_window_bits = opts.serverMaxWindowBits;\n    }\n    if (typeof opts.clientMaxWindowBits === 'number') {\n      accepted.client_max_window_bits = opts.clientMaxWindowBits;\n    } else if (\n      accepted.client_max_window_bits === true ||\n      opts.clientMaxWindowBits === false\n    ) {\n      delete accepted.client_max_window_bits;\n    }\n\n    return accepted;\n  }\n\n  /**\n   * Accept the extension negotiation response.\n   *\n   * @param {Array} response The extension negotiation response\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsClient(response) {\n    const params = response[0];\n\n    if (\n      this._options.clientNoContextTakeover === false &&\n      params.client_no_context_takeover\n    ) {\n      throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n    }\n\n    if (!params.client_max_window_bits) {\n      if (typeof this._options.clientMaxWindowBits === 'number') {\n        params.client_max_window_bits = this._options.clientMaxWindowBits;\n      }\n    } else if (\n      this._options.clientMaxWindowBits === false ||\n      (typeof this._options.clientMaxWindowBits === 'number' &&\n        params.client_max_window_bits > this._options.clientMaxWindowBits)\n    ) {\n      throw new Error(\n        'Unexpected or invalid parameter \"client_max_window_bits\"'\n      );\n    }\n\n    return params;\n  }\n\n  /**\n   * Normalize parameters.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Array} The offers/response with normalized parameters\n   * @private\n   */\n  normalizeParams(configurations) {\n    configurations.forEach((params) => {\n      Object.keys(params).forEach((key) => {\n        let value = params[key];\n\n        if (value.length > 1) {\n          throw new Error(`Parameter \"${key}\" must have only a single value`);\n        }\n\n        value = value[0];\n\n        if (key === 'client_max_window_bits') {\n          if (value !== true) {\n            const num = +value;\n            if (!Number.isInteger(num) || num < 8 || num > 15) {\n              throw new TypeError(\n                `Invalid value for parameter \"${key}\": ${value}`\n              );\n            }\n            value = num;\n          } else if (!this._isServer) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else if (key === 'server_max_window_bits') {\n          const num = +value;\n          if (!Number.isInteger(num) || num < 8 || num > 15) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n          value = num;\n        } else if (\n          key === 'client_no_context_takeover' ||\n          key === 'server_no_context_takeover'\n        ) {\n          if (value !== true) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else {\n          throw new Error(`Unknown parameter \"${key}\"`);\n        }\n\n        params[key] = value;\n      });\n    });\n\n    return configurations;\n  }\n\n  /**\n   * Decompress data. Concurrency limited.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  decompress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._decompress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Compress data. Concurrency limited.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  compress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._compress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Decompress data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _decompress(data, fin, callback) {\n    const endpoint = this._isServer ? 'client' : 'server';\n\n    if (!this._inflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._inflate = zlib.createInflateRaw({\n        ...this._options.zlibInflateOptions,\n        windowBits\n      });\n      this._inflate[kPerMessageDeflate] = this;\n      this._inflate[kTotalLength] = 0;\n      this._inflate[kBuffers] = [];\n      this._inflate.on('error', inflateOnError);\n      this._inflate.on('data', inflateOnData);\n    }\n\n    this._inflate[kCallback] = callback;\n\n    this._inflate.write(data);\n    if (fin) this._inflate.write(TRAILER);\n\n    this._inflate.flush(() => {\n      const err = this._inflate[kError];\n\n      if (err) {\n        this._inflate.close();\n        this._inflate = null;\n        callback(err);\n        return;\n      }\n\n      const data = bufferUtil.concat(\n        this._inflate[kBuffers],\n        this._inflate[kTotalLength]\n      );\n\n      if (this._inflate._readableState.endEmitted) {\n        this._inflate.close();\n        this._inflate = null;\n      } else {\n        this._inflate[kTotalLength] = 0;\n        this._inflate[kBuffers] = [];\n\n        if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n          this._inflate.reset();\n        }\n      }\n\n      callback(null, data);\n    });\n  }\n\n  /**\n   * Compress data.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _compress(data, fin, callback) {\n    const endpoint = this._isServer ? 'server' : 'client';\n\n    if (!this._deflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._deflate = zlib.createDeflateRaw({\n        ...this._options.zlibDeflateOptions,\n        windowBits\n      });\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      this._deflate.on('data', deflateOnData);\n    }\n\n    this._deflate[kCallback] = callback;\n\n    this._deflate.write(data);\n    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n      if (!this._deflate) {\n        //\n        // The deflate stream was closed while data was being processed.\n        //\n        return;\n      }\n\n      let data = bufferUtil.concat(\n        this._deflate[kBuffers],\n        this._deflate[kTotalLength]\n      );\n\n      if (fin) {\n        data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n      }\n\n      //\n      // Ensure that the callback will not be called again in\n      // `PerMessageDeflate#cleanup()`.\n      //\n      this._deflate[kCallback] = null;\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n        this._deflate.reset();\n      }\n\n      callback(null, data);\n    });\n  }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n  this[kBuffers].push(chunk);\n  this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n  this[kTotalLength] += chunk.length;\n\n  if (\n    this[kPerMessageDeflate]._maxPayload < 1 ||\n    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n  ) {\n    this[kBuffers].push(chunk);\n    return;\n  }\n\n  this[kError] = new RangeError('Max payload size exceeded');\n  this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n  this[kError][kStatusCode] = 1009;\n  this.removeListener('data', inflateOnData);\n\n  //\n  // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the\n  // fact that in Node.js versions prior to 13.10.0, the callback for\n  // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing\n  // `zlib.reset()` ensures that either the callback is invoked or an error is\n  // emitted.\n  //\n  this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n  //\n  // There is no need to call `Zlib#close()` as the handle is automatically\n  // closed when an error is emitted.\n  //\n  this[kPerMessageDeflate]._inflate = null;\n\n  if (this[kError]) {\n    this[kCallback](this[kError]);\n    return;\n  }\n\n  err[kStatusCode] = 1007;\n  this[kCallback](err);\n}\n", "'use strict';\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction isValidUTF8(buf) {\n  const len = buf.length;\n  let i = 0;\n\n  while (i < len) {\n    if ((buf[i] & 0x80) === 0x00) {  // 0xxxxxxx\n      i++;\n    } else if ((buf[i] & 0xe0) === 0xc0) {  // 110xxxxx 10xxxxxx\n      if (\n        i + 1 === len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i] & 0xfe) === 0xc0  // overlong\n      ) {\n        return false;\n      }\n\n      i += 2;\n    } else if ((buf[i] & 0xf0) === 0xe0) {  // 1110xxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 2 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80 ||  // overlong\n        buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0  // surrogate (U+D800 - U+DFFF)\n      ) {\n        return false;\n      }\n\n      i += 3;\n    } else if ((buf[i] & 0xf8) === 0xf0) {  // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 3 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i + 3] & 0xc0) !== 0x80 ||\n        buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80 ||  // overlong\n        buf[i] === 0xf4 && buf[i + 1] > 0x8f || buf[i] > 0xf4  // > U+10FFFF\n      ) {\n        return false;\n      }\n\n      i += 4;\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = isValidUTF8;\n", "'use strict';\n\ntry {\n  module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n  module.exports = require('./fallback');\n}\n", "'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n  return (\n    (code >= 1000 &&\n      code <= 1014 &&\n      code !== 1004 &&\n      code !== 1005 &&\n      code !== 1006) ||\n    (code >= 3000 && code <= 4999)\n  );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n  const len = buf.length;\n  let i = 0;\n\n  while (i < len) {\n    if ((buf[i] & 0x80) === 0) {\n      // 0xxxxxxx\n      i++;\n    } else if ((buf[i] & 0xe0) === 0xc0) {\n      // 110xxxxx 10xxxxxx\n      if (\n        i + 1 === len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i] & 0xfe) === 0xc0 // Overlong\n      ) {\n        return false;\n      }\n\n      i += 2;\n    } else if ((buf[i] & 0xf0) === 0xe0) {\n      // 1110xxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 2 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n        (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n      ) {\n        return false;\n      }\n\n      i += 3;\n    } else if ((buf[i] & 0xf8) === 0xf0) {\n      // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 3 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i + 3] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n        (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n        buf[i] > 0xf4 // > U+10FFFF\n      ) {\n        return false;\n      }\n\n      i += 4;\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n  return (\n    hasBlob &&\n    typeof value === 'object' &&\n    typeof value.arrayBuffer === 'function' &&\n    typeof value.type === 'string' &&\n    typeof value.stream === 'function' &&\n    (value[Symbol.toStringTag] === 'Blob' ||\n      value[Symbol.toStringTag] === 'File')\n  );\n}\n\nmodule.exports = {\n  isBlob,\n  isValidStatusCode,\n  isValidUTF8: _isValidUTF8,\n  tokenChars\n};\n\nif (isUtf8) {\n  module.exports.isValidUTF8 = function (buf) {\n    return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n  };\n} /* istanbul ignore else  */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n  try {\n    const isValidUTF8 = require('utf-8-validate');\n\n    module.exports.isValidUTF8 = function (buf) {\n      return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n", "'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n  BINARY_TYPES,\n  EMPTY_BUFFER,\n  kStatusCode,\n  kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n  /**\n   * Creates a Receiver instance.\n   *\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {String} [options.binaryType=nodebuffer] The type for binary data\n   * @param {Object} [options.extensions] An object containing the negotiated\n   *     extensions\n   * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n   *     client or server mode\n   * @param {Number} [options.maxPayload=0] The maximum allowed message length\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   */\n  constructor(options = {}) {\n    super();\n\n    this._allowSynchronousEvents =\n      options.allowSynchronousEvents !== undefined\n        ? options.allowSynchronousEvents\n        : true;\n    this._binaryType = options.binaryType || BINARY_TYPES[0];\n    this._extensions = options.extensions || {};\n    this._isServer = !!options.isServer;\n    this._maxPayload = options.maxPayload | 0;\n    this._skipUTF8Validation = !!options.skipUTF8Validation;\n    this[kWebSocket] = undefined;\n\n    this._bufferedBytes = 0;\n    this._buffers = [];\n\n    this._compressed = false;\n    this._payloadLength = 0;\n    this._mask = undefined;\n    this._fragmented = 0;\n    this._masked = false;\n    this._fin = false;\n    this._opcode = 0;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._fragments = [];\n\n    this._errored = false;\n    this._loop = false;\n    this._state = GET_INFO;\n  }\n\n  /**\n   * Implements `Writable.prototype._write()`.\n   *\n   * @param {Buffer} chunk The chunk of data to write\n   * @param {String} encoding The character encoding of `chunk`\n   * @param {Function} cb Callback\n   * @private\n   */\n  _write(chunk, encoding, cb) {\n    if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n    this._bufferedBytes += chunk.length;\n    this._buffers.push(chunk);\n    this.startLoop(cb);\n  }\n\n  /**\n   * Consumes `n` bytes from the buffered data.\n   *\n   * @param {Number} n The number of bytes to consume\n   * @return {Buffer} The consumed bytes\n   * @private\n   */\n  consume(n) {\n    this._bufferedBytes -= n;\n\n    if (n === this._buffers[0].length) return this._buffers.shift();\n\n    if (n < this._buffers[0].length) {\n      const buf = this._buffers[0];\n      this._buffers[0] = new FastBuffer(\n        buf.buffer,\n        buf.byteOffset + n,\n        buf.length - n\n      );\n\n      return new FastBuffer(buf.buffer, buf.byteOffset, n);\n    }\n\n    const dst = Buffer.allocUnsafe(n);\n\n    do {\n      const buf = this._buffers[0];\n      const offset = dst.length - n;\n\n      if (n >= buf.length) {\n        dst.set(this._buffers.shift(), offset);\n      } else {\n        dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n        this._buffers[0] = new FastBuffer(\n          buf.buffer,\n          buf.byteOffset + n,\n          buf.length - n\n        );\n      }\n\n      n -= buf.length;\n    } while (n > 0);\n\n    return dst;\n  }\n\n  /**\n   * Starts the parsing loop.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  startLoop(cb) {\n    this._loop = true;\n\n    do {\n      switch (this._state) {\n        case GET_INFO:\n          this.getInfo(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_16:\n          this.getPayloadLength16(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_64:\n          this.getPayloadLength64(cb);\n          break;\n        case GET_MASK:\n          this.getMask();\n          break;\n        case GET_DATA:\n          this.getData(cb);\n          break;\n        case INFLATING:\n        case DEFER_EVENT:\n          this._loop = false;\n          return;\n      }\n    } while (this._loop);\n\n    if (!this._errored) cb();\n  }\n\n  /**\n   * Reads the first two bytes of a frame.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getInfo(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(2);\n\n    if ((buf[0] & 0x30) !== 0x00) {\n      const error = this.createError(\n        RangeError,\n        'RSV2 and RSV3 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_2_3'\n      );\n\n      cb(error);\n      return;\n    }\n\n    const compressed = (buf[0] & 0x40) === 0x40;\n\n    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n      const error = this.createError(\n        RangeError,\n        'RSV1 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_1'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._fin = (buf[0] & 0x80) === 0x80;\n    this._opcode = buf[0] & 0x0f;\n    this._payloadLength = buf[1] & 0x7f;\n\n    if (this._opcode === 0x00) {\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (!this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          'invalid opcode 0',\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._opcode = this._fragmented;\n    } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n      if (this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          `invalid opcode ${this._opcode}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._compressed = compressed;\n    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n      if (!this._fin) {\n        const error = this.createError(\n          RangeError,\n          'FIN must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_FIN'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (\n        this._payloadLength > 0x7d ||\n        (this._opcode === 0x08 && this._payloadLength === 1)\n      ) {\n        const error = this.createError(\n          RangeError,\n          `invalid payload length ${this._payloadLength}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    } else {\n      const error = this.createError(\n        RangeError,\n        `invalid opcode ${this._opcode}`,\n        true,\n        1002,\n        'WS_ERR_INVALID_OPCODE'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n    this._masked = (buf[1] & 0x80) === 0x80;\n\n    if (this._isServer) {\n      if (!this._masked) {\n        const error = this.createError(\n          RangeError,\n          'MASK must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_MASK'\n        );\n\n        cb(error);\n        return;\n      }\n    } else if (this._masked) {\n      const error = this.createError(\n        RangeError,\n        'MASK must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_MASK'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n    else this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+16).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength16(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    this._payloadLength = this.consume(2).readUInt16BE(0);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+64).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength64(cb) {\n    if (this._bufferedBytes < 8) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(8);\n    const num = buf.readUInt32BE(0);\n\n    //\n    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n    // if payload length is greater than this number.\n    //\n    if (num > Math.pow(2, 53 - 32) - 1) {\n      const error = this.createError(\n        RangeError,\n        'Unsupported WebSocket frame: payload length > 2^53 - 1',\n        false,\n        1009,\n        'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Payload length has been read.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  haveLength(cb) {\n    if (this._payloadLength && this._opcode < 0x08) {\n      this._totalPayloadLength += this._payloadLength;\n      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n        const error = this.createError(\n          RangeError,\n          'Max payload size exceeded',\n          false,\n          1009,\n          'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    }\n\n    if (this._masked) this._state = GET_MASK;\n    else this._state = GET_DATA;\n  }\n\n  /**\n   * Reads mask bytes.\n   *\n   * @private\n   */\n  getMask() {\n    if (this._bufferedBytes < 4) {\n      this._loop = false;\n      return;\n    }\n\n    this._mask = this.consume(4);\n    this._state = GET_DATA;\n  }\n\n  /**\n   * Reads data bytes.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getData(cb) {\n    let data = EMPTY_BUFFER;\n\n    if (this._payloadLength) {\n      if (this._bufferedBytes < this._payloadLength) {\n        this._loop = false;\n        return;\n      }\n\n      data = this.consume(this._payloadLength);\n\n      if (\n        this._masked &&\n        (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n      ) {\n        unmask(data, this._mask);\n      }\n    }\n\n    if (this._opcode > 0x07) {\n      this.controlMessage(data, cb);\n      return;\n    }\n\n    if (this._compressed) {\n      this._state = INFLATING;\n      this.decompress(data, cb);\n      return;\n    }\n\n    if (data.length) {\n      //\n      // This message is not compressed so its length is the sum of the payload\n      // length of all fragments.\n      //\n      this._messageLength = this._totalPayloadLength;\n      this._fragments.push(data);\n    }\n\n    this.dataMessage(cb);\n  }\n\n  /**\n   * Decompresses data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Function} cb Callback\n   * @private\n   */\n  decompress(data, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n      if (err) return cb(err);\n\n      if (buf.length) {\n        this._messageLength += buf.length;\n        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n          const error = this.createError(\n            RangeError,\n            'Max payload size exceeded',\n            false,\n            1009,\n            'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._fragments.push(buf);\n      }\n\n      this.dataMessage(cb);\n      if (this._state === GET_INFO) this.startLoop(cb);\n    });\n  }\n\n  /**\n   * Handles a data message.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  dataMessage(cb) {\n    if (!this._fin) {\n      this._state = GET_INFO;\n      return;\n    }\n\n    const messageLength = this._messageLength;\n    const fragments = this._fragments;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._fragmented = 0;\n    this._fragments = [];\n\n    if (this._opcode === 2) {\n      let data;\n\n      if (this._binaryType === 'nodebuffer') {\n        data = concat(fragments, messageLength);\n      } else if (this._binaryType === 'arraybuffer') {\n        data = toArrayBuffer(concat(fragments, messageLength));\n      } else if (this._binaryType === 'blob') {\n        data = new Blob(fragments);\n      } else {\n        data = fragments;\n      }\n\n      if (this._allowSynchronousEvents) {\n        this.emit('message', data, true);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', data, true);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    } else {\n      const buf = concat(fragments, messageLength);\n\n      if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n        const error = this.createError(\n          Error,\n          'invalid UTF-8 sequence',\n          true,\n          1007,\n          'WS_ERR_INVALID_UTF8'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (this._state === INFLATING || this._allowSynchronousEvents) {\n        this.emit('message', buf, false);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', buf, false);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    }\n  }\n\n  /**\n   * Handles a control message.\n   *\n   * @param {Buffer} data Data to handle\n   * @return {(Error|RangeError|undefined)} A possible error\n   * @private\n   */\n  controlMessage(data, cb) {\n    if (this._opcode === 0x08) {\n      if (data.length === 0) {\n        this._loop = false;\n        this.emit('conclude', 1005, EMPTY_BUFFER);\n        this.end();\n      } else {\n        const code = data.readUInt16BE(0);\n\n        if (!isValidStatusCode(code)) {\n          const error = this.createError(\n            RangeError,\n            `invalid status code ${code}`,\n            true,\n            1002,\n            'WS_ERR_INVALID_CLOSE_CODE'\n          );\n\n          cb(error);\n          return;\n        }\n\n        const buf = new FastBuffer(\n          data.buffer,\n          data.byteOffset + 2,\n          data.length - 2\n        );\n\n        if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n          const error = this.createError(\n            Error,\n            'invalid UTF-8 sequence',\n            true,\n            1007,\n            'WS_ERR_INVALID_UTF8'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._loop = false;\n        this.emit('conclude', code, buf);\n        this.end();\n      }\n\n      this._state = GET_INFO;\n      return;\n    }\n\n    if (this._allowSynchronousEvents) {\n      this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n      this._state = GET_INFO;\n    } else {\n      this._state = DEFER_EVENT;\n      setImmediate(() => {\n        this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n        this._state = GET_INFO;\n        this.startLoop(cb);\n      });\n    }\n  }\n\n  /**\n   * Builds an error object.\n   *\n   * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n   * @param {String} message The error message\n   * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n   *     `message`\n   * @param {Number} statusCode The status code\n   * @param {String} errorCode The exposed error code\n   * @return {(Error|RangeError)} The error\n   * @private\n   */\n  createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n    this._loop = false;\n    this._errored = true;\n\n    const err = new ErrorCtor(\n      prefix ? `Invalid WebSocket frame: ${message}` : message\n    );\n\n    Error.captureStackTrace(err, this.createError);\n    err.code = errorCode;\n    err[kStatusCode] = statusCode;\n    return err;\n  }\n}\n\nmodule.exports = Receiver;\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n  /**\n   * Creates a Sender instance.\n   *\n   * @param {Duplex} socket The connection socket\n   * @param {Object} [extensions] An object containing the negotiated extensions\n   * @param {Function} [generateMask] The function used to generate the masking\n   *     key\n   */\n  constructor(socket, extensions, generateMask) {\n    this._extensions = extensions || {};\n\n    if (generateMask) {\n      this._generateMask = generateMask;\n      this._maskBuffer = Buffer.alloc(4);\n    }\n\n    this._socket = socket;\n\n    this._firstFragment = true;\n    this._compress = false;\n\n    this._bufferedBytes = 0;\n    this._queue = [];\n    this._state = DEFAULT;\n    this.onerror = NOOP;\n    this[kWebSocket] = undefined;\n  }\n\n  /**\n   * Frames a piece of data according to the HyBi WebSocket protocol.\n   *\n   * @param {(Buffer|String)} data The data to frame\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @return {(Buffer|String)[]} The framed data\n   * @public\n   */\n  static frame(data, options) {\n    let mask;\n    let merge = false;\n    let offset = 2;\n    let skipMasking = false;\n\n    if (options.mask) {\n      mask = options.maskBuffer || maskBuffer;\n\n      if (options.generateMask) {\n        options.generateMask(mask);\n      } else {\n        if (randomPoolPointer === RANDOM_POOL_SIZE) {\n          /* istanbul ignore else  */\n          if (randomPool === undefined) {\n            //\n            // This is lazily initialized because server-sent frames must not\n            // be masked so it may never be used.\n            //\n            randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n          }\n\n          randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n          randomPoolPointer = 0;\n        }\n\n        mask[0] = randomPool[randomPoolPointer++];\n        mask[1] = randomPool[randomPoolPointer++];\n        mask[2] = randomPool[randomPoolPointer++];\n        mask[3] = randomPool[randomPoolPointer++];\n      }\n\n      skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n      offset = 6;\n    }\n\n    let dataLength;\n\n    if (typeof data === 'string') {\n      if (\n        (!options.mask || skipMasking) &&\n        options[kByteLength] !== undefined\n      ) {\n        dataLength = options[kByteLength];\n      } else {\n        data = Buffer.from(data);\n        dataLength = data.length;\n      }\n    } else {\n      dataLength = data.length;\n      merge = options.mask && options.readOnly && !skipMasking;\n    }\n\n    let payloadLength = dataLength;\n\n    if (dataLength >= 65536) {\n      offset += 8;\n      payloadLength = 127;\n    } else if (dataLength > 125) {\n      offset += 2;\n      payloadLength = 126;\n    }\n\n    const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n    if (options.rsv1) target[0] |= 0x40;\n\n    target[1] = payloadLength;\n\n    if (payloadLength === 126) {\n      target.writeUInt16BE(dataLength, 2);\n    } else if (payloadLength === 127) {\n      target[2] = target[3] = 0;\n      target.writeUIntBE(dataLength, 4, 6);\n    }\n\n    if (!options.mask) return [target, data];\n\n    target[1] |= 0x80;\n    target[offset - 4] = mask[0];\n    target[offset - 3] = mask[1];\n    target[offset - 2] = mask[2];\n    target[offset - 1] = mask[3];\n\n    if (skipMasking) return [target, data];\n\n    if (merge) {\n      applyMask(data, mask, target, offset, dataLength);\n      return [target];\n    }\n\n    applyMask(data, mask, data, 0, dataLength);\n    return [target, data];\n  }\n\n  /**\n   * Sends a close message to the other peer.\n   *\n   * @param {Number} [code] The status code component of the body\n   * @param {(String|Buffer)} [data] The message component of the body\n   * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  close(code, data, mask, cb) {\n    let buf;\n\n    if (code === undefined) {\n      buf = EMPTY_BUFFER;\n    } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n      throw new TypeError('First argument must be a valid error code number');\n    } else if (data === undefined || !data.length) {\n      buf = Buffer.allocUnsafe(2);\n      buf.writeUInt16BE(code, 0);\n    } else {\n      const length = Buffer.byteLength(data);\n\n      if (length > 123) {\n        throw new RangeError('The message must not be greater than 123 bytes');\n      }\n\n      buf = Buffer.allocUnsafe(2 + length);\n      buf.writeUInt16BE(code, 0);\n\n      if (typeof data === 'string') {\n        buf.write(data, 2);\n      } else {\n        buf.set(data, 2);\n      }\n    }\n\n    const options = {\n      [kByteLength]: buf.length,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x08,\n      readOnly: false,\n      rsv1: false\n    };\n\n    if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, buf, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(buf, options), cb);\n    }\n  }\n\n  /**\n   * Sends a ping message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  ping(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x09,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a pong message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  pong(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x0a,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a data message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Object} options Options object\n   * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n   *     or text\n   * @param {Boolean} [options.compress=false] Specifies whether or not to\n   *     compress `data`\n   * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  send(data, options, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n    let opcode = options.binary ? 2 : 1;\n    let rsv1 = options.compress;\n\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (this._firstFragment) {\n      this._firstFragment = false;\n      if (\n        rsv1 &&\n        perMessageDeflate &&\n        perMessageDeflate.params[\n          perMessageDeflate._isServer\n            ? 'server_no_context_takeover'\n            : 'client_no_context_takeover'\n        ]\n      ) {\n        rsv1 = byteLength >= perMessageDeflate._threshold;\n      }\n      this._compress = rsv1;\n    } else {\n      rsv1 = false;\n      opcode = 0;\n    }\n\n    if (options.fin) this._firstFragment = true;\n\n    const opts = {\n      [kByteLength]: byteLength,\n      fin: options.fin,\n      generateMask: this._generateMask,\n      mask: options.mask,\n      maskBuffer: this._maskBuffer,\n      opcode,\n      readOnly,\n      rsv1\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n      } else {\n        this.getBlobData(data, this._compress, opts, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n    } else {\n      this.dispatch(data, this._compress, opts, cb);\n    }\n  }\n\n  /**\n   * Gets the contents of a blob as binary data.\n   *\n   * @param {Blob} blob The blob\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     the data\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  getBlobData(blob, compress, options, cb) {\n    this._bufferedBytes += options[kByteLength];\n    this._state = GET_BLOB_DATA;\n\n    blob\n      .arrayBuffer()\n      .then((arrayBuffer) => {\n        if (this._socket.destroyed) {\n          const err = new Error(\n            'The socket was closed while the blob was being read'\n          );\n\n          //\n          // `callCallbacks` is called in the next tick to ensure that errors\n          // that might be thrown in the callbacks behave like errors thrown\n          // outside the promise chain.\n          //\n          process.nextTick(callCallbacks, this, err, cb);\n          return;\n        }\n\n        this._bufferedBytes -= options[kByteLength];\n        const data = toBuffer(arrayBuffer);\n\n        if (!compress) {\n          this._state = DEFAULT;\n          this.sendFrame(Sender.frame(data, options), cb);\n          this.dequeue();\n        } else {\n          this.dispatch(data, compress, options, cb);\n        }\n      })\n      .catch((err) => {\n        //\n        // `onError` is called in the next tick for the same reason that\n        // `callCallbacks` above is.\n        //\n        process.nextTick(onError, this, err, cb);\n      });\n  }\n\n  /**\n   * Dispatches a message.\n   *\n   * @param {(Buffer|String)} data The message to send\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     `data`\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  dispatch(data, compress, options, cb) {\n    if (!compress) {\n      this.sendFrame(Sender.frame(data, options), cb);\n      return;\n    }\n\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    this._bufferedBytes += options[kByteLength];\n    this._state = DEFLATING;\n    perMessageDeflate.compress(data, options.fin, (_, buf) => {\n      if (this._socket.destroyed) {\n        const err = new Error(\n          'The socket was closed while data was being compressed'\n        );\n\n        callCallbacks(this, err, cb);\n        return;\n      }\n\n      this._bufferedBytes -= options[kByteLength];\n      this._state = DEFAULT;\n      options.readOnly = false;\n      this.sendFrame(Sender.frame(buf, options), cb);\n      this.dequeue();\n    });\n  }\n\n  /**\n   * Executes queued send operations.\n   *\n   * @private\n   */\n  dequeue() {\n    while (this._state === DEFAULT && this._queue.length) {\n      const params = this._queue.shift();\n\n      this._bufferedBytes -= params[3][kByteLength];\n      Reflect.apply(params[0], this, params.slice(1));\n    }\n  }\n\n  /**\n   * Enqueues a send operation.\n   *\n   * @param {Array} params Send operation parameters.\n   * @private\n   */\n  enqueue(params) {\n    this._bufferedBytes += params[3][kByteLength];\n    this._queue.push(params);\n  }\n\n  /**\n   * Sends a frame.\n   *\n   * @param {(Buffer | String)[]} list The frame to send\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  sendFrame(list, cb) {\n    if (list.length === 2) {\n      this._socket.cork();\n      this._socket.write(list[0]);\n      this._socket.write(list[1], cb);\n      this._socket.uncork();\n    } else {\n      this._socket.write(list[0], cb);\n    }\n  }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n  if (typeof cb === 'function') cb(err);\n\n  for (let i = 0; i < sender._queue.length; i++) {\n    const params = sender._queue[i];\n    const callback = params[params.length - 1];\n\n    if (typeof callback === 'function') callback(err);\n  }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n  callCallbacks(sender, err, cb);\n  sender.onerror(err);\n}\n", "'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n  /**\n   * Create a new `Event`.\n   *\n   * @param {String} type The name of the event\n   * @throws {TypeError} If the `type` argument is not specified\n   */\n  constructor(type) {\n    this[kTarget] = null;\n    this[kType] = type;\n  }\n\n  /**\n   * @type {*}\n   */\n  get target() {\n    return this[kTarget];\n  }\n\n  /**\n   * @type {String}\n   */\n  get type() {\n    return this[kType];\n  }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n  /**\n   * Create a new `CloseEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {Number} [options.code=0] The status code explaining why the\n   *     connection was closed\n   * @param {String} [options.reason=''] A human-readable string explaining why\n   *     the connection was closed\n   * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n   *     connection was cleanly closed\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kCode] = options.code === undefined ? 0 : options.code;\n    this[kReason] = options.reason === undefined ? '' : options.reason;\n    this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get code() {\n    return this[kCode];\n  }\n\n  /**\n   * @type {String}\n   */\n  get reason() {\n    return this[kReason];\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get wasClean() {\n    return this[kWasClean];\n  }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n  /**\n   * Create a new `ErrorEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.error=null] The error that generated this event\n   * @param {String} [options.message=''] The error message\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kError] = options.error === undefined ? null : options.error;\n    this[kMessage] = options.message === undefined ? '' : options.message;\n  }\n\n  /**\n   * @type {*}\n   */\n  get error() {\n    return this[kError];\n  }\n\n  /**\n   * @type {String}\n   */\n  get message() {\n    return this[kMessage];\n  }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n  /**\n   * Create a new `MessageEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.data=null] The message content\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kData] = options.data === undefined ? null : options.data;\n  }\n\n  /**\n   * @type {*}\n   */\n  get data() {\n    return this[kData];\n  }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n  /**\n   * Register an event listener.\n   *\n   * @param {String} type A string representing the event type to listen for\n   * @param {(Function|Object)} handler The listener to add\n   * @param {Object} [options] An options object specifies characteristics about\n   *     the event listener\n   * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n   *     listener should be invoked at most once after being added. If `true`,\n   *     the listener would be automatically removed when invoked.\n   * @public\n   */\n  addEventListener(type, handler, options = {}) {\n    for (const listener of this.listeners(type)) {\n      if (\n        !options[kForOnEventAttribute] &&\n        listener[kListener] === handler &&\n        !listener[kForOnEventAttribute]\n      ) {\n        return;\n      }\n    }\n\n    let wrapper;\n\n    if (type === 'message') {\n      wrapper = function onMessage(data, isBinary) {\n        const event = new MessageEvent('message', {\n          data: isBinary ? data : data.toString()\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'close') {\n      wrapper = function onClose(code, message) {\n        const event = new CloseEvent('close', {\n          code,\n          reason: message.toString(),\n          wasClean: this._closeFrameReceived && this._closeFrameSent\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'error') {\n      wrapper = function onError(error) {\n        const event = new ErrorEvent('error', {\n          error,\n          message: error.message\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'open') {\n      wrapper = function onOpen() {\n        const event = new Event('open');\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else {\n      return;\n    }\n\n    wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n    wrapper[kListener] = handler;\n\n    if (options.once) {\n      this.once(type, wrapper);\n    } else {\n      this.on(type, wrapper);\n    }\n  },\n\n  /**\n   * Remove an event listener.\n   *\n   * @param {String} type A string representing the event type to remove\n   * @param {(Function|Object)} handler The listener to remove\n   * @public\n   */\n  removeEventListener(type, handler) {\n    for (const listener of this.listeners(type)) {\n      if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n        this.removeListener(type, listener);\n        break;\n      }\n    }\n  }\n};\n\nmodule.exports = {\n  CloseEvent,\n  ErrorEvent,\n  Event,\n  EventTarget,\n  MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n  if (typeof listener === 'object' && listener.handleEvent) {\n    listener.handleEvent.call(listener, event);\n  } else {\n    listener.call(thisArg, event);\n  }\n}\n", "'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n *     parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n  if (dest[name] === undefined) dest[name] = [elem];\n  else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n  const offers = Object.create(null);\n  let params = Object.create(null);\n  let mustUnescape = false;\n  let isEscaping = false;\n  let inQuotes = false;\n  let extensionName;\n  let paramName;\n  let start = -1;\n  let code = -1;\n  let end = -1;\n  let i = 0;\n\n  for (; i < header.length; i++) {\n    code = header.charCodeAt(i);\n\n    if (extensionName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (\n        i !== 0 &&\n        (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n      ) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        const name = header.slice(start, end);\n        if (code === 0x2c) {\n          push(offers, name, params);\n          params = Object.create(null);\n        } else {\n          extensionName = name;\n        }\n\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else if (paramName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (code === 0x20 || code === 0x09) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        push(params, header.slice(start, end), true);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        start = end = -1;\n      } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n        paramName = header.slice(start, i);\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else {\n      //\n      // The value of a quoted-string after unescaping must conform to the\n      // token ABNF, so only token characters are valid.\n      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n      //\n      if (isEscaping) {\n        if (tokenChars[code] !== 1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n        if (start === -1) start = i;\n        else if (!mustUnescape) mustUnescape = true;\n        isEscaping = false;\n      } else if (inQuotes) {\n        if (tokenChars[code] === 1) {\n          if (start === -1) start = i;\n        } else if (code === 0x22 /* '\"' */ && start !== -1) {\n          inQuotes = false;\n          end = i;\n        } else if (code === 0x5c /* '\\' */) {\n          isEscaping = true;\n        } else {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n        inQuotes = true;\n      } else if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n        if (end === -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        let value = header.slice(start, end);\n        if (mustUnescape) {\n          value = value.replace(/\\\\/g, '');\n          mustUnescape = false;\n        }\n        push(params, paramName, value);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        paramName = undefined;\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    }\n  }\n\n  if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  if (end === -1) end = i;\n  const token = header.slice(start, end);\n  if (extensionName === undefined) {\n    push(offers, token, params);\n  } else {\n    if (paramName === undefined) {\n      push(params, token, true);\n    } else if (mustUnescape) {\n      push(params, paramName, token.replace(/\\\\/g, ''));\n    } else {\n      push(params, paramName, token);\n    }\n    push(offers, extensionName, params);\n  }\n\n  return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n  return Object.keys(extensions)\n    .map((extension) => {\n      let configurations = extensions[extension];\n      if (!Array.isArray(configurations)) configurations = [configurations];\n      return configurations\n        .map((params) => {\n          return [extension]\n            .concat(\n              Object.keys(params).map((k) => {\n                let values = params[k];\n                if (!Array.isArray(values)) values = [values];\n                return values\n                  .map((v) => (v === true ? k : `${k}=${v}`))\n                  .join('; ');\n              })\n            )\n            .join('; ');\n        })\n        .join(', ');\n    })\n    .join(', ');\n}\n\nmodule.exports = { format, parse };\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n  BINARY_TYPES,\n  EMPTY_BUFFER,\n  GUID,\n  kForOnEventAttribute,\n  kListener,\n  kStatusCode,\n  kWebSocket,\n  NOOP\n} = require('./constants');\nconst {\n  EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst closeTimeout = 30 * 1000;\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n  /**\n   * Create a new `WebSocket`.\n   *\n   * @param {(String|URL)} address The URL to which to connect\n   * @param {(String|String[])} [protocols] The subprotocols\n   * @param {Object} [options] Connection options\n   */\n  constructor(address, protocols, options) {\n    super();\n\n    this._binaryType = BINARY_TYPES[0];\n    this._closeCode = 1006;\n    this._closeFrameReceived = false;\n    this._closeFrameSent = false;\n    this._closeMessage = EMPTY_BUFFER;\n    this._closeTimer = null;\n    this._errorEmitted = false;\n    this._extensions = {};\n    this._paused = false;\n    this._protocol = '';\n    this._readyState = WebSocket.CONNECTING;\n    this._receiver = null;\n    this._sender = null;\n    this._socket = null;\n\n    if (address !== null) {\n      this._bufferedAmount = 0;\n      this._isServer = false;\n      this._redirects = 0;\n\n      if (protocols === undefined) {\n        protocols = [];\n      } else if (!Array.isArray(protocols)) {\n        if (typeof protocols === 'object' && protocols !== null) {\n          options = protocols;\n          protocols = [];\n        } else {\n          protocols = [protocols];\n        }\n      }\n\n      initAsClient(this, address, protocols, options);\n    } else {\n      this._autoPong = options.autoPong;\n      this._isServer = true;\n    }\n  }\n\n  /**\n   * For historical reasons, the custom \"nodebuffer\" type is used by the default\n   * instead of \"blob\".\n   *\n   * @type {String}\n   */\n  get binaryType() {\n    return this._binaryType;\n  }\n\n  set binaryType(type) {\n    if (!BINARY_TYPES.includes(type)) return;\n\n    this._binaryType = type;\n\n    //\n    // Allow to change `binaryType` on the fly.\n    //\n    if (this._receiver) this._receiver._binaryType = type;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get bufferedAmount() {\n    if (!this._socket) return this._bufferedAmount;\n\n    return this._socket._writableState.length + this._sender._bufferedBytes;\n  }\n\n  /**\n   * @type {String}\n   */\n  get extensions() {\n    return Object.keys(this._extensions).join();\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get isPaused() {\n    return this._paused;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onclose() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onerror() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onopen() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onmessage() {\n    return null;\n  }\n\n  /**\n   * @type {String}\n   */\n  get protocol() {\n    return this._protocol;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get readyState() {\n    return this._readyState;\n  }\n\n  /**\n   * @type {String}\n   */\n  get url() {\n    return this._url;\n  }\n\n  /**\n   * Set up the socket and the internal resources.\n   *\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Object} options Options object\n   * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Number} [options.maxPayload=0] The maximum allowed message size\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @private\n   */\n  setSocket(socket, head, options) {\n    const receiver = new Receiver({\n      allowSynchronousEvents: options.allowSynchronousEvents,\n      binaryType: this.binaryType,\n      extensions: this._extensions,\n      isServer: this._isServer,\n      maxPayload: options.maxPayload,\n      skipUTF8Validation: options.skipUTF8Validation\n    });\n\n    const sender = new Sender(socket, this._extensions, options.generateMask);\n\n    this._receiver = receiver;\n    this._sender = sender;\n    this._socket = socket;\n\n    receiver[kWebSocket] = this;\n    sender[kWebSocket] = this;\n    socket[kWebSocket] = this;\n\n    receiver.on('conclude', receiverOnConclude);\n    receiver.on('drain', receiverOnDrain);\n    receiver.on('error', receiverOnError);\n    receiver.on('message', receiverOnMessage);\n    receiver.on('ping', receiverOnPing);\n    receiver.on('pong', receiverOnPong);\n\n    sender.onerror = senderOnError;\n\n    //\n    // These methods may not be available if `socket` is just a `Duplex`.\n    //\n    if (socket.setTimeout) socket.setTimeout(0);\n    if (socket.setNoDelay) socket.setNoDelay();\n\n    if (head.length > 0) socket.unshift(head);\n\n    socket.on('close', socketOnClose);\n    socket.on('data', socketOnData);\n    socket.on('end', socketOnEnd);\n    socket.on('error', socketOnError);\n\n    this._readyState = WebSocket.OPEN;\n    this.emit('open');\n  }\n\n  /**\n   * Emit the `'close'` event.\n   *\n   * @private\n   */\n  emitClose() {\n    if (!this._socket) {\n      this._readyState = WebSocket.CLOSED;\n      this.emit('close', this._closeCode, this._closeMessage);\n      return;\n    }\n\n    if (this._extensions[PerMessageDeflate.extensionName]) {\n      this._extensions[PerMessageDeflate.extensionName].cleanup();\n    }\n\n    this._receiver.removeAllListeners();\n    this._readyState = WebSocket.CLOSED;\n    this.emit('close', this._closeCode, this._closeMessage);\n  }\n\n  /**\n   * Start a closing handshake.\n   *\n   *          +----------+   +-----------+   +----------+\n   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n   *    |     +----------+   +-----------+   +----------+     |\n   *          +----------+   +-----------+         |\n   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING\n   *          +----------+   +-----------+   |\n   *    |           |                        |   +---+        |\n   *                +------------------------+-->|fin| - - - -\n   *    |         +---+                      |   +---+\n   *     - - - - -|fin|<---------------------+\n   *              +---+\n   *\n   * @param {Number} [code] Status code explaining why the connection is closing\n   * @param {(String|Buffer)} [data] The reason why the connection is\n   *     closing\n   * @public\n   */\n  close(code, data) {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this.readyState === WebSocket.CLOSING) {\n      if (\n        this._closeFrameSent &&\n        (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n      ) {\n        this._socket.end();\n      }\n\n      return;\n    }\n\n    this._readyState = WebSocket.CLOSING;\n    this._sender.close(code, data, !this._isServer, (err) => {\n      //\n      // This error is handled by the `'error'` listener on the socket. We only\n      // want to know if the close frame has been sent here.\n      //\n      if (err) return;\n\n      this._closeFrameSent = true;\n\n      if (\n        this._closeFrameReceived ||\n        this._receiver._writableState.errorEmitted\n      ) {\n        this._socket.end();\n      }\n    });\n\n    setCloseTimer(this);\n  }\n\n  /**\n   * Pause the socket.\n   *\n   * @public\n   */\n  pause() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = true;\n    this._socket.pause();\n  }\n\n  /**\n   * Send a ping.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the ping is sent\n   * @public\n   */\n  ping(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Send a pong.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the pong is sent\n   * @public\n   */\n  pong(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Resume the socket.\n   *\n   * @public\n   */\n  resume() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = false;\n    if (!this._receiver._writableState.needDrain) this._socket.resume();\n  }\n\n  /**\n   * Send a data message.\n   *\n   * @param {*} data The message to send\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n   *     text\n   * @param {Boolean} [options.compress] Specifies whether or not to compress\n   *     `data`\n   * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when data is written out\n   * @public\n   */\n  send(data, options, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof options === 'function') {\n      cb = options;\n      options = {};\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    const opts = {\n      binary: typeof data !== 'string',\n      mask: !this._isServer,\n      compress: true,\n      fin: true,\n      ...options\n    };\n\n    if (!this._extensions[PerMessageDeflate.extensionName]) {\n      opts.compress = false;\n    }\n\n    this._sender.send(data || EMPTY_BUFFER, opts, cb);\n  }\n\n  /**\n   * Forcibly close the connection.\n   *\n   * @public\n   */\n  terminate() {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this._socket) {\n      this._readyState = WebSocket.CLOSING;\n      this._socket.destroy();\n    }\n  }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n[\n  'binaryType',\n  'bufferedAmount',\n  'extensions',\n  'isPaused',\n  'protocol',\n  'readyState',\n  'url'\n].forEach((property) => {\n  Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n  Object.defineProperty(WebSocket.prototype, `on${method}`, {\n    enumerable: true,\n    get() {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) return listener[kListener];\n      }\n\n      return null;\n    },\n    set(handler) {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) {\n          this.removeListener(method, listener);\n          break;\n        }\n      }\n\n      if (typeof handler !== 'function') return;\n\n      this.addEventListener(method, handler, {\n        [kForOnEventAttribute]: true\n      });\n    }\n  });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n *     of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n *     times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n *     automatically send a pong in response to a ping\n * @param {Function} [options.finishRequest] A function which can be used to\n *     customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n *     redirects\n * @param {Function} [options.generateMask] The function used to generate the\n *     masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n *     handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n *     size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n *     allowed\n * @param {String} [options.origin] Value of the `Origin` or\n *     `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n *     permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n *     `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n *     not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n  const opts = {\n    allowSynchronousEvents: true,\n    autoPong: true,\n    protocolVersion: protocolVersions[1],\n    maxPayload: 100 * 1024 * 1024,\n    skipUTF8Validation: false,\n    perMessageDeflate: true,\n    followRedirects: false,\n    maxRedirects: 10,\n    ...options,\n    socketPath: undefined,\n    hostname: undefined,\n    protocol: undefined,\n    timeout: undefined,\n    method: 'GET',\n    host: undefined,\n    path: undefined,\n    port: undefined\n  };\n\n  websocket._autoPong = opts.autoPong;\n\n  if (!protocolVersions.includes(opts.protocolVersion)) {\n    throw new RangeError(\n      `Unsupported protocol version: ${opts.protocolVersion} ` +\n        `(supported versions: ${protocolVersions.join(', ')})`\n    );\n  }\n\n  let parsedUrl;\n\n  if (address instanceof URL) {\n    parsedUrl = address;\n  } else {\n    try {\n      parsedUrl = new URL(address);\n    } catch (e) {\n      throw new SyntaxError(`Invalid URL: ${address}`);\n    }\n  }\n\n  if (parsedUrl.protocol === 'http:') {\n    parsedUrl.protocol = 'ws:';\n  } else if (parsedUrl.protocol === 'https:') {\n    parsedUrl.protocol = 'wss:';\n  }\n\n  websocket._url = parsedUrl.href;\n\n  const isSecure = parsedUrl.protocol === 'wss:';\n  const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n  let invalidUrlMessage;\n\n  if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n    invalidUrlMessage =\n      'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n      '\"http:\", \"https:\", or \"ws+unix:\"';\n  } else if (isIpcUrl && !parsedUrl.pathname) {\n    invalidUrlMessage = \"The URL's pathname is empty\";\n  } else if (parsedUrl.hash) {\n    invalidUrlMessage = 'The URL contains a fragment identifier';\n  }\n\n  if (invalidUrlMessage) {\n    const err = new SyntaxError(invalidUrlMessage);\n\n    if (websocket._redirects === 0) {\n      throw err;\n    } else {\n      emitErrorAndClose(websocket, err);\n      return;\n    }\n  }\n\n  const defaultPort = isSecure ? 443 : 80;\n  const key = randomBytes(16).toString('base64');\n  const request = isSecure ? https.request : http.request;\n  const protocolSet = new Set();\n  let perMessageDeflate;\n\n  opts.createConnection =\n    opts.createConnection || (isSecure ? tlsConnect : netConnect);\n  opts.defaultPort = opts.defaultPort || defaultPort;\n  opts.port = parsedUrl.port || defaultPort;\n  opts.host = parsedUrl.hostname.startsWith('[')\n    ? parsedUrl.hostname.slice(1, -1)\n    : parsedUrl.hostname;\n  opts.headers = {\n    ...opts.headers,\n    'Sec-WebSocket-Version': opts.protocolVersion,\n    'Sec-WebSocket-Key': key,\n    Connection: 'Upgrade',\n    Upgrade: 'websocket'\n  };\n  opts.path = parsedUrl.pathname + parsedUrl.search;\n  opts.timeout = opts.handshakeTimeout;\n\n  if (opts.perMessageDeflate) {\n    perMessageDeflate = new PerMessageDeflate(\n      opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n      false,\n      opts.maxPayload\n    );\n    opts.headers['Sec-WebSocket-Extensions'] = format({\n      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n    });\n  }\n  if (protocols.length) {\n    for (const protocol of protocols) {\n      if (\n        typeof protocol !== 'string' ||\n        !subprotocolRegex.test(protocol) ||\n        protocolSet.has(protocol)\n      ) {\n        throw new SyntaxError(\n          'An invalid or duplicated subprotocol was specified'\n        );\n      }\n\n      protocolSet.add(protocol);\n    }\n\n    opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n  }\n  if (opts.origin) {\n    if (opts.protocolVersion < 13) {\n      opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n    } else {\n      opts.headers.Origin = opts.origin;\n    }\n  }\n  if (parsedUrl.username || parsedUrl.password) {\n    opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n  }\n\n  if (isIpcUrl) {\n    const parts = opts.path.split(':');\n\n    opts.socketPath = parts[0];\n    opts.path = parts[1];\n  }\n\n  let req;\n\n  if (opts.followRedirects) {\n    if (websocket._redirects === 0) {\n      websocket._originalIpc = isIpcUrl;\n      websocket._originalSecure = isSecure;\n      websocket._originalHostOrSocketPath = isIpcUrl\n        ? opts.socketPath\n        : parsedUrl.host;\n\n      const headers = options && options.headers;\n\n      //\n      // Shallow copy the user provided options so that headers can be changed\n      // without mutating the original object.\n      //\n      options = { ...options, headers: {} };\n\n      if (headers) {\n        for (const [key, value] of Object.entries(headers)) {\n          options.headers[key.toLowerCase()] = value;\n        }\n      }\n    } else if (websocket.listenerCount('redirect') === 0) {\n      const isSameHost = isIpcUrl\n        ? websocket._originalIpc\n          ? opts.socketPath === websocket._originalHostOrSocketPath\n          : false\n        : websocket._originalIpc\n          ? false\n          : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n      if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n        //\n        // Match curl 7.77.0 behavior and drop the following headers. These\n        // headers are also dropped when following a redirect to a subdomain.\n        //\n        delete opts.headers.authorization;\n        delete opts.headers.cookie;\n\n        if (!isSameHost) delete opts.headers.host;\n\n        opts.auth = undefined;\n      }\n    }\n\n    //\n    // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n    // If the `Authorization` header is set, then there is nothing to do as it\n    // will take precedence.\n    //\n    if (opts.auth && !options.headers.authorization) {\n      options.headers.authorization =\n        'Basic ' + Buffer.from(opts.auth).toString('base64');\n    }\n\n    req = websocket._req = request(opts);\n\n    if (websocket._redirects) {\n      //\n      // Unlike what is done for the `'upgrade'` event, no early exit is\n      // triggered here if the user calls `websocket.close()` or\n      // `websocket.terminate()` from a listener of the `'redirect'` event. This\n      // is because the user can also call `request.destroy()` with an error\n      // before calling `websocket.close()` or `websocket.terminate()` and this\n      // would result in an error being emitted on the `request` object with no\n      // `'error'` event listeners attached.\n      //\n      websocket.emit('redirect', websocket.url, req);\n    }\n  } else {\n    req = websocket._req = request(opts);\n  }\n\n  if (opts.timeout) {\n    req.on('timeout', () => {\n      abortHandshake(websocket, req, 'Opening handshake has timed out');\n    });\n  }\n\n  req.on('error', (err) => {\n    if (req === null || req[kAborted]) return;\n\n    req = websocket._req = null;\n    emitErrorAndClose(websocket, err);\n  });\n\n  req.on('response', (res) => {\n    const location = res.headers.location;\n    const statusCode = res.statusCode;\n\n    if (\n      location &&\n      opts.followRedirects &&\n      statusCode >= 300 &&\n      statusCode < 400\n    ) {\n      if (++websocket._redirects > opts.maxRedirects) {\n        abortHandshake(websocket, req, 'Maximum redirects exceeded');\n        return;\n      }\n\n      req.abort();\n\n      let addr;\n\n      try {\n        addr = new URL(location, address);\n      } catch (e) {\n        const err = new SyntaxError(`Invalid URL: ${location}`);\n        emitErrorAndClose(websocket, err);\n        return;\n      }\n\n      initAsClient(websocket, addr, protocols, options);\n    } else if (!websocket.emit('unexpected-response', req, res)) {\n      abortHandshake(\n        websocket,\n        req,\n        `Unexpected server response: ${res.statusCode}`\n      );\n    }\n  });\n\n  req.on('upgrade', (res, socket, head) => {\n    websocket.emit('upgrade', res);\n\n    //\n    // The user may have closed the connection from a listener of the\n    // `'upgrade'` event.\n    //\n    if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n    req = websocket._req = null;\n\n    const upgrade = res.headers.upgrade;\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      abortHandshake(websocket, socket, 'Invalid Upgrade header');\n      return;\n    }\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    if (res.headers['sec-websocket-accept'] !== digest) {\n      abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n      return;\n    }\n\n    const serverProt = res.headers['sec-websocket-protocol'];\n    let protError;\n\n    if (serverProt !== undefined) {\n      if (!protocolSet.size) {\n        protError = 'Server sent a subprotocol but none was requested';\n      } else if (!protocolSet.has(serverProt)) {\n        protError = 'Server sent an invalid subprotocol';\n      }\n    } else if (protocolSet.size) {\n      protError = 'Server sent no subprotocol';\n    }\n\n    if (protError) {\n      abortHandshake(websocket, socket, protError);\n      return;\n    }\n\n    if (serverProt) websocket._protocol = serverProt;\n\n    const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n    if (secWebSocketExtensions !== undefined) {\n      if (!perMessageDeflate) {\n        const message =\n          'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n          'was requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      let extensions;\n\n      try {\n        extensions = parse(secWebSocketExtensions);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      const extensionNames = Object.keys(extensions);\n\n      if (\n        extensionNames.length !== 1 ||\n        extensionNames[0] !== PerMessageDeflate.extensionName\n      ) {\n        const message = 'Server indicated an extension that was not requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      try {\n        perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      websocket._extensions[PerMessageDeflate.extensionName] =\n        perMessageDeflate;\n    }\n\n    websocket.setSocket(socket, head, {\n      allowSynchronousEvents: opts.allowSynchronousEvents,\n      generateMask: opts.generateMask,\n      maxPayload: opts.maxPayload,\n      skipUTF8Validation: opts.skipUTF8Validation\n    });\n  });\n\n  if (opts.finishRequest) {\n    opts.finishRequest(req, websocket);\n  } else {\n    req.end();\n  }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n  websocket._readyState = WebSocket.CLOSING;\n  //\n  // The following assignment is practically useless and is done only for\n  // consistency.\n  //\n  websocket._errorEmitted = true;\n  websocket.emit('error', err);\n  websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n  options.path = options.socketPath;\n  return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n  options.path = undefined;\n\n  if (!options.servername && options.servername !== '') {\n    options.servername = net.isIP(options.host) ? '' : options.host;\n  }\n\n  return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n *     abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n  websocket._readyState = WebSocket.CLOSING;\n\n  const err = new Error(message);\n  Error.captureStackTrace(err, abortHandshake);\n\n  if (stream.setHeader) {\n    stream[kAborted] = true;\n    stream.abort();\n\n    if (stream.socket && !stream.socket.destroyed) {\n      //\n      // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n      // called after the request completed. See\n      // https://github.com/websockets/ws/issues/1869.\n      //\n      stream.socket.destroy();\n    }\n\n    process.nextTick(emitErrorAndClose, websocket, err);\n  } else {\n    stream.destroy(err);\n    stream.once('error', websocket.emit.bind(websocket, 'error'));\n    stream.once('close', websocket.emitClose.bind(websocket));\n  }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n  if (data) {\n    const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n    //\n    // The `_bufferedAmount` property is used only when the peer is a client and\n    // the opening handshake fails. Under these circumstances, in fact, the\n    // `setSocket()` method is not called, so the `_socket` and `_sender`\n    // properties are set to `null`.\n    //\n    if (websocket._socket) websocket._sender._bufferedBytes += length;\n    else websocket._bufferedAmount += length;\n  }\n\n  if (cb) {\n    const err = new Error(\n      `WebSocket is not open: readyState ${websocket.readyState} ` +\n        `(${readyStates[websocket.readyState]})`\n    );\n    process.nextTick(cb, err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n  const websocket = this[kWebSocket];\n\n  websocket._closeFrameReceived = true;\n  websocket._closeMessage = reason;\n  websocket._closeCode = code;\n\n  if (websocket._socket[kWebSocket] === undefined) return;\n\n  websocket._socket.removeListener('data', socketOnData);\n  process.nextTick(resume, websocket._socket);\n\n  if (code === 1005) websocket.close();\n  else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n  const websocket = this[kWebSocket];\n\n  if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._socket[kWebSocket] !== undefined) {\n    websocket._socket.removeListener('data', socketOnData);\n\n    //\n    // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n    // https://github.com/websockets/ws/issues/1940.\n    //\n    process.nextTick(resume, websocket._socket);\n\n    websocket.close(err[kStatusCode]);\n  }\n\n  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n  this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n  this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n  websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n  this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n  stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket.readyState === WebSocket.CLOSED) return;\n  if (websocket.readyState === WebSocket.OPEN) {\n    websocket._readyState = WebSocket.CLOSING;\n    setCloseTimer(websocket);\n  }\n\n  //\n  // `socket.end()` is used instead of `socket.destroy()` to allow the other\n  // peer to finish sending queued data. There is no need to set a timer here\n  // because `CLOSING` means that it is already set or not needed.\n  //\n  this._socket.end();\n\n  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n  websocket._closeTimer = setTimeout(\n    websocket._socket.destroy.bind(websocket._socket),\n    closeTimeout\n  );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('close', socketOnClose);\n  this.removeListener('data', socketOnData);\n  this.removeListener('end', socketOnEnd);\n\n  websocket._readyState = WebSocket.CLOSING;\n\n  let chunk;\n\n  //\n  // The close frame might not have been received or the `'end'` event emitted,\n  // for example, if the socket was destroyed due to an error. Ensure that the\n  // `receiver` stream is closed after writing any remaining buffered data to\n  // it. If the readable side of the socket is in flowing mode then there is no\n  // buffered data as everything has been already written and `readable.read()`\n  // will return `null`. If instead, the socket is paused, any possible buffered\n  // data will be read as a single chunk.\n  //\n  if (\n    !this._readableState.endEmitted &&\n    !websocket._closeFrameReceived &&\n    !websocket._receiver._writableState.errorEmitted &&\n    (chunk = websocket._socket.read()) !== null\n  ) {\n    websocket._receiver.write(chunk);\n  }\n\n  websocket._receiver.end();\n\n  this[kWebSocket] = undefined;\n\n  clearTimeout(websocket._closeTimer);\n\n  if (\n    websocket._receiver._writableState.finished ||\n    websocket._receiver._writableState.errorEmitted\n  ) {\n    websocket.emitClose();\n  } else {\n    websocket._receiver.on('error', receiverOnFinish);\n    websocket._receiver.on('finish', receiverOnFinish);\n  }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n  if (!this[kWebSocket]._receiver.write(chunk)) {\n    this.pause();\n  }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n  const websocket = this[kWebSocket];\n\n  websocket._readyState = WebSocket.CLOSING;\n  websocket._receiver.end();\n  this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('error', socketOnError);\n  this.on('error', NOOP);\n\n  if (websocket) {\n    websocket._readyState = WebSocket.CLOSING;\n    this.destroy();\n  }\n}\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^WebSocket$\" }] */\n'use strict';\n\nconst WebSocket = require('./websocket');\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n  stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n  if (!this.destroyed && this._writableState.finished) {\n    this.destroy();\n  }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n  this.removeListener('error', duplexOnError);\n  this.destroy();\n  if (this.listenerCount('error') === 0) {\n    // Do not suppress the throwing behavior.\n    this.emit('error', err);\n  }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n  let terminateOnDestroy = true;\n\n  const duplex = new Duplex({\n    ...options,\n    autoDestroy: false,\n    emitClose: false,\n    objectMode: false,\n    writableObjectMode: false\n  });\n\n  ws.on('message', function message(msg, isBinary) {\n    const data =\n      !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n    if (!duplex.push(data)) ws.pause();\n  });\n\n  ws.once('error', function error(err) {\n    if (duplex.destroyed) return;\n\n    // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n    //\n    // - If the `'error'` event is emitted before the `'open'` event, then\n    //   `ws.terminate()` is a noop as no socket is assigned.\n    // - Otherwise, the error is re-emitted by the listener of the `'error'`\n    //   event of the `Receiver` object. The listener already closes the\n    //   connection by calling `ws.close()`. This allows a close frame to be\n    //   sent to the other peer. If `ws.terminate()` is called right after this,\n    //   then the close frame might not be sent.\n    terminateOnDestroy = false;\n    duplex.destroy(err);\n  });\n\n  ws.once('close', function close() {\n    if (duplex.destroyed) return;\n\n    duplex.push(null);\n  });\n\n  duplex._destroy = function (err, callback) {\n    if (ws.readyState === ws.CLOSED) {\n      callback(err);\n      process.nextTick(emitClose, duplex);\n      return;\n    }\n\n    let called = false;\n\n    ws.once('error', function error(err) {\n      called = true;\n      callback(err);\n    });\n\n    ws.once('close', function close() {\n      if (!called) callback(err);\n      process.nextTick(emitClose, duplex);\n    });\n\n    if (terminateOnDestroy) ws.terminate();\n  };\n\n  duplex._final = function (callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._final(callback);\n      });\n      return;\n    }\n\n    // If the value of the `_socket` property is `null` it means that `ws` is a\n    // client websocket and the handshake failed. In fact, when this happens, a\n    // socket is never assigned to the websocket. Wait for the `'error'` event\n    // that will be emitted by the websocket.\n    if (ws._socket === null) return;\n\n    if (ws._socket._writableState.finished) {\n      callback();\n      if (duplex._readableState.endEmitted) duplex.destroy();\n    } else {\n      ws._socket.once('finish', function finish() {\n        // `duplex` is not destroyed here because the `'end'` event will be\n        // emitted on `duplex` after this `'finish'` event. The EOF signaling\n        // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n        callback();\n      });\n      ws.close();\n    }\n  };\n\n  duplex._read = function () {\n    if (ws.isPaused) ws.resume();\n  };\n\n  duplex._write = function (chunk, encoding, callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._write(chunk, encoding, callback);\n      });\n      return;\n    }\n\n    ws.send(chunk, callback);\n  };\n\n  duplex.on('end', duplexOnEnd);\n  duplex.on('error', duplexOnError);\n  return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n", "'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n  const protocols = new Set();\n  let start = -1;\n  let end = -1;\n  let i = 0;\n\n  for (i; i < header.length; i++) {\n    const code = header.charCodeAt(i);\n\n    if (end === -1 && tokenChars[code] === 1) {\n      if (start === -1) start = i;\n    } else if (\n      i !== 0 &&\n      (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n    ) {\n      if (end === -1 && start !== -1) end = i;\n    } else if (code === 0x2c /* ',' */) {\n      if (start === -1) {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n\n      if (end === -1) end = i;\n\n      const protocol = header.slice(start, end);\n\n      if (protocols.has(protocol)) {\n        throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n      }\n\n      protocols.add(protocol);\n      start = end = -1;\n    } else {\n      throw new SyntaxError(`Unexpected character at index ${i}`);\n    }\n  }\n\n  if (start === -1 || end !== -1) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  const protocol = header.slice(start, i);\n\n  if (protocols.has(protocol)) {\n    throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n  }\n\n  protocols.add(protocol);\n  return protocols;\n}\n\nmodule.exports = { parse };\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n  /**\n   * Create a `WebSocketServer` instance.\n   *\n   * @param {Object} options Configuration options\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n   *     automatically send a pong in response to a ping\n   * @param {Number} [options.backlog=511] The maximum length of the queue of\n   *     pending connections\n   * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n   *     track clients\n   * @param {Function} [options.handleProtocols] A hook to handle protocols\n   * @param {String} [options.host] The hostname where to bind the server\n   * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n   *     size\n   * @param {Boolean} [options.noServer=false] Enable no server mode\n   * @param {String} [options.path] Accept only connections matching this path\n   * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n   *     permessage-deflate\n   * @param {Number} [options.port] The port where to bind the server\n   * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n   *     server to use\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @param {Function} [options.verifyClient] A hook to reject connections\n   * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n   *     class to use. It must be the `WebSocket` class or class that extends it\n   * @param {Function} [callback] A listener for the `listening` event\n   */\n  constructor(options, callback) {\n    super();\n\n    options = {\n      allowSynchronousEvents: true,\n      autoPong: true,\n      maxPayload: 100 * 1024 * 1024,\n      skipUTF8Validation: false,\n      perMessageDeflate: false,\n      handleProtocols: null,\n      clientTracking: true,\n      verifyClient: null,\n      noServer: false,\n      backlog: null, // use default (511 as implemented in net.js)\n      server: null,\n      host: null,\n      path: null,\n      port: null,\n      WebSocket,\n      ...options\n    };\n\n    if (\n      (options.port == null && !options.server && !options.noServer) ||\n      (options.port != null && (options.server || options.noServer)) ||\n      (options.server && options.noServer)\n    ) {\n      throw new TypeError(\n        'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n          'must be specified'\n      );\n    }\n\n    if (options.port != null) {\n      this._server = http.createServer((req, res) => {\n        const body = http.STATUS_CODES[426];\n\n        res.writeHead(426, {\n          'Content-Length': body.length,\n          'Content-Type': 'text/plain'\n        });\n        res.end(body);\n      });\n      this._server.listen(\n        options.port,\n        options.host,\n        options.backlog,\n        callback\n      );\n    } else if (options.server) {\n      this._server = options.server;\n    }\n\n    if (this._server) {\n      const emitConnection = this.emit.bind(this, 'connection');\n\n      this._removeListeners = addListeners(this._server, {\n        listening: this.emit.bind(this, 'listening'),\n        error: this.emit.bind(this, 'error'),\n        upgrade: (req, socket, head) => {\n          this.handleUpgrade(req, socket, head, emitConnection);\n        }\n      });\n    }\n\n    if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n    if (options.clientTracking) {\n      this.clients = new Set();\n      this._shouldEmitClose = false;\n    }\n\n    this.options = options;\n    this._state = RUNNING;\n  }\n\n  /**\n   * Returns the bound address, the address family name, and port of the server\n   * as reported by the operating system if listening on an IP socket.\n   * If the server is listening on a pipe or UNIX domain socket, the name is\n   * returned as a string.\n   *\n   * @return {(Object|String|null)} The address of the server\n   * @public\n   */\n  address() {\n    if (this.options.noServer) {\n      throw new Error('The server is operating in \"noServer\" mode');\n    }\n\n    if (!this._server) return null;\n    return this._server.address();\n  }\n\n  /**\n   * Stop the server from accepting new connections and emit the `'close'` event\n   * when all existing connections are closed.\n   *\n   * @param {Function} [cb] A one-time listener for the `'close'` event\n   * @public\n   */\n  close(cb) {\n    if (this._state === CLOSED) {\n      if (cb) {\n        this.once('close', () => {\n          cb(new Error('The server is not running'));\n        });\n      }\n\n      process.nextTick(emitClose, this);\n      return;\n    }\n\n    if (cb) this.once('close', cb);\n\n    if (this._state === CLOSING) return;\n    this._state = CLOSING;\n\n    if (this.options.noServer || this.options.server) {\n      if (this._server) {\n        this._removeListeners();\n        this._removeListeners = this._server = null;\n      }\n\n      if (this.clients) {\n        if (!this.clients.size) {\n          process.nextTick(emitClose, this);\n        } else {\n          this._shouldEmitClose = true;\n        }\n      } else {\n        process.nextTick(emitClose, this);\n      }\n    } else {\n      const server = this._server;\n\n      this._removeListeners();\n      this._removeListeners = this._server = null;\n\n      //\n      // The HTTP/S server was created internally. Close it, and rely on its\n      // `'close'` event.\n      //\n      server.close(() => {\n        emitClose(this);\n      });\n    }\n  }\n\n  /**\n   * See if a given request should be handled by this server instance.\n   *\n   * @param {http.IncomingMessage} req Request object to inspect\n   * @return {Boolean} `true` if the request is valid, else `false`\n   * @public\n   */\n  shouldHandle(req) {\n    if (this.options.path) {\n      const index = req.url.indexOf('?');\n      const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n      if (pathname !== this.options.path) return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Handle a HTTP Upgrade request.\n   *\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @public\n   */\n  handleUpgrade(req, socket, head, cb) {\n    socket.on('error', socketOnError);\n\n    const key = req.headers['sec-websocket-key'];\n    const upgrade = req.headers.upgrade;\n    const version = +req.headers['sec-websocket-version'];\n\n    if (req.method !== 'GET') {\n      const message = 'Invalid HTTP method';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n      return;\n    }\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      const message = 'Invalid Upgrade header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (key === undefined || !keyRegex.test(key)) {\n      const message = 'Missing or invalid Sec-WebSocket-Key header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (version !== 13 && version !== 8) {\n      const message = 'Missing or invalid Sec-WebSocket-Version header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {\n        'Sec-WebSocket-Version': '13, 8'\n      });\n      return;\n    }\n\n    if (!this.shouldHandle(req)) {\n      abortHandshake(socket, 400);\n      return;\n    }\n\n    const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n    let protocols = new Set();\n\n    if (secWebSocketProtocol !== undefined) {\n      try {\n        protocols = subprotocol.parse(secWebSocketProtocol);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Protocol header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n    const extensions = {};\n\n    if (\n      this.options.perMessageDeflate &&\n      secWebSocketExtensions !== undefined\n    ) {\n      const perMessageDeflate = new PerMessageDeflate(\n        this.options.perMessageDeflate,\n        true,\n        this.options.maxPayload\n      );\n\n      try {\n        const offers = extension.parse(secWebSocketExtensions);\n\n        if (offers[PerMessageDeflate.extensionName]) {\n          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n        }\n      } catch (err) {\n        const message =\n          'Invalid or unacceptable Sec-WebSocket-Extensions header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    //\n    // Optionally call external client verification handler.\n    //\n    if (this.options.verifyClient) {\n      const info = {\n        origin:\n          req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n        secure: !!(req.socket.authorized || req.socket.encrypted),\n        req\n      };\n\n      if (this.options.verifyClient.length === 2) {\n        this.options.verifyClient(info, (verified, code, message, headers) => {\n          if (!verified) {\n            return abortHandshake(socket, code || 401, message, headers);\n          }\n\n          this.completeUpgrade(\n            extensions,\n            key,\n            protocols,\n            req,\n            socket,\n            head,\n            cb\n          );\n        });\n        return;\n      }\n\n      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n    }\n\n    this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n  }\n\n  /**\n   * Upgrade the connection to WebSocket.\n   *\n   * @param {Object} extensions The accepted extensions\n   * @param {String} key The value of the `Sec-WebSocket-Key` header\n   * @param {Set} protocols The subprotocols\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @throws {Error} If called more than once with the same socket\n   * @private\n   */\n  completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n    //\n    // Destroy the socket if the client has already sent a FIN packet.\n    //\n    if (!socket.readable || !socket.writable) return socket.destroy();\n\n    if (socket[kWebSocket]) {\n      throw new Error(\n        'server.handleUpgrade() was called more than once with the same ' +\n          'socket, possibly due to a misconfiguration'\n      );\n    }\n\n    if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    const headers = [\n      'HTTP/1.1 101 Switching Protocols',\n      'Upgrade: websocket',\n      'Connection: Upgrade',\n      `Sec-WebSocket-Accept: ${digest}`\n    ];\n\n    const ws = new this.options.WebSocket(null, undefined, this.options);\n\n    if (protocols.size) {\n      //\n      // Optionally call external protocol selection handler.\n      //\n      const protocol = this.options.handleProtocols\n        ? this.options.handleProtocols(protocols, req)\n        : protocols.values().next().value;\n\n      if (protocol) {\n        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n        ws._protocol = protocol;\n      }\n    }\n\n    if (extensions[PerMessageDeflate.extensionName]) {\n      const params = extensions[PerMessageDeflate.extensionName].params;\n      const value = extension.format({\n        [PerMessageDeflate.extensionName]: [params]\n      });\n      headers.push(`Sec-WebSocket-Extensions: ${value}`);\n      ws._extensions = extensions;\n    }\n\n    //\n    // Allow external modification/inspection of handshake headers.\n    //\n    this.emit('headers', headers, req);\n\n    socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n    socket.removeListener('error', socketOnError);\n\n    ws.setSocket(socket, head, {\n      allowSynchronousEvents: this.options.allowSynchronousEvents,\n      maxPayload: this.options.maxPayload,\n      skipUTF8Validation: this.options.skipUTF8Validation\n    });\n\n    if (this.clients) {\n      this.clients.add(ws);\n      ws.on('close', () => {\n        this.clients.delete(ws);\n\n        if (this._shouldEmitClose && !this.clients.size) {\n          process.nextTick(emitClose, this);\n        }\n      });\n    }\n\n    cb(ws, req);\n  }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n *     called\n * @private\n */\nfunction addListeners(server, map) {\n  for (const event of Object.keys(map)) server.on(event, map[event]);\n\n  return function removeListeners() {\n    for (const event of Object.keys(map)) {\n      server.removeListener(event, map[event]);\n    }\n  };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n  server._state = CLOSED;\n  server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n  this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n  //\n  // The socket is writable unless the user destroyed or ended it before calling\n  // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n  // error. Handling this does not make much sense as the worst that can happen\n  // is that some of the data written by the user might be discarded due to the\n  // call to `socket.end()` below, which triggers an `'error'` event that in\n  // turn causes the socket to be destroyed.\n  //\n  message = message || http.STATUS_CODES[code];\n  headers = {\n    Connection: 'close',\n    'Content-Type': 'text/html',\n    'Content-Length': Buffer.byteLength(message),\n    ...headers\n  };\n\n  socket.once('finish', socket.destroy);\n\n  socket.end(\n    `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n      Object.keys(headers)\n        .map((h) => `${h}: ${headers[h]}`)\n        .join('\\r\\n') +\n      '\\r\\n\\r\\n' +\n      message\n  );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @param {Object} [headers] The HTTP response headers\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(\n  server,\n  req,\n  socket,\n  code,\n  message,\n  headers\n) {\n  if (server.listenerCount('wsClientError')) {\n    const err = new Error(message);\n    Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n    server.emit('wsClientError', err, socket, req);\n  } else {\n    abortHandshake(socket, code, message, headers);\n  }\n}\n", "\n// ETA calculation\nclass ETA{\n\n    constructor(length, initTime, initValue){\n        // size of eta buffer\n        this.etaBufferLength = length || 100;\n\n        // eta buffer with initial values\n        this.valueBuffer = [initValue];\n        this.timeBuffer = [initTime];\n\n        // eta time value\n        this.eta = '0';\n    }\n\n    // add new values to calculation buffer\n    update(time, value, total){\n        this.valueBuffer.push(value);\n        this.timeBuffer.push(time);\n\n        // trigger recalculation\n        this.calculate(total-value);\n    }\n\n    // fetch estimated time\n    getTime(){\n        return this.eta;\n    }\n\n    // eta calculation - request number of remaining events\n    calculate(remaining){\n        // get number of samples in eta buffer\n        const currentBufferSize = this.valueBuffer.length;\n        const buffer = Math.min(this.etaBufferLength, currentBufferSize);\n\n        const v_diff = this.valueBuffer[currentBufferSize - 1] - this.valueBuffer[currentBufferSize - buffer];\n        const t_diff = this.timeBuffer[currentBufferSize - 1] - this.timeBuffer[currentBufferSize - buffer];\n\n        // get progress per ms\n        const vt_rate = v_diff/t_diff;\n\n        // strip past elements\n        this.valueBuffer = this.valueBuffer.slice(-this.etaBufferLength);\n        this.timeBuffer  = this.timeBuffer.slice(-this.etaBufferLength);\n\n        // eq: vt_rate *x = total\n        const eta = Math.ceil(remaining/vt_rate/1000);\n\n        // check values\n        if (isNaN(eta)){\n            this.eta = 'NULL';\n\n        // +/- Infinity --- NaN already handled\n        }else if (!isFinite(eta)){\n            this.eta = 'INF';\n\n        // > 10M s ? - set upper display limit ~115days (1e7/60/60/24)\n        }else if (eta > 1e7){\n            this.eta = 'INF';\n\n        // negative ?\n        }else if (eta < 0){\n            this.eta = 0;\n\n        }else{\n            // assign\n            this.eta = eta;\n        }\n    }\n}\n\nmodule.exports = ETA;", "const _readline = require('readline');\n\n// low-level terminal interactions\nclass Terminal{\n\n    constructor(outputStream){\n        this.stream = outputStream;\n\n        // default: line wrapping enabled\n        this.linewrap = true;\n\n        // current, relative y position\n        this.dy = 0;\n    }\n\n    // save cursor position + settings\n    cursorSave(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // save position\n        this.stream.write('\\x1B7');\n    }\n\n    // restore last cursor position + settings\n    cursorRestore(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // restore cursor\n        this.stream.write('\\x1B8');\n    }\n\n    // show/hide cursor\n    cursor(enabled){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        if (enabled){\n            this.stream.write('\\x1B[?25h');\n        }else{\n            this.stream.write('\\x1B[?25l');\n        }\n    }\n\n    // change cursor positionn\n    cursorTo(x=null, y=null){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // move cursor absolute\n        _readline.cursorTo(this.stream, x, y);\n    }\n\n    // change relative cursor position\n    cursorRelative(dx=null, dy=null){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // store current position\n        this.dy = this.dy + dy;\n        \n        // move cursor relative\n        _readline.moveCursor(this.stream, dx, dy);\n    }\n\n    // relative reset\n    cursorRelativeReset(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // move cursor to initial line\n        _readline.moveCursor(this.stream, 0, -this.dy);\n\n        // first char\n        _readline.cursorTo(this.stream, 0, null);\n\n        // reset counter\n        this.dy = 0;\n    }\n\n    // clear to the right from cursor\n    clearRight(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        _readline.clearLine(this.stream, 1);\n    }\n\n    // clear the full line\n    clearLine(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        _readline.clearLine(this.stream, 0);\n    }\n\n    // clear everyting beyond the current line\n    clearBottom(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        _readline.clearScreenDown(this.stream);\n    }\n\n    // add new line; increment counter\n    newline(){\n        this.stream.write('\\n');\n        this.dy++;\n    }\n\n    // write content to output stream\n    // @TODO use string-width to strip length\n    write(s, rawWrite=false){\n        // line wrapping enabled ? trim output\n        // this is just a fallback mechanism in case user enabled line-wrapping via options or set it to auto\n        if (this.linewrap === true && rawWrite === false){\n            this.stream.write(s.substr(0, this.getWidth()));\n\n        // standard behaviour with disabled linewrapping\n        }else{\n            this.stream.write(s);\n        }\n    }\n\n    // control line wrapping\n    lineWrapping(enabled){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // store state\n        this.linewrap = enabled;\n        if (enabled){\n            this.stream.write('\\x1B[?7h');\n        }else{\n            this.stream.write('\\x1B[?7l');\n        }\n    }\n\n    // tty environment ?\n    isTTY(){\n        return (this.stream.isTTY === true);\n    }\n\n    // get terminal width\n    getWidth(){\n        // set max width to 80 in tty-mode and 200 in notty-mode\n        return this.stream.columns || (this.stream.isTTY ? 80 : 200);\n    }\n}\n\nmodule.exports = Terminal;\n", "'use strict';\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n", "'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n", "/* eslint-disable yoda */\n'use strict';\n\nconst isFullwidthCodePoint = codePoint => {\n\tif (Number.isNaN(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tcodePoint >= 0x1100 && (\n\t\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nmodule.exports = isFullwidthCodePoint;\nmodule.exports.default = isFullwidthCodePoint;\n", "\"use strict\";\n\nmodule.exports = function () {\n  // https://mths.be/emoji\n  return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n", "'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\nconst emojiRegex = require('emoji-regex');\n\nconst stringWidth = string => {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), '  ');\n\n\tlet width = 0;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst code = string.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n\nmodule.exports = stringWidth;\n// TODO: remove this in the next major version\nmodule.exports.default = stringWidth;\n", "// default value format (apply autopadding)\n\n// format valueset\nmodule.exports = function formatValue(v, options, type){\n    // no autopadding ? passthrough\n    if (options.autopadding !== true){\n        return v;\n    }\n\n    // padding\n    function autopadding(value, length){\n        return (options.autopaddingChar + value).slice(-length);\n    }\n\n    switch (type){\n        case 'percentage':\n            return autopadding(v, 3);\n\n        default:\n            return v;\n    }\n}", "// format bar\nmodule.exports = function formatBar(progress, options){\n    // calculate barsize\n    const completeSize = Math.round(progress*options.barsize);\n    const incompleteSize = options.barsize-completeSize;\n\n   // generate bar string by stripping the pre-rendered strings\n   return   options.barCompleteString.substr(0, completeSize) +\n            options.barGlue +\n            options.barIncompleteString.substr(0, incompleteSize);\n}", "// default time format\n\n// format a number of seconds into hours and minutes as appropriate\nmodule.exports = function formatTime(t, options, roundToMultipleOf){\n    function round(input) {\n        if (roundToMultipleOf) {\n            return roundToMultipleOf * Math.round(input / roundToMultipleOf);\n        } else {\n            return input\n        }\n    }\n\n    // leading zero padding\n    function autopadding(v){\n        return (options.autopaddingChar + v).slice(-2);\n    }\n\n    // > 1h ?\n    if (t > 3600) {\n        return autopadding(Math.floor(t / 3600)) + 'h' + autopadding(round((t % 3600) / 60)) + 'm';\n\n    // > 60s ?\n    } else if (t > 60) {\n        return autopadding(Math.floor(t / 60)) + 'm' + autopadding(round((t % 60))) + 's';\n\n    // > 10s ?\n    } else if (t > 10) {\n        return autopadding(round(t)) + 's';\n\n    // default: don't apply round to multiple\n    }else{\n        return autopadding(t) + 's';\n    }\n}", "const _stringWidth = require('string-width');\nconst _defaultFormatValue = require('./format-value');\nconst _defaultFormatBar = require('./format-bar');\nconst _defaultFormatTime = require('./format-time');\n\n// generic formatter\nmodule.exports = function defaultFormatter(options, params, payload){\n\n    // copy format string\n    let s = options.format;\n\n    // custom time format set ?\n    const formatTime = options.formatTime || _defaultFormatTime;\n    \n    // custom value format set ?\n    const formatValue = options.formatValue || _defaultFormatValue;\n\n    // custom bar format set ?\n    const formatBar = options.formatBar || _defaultFormatBar;\n\n    // calculate progress in percent\n    const percentage =  Math.floor(params.progress*100) + '';\n\n    // bar stopped and stopTime set ?\n    const stopTime = params.stopTime || Date.now();\n\n    // calculate elapsed time\n    const elapsedTime = Math.round((stopTime - params.startTime)/1000);\n\n    // merges data from payload and calculated\n    const context = Object.assign({}, payload, {\n        bar:                    formatBar(params.progress, options),\n\n        percentage:             formatValue(percentage, options, 'percentage'),\n        total:                  formatValue(params.total, options, 'total'),\n        value:                  formatValue(params.value, options, 'value'),\n\n        eta:                    formatValue(params.eta, options, 'eta'),\n        eta_formatted:          formatTime(params.eta, options, 5),\n        \n        duration:               formatValue(elapsedTime, options, 'duration'),\n        duration_formatted:     formatTime(elapsedTime, options, 1)\n    });\n\n    // assign placeholder tokens\n    s = s.replace(/\\{(\\w+)\\}/g, function(match, key){\n        // key exists within payload/context\n        if (typeof context[key] !== 'undefined') {\n            return context[key];\n        }\n\n        // no changes to unknown values\n        return match;\n    });\n\n    // calculate available whitespace (2 characters margin of error)\n    const fullMargin = Math.max(0, params.maxWidth - _stringWidth(s) -2);\n    const halfMargin = Math.floor(fullMargin / 2);\n\n    // distribute available whitespace according to position\n    switch (options.align) {\n\n        // fill start-of-line with whitespaces\n        case 'right':\n            s = (fullMargin > 0) ? ' '.repeat(fullMargin) + s : s;\n            break;\n\n        // distribute whitespaces to left+right\n        case 'center':\n            s = (halfMargin > 0) ? ' '.repeat(halfMargin) + s : s;\n            break;\n\n        // default: left align, no additional whitespaces\n        case 'left':\n        default:\n            break;\n    }\n\n    return s;\n}\n", "// utility to merge defaults\nfunction mergeOption(v, defaultValue){\n    if (typeof v === 'undefined' || v === null){\n        return defaultValue;\n    }else{\n        return v;\n    }\n}\n\nmodule.exports = {\n    // set global options\n    parse: function parse(rawOptions, preset){\n\n        // options storage\n        const options = {};\n\n        // merge preset\n        const opt = Object.assign({}, preset, rawOptions);\n\n        // the max update rate in fps (redraw will only triggered on value change)\n        options.throttleTime = 1000 / (mergeOption(opt.fps, 10));\n\n        // the output stream to write on\n        options.stream = mergeOption(opt.stream, process.stderr);\n\n        // external terminal provided ?\n        options.terminal = mergeOption(opt.terminal, null);\n\n        // clear on finish ?\n        options.clearOnComplete = mergeOption(opt.clearOnComplete, false);\n\n        // stop on finish ?\n        options.stopOnComplete = mergeOption(opt.stopOnComplete, false);\n\n        // size of the progressbar in chars\n        options.barsize = mergeOption(opt.barsize, 40);\n\n        // position of the progress bar - 'left' (default), 'right' or 'center'\n        options.align = mergeOption(opt.align, 'left');\n\n        // hide the cursor ?\n        options.hideCursor = mergeOption(opt.hideCursor, false);\n\n        // disable linewrapping ?\n        options.linewrap = mergeOption(opt.linewrap, false);\n\n        // glue sequence (control chars) between bar elements ?\n        options.barGlue = mergeOption(opt.barGlue, '');\n\n        // bar chars\n        options.barCompleteChar = mergeOption(opt.barCompleteChar, '=');\n        options.barIncompleteChar = mergeOption(opt.barIncompleteChar, '-');\n\n        // the bar format\n        options.format = mergeOption(opt.format, 'progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}');\n\n        // external time-format provided ?\n        options.formatTime = mergeOption(opt.formatTime, null);\n\n        // external value-format provided ?\n        options.formatValue = mergeOption(opt.formatValue, null);\n\n        // external bar-format provided ?\n        options.formatBar = mergeOption(opt.formatBar, null);\n\n        // the number of results to average ETA over\n        options.etaBufferLength = mergeOption(opt.etaBuffer, 10);\n\n        // automatic eta updates based on fps\n        options.etaAsynchronousUpdate = mergeOption(opt.etaAsynchronousUpdate, false);\n\n        // progress calculation relative to start value ? default start at 0\n        options.progressCalculationRelative = mergeOption(opt.progressCalculationRelative, false);\n\n        // allow synchronous updates ?\n        options.synchronousUpdate = mergeOption(opt.synchronousUpdate, true);\n\n        // notty mode\n        options.noTTYOutput = mergeOption(opt.noTTYOutput, false);\n\n        // schedule - 2s\n        options.notTTYSchedule = mergeOption(opt.notTTYSchedule, 2000);\n        \n        // emptyOnZero - false\n        options.emptyOnZero = mergeOption(opt.emptyOnZero, false);\n\n        // force bar redraw even if progress did not change\n        options.forceRedraw = mergeOption(opt.forceRedraw, false);\n\n        // automated padding to fixed width ?\n        options.autopadding = mergeOption(opt.autopadding, false);\n\n        // stop bar on SIGINT/SIGTERM to restore cursor settings ?\n        options.gracefulExit = mergeOption(opt.gracefulExit, false);\n\n        return options;\n    },\n\n    // derived options: instance specific, has to be created for every bar element\n    assignDerivedOptions: function assignDerivedOptions(options){\n        // pre-render bar strings (performance)\n        options.barCompleteString = options.barCompleteChar.repeat(options.barsize + 1);\n        options.barIncompleteString = options.barIncompleteChar.repeat(options.barsize + 1);\n\n        // autopadding character - empty in case autopadding is disabled\n        options.autopaddingChar = options.autopadding ? mergeOption(options.autopaddingChar, '   ') : '';\n\n        return options;\n    }\n};", "const _ETA = require('./eta');\nconst _Terminal = require('./terminal');\nconst _formatter = require('./formatter');\nconst _options = require('./options');\nconst _EventEmitter = require('events');\n\n// Progress-Bar constructor\nmodule.exports = class GenericBar extends _EventEmitter{\n\n    constructor(options){\n        super();\n\n        // store options and assign derived ones (instance specific)\n        this.options = _options.assignDerivedOptions(options);\n\n        // store terminal instance\n        this.terminal = (this.options.terminal) ? this.options.terminal : new _Terminal(this.options.stream);\n\n        // the current bar value\n        this.value = 0;\n\n        // bar start value (used for progress calculation)\n        this.startValue = 0;\n\n        // the end value of the bar\n        this.total = 100;\n\n        // last drawn string - only render on change!\n        this.lastDrawnString = null;\n\n        // start time (used for eta calculation)\n        this.startTime = null;\n\n        // stop time (used for duration calculation)\n        this.stopTime = null;\n\n        // last update time\n        this.lastRedraw = Date.now();\n\n        // default eta calculator (will be re-create on start)\n        this.eta = new _ETA(this.options.etaBufferLength, 0, 0);\n\n        // payload data\n        this.payload = {};\n\n        // progress bar active ?\n        this.isActive = false;\n\n        // use default formatter or custom one ?\n        this.formatter = (typeof this.options.format === 'function') ? this.options.format : _formatter;\n    }\n\n    // internal render function\n    render(forceRendering=false){\n\n        // formatter params\n        const params = {\n            progress: this.getProgress(),\n            eta: this.eta.getTime(),\n            startTime: this.startTime,\n            stopTime: this.stopTime,\n            total: this.total,\n            value: this.value,\n            maxWidth: this.terminal.getWidth()\n        };\n\n        // automatic eta update ? (long running processes)\n        if (this.options.etaAsynchronousUpdate){\n            this.updateETA();\n        }\n\n        // format string\n        const s = this.formatter(this.options, params, this.payload);\n\n        const forceRedraw = forceRendering || this.options.forceRedraw\n            // force redraw in notty-mode!\n            || (this.options.noTTYOutput && !this.terminal.isTTY());\n\n        // string changed ? only trigger redraw on change!\n        if (forceRedraw || this.lastDrawnString != s){\n            // trigger event\n            this.emit('redraw-pre');\n\n            // set cursor to start of line\n            this.terminal.cursorTo(0, null);\n\n            // write output\n            this.terminal.write(s);\n\n            // clear to the right from cursor\n            this.terminal.clearRight();\n\n            // store string\n            this.lastDrawnString = s;\n\n            // set last redraw time\n            this.lastRedraw = Date.now();\n\n            // trigger event\n            this.emit('redraw-post');\n        }\n    }\n\n    // start the progress bar\n    start(total, startValue, payload){\n        // set initial values\n        this.value = startValue || 0;\n        this.total = (typeof total !== 'undefined' && total >= 0) ? total : 100;\n\n        // set start value for progress calculation\n        this.startValue = (startValue || 0);\n\n        // store payload (optional)\n        this.payload = payload || {};\n\n        // store start time for duration+eta calculation\n        this.startTime = Date.now();\n\n        // reset stop time for 're-start' scenario (used for duration calculation)\n        this.stopTime = null;\n\n        // reset string line buffer (redraw detection)\n        this.lastDrawnString = '';\n\n        // initialize eta buffer\n        this.eta = new _ETA(this.options.etaBufferLength, this.startTime, this.value);\n\n        // set flag\n        this.isActive = true;\n\n        // start event\n        this.emit('start', total, startValue);\n    }\n\n    // stop the bar\n    stop(){\n        // set flag\n        this.isActive = false;\n        \n        // store stop timestamp to get total duration\n        this.stopTime = Date.now();\n\n        // stop event\n        this.emit('stop', this.total, this.value);\n    }\n\n    // update the bar value\n    // update(value, payload)\n    // update(payload)\n    update(arg0, arg1 = {}){\n        // value set ?\n        // update(value, [payload]);\n        if (typeof arg0 === 'number') {\n            // update value\n            this.value = arg0;\n\n            // add new value; recalculate eta\n            this.eta.update(Date.now(), arg0, this.total);\n        }\n\n        // extract payload\n        // update(value, payload)\n        // update(payload)\n        const payloadData = ((typeof arg0 === 'object') ? arg0 : arg1) || {};\n\n        // update event (before stop() is called)\n        this.emit('update', this.total, this.value);\n\n        // merge payload\n        for (const key in payloadData){\n            this.payload[key] = payloadData[key];\n        }\n\n        // limit reached ? autostop set ?\n        if (this.value >= this.getTotal() && this.options.stopOnComplete) {\n            this.stop();\n        }\n    }\n\n    // calculate the actual progress value\n    getProgress(){\n        // calculate the normalized current progress\n        let progress = (this.value/this.total);\n\n        // use relative progress calculation ? range between startValue and total is then used as 100%\n        // startValue (offset) is ignored for calculations\n        if (this.options.progressCalculationRelative){\n            progress = (this.value-this.startValue)/(this.total-this.startValue);\n        }\n\n        // handle NaN Errors caused by total=0. Set to complete in this case\n        if (isNaN(progress)){\n            progress = (this.options && this.options.emptyOnZero) ? 0.0 : 1.0;\n        }\n\n        // limiter\n        progress = Math.min(Math.max(progress, 0.0), 1.0);\n\n        return progress;\n    }\n\n    // update the bar value\n    // increment(delta, payload)\n    // increment(payload)\n    increment(arg0 = 1, arg1 = {}){\n        // increment([payload]) => step=1\n        // handle the use case when `step` is omitted but payload is passed\n        if (typeof arg0 === 'object') {\n            this.update(this.value + 1, arg0);\n        \n        // increment([step=1], [payload={}])\n        }else{\n            this.update(this.value + arg0, arg1);\n        }\n    }\n\n    // get the total (limit) value\n    getTotal(){\n        return this.total;\n    }\n\n    // set the total (limit) value\n    setTotal(total){\n        if (typeof total !== 'undefined' && total >= 0){\n            this.total = total;\n        }\n    }\n\n    // force eta calculation update (long running processes)\n    updateETA(){\n        // add new value; recalculate eta\n        this.eta.update(Date.now(), this.value, this.total);\n    }\n}\n", "const _GenericBar = require('./generic-bar');\nconst _options = require('./options');\n\n// Progress-Bar constructor\nmodule.exports = class SingleBar extends _GenericBar{\n\n    constructor(options, preset){\n        super(_options.parse(options, preset));\n\n        // the update timer\n        this.timer = null;\n\n        // disable synchronous updates in notty mode\n        if (this.options.noTTYOutput && this.terminal.isTTY() === false){\n            this.options.synchronousUpdate = false;\n        }\n\n        // update interval\n        this.schedulingRate = (this.terminal.isTTY() ? this.options.throttleTime : this.options.notTTYSchedule);\n\n        // callback used for gracefulExit\n        this.sigintCallback = null;\n    }\n\n    // internal render function\n    render(){\n        // stop timer\n        if (this.timer){\n            clearTimeout(this.timer);\n            this.timer = null;\n        }\n\n        // run internal rendering\n        super.render();\n\n        // add new line in notty mode!\n        if (this.options.noTTYOutput && this.terminal.isTTY() === false){\n            this.terminal.newline();\n        }\n\n        // next update\n        this.timer = setTimeout(this.render.bind(this), this.schedulingRate);\n    }\n\n    update(current, payload){\n        // timer inactive ?\n        if (!this.timer) {\n            return;\n        }\n\n        super.update(current, payload);\n\n        // trigger synchronous update ?\n        // check for throttle time \n        if (this.options.synchronousUpdate && (this.lastRedraw + this.options.throttleTime*2) < Date.now()){\n            // force update\n            this.render();\n        }\n    }\n\n    // start the progress bar\n    start(total, startValue, payload){\n        // progress updates are only visible in TTY mode!\n        if (this.options.noTTYOutput === false && this.terminal.isTTY() === false){\n            return;\n        }\n\n        // add handler to restore cursor settings (stop the bar) on SIGINT/SIGTERM ?\n        if (this.sigintCallback === null && this.options.gracefulExit){\n            this.sigintCallback = this.stop.bind(this);\n            process.once('SIGINT', this.sigintCallback);\n            process.once('SIGTERM', this.sigintCallback);\n        }\n\n        // save current cursor settings\n        this.terminal.cursorSave();\n\n        // hide the cursor ?\n        if (this.options.hideCursor === true){\n            this.terminal.cursor(false);\n        }\n\n        // disable line wrapping ?\n        if (this.options.linewrap === false){\n            this.terminal.lineWrapping(false);\n        }\n\n        // initialize bar\n        super.start(total, startValue, payload);\n\n        // redraw on start!\n        this.render();\n    }\n\n    // stop the bar\n    stop(){\n        // timer inactive ?\n        if (!this.timer) {\n            return;\n        }\n        \n        // remove sigint listener\n        if (this.sigintCallback){\n            process.removeListener('SIGINT', this.sigintCallback);\n            process.removeListener('SIGTERM', this.sigintCallback);\n            this.sigintCallback = null;\n        }\n\n        // trigger final rendering\n        this.render();\n\n        // restore state\n        super.stop();\n\n        // stop timer\n        clearTimeout(this.timer);\n        this.timer = null;\n\n        // cursor hidden ?\n        if (this.options.hideCursor === true){\n            this.terminal.cursor(true);\n        }\n\n        // re-enable line wrapping ?\n        if (this.options.linewrap === false){\n            this.terminal.lineWrapping(true);\n        }\n\n        // restore cursor on complete (position + settings)\n        this.terminal.cursorRestore();\n\n        // clear line on complete ?\n        if (this.options.clearOnComplete){\n            this.terminal.cursorTo(0, null);\n            this.terminal.clearLine();\n        }else{\n            // new line on complete\n            this.terminal.newline();\n        }\n    }\n}", "const _Terminal = require('./terminal');\nconst _BarElement = require('./generic-bar');\nconst _options = require('./options');\nconst _EventEmitter = require('events');\n\n// Progress-Bar constructor\nmodule.exports = class MultiBar extends _EventEmitter{\n\n    constructor(options, preset){\n        super();\n\n        // list of bars\n        this.bars = [];\n\n        // parse+store options\n        this.options = _options.parse(options, preset);\n\n        // disable synchronous updates\n        this.options.synchronousUpdate = false;\n\n        // store terminal instance\n        this.terminal = (this.options.terminal) ? this.options.terminal : new _Terminal(this.options.stream);\n\n        // the update timer\n        this.timer = null;\n\n        // progress bar active ?\n        this.isActive = false;\n\n        // update interval\n        this.schedulingRate = (this.terminal.isTTY() ? this.options.throttleTime : this.options.notTTYSchedule);\n\n        // logging output buffer\n        this.loggingBuffer = [];\n\n        // callback used for gracefulExit\n        this.sigintCallback = null;\n    }\n\n    // add a new bar to the stack\n    create(total, startValue, payload, barOptions={}){\n        // create new bar element and merge global options + overrides\n        // use the same global terminal instance for all instances\n        const bar = new _BarElement(Object.assign(\n            {}, \n\n            // global options\n            this.options, \n\n            // terminal instance\n            {\n                terminal: this.terminal\n            },\n\n            // overrides\n            barOptions,\n        ));\n\n        // store bar\n        this.bars.push(bar);\n\n        // progress updates are only visible in TTY mode!\n        if (this.options.noTTYOutput === false && this.terminal.isTTY() === false){\n            return bar;\n        }\n\n        // add handler to restore cursor settings (stop the bar) on SIGINT/SIGTERM ?\n        if (this.sigintCallback === null && this.options.gracefulExit){\n            this.sigintCallback = this.stop.bind(this);\n            process.once('SIGINT', this.sigintCallback);\n            process.once('SIGTERM', this.sigintCallback);\n        }\n        \n        // multiprogress already active ?\n        if (!this.isActive){\n            // hide the cursor ?\n            if (this.options.hideCursor === true){\n                this.terminal.cursor(false);\n            }\n\n            // disable line wrapping ?\n            if (this.options.linewrap === false){\n                this.terminal.lineWrapping(false);\n            }\n    \n            // initialize update timer\n            this.timer = setTimeout(this.update.bind(this), this.schedulingRate);\n        }\n\n        // set flag\n        this.isActive = true;\n\n        // start progress bar\n        bar.start(total, startValue, payload);\n\n        // trigger event\n        this.emit('start');\n\n        // return new instance\n        return bar;\n    }\n\n    // remove a bar from the stack\n    remove(bar){\n        // find element\n        const index = this.bars.indexOf(bar);\n\n        // element found ?\n        if (index < 0){\n            return false;\n        }\n\n        // remove element\n        this.bars.splice(index, 1);\n\n        // force update\n        this.update();\n\n        // clear bottom\n        this.terminal.newline();\n        this.terminal.clearBottom();\n\n        return true;\n    }\n\n    // internal update routine\n    update(){\n        // stop timer\n        if (this.timer){\n            clearTimeout(this.timer);\n            this.timer = null;\n        }\n\n        // trigger event\n        this.emit('update-pre');\n        \n        // reset cursor\n        this.terminal.cursorRelativeReset();\n\n        // trigger event\n        this.emit('redraw-pre');\n\n        // content within logging buffer ?\n        if (this.loggingBuffer.length > 0){\n            this.terminal.clearLine();\n\n            // flush logging buffer and write content to terminal\n            while (this.loggingBuffer.length > 0){\n                this.terminal.write(this.loggingBuffer.shift(), true);\n            }\n        }\n\n        // update each bar\n        for (let i=0; i< this.bars.length; i++){\n            // add new line ?\n            if (i > 0){\n                this.terminal.newline();\n            }\n\n            // render\n            this.bars[i].render();\n        }\n\n        // trigger event\n        this.emit('redraw-post');\n\n        // add new line in notty mode!\n        if (this.options.noTTYOutput && this.terminal.isTTY() === false){\n            this.terminal.newline();\n            this.terminal.newline();\n        }\n\n        // next update\n        this.timer = setTimeout(this.update.bind(this), this.schedulingRate);\n\n        // trigger event\n        this.emit('update-post');\n\n        // stop if stopOnComplete and all bars stopped\n        if (this.options.stopOnComplete && !this.bars.find(bar => bar.isActive)) {\n            this.stop();\n        }\n    }\n\n    stop(){\n\n        // stop timer\n        clearTimeout(this.timer);\n        this.timer = null;\n\n        // remove sigint listener\n        if (this.sigintCallback){\n            process.removeListener('SIGINT', this.sigintCallback);\n            process.removeListener('SIGTERM', this.sigintCallback);\n            this.sigintCallback = null;\n        }\n\n        // set flag\n        this.isActive = false;\n\n        // cursor hidden ?\n        if (this.options.hideCursor === true){\n            this.terminal.cursor(true);\n        }\n\n        // re-enable line wrpaping ?\n        if (this.options.linewrap === false){\n            this.terminal.lineWrapping(true);\n        }\n\n        // reset cursor\n        this.terminal.cursorRelativeReset();\n\n        // trigger event\n        this.emit('stop-pre-clear');\n\n        // clear line on complete ?\n        if (this.options.clearOnComplete){\n            // clear all bars\n            this.terminal.clearBottom();\n            \n        // or show final progress ?\n        }else{\n            // update each bar\n            for (let i=0; i< this.bars.length; i++){\n                // add new line ?\n                if (i > 0){\n                    this.terminal.newline();\n                }\n\n                // trigger final rendering\n                this.bars[i].render();\n\n                // stop\n                this.bars[i].stop();\n            }\n\n            // new line on complete\n            this.terminal.newline();\n        }\n\n        // trigger event\n        this.emit('stop');\n    }\n\n    log(s){\n        // push content into logging buffer\n        this.loggingBuffer.push(s);\n    }\n}\n", "// cli-progress legacy style as of 1.x\nmodule.exports = {\n    format: 'progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}',\n    barCompleteChar: '=',\n    barIncompleteChar: '-'\n};", "// cli-progress legacy style as of 1.x\nmodule.exports = {\n    format: ' {bar} {percentage}% | ETA: {eta}s | {value}/{total}',\n    barCompleteChar: '\\u2588',\n    barIncompleteChar: '\\u2591'\n};", "\n// cli-progress legacy style as of 1.x\nmodule.exports = {\n    format: ' \\u001b[90m{bar}\\u001b[0m {percentage}% | ETA: {eta}s | {value}/{total}',\n    barCompleteChar: '\\u2588',\n    barIncompleteChar: '\\u2591'\n};", "module.exports = {\n    format: ' {bar}\\u25A0 {percentage}% | ETA: {eta}s | {value}/{total}',\n    barCompleteChar: '\\u25A0',\n    barIncompleteChar: ' '\n};", "const _legacy = require('./legacy');\nconst _shades_classic = require('./shades-classic');\nconst _shades_grey = require('./shades-grey');\nconst _rect = require('./rect');\n\nmodule.exports = {\n    legacy: _legacy,\n    shades_classic: _shades_classic,\n    shades_grey: _shades_grey,\n    rect: _rect\n};", "const _SingleBar = require('./lib/single-bar');\nconst _MultiBar = require('./lib/multi-bar');\nconst _Presets = require('./presets/index');\nconst _Formatter = require('./lib/formatter');\nconst _defaultFormatValue = require('./lib/format-value');\nconst _defaultFormatBar = require('./lib/format-bar');\nconst _defaultFormatTime = require('./lib/format-time');\n\n// sub-module access\nmodule.exports = {\n    Bar: _SingleBar,\n    SingleBar: _SingleBar,\n    MultiBar: _MultiBar,\n    Presets: _Presets,\n    Format: {\n        Formatter: _Formatter,\n        BarFormat: _defaultFormatBar,\n        ValueFormat: _defaultFormatValue,\n        TimeFormat: _defaultFormatTime\n    }\n};", "module.exports = () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE89\\uDE8F-\\uDEC2\\uDEC6\\uDECE-\\uDEDC\\uDEDF-\\uDEE9]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n", "\n              import \"_sentry-debug-id-injection-stub\";\n              import * as OriginalModule from \"./packages/dev-tools/cli/index.ts\";\n              export default OriginalModule.default;\n              export * from \"./packages/dev-tools/cli/index.ts\";", ";{try{let e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]=\"85b39624-7af4-4f7d-8aed-2ad976bd65c6\",e._sentryDebugIdIdentifier=\"sentry-dbid-85b39624-7af4-4f7d-8aed-2ad976bd65c6\")}catch(e){}};", "import { createDevTools, type DevToolsSys } from \"@builder.io/dev-tools/core\";\nimport { createDevToolsNodeSys } from \"@builder.io/dev-tools/node\";\nimport { createDevToolsServer } from \"@builder.io/dev-tools/server\";\nimport mri from \"mri\";\nimport { runFigmaCommand } from \"./figma\";\nimport { cancel, intro, log } from \"@clack/prompts\";\nimport { NetworkError, displayNetworkError } from \"../common/errors\";\nimport { addCommand } from \"./builder-add/interface\";\nimport { getOptions } from \"./builder-add/options\";\nimport { setupSyncServer, syncCommand } from \"./sync-utils\";\nimport { exit } from \"./exit\";\nimport { initTracking } from \"./track\";\nimport { printHelp } from \"./help\";\nimport { runCodeCommand } from \"./code\";\nimport { runFusionCommand } from \"./launch\";\nimport { bgMagenta, dim, bold, white } from \"picocolors\";\nimport { pkgVersion } from \"./version\";\nimport { getCredentials } from \"./credentials\";\nimport { runRepoIndexing } from \"./repo-indexing/repo-indexing\";\nimport { registerSigTerm } from \"./utils/signals\";\nimport { runAuthCommand } from \"./auth/auth\";\nimport { runRepoConnectCommand } from \"./repo-connect/repo-connect\";\n\nexport interface CLIArgs {\n  /** Figma access token */\n  figmaToken?: string;\n  /** GitHub access token */\n  githubToken?: string;\n  /** Run in CI mode without interactive prompts */\n  ci?: boolean;\n  /** Show help text */\n  help?: boolean;\n  /** Force operation even if there are warnings */\n  force?: boolean;\n  /** Print output as JSON */\n  verbose?: boolean;\n  /** Run in dry-run mode without making changes */\n  dryrun?: boolean;\n  /** Auto-confirm all prompts */\n  yes?: boolean;\n  /** Builder.io space ID */\n  spaceId?: string;\n  /** Component name to use */\n  componentName?: string;\n  /** Mapping directory to use */\n  mappingOutput?: string;\n  /** Skip package installation step */\n  skipInstallation?: boolean;\n  /** Skip detailed grouping in repo indexing */\n  skipDetailedGrouping?: boolean;\n  /** Skip display of header in repo indexing */\n  skipHeader?: boolean;\n  /** NPM package name to index */\n  designSystemPackage?: string;\n  /**\n   * A user-friendly design system name to index.\n   *\n   * This can be used in conjunction with designSystemPackage to index components\n   * where the design system name is different than the npm package name.\n   * Example: --designSystemPackage=@adobe/react-spectrum --designSystemName=\"Adobe React Spectrum\"\n   *\n   * This flag can also be used with includeDirectories to specify a name for design systems\n   * that are not npm packages.\n   * Example: --includeDirectories=\"path/to/swift/ui/components\" --designSystemName=\"Native UI\"\n   **/\n  designSystemName?: string;\n  /**\n   * Comma separated string of directories to look in for repo indexing.\n   * Use this when component implementations live in a different place\n   * than the workspace package you are indexing.\n   * Example: --includeDirectories \"packages/foo, packages/bar\"\n   **/\n  includeDirectories?: string;\n  /** Token to use for figma */\n  token?: string;\n  /** Url to start from */\n  url?: string;\n  /** Node ID from Figma URL */\n  nodeId?: string;\n  /** Prompt text for non-interactive mode */\n  prompt?: string;\n  /** Generation mode */\n  mode?: \"quality\" | \"quality-v3\";\n  /** Working directory to run commands from */\n  cwd?: string;\n  /** Debug mode */\n  debug?: boolean;\n  /** Raw command line arguments */\n  _: string[];\n  /** Builder private key, used for authentication. */\n  builderPrivateKey?: string;\n  /** Builder public key, used for authentication. */\n  builderPublicKey?: string;\n  /** Builder user ID, used for authentication. */\n  builderUserId?: string;\n  /** Path to workspace configuration file */\n  workspace?: string;\n  /** Output structured JSON data instead of human-readable logs */\n  jsonOutput?: boolean;\n  /** Remove all mappings from the space, publishing zero mappings even if mapper files exist */\n  clearMappings?: boolean;\n  /** Enabled tools, list of strings separated by commas */\n  enabledTools?: string;\n  /** Disabled tools, list of strings separated by commas */\n  disabledTools?: string;\n  /** If true run brief indexing before running code generation */\n  index?: boolean;\n  /** If true list indexed repositories */\n  listIndexedRepos?: boolean;\n  /** Disable MCP support */\n  disableMcp?: boolean;\n  /** Clear all stored credentials (logout) */\n  reset?: boolean;\n  /** Comma-separated list of component names to reindex */\n  components?: string;\n  nativeApp?: boolean;\n  /** Install command to run for connect-repo (e.g., npm install) */\n  installCommand?: string;\n  /** Use development server instead of production for launch command */\n  dev?: boolean;\n  /** Use native builder:// protocol instead of https:// */\n  app?: boolean;\n  /** Skip browser auto-open (flag form) */\n  open?: boolean;\n}\n\nasync function setupDevTools(sys: DevToolsSys, args: mri.Argv<CLIArgs>) {\n  console.log(\"\");\n  intro(bgMagenta(bold(white(\" dev-tools server \"))) + `  ` + dim(pkgVersion));\n\n  sys.debug(\"builder dev tools cli init\");\n  const devTools = await createDevTools(sys, args.nativeApp);\n\n  await createDevToolsServer({\n    ...devTools,\n\n    getClientId: () => \"builder-dev-tools-cli\",\n\n    closeAppServer: async () => {},\n\n    restartAppServer: async () => {\n      sys.debug(\"restart server\");\n    },\n\n    enableAppWatch: async (enable) => {\n      return enable;\n    },\n\n    ...sys,\n  });\n}\nregisterSigTerm();\n\nasync function main() {\n  const args = mri<CLIArgs>(process.argv.slice(2), {\n    string: [\n      \"figmaToken\",\n      \"privateKey\",\n      \"spaceId\",\n      \"cwd\",\n      \"prompt\",\n      \"mode\",\n      \"token\",\n      \"url\",\n      \"command\",\n      \"c\",\n      \"serverUrl\",\n      \"builderPublicKey\",\n      \"builderPrivateKey\",\n      \"builderUserId\",\n      \"repoFullName\",\n      \"branchName\",\n      \"installCommand\",\n      \"projectId\",\n      \"configJson\",\n      \"configPath\",\n      \"workspace\",\n      \"enabledTools\",\n      \"disabledTools\",\n      \"designSystemPackage\",\n      \"includeDirectories\",\n      \"components\",\n    ],\n    boolean: [\n      \"help\",\n      \"ci\",\n      \"force\",\n      \"verbose\",\n      \"fusionInit\",\n      \"debug\",\n      \"dryrun\",\n      \"yes\",\n      \"skipInstallation\",\n      \"skipDetailedGrouping\",\n      \"noAuth\",\n      \"auth\",\n      \"dev\",\n      \"app\",\n      \"noOpen\",\n      \"open\",\n      \"silent\",\n      \"interactive\",\n      \"jsonOutput\",\n      \"local\",\n      \"clearMappings\",\n      \"index\",\n      \"listIndexedRepos\",\n      \"disableMcp\",\n      \"reset\",\n      \"privacyMode\",\n      \"nativeApp\",\n    ],\n    alias: {\n      p: \"port\",\n      c: \"command\",\n      json: \"jsonOutput\",\n      native: \"nativeApp\",\n    },\n    default: {\n      interactive: false,\n      fusionInit: false,\n    },\n  });\n  if (args.cwd) {\n    process.chdir(args.cwd);\n  }\n  const Sentry = await initTracking(!!(args.verbose || args.debug));\n  await Sentry.withScope(async (scope) => {\n    try {\n      const sys = await createDevToolsNodeSys({\n        cwd: process.cwd(),\n        ignoreMissingConfig: true,\n      });\n      sys.Sentry?.setTag(\"cli-command\", args._.join(\" \"));\n      sys.Sentry?.setContext(\"flags-args\", {\n        ...args,\n      });\n      const { builderPublicKey } = await getCredentials(sys, args, {});\n\n      sys.Sentry?.setTag(\"spaceId\", builderPublicKey);\n\n      if (args.help) {\n        printHelp(args._[args._.length - 1]);\n        return await exit(0);\n      }\n\n      const rootCommand = args._[0];\n      if (rootCommand === \"figma\") {\n        const subCommand = args._[1];\n        try {\n          await runFigmaCommand(sys, subCommand, args);\n          return await exit(0);\n        } catch (error) {\n          sys.Sentry?.captureException(error);\n\n          if (error instanceof NetworkError) {\n            displayNetworkError(error);\n            cancel();\n          }\n\n          return await exit(1);\n        }\n      } else if (rootCommand === \"code\") {\n        const subCommand = args._[1];\n        try {\n          if (args.index) {\n            args.skipDetailedGrouping = true;\n            args.skipHeader = true;\n            await runRepoIndexing(sys, args);\n          }\n\n          await runCodeCommand(sys, subCommand, args);\n        } catch (error) {\n          sys.Sentry?.captureException(error);\n\n          if (error instanceof NetworkError) {\n            displayNetworkError(error);\n            cancel();\n          }\n\n          return await exit(1);\n        }\n      } else if (rootCommand === \"index-repo\" || rootCommand === \"repo-index\") {\n        try {\n          await runRepoIndexing(sys, args);\n          return await exit(0);\n        } catch (error) {\n          sys.Sentry?.captureException(error);\n\n          if (error instanceof NetworkError) {\n            displayNetworkError(error);\n            cancel();\n          }\n\n          return await exit(1);\n        }\n      } else if (rootCommand === \"launch\" || rootCommand === \"fusion\") {\n        try {\n          await runFusionCommand({ sys, args });\n        } catch (error) {\n          sys.Sentry?.captureException(error);\n\n          if (error instanceof NetworkError) {\n            displayNetworkError(error);\n            cancel();\n          }\n\n          return await exit(1);\n        }\n      } else if (rootCommand === \"add\") {\n        const opts = getOptions(sys.getAppRootDir(), process.argv.slice(2));\n        await addCommand(opts);\n        return await exit(0);\n      } else if (rootCommand === \"sync\") {\n        const opts = getOptions(sys.getAppRootDir(), process.argv.slice(2));\n        const initialSyncInfo = await syncCommand(opts);\n        await setupSyncServer(sys, initialSyncInfo)\n          .then(() => {\n            log.success(\"Builder dev tools is running\");\n          })\n          .catch((error) => {\n            log.error(\"Cannot start builder dev tools\");\n            sys.Sentry?.captureException(error);\n            return exit(1);\n          });\n      } else if (rootCommand === \"auth\") {\n        const subCommand = args._[1];\n        try {\n          await runAuthCommand(sys, subCommand, args);\n          return await exit(0);\n        } catch (error) {\n          sys.Sentry?.captureException(error);\n\n          if (error instanceof NetworkError) {\n            displayNetworkError(error);\n            cancel();\n          }\n\n          return await exit(1);\n        }\n      } else if (\n        rootCommand === \"connect-repo\" ||\n        rootCommand === \"repo-connect\"\n      ) {\n        try {\n          await runRepoConnectCommand(sys, args);\n          return await exit(0);\n        } catch (error) {\n          sys.Sentry?.captureException(error);\n\n          if (error instanceof NetworkError) {\n            displayNetworkError(error);\n            cancel();\n          }\n\n          return await exit(1);\n        }\n      } else if (rootCommand === \"help\") {\n        printHelp(args._[1]);\n        return await exit(0);\n      } else if (\n        rootCommand === \"publish\" ||\n        rootCommand === \"migrate\" ||\n        rootCommand === \"generate\"\n      ) {\n        cancel(\n          \"Command not found, do you mean `npx builder.io figma \" +\n            rootCommand +\n            \"`?\",\n        );\n        return await exit(1);\n      } else {\n        // Using cli to run dev tools dev server. This is used in angular\n        setupDevTools(sys, args)\n          .then(() => {\n            log.success(\"Builder dev tools is running\");\n          })\n          .catch((error) => {\n            log.error(\"Cannot start builder dev tools\");\n            Sentry.captureException(error);\n            return exit(1);\n          });\n      }\n    } catch (error) {\n      Sentry.captureException(error);\n\n      if (error instanceof NetworkError) {\n        displayNetworkError(error);\n        cancel(\"Cannot start builder dev tools due to network error\");\n      }\n\n      return await exit(1);\n    }\n  });\n}\n\nmain();\n", "import type { DevToolsSys } from \"../types\";\nimport { runFigmaMigrate } from \"./download\";\nimport { runFigmaGenerate } from \"./generate\";\nimport { runFigmaPublish } from \"./figma-publish\";\nimport { getCredentials } from \"./credentials\";\nimport { printHelp } from \"./help\";\nimport { bold, bgCyan, bgGreen, white, dim } from \"picocolors\";\nimport { cancel, intro, outro } from \"@clack/prompts\";\nimport { confirm } from \"@clack/prompts\";\nimport { exit } from \"./exit\";\nimport { findPackageJson } from \"../common/fs\";\nimport { track } from \"./track\";\nimport type { CLIArgs } from \".\";\nimport { pkgVersion } from \"./version\";\nimport { spawn } from \"node:child_process\";\nimport type { ChildProcess } from \"node:child_process\";\nimport type { SpawnOptions } from \"node:child_process\";\nimport { runFigmaReport } from \"./report/figma-report\";\n\nexport const runFigmaCommand = async (\n  sys: DevToolsSys,\n  subCommand: string,\n  args: CLIArgs,\n) => {\n  if (subCommand === \"migrate\") {\n    await runFigmaMigrate(sys, args);\n  } else if (subCommand === \"publish\" || subCommand === \"p\") {\n    await runFigmaPublish(sys, args);\n  } else if (\n    subCommand === \"add\" ||\n    subCommand === \"generate\" ||\n    subCommand === \"gen\" ||\n    subCommand === \"g\"\n  ) {\n    await runFigmaGenerate(sys, args);\n  } else if (subCommand === \"report\") {\n    await runFigmaReport(sys, args);\n  } else if (subCommand === \"auth\") {\n    console.log(\"\");\n    intro(bgCyan(bold(white(\" figma auth \"))) + `  ` + dim(pkgVersion));\n    const { builderPublicKey: spaceId } = await getCredentials(sys, args, {\n      requireFigmaAuth: \"always\",\n      builderPrivateKey: true,\n      builderPublicKey: true,\n      force: true,\n    });\n    await track(\"figma auth\", {\n      spaceId,\n    });\n    outro(bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))));\n  } else if (subCommand === \"help\") {\n    printHelp(args._[2]);\n  }\n};\n\nexport async function askToInstallBuilder(sys: DevToolsSys, args: CLIArgs) {\n  if (!args.skipInstallation && (await shouldInstallBuilder(sys))) {\n    const shouldInstall =\n      args.yes ||\n      (await confirm({\n        message:\n          \"Welcome to Builder.io! Would you like to set up your integration now?\",\n        active: \"Yes, let's integrate!\",\n        inactive: \"No, I'll do it later\",\n      }));\n    if (shouldInstall) {\n      const passed = await runCommand(\n        \"npm\",\n        [\"init\", \"builder.io@latest\", \"--\", \"--skip-question\"],\n        {\n          stdio: \"inherit\",\n          cwd: sys.getAppRootDir(),\n        },\n      ).command;\n      if (!passed) {\n        cancel(\n          `Auto-install failed. You can install it manually by running ${bold(\n            \"npm init builder.io@latest\",\n          )}`,\n        );\n        await exit(1);\n      }\n    } else {\n      cancel(\n        `Ok, you can install it later. By running ${bold(\n          \"npm init builder.io@latest\",\n        )}`,\n      );\n    }\n  }\n}\nasync function shouldInstallBuilder(sys: DevToolsSys): Promise<boolean> {\n  const frameworks = sys.getFrameworks();\n  const supportedFrameworks = [\"next\", \"angular\", \"@angular/core\"];\n  if (\n    !frameworks.some((framework) =>\n      supportedFrameworks.includes(framework.name),\n    )\n  ) {\n    return false;\n  }\n  try {\n    const pkg = await findPackageJson(sys, sys.getRepoRootDir());\n    if (!pkg) {\n      return false;\n    }\n    const hasDevTools =\n      !!pkg.devDependencies?.[\"@builder.io/dev-tools\"] ||\n      !!pkg.dependencies?.[\"@builder.io/dev-tools\"];\n    if (hasDevTools) {\n      return false;\n    }\n  } catch (error) {\n    return false;\n  }\n  return true;\n}\n\nfunction runCommand(cmd: string, args: string[], options?: SpawnOptions) {\n  let child: ChildProcess;\n\n  const command = new Promise<boolean>((resolve) => {\n    try {\n      child = spawn(cmd, args, {\n        stdio: \"inherit\",\n        ...options,\n      });\n\n      child.on(\"error\", (e) => {\n        resolve(false);\n      });\n\n      child.on(\"close\", (code) => {\n        if (code === 0) {\n          resolve(true);\n        } else {\n          resolve(false);\n        }\n      });\n    } catch (e: any) {\n      resolve(false);\n    }\n  });\n\n  const abort = async () => {\n    if (child) {\n      child.kill(\"SIGINT\");\n    }\n  };\n\n  return { abort, command };\n}\n", "import type { CLIArgs } from \"./index\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport { prettierFormat } from \"./prettier\";\nimport { getCredentials } from \"./credentials\";\nimport type { DevToolsSys } from \"../types\";\nimport { findAllMappingFiles } from \"./figma-publish\";\nimport {\n  cancel,\n  intro,\n  isCancel,\n  outro,\n  spinner,\n  text,\n  log,\n  confirm,\n} from \"@clack/prompts\";\nimport {\n  bold,\n  bgCyan,\n  dim,\n  yellow,\n  cyan,\n  green,\n  bgGreen,\n  white,\n  magenta,\n} from \"picocolors\";\nimport { extname, isAbsolute, relative } from \"node:path\";\nimport { exit } from \"./exit\";\nimport { track } from \"./track\";\nimport { safeFetch } from \"./fetch\";\nimport { pkgVersion } from \"./version\";\nimport { getFigmaComponentName } from \"$/vcp-common/figma-component\";\nimport type { FigmaBuilderLink, ESMImport } from \"$/ai-utils\";\n\ninterface KVGetRequest {\n  privateKey: string;\n  spaceId: string;\n}\n\nconst apiHost = \"https://cdn.builder.io\";\n\nexport const runFigmaMigrate = async (sys: DevToolsSys, args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" figma migrate \"))) + `  ` + dim(pkgVersion));\n\n  const { builderPrivateKey: privateKey, builderPublicKey: spaceId } =\n    await getCredentials(sys, args, {\n      forceSpaceId: args.spaceId,\n      builderPrivateKey: true,\n      builderPublicKey: true,\n    });\n\n  await track(\"figma publish started\", {\n    spaceId,\n  });\n  const mappingFiles = await findAllMappingFiles(sys);\n\n  if (mappingFiles.length > 0) {\n    await track(\"figma migrate with existing files\", {\n      spaceId,\n    });\n    log.warning(\n      `${yellow(\"This repo already has figma mappings in:\")}\\n\n${mappingFiles.map((a) => ` - ${relative(sys.getAppRootDir(), a)}`).join(\"\\n\")}\n\nMigration is going to create new files, possibly duplicates.`,\n    );\n    const shouldContinue = await confirm({\n      message: \"Do you want to continue?\",\n      initialValue: false,\n    });\n    if (!shouldContinue || isCancel(shouldContinue)) {\n      cancel(\"Migration cancelled\");\n      return await exit(1);\n    }\n  }\n\n  log.message(\n    `We are about to import your existing figma mappings into this local repo.`,\n  );\n\n  let s = spinner();\n  s.start(\"Fetching figma mappings\");\n  const links = await getBuilderSpaceFigmaLinks({\n    privateKey: privateKey!,\n    spaceId: spaceId!,\n  });\n\n  s.stop(`Fetched ${links.length} figma mappings:`);\n  log.message(\n    links\n      .map((l) => {\n        switch (l.figmaKey) {\n          // add icon\n          case \"design-tokens\":\n            return cyan(`\u2747\uFE0E Design tokens mapper`);\n          case \"*\": // generic mapper\n            return yellow(`\u25CF Generic mapper`);\n          default:\n            return `${magenta(\n              \"\u2756\" + \" \" + getFigmaComponentName(l.figmaName),\n            )} ${dim(\"\u2192\")} ${l.builderName}`;\n        }\n      })\n      .join(\"\\n\"),\n  );\n\n  const mappingsDir = await text({\n    message: `Where do you want to save the figma mappings? ${dim(\n      \"(Ctrl+C to exit)\",\n    )}`,\n    initialValue: \"./src/mappings\",\n    defaultValue: \"./src/mappings\",\n    placeholder: \"./src/mappings\",\n    validate: (value) => {\n      if (extname(value) !== \"\") {\n        return \"It must be a valid directory path, not a file\";\n      }\n      if (isAbsolute(value)) {\n        return \"It must be a relative path\";\n      }\n    },\n  });\n  if (isCancel(mappingsDir)) {\n    cancel(\"Migration cancelled\");\n    return await exit(1);\n  }\n\n  await mkdir(mappingsDir, { recursive: true });\n\n  await Promise.all(\n    links.map(async (link) => {\n      const tsSource = await convertFigmaBuilderLinkToMapping(sys, link);\n      let fileName;\n      switch (link.figmaKey) {\n        case \"design-tokens\":\n          fileName = \"design-tokens\";\n          break;\n        case \"*\":\n          fileName = \"generic\";\n          break;\n        default:\n          fileName = getFigmaComponentName(link.figmaName);\n      }\n      const filePath = mappingsDir + \"/\" + fileName + \".mapper.tsx\";\n      log.info(green(\"created \") + dim(filePath));\n      return writeFile(filePath, tsSource);\n    }),\n  );\n  log.info(\n    \"Check out the docs for following steps: https://builder.io/docs/figma/figma-mappings\",\n  );\n  outro(\n    bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))) + ` ${links.length} mappings imported`,\n  );\n\n  await track(\"figma migrate success\", {\n    spaceId,\n    mappingFiles: links.length,\n  });\n};\n\nexport async function getBuilderSpaceFigmaLinks(kvReq: KVGetRequest) {\n  const rsp = await safeFetch(\n    `${apiHost}/api/internal/kv/${kvReq.spaceId}/figma-builder?apiKey=${kvReq.spaceId}`,\n    {\n      headers: {\n        Authorization: `Bearer ${kvReq.privateKey}`,\n      },\n    },\n  );\n\n  if (!rsp.ok) {\n    throw new Error(`Failed to fetch figma-builder links: ${rsp.statusText}`);\n  }\n\n  const result = await rsp.json();\n\n  if (!(result instanceof Object && \"figmaBuilderLinks\" in result)) {\n    throw new Error(\"Invalid response\");\n  }\n\n  return result.figmaBuilderLinks as FigmaBuilderLink[];\n}\n\nasync function convertFigmaBuilderLinkToMapping(\n  sys: DevToolsSys,\n  link: FigmaBuilderLink,\n) {\n  // TODO: get TS type for arg\n  const fn = \"figmaMapping\",\n    arg = link.originalInputMapper?.match(\n      /function Mapper\\(\\s*([a-zA-Z0-9_$]+)\\s*(?::[^)])?\\s*\\)/,\n    )?.[1],\n    body = link.originalInputMapper?.match(\n      /function Mapper\\([^)]*\\)(\\s*{([^]*))$/,\n    )?.[1];\n\n  let src;\n  switch (link.figmaKey) {\n    case \"design-tokens\":\n      src = `${fn}({\n  designTokenMapper(${arg || \"designToken\"})${body}\n})`;\n      break;\n    case \"*\":\n      src = `${fn}({\n  genericMapper(${arg || \"figma\"})${body}\n})`;\n      break;\n    default:\n      src = `${fn}({${\n        link.figmaUrl ? `\\n  url: ${JSON.stringify(link.figmaUrl)},` : \"\"\n      }\n  componentKey: ${JSON.stringify(link.figmaKey)}${\n    body ? `,\\n  mapper(${arg || \"figma\"})${body}` : \"\"\n  }\n})`;\n  }\n\n  const serializedImports = link.imports\n    ? link.imports?.map(componentImportLine).join(\"\\n\")\n    : componentImportLine(link);\n\n  return prettierFormat(\n    sys.getAppRootDir(),\n    `import { figmaMapping } from '@builder.io/dev-tools/figma';\n${serializedImports}\n\n${src}`,\n    \"typescript\",\n    undefined,\n  );\n}\n\nfunction componentImportLine(link: ESMImport | FigmaBuilderLink) {\n  const { importName, importPath } = link;\n  const importType = \"importType\" in link ? link.importType : link.exportType;\n  if (importName && importPath) {\n    const path = JSON.stringify(importPath);\n    if (importType === \"named\") {\n      return `import { ${importName} } from ${path};`;\n    } else {\n      return `import ${importName} from ${path};`;\n    }\n  }\n  return \"\";\n}\n", "import { createDevTools } from \"../core\";\nimport type {\n  ComponentInfo,\n  ComponentRegistry,\n  DependencyTree,\n  DevTools,\n  DevToolsSys,\n} from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport prompts from \"prompts\";\nimport fs from \"node:fs\";\nimport { createEmphasize, common } from \"emphasize\";\nimport {\n  intro,\n  text,\n  outro,\n  isCancel,\n  cancel,\n  log,\n  multiselect,\n} from \"@clack/prompts\";\nimport { prettierFormat } from \"./prettier\";\nimport {\n  getBuilderCodegenUsage,\n  getCredentials,\n  type Credentials,\n} from \"./credentials\";\nimport {\n  bold,\n  cyan,\n  dim,\n  white,\n  yellow,\n  bgGreen,\n  magenta,\n  green,\n  bgMagenta,\n  bgBlack,\n  underline,\n} from \"picocolors\";\nimport { isAbsolute } from \"node:path\";\nimport { printHelp } from \"./help\";\nimport { distance } from \"fastest-levenshtein\";\nimport { exit } from \"./exit\";\nimport { apiAirV2Host } from \"./constants\";\nimport {\n  findAllMappingFiles,\n  findMappingsFromFiles,\n  setPublicKey,\n} from \"./figma-publish\";\nimport { track } from \"./track\";\nimport { safeFetch } from \"./fetch\";\nimport { NetworkError, displayNetworkError } from \"../common/errors\";\nimport { getBuilderSpaceFigmaLinks } from \"./download\";\nimport { pkgVersion } from \"./version\";\nimport { getUserContext } from \"./codegen\";\nimport { checkProjectRoot } from \"./code\";\nimport { transformStream } from \"$/vcp-common/stream\";\n\nimport {\n  getFigmaNodeDataFromURLs,\n  getImportDataFromToken,\n  inPlaceResolveFigmaURLs,\n  needsFigmaAuth,\n} from \"./figma-utils\";\nimport { getFigmaComponentName } from \"$/vcp-common/figma-component\";\nimport { builderNpxPackage, isMapperFile } from \"../common/utils\";\nimport { spinner } from \"./spinner\";\nimport {\n  type FigmaBuilderLink,\n  type FigmaComponentInfo,\n  type UserContext,\n} from \"$/ai-utils\";\n\nfunction checkIsValidUrl(url: string) {\n  try {\n    new URL(url);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport const runFigmaGenerate = async (sys: DevToolsSys, args: CLIArgs) => {\n  const userContext = await getUserContext(sys);\n  sys.Sentry?.setContext(\"userContext\", userContext);\n\n  const interactive =\n    !args.componentName || !args.mappingOutput || !args.skipInstallation;\n  if (interactive) {\n    if (!process.stdout.isTTY && process.env.FORCE_TTY !== \"1\") {\n      await track(\"tty error\", {});\n      cancel(\n        \"This command requires a TTY-enabled terminal.\\nIf you are using Windows Git Bash, try a different terminal or wrap the command with winpty.\",\n      );\n      return await exit(1);\n    }\n  }\n  console.log(\"\");\n  intro(bgMagenta(bold(white(\" figma generate \"))) + `  ` + dim(pkgVersion));\n\n  log.message(\n    dim(`This command will help you create new mapper files to connect Figma components to your code components.\nCheck out `) +\n      bold(cyan(\"https://www.builder.io/c/docs/cli-mapping\")) +\n      dim(\" for more details.\"),\n  );\n\n  if (args.componentName && !args.mappingOutput) {\n    log.error(\n      \"Mapping output must be provided when mapping a single component\",\n    );\n    return await exit(1);\n  }\n  if (typeof args.mappingOutput === \"string\") {\n    if (!isMapperFile(args.mappingOutput)) {\n      log.error(\n        \"Mapping output must end with .mapper.{tsx, ts, jsx, js, mjs}, e.g. my-component.mapper.tsx\",\n      );\n      return await exit(1);\n    }\n  }\n\n  await checkProjectRoot(sys, interactive);\n\n  let s: ReturnType<typeof spinner> | undefined;\n  s = spinner();\n  s.start(\"Loading type information\");\n\n  let devTools: DevTools | undefined;\n  try {\n    devTools = await createDevTools(sys);\n  } catch (e) {\n    sys.Sentry?.captureException(e);\n    s.stop(`Repo's framework is not supported`);\n    await track(\"figma generate, framework not supported\", {\n      frameworks: sys.getFrameworks().map((f) => f.name),\n    });\n    s.message(\n      `We can not generate mappers automatically, but it's possible to do it manually:\nhttps://www.builder.io/c/docs/mapping-functions`,\n    );\n    return await exit(1);\n  }\n  let importData: (readonly [string, FigmaComponentInfo])[] = [];\n  let credentials: Credentials;\n  if (args.token) {\n    // empty line\n    log.message();\n\n    credentials = await getCredentials(sys, args, {});\n    importData = await getImportDataFromToken(\n      credentials,\n      args.token,\n      !!args.verbose,\n    );\n  } else {\n    if (s) {\n      s.stop(`Component metadata processed`);\n      s = undefined;\n    }\n    const figmaUrls = args._.slice(2);\n    if (!figmaUrls.length) {\n      cancel(\n        'No Figma URL provided, use:\\n  npx builder.io figma generate \"https://...\"',\n      );\n      printHelp();\n      return await exit(1);\n    }\n\n    credentials = await getCredentials(sys, args, {\n      builderPrivateKey: true,\n      builderPublicKey: true,\n      requireFigmaAuth: needsFigmaAuth(figmaUrls) ? \"if-unset\" : undefined,\n      forceSpaceId: args.spaceId,\n    });\n    if (!credentials.builderPrivateKey || !credentials.builderPublicKey) {\n      cancel(\"Missing builder.io credentials\");\n      return await exit(1);\n    }\n    const codegenUsage = await getBuilderCodegenUsage(\n      credentials.builderPublicKey,\n      credentials.builderPrivateKey,\n    );\n    const links = await getBuilderSpaceFigmaLinks({\n      privateKey: credentials.builderPrivateKey,\n      spaceId: credentials.builderPublicKey,\n    });\n    if (\n      !codegenUsage.features?.includes(\"component-mapping\") &&\n      links.length === 0\n    ) {\n      cancel(\n        \"Component mapping is an enterprise feature. Please visit \" +\n          bold(cyan(\"https://www.builder.io/unlock-enterprise\")) +\n          \" to start your trial.\",\n      );\n      return await exit(1);\n    }\n\n    s = spinner();\n    s.start(\"Gathering Figma component info\");\n    importData = await getFigmaNodeDataFromURLs(\n      sys,\n      args,\n      credentials.figmaAuth,\n      {\n        privateKey: credentials.builderPrivateKey,\n        spaceId: credentials.builderPublicKey,\n      },\n      figmaUrls,\n    );\n  }\n\n  await track(\"figma generate started\", {\n    spaceId: credentials.builderPublicKey,\n    mode: args.componentName ? \"non-interactive\" : \"interactive\",\n  });\n  const highlight = createEmphasize(common);\n\n  let mappingPath: string | undefined;\n  let filePath: string | undefined;\n  let registry = await devTools.getRegistry({\n    readAllInputTypes: true,\n  });\n\n  if (s) {\n    s.stop(`Figma's component metadata loaded`);\n    s = undefined;\n  }\n\n  // empty line\n  log.message();\n\n  const mappingFiles = await findAllMappingFiles(sys);\n\n  const { figmaBuilderLinks, figmaLinksToResolve } =\n    await findMappingsFromFiles({\n      sys,\n      mappingFiles,\n    });\n\n  if (figmaLinksToResolve.length > 0 && credentials.figmaAuth) {\n    await inPlaceResolveFigmaURLs(\n      sys,\n      args,\n      credentials.figmaAuth,\n      figmaBuilderLinks,\n      figmaLinksToResolve,\n    );\n  }\n\n  // select components to map, skip components already in registry by default but allow to override\n  const selectedComponents: string[] = await selectFigmaComponents(\n    importData,\n    figmaBuilderLinks,\n  );\n\n  importData = importData.filter(([, c]) => selectedComponents.includes(c.key));\n\n  const savedFiled: string[] = [];\n  for (let i = 0; i < importData.length; i++) {\n    const [figmaUrl, figmaComponentInfo] = importData[i];\n\n    if (i > 0) {\n      log.info(`Mapped ${i} / ${importData.length} components:\\n\n${importData\n  .map(([, c], index) => {\n    if (i > index) {\n      if (c.documentName === \"-\") {\n        return dim(` \u2756 ${c.name}`) + \" \" + yellow(\"(skipped)\");\n      } else {\n        return green(` \u2714 ${c.name} \u2192 <${c.documentName} />`);\n      }\n    } else if (i === index) {\n      return underline(` \u2192 ${c.name}`);\n    } else {\n      return dim(` \u2756 ${c.name}`);\n    }\n  })\n  .filter(Boolean)\n  .join(\"\\n\")}\\n`);\n    }\n\n    let registeredCmp: ComponentInfo | undefined;\n    let lastCode: string | undefined;\n    let lastCompletion: string | undefined;\n    let lastFileName: string | undefined;\n\n    const dependencyTree = await devTools.findAllDependencies();\n    // Filter out known non-component packages\n    const componentPackages = dependencyTree.filter(\n      (pkg) => !isNonComponentPackages(pkg.name),\n    );\n    const resultComponent = args.componentName\n      ? registry.components.find((cmp) => cmp.name === args.componentName)\n      : await askComponent(\n          registry.components,\n          figmaComponentInfo.name,\n          componentPackages.length > 0,\n          true,\n        );\n    if (resultComponent === \"external package\") {\n      const isAngularFramework = sys\n        .getFrameworks()\n        .some((f) => f.name === \"@angular/core\");\n      const importPath = await askPackageImportPath(\n        componentPackages,\n        isAngularFramework,\n      );\n\n      devTools.addExternalPackage(importPath);\n\n      const newRegistry = await devTools.getRegistry({\n        readAllInputTypes: true,\n      });\n      if (newRegistry) {\n        registry = newRegistry;\n      }\n      const resultComponent = await askComponent(\n        registry?.components.filter((cmp) => cmp.importPath === importPath),\n        figmaComponentInfo.name,\n        true,\n        false,\n      );\n      if (resultComponent === \"skip\" || resultComponent === \"scaffold\") {\n        registeredCmp = undefined;\n      } else {\n        registeredCmp = resultComponent as ComponentInfo;\n      }\n    } else if (resultComponent === \"skip\" || resultComponent === \"scaffold\") {\n      registeredCmp = undefined;\n    } else if (resultComponent === \"manual import\") {\n      const manualImportPath = await askManualImportPath();\n      log.info(\"Validating manual import path...\");\n      const manualComponents = await validateAndLoadManualImport(\n        sys,\n        devTools,\n        manualImportPath,\n      );\n\n      if (manualComponents && manualComponents.length > 0) {\n        // update registry\n        const newRegistry = await devTools.getRegistry({\n          readAllInputTypes: true,\n        });\n        if (newRegistry) {\n          registry = newRegistry;\n        }\n\n        if (manualComponents.length === 1) {\n          registeredCmp = manualComponents[0];\n        } else {\n          const selectedComponent = await askComponent(\n            manualComponents,\n            figmaComponentInfo.name,\n            false,\n            false,\n          );\n          if (\n            selectedComponent === \"skip\" ||\n            selectedComponent === \"scaffold\"\n          ) {\n            registeredCmp = undefined;\n          } else {\n            registeredCmp = selectedComponent as ComponentInfo;\n          }\n        }\n      } else {\n        log.warning(\n          `No valid components found at ${manualImportPath}. Skipping mapping.`,\n        );\n        figmaComponentInfo.documentName = \"-\";\n        continue;\n      }\n    } else {\n      registeredCmp = resultComponent as ComponentInfo;\n    }\n\n    if (!registeredCmp) {\n      if (resultComponent === \"scaffold\") {\n        log.info(\"Scaffolding mapper for \" + figmaComponentInfo.name);\n      } else {\n        figmaComponentInfo.documentName = \"-\";\n        log.warning(\"Skipping mapping for \" + figmaComponentInfo.name);\n        continue;\n      }\n    }\n    if (!registeredCmp) {\n      const isAngular = sys\n        .getFrameworks()\n        .some((f) => f.name === \"@angular/core\");\n      registeredCmp = {\n        id: \"\",\n        name: getFigmaComponentName(figmaComponentInfo.name),\n        importName: getFigmaComponentName(figmaComponentInfo.name),\n        isRegistered: false,\n        importPath: \"\",\n        filePath: \"\",\n        relFilePath: \"\",\n        inputs: [],\n        exportName: \"\",\n        framework: isAngular ? \"angular\" : \"react\",\n      };\n    }\n    const docsUrl = await askDocsUrl(registeredCmp);\n\n    let prompt: string | undefined;\n\n    let body: MappingCodeV3 = {\n      registry,\n      figmaNode: figmaComponentInfo,\n      figmaUrl,\n      registeredCmp,\n      token: args.token,\n      docsUrl,\n      userContext,\n    };\n\n    try {\n      while (true) {\n        body.previousCompletion = lastCompletion;\n        body.userPrompt = prompt;\n        const stream = completionStream(credentials, body, !!args.verbose);\n        for await (const chunk of stream) {\n          if (chunk.type === \"step\") {\n            if (s) {\n              s.stop();\n            }\n            s = spinner();\n            s.start(chunk.title);\n          }\n          if (chunk.type === \"done\") {\n            lastCode = chunk.code;\n            lastCompletion = chunk.completion;\n            lastFileName = chunk.fileName;\n          }\n        }\n\n        if (lastCode) {\n          if (s) {\n            s.stop(\"Generated mapping\");\n          }\n          log.message(highlight.highlight(\"typescript\", lastCode).value);\n        } else {\n          if (s) {\n            s.stop(\"Failed to generate mapping\", 1);\n          }\n          await track(\"figma generate, LLM failed\", {\n            spaceId: credentials.builderPublicKey,\n            componentName: figmaComponentInfo.name,\n          });\n          return await exit(1);\n        }\n\n        if (args.componentName) {\n          break;\n        }\n\n        const next = await askHowGenerationLooks();\n        if (next.trim() === \"good\") {\n          break;\n        }\n        await track(\"figma add follow up prompt\", {\n          spaceId: credentials.builderPublicKey,\n          prompt: next,\n        });\n        prompt = next as string;\n      }\n    } catch (e) {\n      sys.Sentry?.captureException(e);\n\n      if (e instanceof NetworkError) {\n        displayNetworkError(e);\n        cancel(\"LLM failed due to network error\");\n      } else {\n        cancel(\"LLM failed:\" + String(e));\n      }\n\n      return await exit(1);\n    }\n\n    const baseName =\n      lastFileName ??\n      `${getFigmaComponentName(figmaComponentInfo.name)}.mapper.tsx`;\n\n    // Save in memory the mapping\n    figmaComponentInfo.documentName = registeredCmp.importName;\n\n    // Save to disk\n    if (lastCode) {\n      if (args.mappingOutput) {\n        filePath = args.mappingOutput;\n        mappingPath = sys.dirname(filePath);\n        fs.mkdirSync(mappingPath, { recursive: true });\n      } else if (!mappingPath) {\n        filePath = await getMappingPath(baseName);\n        mappingPath = sys.dirname(filePath);\n        fs.mkdirSync(mappingPath, { recursive: true });\n      } else {\n        filePath = sys.join(mappingPath, baseName);\n      }\n      fs.writeFileSync(\n        filePath,\n        await prettierFormat(\n          sys.getAppRootDir(),\n          lastCode,\n          undefined,\n          filePath,\n        ),\n      );\n      savedFiled.push(filePath);\n    }\n    if (!registeredCmp.isRegistered && registeredCmp.id) {\n      if (s) {\n        s.stop();\n      }\n      s = spinner();\n      s.start(\"Registering builder component in registry\");\n      await devTools.registerComponent({\n        cmpId: registeredCmp.id,\n      });\n      s.stop(`<${registeredCmp.importName}> added to the builder registry`);\n    }\n  }\n  if (credentials.builderPublicKey) {\n    await setPublicKey(sys, credentials.builderPublicKey, devTools, true);\n  }\n\n  if (mappingPath) {\n    if (savedFiled.length === 1) {\n      log.success(\n        `${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} New mapper file saved in: ${dim(\n          savedFiled[0],\n        )}`,\n      );\n    } else {\n      log.success(\n        `${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} Created ${\n          savedFiled.length\n        } new mapping files:\\n${savedFiled.map((f) => `  - ${f}`).join(\"\\n\")}`,\n      );\n    }\n\n    outro(\n      dim(\n        \"Figma mappings need to be published to come into effect. You can do this by running:\\n\\n   \",\n      ) +\n        bgBlack(white(bold(` npx ${builderNpxPackage()} figma publish `))) +\n        \"\\n\\n   \" +\n        dim(\n          \"Read more: https://www.builder.io/c/docs/cli-mapping#publishing-a-new-mapping\",\n        ),\n    );\n\n    await track(\"figma add success\", {\n      spaceId: credentials.builderPublicKey,\n      mappingPath,\n      mode: args.componentName ? \"non-interactive\" : \"interactive\",\n    });\n  } else {\n    outro(\"No new mappings were created.\");\n  }\n};\n\nasync function getMappingPath(baseName: string) {\n  const usesSrc = fs.existsSync(\"src\");\n  const defaultValue = `${usesSrc ? \"src/\" : \"\"}mappings/${baseName}`;\n\n  const mappingPath = await text({\n    message: `Where do you want to save the new mapping? ${dim(\n      \"(Ctrl+C to exit)\",\n    )}`,\n    defaultValue,\n    placeholder: defaultValue,\n    initialValue: defaultValue,\n    validate(value) {\n      if (isAbsolute(value)) {\n        return `Please enter a relative path, not absolute`;\n      }\n      if (!isMapperFile(value)) {\n        return `Please enter a path that ends with '.mapper.{tsx,jsx,ts,js,mjs}'`;\n      }\n      if (fs.existsSync(value)) {\n        return `File already exists, please choose a different name`;\n      }\n    },\n  });\n  if (isCancel(mappingPath)) {\n    cancel(\"Mapping not saved, goodbye!\");\n    return await exit(1);\n  }\n  return mappingPath;\n}\n\nexport interface MappingCodeV3 {\n  figmaNode?: FigmaComponentInfo;\n  registry?: ComponentRegistry;\n  userContext?: UserContext;\n  figmaUrl?: string;\n  docsUrl?: string;\n  registeredCmp?: ComponentInfo;\n  previousCompletion?: string;\n  userPrompt?: string;\n  token?: string;\n  pragma?: string;\n}\n\nasync function selectFigmaComponents(\n  importData: (readonly [string, FigmaComponentInfo])[],\n  figmaBuilderLinks: FigmaBuilderLink[],\n): Promise<string[]> {\n  // If only one component, no selection needed\n  if (importData.length <= 1) {\n    return importData.map(([, c]) => c.key);\n  }\n\n  // Otherwise, show selection UI\n  return await askSelectedComponents(importData, figmaBuilderLinks);\n}\n\nasync function askHowGenerationLooks() {\n  const next = await text({\n    message: `How does the mapping look? ${dim(\n      'Reply \"good\", or provide feedback (Ctrl+C to exit)',\n    )}`,\n    defaultValue: \"good\",\n    placeholder: \"good\",\n  });\n  if (isCancel(next)) {\n    cancel(\"Mapping not saved, goodbye!\");\n    return await exit(1);\n  }\n  return next;\n}\n\nasync function askDocsUrl(registeredCmp: ComponentInfo) {\n  const docsUrl = await text({\n    message: `Providing a docs URL for ${\n      registeredCmp.name\n    } can drastically improve results: ${dim(\"(Ctrl+C to skip)\")}`,\n    placeholder: \"https://\",\n    validate(value) {\n      value = value.trim();\n\n      // allow empty string as a non-entry\n      if (value === \"\") return undefined;\n\n      if (!checkIsValidUrl(value)) return \"Please enter a valid URL\";\n\n      return undefined;\n    },\n  });\n  if (isCancel(docsUrl)) {\n    return \"\";\n  }\n  return docsUrl;\n}\nasync function askManualImportPath() {\n  const importPath = await text({\n    message: `Enter the import path for the component:`,\n    placeholder: \"e.g., @mui/material/Button, @mui/material/components/Button\",\n    validate(value) {\n      value = value.trim();\n      if (value === \"\") {\n        return \"Import path cannot be empty\";\n      }\n\n      // check for common user mistakes\n      if (value.includes(\"\\\\\")) {\n        return \"Use forward slashes (/) in import paths, not backslashes (\\\\)\";\n      }\n\n      // Check if the path is quoted (starts and ends with quotes)\n      const isQuoted =\n        (value.startsWith('\"') && value.endsWith('\"')) ||\n        (value.startsWith(\"'\") && value.endsWith(\"'\"));\n\n      if (\n        value.includes(\" \") &&\n        !value.startsWith(\"./\") &&\n        !value.startsWith(\"../\") &&\n        !isQuoted &&\n        !value.startsWith(\"@\") //\n      ) {\n        return \"Import path contains spaces. Consider quoting the path if this is intentional\";\n      }\n\n      if (value.endsWith(\"/\")) {\n        return \"Import path should not end with a slash\";\n      }\n\n      if (value.includes(\"..\") && !value.startsWith(\"../\")) {\n        return \"Invalid path format - use '../' for parent directories\";\n      }\n\n      return undefined;\n    },\n  });\n\n  if (isCancel(importPath)) {\n    cancel(\"Import path entry cancelled\");\n    return await exit(1);\n  }\n\n  // Remove quotes if the path was quoted\n  let cleanPath = importPath.trim();\n  if (\n    (cleanPath.startsWith('\"') && cleanPath.endsWith('\"')) ||\n    (cleanPath.startsWith(\"'\") && cleanPath.endsWith(\"'\"))\n  ) {\n    cleanPath = cleanPath.slice(1, -1);\n  }\n\n  return cleanPath;\n}\nasync function validateAndLoadManualImport(\n  sys: DevToolsSys,\n  devTools: DevTools,\n  importPath: string,\n): Promise<ComponentInfo[] | null> {\n  try {\n    if (importPath.startsWith(\"@\")) {\n      const packageName = importPath.split(\"/\").slice(0, 2).join(\"/\");\n      const packagePath = sys.join(\n        sys.getAppRootDir(),\n        \"node_modules\",\n        packageName,\n      );\n      const packageExists = await sys.exists(packagePath);\n\n      if (!packageExists) {\n        log.error(`Package not found: ${importPath}`);\n        log.info(\n          `Please install the package first: npm install ${packageName}`,\n        );\n        return null;\n      }\n    }\n\n    log.info(`Validating import path: ${importPath}`);\n\n    devTools.addExternalPackage(importPath);\n    const newRegistry = await devTools.getRegistry({\n      readAllInputTypes: true,\n    });\n\n    if (newRegistry) {\n      const matchingComponents = newRegistry.components.filter(\n        (cmp) => cmp.importPath === importPath,\n      );\n\n      if (matchingComponents.length > 0) {\n        log.success(\n          `\u2713 Found ${matchingComponents.length === 1 ? matchingComponents[0].importName : matchingComponents.length} component${matchingComponents.length === 1 ? \"\" : \"s\"} in ${importPath}`,\n        );\n        return matchingComponents;\n      } else {\n        log.warning(`No components found at import path: ${importPath}`);\n        return null;\n      }\n    } else {\n      log.error(`Failed to load registry with import path: ${importPath}`);\n      return null;\n    }\n  } catch (error) {\n    sys.Sentry?.captureException(error);\n    log.error(`Error validating import path ${importPath}: ${String(error)}`);\n    return null;\n  }\n}\n\nasync function askSelectedComponents(\n  importData: (readonly [string, FigmaComponentInfo])[],\n  figmaBuilderLinks: FigmaBuilderLink[],\n) {\n  const selectedComponents = await multiselect({\n    message: `Pick which ${magenta(\n      \"\u2756\",\n    )} Figma components you want to connect to code:`,\n    required: true,\n    options: importData.map(([, c]) => ({\n      label: `${c.name}${\n        figmaBuilderLinks.some((link) => link.figmaKey === c.key)\n          ? dim(\" (already mapped)\")\n          : \"\"\n      }`,\n      value: c.key,\n    })),\n    initialValues: importData\n      .map(([, c]) => c.key)\n      .filter((key) => {\n        return !figmaBuilderLinks.some((link) => link.figmaKey === key);\n      }),\n  });\n\n  if (isCancel(selectedComponents)) {\n    cancel(\"Mapping not saved, goodbye!\");\n    return await exit(1);\n  }\n\n  return selectedComponents;\n}\n\nasync function askPackageImportPath(\n  componentPackages: DependencyTree | undefined,\n  isAngularFramework?: boolean,\n) {\n  if (!componentPackages || componentPackages.length === 0) {\n    return null;\n  }\n\n  if (componentPackages.length === 0) {\n    return null;\n  }\n\n  const choices = componentPackages.map((pkg) => ({\n    title: pkg.name,\n    value: pkg.name,\n  }));\n\n  const packageResult = await prompts({\n    type: \"autocomplete\",\n    name: \"package\",\n    message: `Select an installed external package:`,\n    hint: \"Type or use arrow keys. Press Enter to select\",\n    choices: choices,\n    async suggest(input, choices) {\n      input = input.toLowerCase();\n      const suggestions = choices\n        .map((c) => {\n          const entryText = c.value.trim().toLowerCase();\n          let d = 0;\n          if (input.length === 0) {\n            d = 0;\n          } else {\n            d = distance(input, entryText);\n          }\n          return {\n            ...c,\n            distance: d,\n          };\n        })\n        .sort((a, b) => a.distance - b.distance)\n        .filter((c) => {\n          return c.title.toLowerCase().includes(input);\n        });\n      return suggestions;\n    },\n  });\n\n  if (!packageResult.package) {\n    cancel(\"Package selection cancelled\");\n    return await exit(1);\n  }\n\n  let importPath = packageResult.package;\n  const selectedPackageInfo = componentPackages.find(\n    (pkg) => pkg.name === packageResult.package,\n  );\n\n  function startsWithCapital(str: string): boolean {\n    return /^[A-Z]/.test(str);\n  }\n\n  if (selectedPackageInfo && selectedPackageInfo.subPackages.length > 0) {\n    // Filter out known non-component subpackages\n    // Angular Material packages start with lower case, so removing that condition\n    const componentSubPackages = selectedPackageInfo.subPackages.filter(\n      (sub) =>\n        !NON_COMPONENT_PACKAGES.has(sub) &&\n        (isAngularFramework || startsWithCapital(sub)),\n    );\n\n    if (componentSubPackages.length > 0) {\n      const choices = [\n        {\n          title: `${selectedPackageInfo.name} ${dim(\"(Ctrl+C)\")}`,\n          value: null,\n        },\n        ...componentSubPackages.map((sub) => ({\n          title: `${dim(selectedPackageInfo.name)}/${sub}`,\n          value: sub,\n        })),\n      ];\n      const subPackageResult = await prompts({\n        type: \"autocomplete\",\n        name: \"subPackage\",\n        message: `Select a component subpackage (optional):`,\n        hint: \"Type or use arrow keys. Press Enter to select\",\n        async suggest(input, choices) {\n          input = input.toLowerCase().replace(selectedPackageInfo.name, \"\");\n          const suggestions = choices\n            .map((c) => {\n              if (c.value === null) {\n                return {\n                  ...c,\n                  distance: 0,\n                };\n              }\n              const entryText = c.value\n                ? c.value.trim().toLowerCase()\n                : selectedPackageInfo.name;\n              let d = 0;\n              if (input.length === 0) {\n                d = 0;\n              } else {\n                d = distance(input, entryText);\n              }\n              return {\n                ...c,\n                distance: d,\n              };\n            })\n            .sort((a, b) => a.distance - b.distance)\n            .filter((c) => {\n              return c.title.toLowerCase().includes(input);\n            });\n          return suggestions;\n        },\n        choices,\n      });\n\n      if (\n        subPackageResult.subPackage !==\n        `${selectedPackageInfo.name} ${dim(\"(Ctrl+C)\")}`\n      ) {\n        importPath = `${packageResult.package}/${subPackageResult.subPackage}`;\n      }\n    }\n  }\n  return importPath;\n}\n\nconst NON_COMPONENT_PACKAGES = new Set([\n  \"react\",\n  \"react-dom\",\n  \"next\",\n  \"nextjs\",\n  \"typescript\",\n  \"babel\",\n  \"webpack\",\n  \"eslint\",\n  \"prettier\",\n  \"jest\",\n  \"lodash\",\n  \"axios\",\n  \"express\",\n  \"moment\",\n  \"redux\",\n  \"react-redux\",\n  \"styled-components\",\n  \"emotion\",\n  \"@types/react\",\n  \"@types/node\",\n  \"@angular/core\",\n  \"@angular/common\",\n  \"@angular/router\",\n  \"@angular/platform-browser\",\n  \"@angular/platform-browser-dynamic\",\n  // Common subpackages that aren't components\n  \"utils\",\n  \"helpers\",\n  \"date-fns\",\n  \"constants\",\n  \"types\",\n  \"interfaces\",\n  \"hooks\",\n  \"gray-matter\",\n  \"context\",\n  \"providers\",\n  \"store\",\n  \"reducers\",\n  \"actions\",\n  \"services\",\n  \"api\",\n  \"clsx\",\n  \"class-variance-authority\",\n  \"lucide-react\",\n  \"dotenv\",\n  \"classnames\",\n]);\n\nconst isNonComponentPackages = (packageName: string) => {\n  if (packageName.startsWith(\"@types\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"@emotion\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"@builder.io\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"eslint\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"prettier\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"jest\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"lodash\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"remark\")) {\n    return true;\n  }\n  if (packageName.includes(\"autoprefixer\")) {\n    return true;\n  }\n  if (packageName.includes(\"tailwind\")) {\n    return true;\n  }\n  if (packageName.includes(\"postcss\")) {\n    return true;\n  }\n  if (packageName.includes(\"webpack\")) {\n    return true;\n  }\n  if (packageName.includes(\"babel\")) {\n    return true;\n  }\n  if (packageName.includes(\"typescript\")) {\n    return true;\n  }\n  if (packageName.includes(\"types\")) {\n    return true;\n  }\n  if (packageName.includes(\"rollup\")) {\n    return true;\n  }\n  if (packageName.includes(\"vite\")) {\n    return true;\n  }\n  if (packageName.includes(\"esbuild\")) {\n    return true;\n  }\n  if (packageName.includes(\"storybook\")) {\n    return true;\n  }\n  if (packageName.includes(\"testing-library\")) {\n    return true;\n  }\n  if (packageName.includes(\"cypress\")) {\n    return true;\n  }\n  return NON_COMPONENT_PACKAGES.has(packageName);\n};\n\nasync function askComponent(\n  components: ComponentInfo[],\n  componentNameRef: string,\n  addExternalPackage: boolean,\n  addManualImport: boolean,\n) {\n  const indent = \"\";\n  const bestMatch = componentNameRef.toLowerCase();\n  function isGoodMatch(c: ComponentInfo) {\n    const cmpName = c.importName.toLowerCase();\n    let d = distance(cmpName, bestMatch);\n    if (cmpName.includes(bestMatch)) {\n      d -= bestMatch.length;\n    }\n    return d;\n  }\n  const choices = components\n    .slice()\n    .sort((a, b) => {\n      const aDistance = isGoodMatch(a);\n      const bDistance = isGoodMatch(b);\n\n      if (aDistance === bDistance) {\n        return a.importName.localeCompare(b.importName);\n      }\n      return aDistance - bDistance;\n    })\n    .map((c) => {\n      let title = `${c.importName}`;\n      if (isGoodMatch(c) < 3) {\n        title = bold(yellow(\"\u2605 \") + title);\n      } else {\n        title = title;\n      }\n      return {\n        title: indent + title + dim(` from '${c.importPath}'`),\n        value: c as ComponentInfo | string,\n      };\n    });\n\n  choices.push({\n    title: indent + \"\u23ED\uFE0F  Skip \" + dim(\"(Ctrl+C)\"),\n    value: \"skip\",\n  });\n  choices.push({\n    title: indent + \"\uD83C\uDFD7\uFE0F  Scaffold Mapper \" + dim(\"(Generate interface only)\"),\n    value: \"scaffold\",\n  });\n  if (addExternalPackage) {\n    choices.push({\n      title: indent + \"\uD83D\uDCE6 External npm package\",\n      value: \"external package\",\n    });\n  }\n  if (addManualImport) {\n    choices.push({\n      title: indent + \"\u270F\uFE0F  Manual import path\",\n      value: \"manual import\",\n    });\n  }\n  const result = await prompts({\n    type: \"autocomplete\",\n    name: \"component\",\n    message: ` Select a code component to map ${bold(\n      magenta(`\u2756 ${componentNameRef}`),\n    )}`,\n    hint: \"Type or use arrow keys. Press Enter to select\",\n    async suggest(input, choices) {\n      input = input.toLowerCase();\n      const distanceInput = input.length === 0 ? bestMatch : input;\n      const suggestions = choices\n        .map((c) => {\n          const entryText = (\n            typeof c.value === \"string\" ? c.value : c.value.importName\n          )\n            .trim()\n            .toLowerCase();\n          let d = 0;\n          if (input.length === 0 && typeof c.value === \"string\") {\n            d = 2;\n          } else {\n            d = distance(distanceInput, entryText);\n            if (entryText.includes(bestMatch)) {\n              d -= bestMatch.length;\n            }\n            if (typeof c.value === \"string\") {\n              d += 1000;\n            }\n          }\n          return {\n            ...c,\n            distance: d,\n          };\n        })\n        .sort((a, b) => a.distance - b.distance)\n        .filter((c) => {\n          if (c.value === \"external package\") {\n            return true;\n          }\n          if (c.value === \"skip\") {\n            return true;\n          }\n          if (c.value === \"manual import\") {\n            return true;\n          }\n          return c.title.toLowerCase().includes(input);\n        });\n\n      return suggestions;\n    },\n    choices: choices,\n  });\n  return result.component;\n}\n\ninterface MappingItemDone {\n  type: \"done\";\n  code: string;\n  completion: string;\n  fileName: string;\n}\n\ninterface MappingItemCode {\n  type: \"code\";\n  delta: string;\n}\n\ninterface MappingItemStep {\n  type: \"step\";\n  title: string;\n}\n\ntype MappingItem = MappingItemDone | MappingItemCode | MappingItemStep;\n\nasync function* completionStream(\n  credentials: Credentials,\n  body: MappingCodeV3,\n  verbose: boolean,\n) {\n  const json = JSON.stringify(body);\n  const url = new URL(`${apiAirV2Host}/mappings/completions/v3`);\n  if (credentials.builderPublicKey) {\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n  }\n  if (credentials.userId) {\n    url.searchParams.set(\"userId\", credentials.userId);\n  }\n\n  const headers: Record<string, string> = {\n    \"Content-Type\": \"application/json\",\n  };\n  if (credentials.builderPrivateKey) {\n    headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n  }\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    body: json,\n    headers,\n  });\n\n  const stream = transformStream(res.body);\n  for await (const value of stream) {\n    if (value.length === 0) {\n      continue;\n    }\n    const json = JSON.parse(value) as MappingItem;\n    yield json;\n  }\n}\n", "import type { FigmaComponentInfo } from \"$/ai-utils\";\nimport {\n  getFigmaPropsInterface,\n  processRawFigmaJson,\n  getFigmaComponentName,\n} from \"$/vcp-common/figma-component\";\nimport type { CLIArgs } from \"..\";\nimport type { DevToolsSys } from \"../../core\";\nimport { getCredentials } from \"../credentials\";\nimport { figmaApi, parseFigmaURL } from \"../figma-utils\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport GUIDE_VUE from \"./create-vue.txt?raw\";\nimport GUIDE_ANGULAR from \"./create-angular.txt?raw\";\nimport GUIDE_REACT from \"./create-react.txt?raw\";\nimport GUIDE from \"./guide.txt?raw\";\nimport { confirm, intro, isCancel, log } from \"@clack/prompts\";\nimport { pkgVersion } from \"../version\";\nimport { bgCyan, bold, white, dim } from \"picocolors\";\nimport { spinner } from \"../spinner\";\nimport type {\n  Component,\n  ComponentSet,\n  Node,\n  PublishedComponent,\n  GetFileNodesResponse,\n  GetTeamComponentSetsQueryParams,\n  GetTeamComponentSetsResponse,\n  GetFileResponse,\n  PublishedComponentSet,\n  GetTeamComponentsQueryParams,\n  GetTeamComponentsResponse,\n  GetComponentResponse,\n} from \"@figma/rest-api-spec\";\nimport { sanitizeComponentName } from \"../../common/utils\";\n\ntype Context = {\n  sys: DevToolsSys;\n  args: CLIArgs;\n  debug: (msg: unknown) => void;\n  figmaAuth: { access_token: string; oauth: boolean };\n};\n\n/**\n * A component or component set\n */\ntype FigmaTeamComponent = {\n  /** The unique identifier for the component. */\n  key: string;\n  /** The unique identifier of the Figma file that contains the component. */\n  file_key: string;\n  /** The unique identifier of the component node within the Figma file. */\n  node_id: string;\n  /** A URL to a thumbnail image of the component. */\n  thumbnail_url?: string;\n  /** The name of the component. */\n  name: string;\n  /** The description of the component as entered by the publisher. */\n  description: string;\n  /** The component data. */\n  componentData?: FigmaComponentInfo;\n  /** Whether the component is published. */\n  isPublished?: boolean;\n};\n\n// Helper to extract IDs from Figma URLs\nexport function extractFigmaIds(url: string): {\n  teamId?: string;\n  fileKey?: string;\n  nodeId?: string;\n} {\n  const teamMatch = url.match(/team\\/(\\d+)/);\n\n  // For file/design URLs, try to use parseFigmaURL first\n  const parsedUrl = parseFigmaURL(url);\n\n  if (parsedUrl) {\n    const result = {\n      teamId: undefined,\n      fileKey: parsedUrl.fileID,\n      nodeId: parsedUrl.nodeId,\n    };\n    return result;\n  }\n\n  // Fallback to regex for team URLs or other formats\n  const fileMatch = url.match(/(?:file|design)\\/([a-zA-Z0-9]+)/);\n\n  const result = {\n    teamId: teamMatch?.[1],\n    fileKey: fileMatch?.[1],\n    nodeId: undefined,\n  };\n\n  return result;\n}\n\nexport async function fetchTeamComponents(\n  context: Context,\n  teamId: string,\n  onProgress: () => void,\n) {\n  const { sys, args, figmaAuth, debug } = context,\n    components: PublishedComponent[] = [];\n  let hasMore = true;\n  let after: number | undefined;\n\n  log.info(`Extracting components and component sets for team ${teamId}`);\n\n  while (hasMore) {\n    const params: GetTeamComponentsQueryParams = { page_size: 100 };\n    if (after) {\n      params.after = after;\n    }\n\n    debug({ url: `teams/${teamId}/components`, params });\n\n    onProgress();\n    const response = await figmaApi<GetTeamComponentsResponse>(\n      sys,\n      args,\n      `teams/${teamId}/components`,\n      {\n        auth: figmaAuth,\n        params,\n      },\n    );\n\n    const {\n      meta: { components, cursor },\n    } = response;\n    components.push(...components);\n\n    if (cursor) {\n      after = cursor.after;\n    } else {\n      hasMore = false;\n    }\n  }\n\n  return components;\n}\n\nexport async function fetchTeamComponentSets(\n  context: Context,\n  teamId: string,\n  onProgress: () => void,\n) {\n  const { sys, args, figmaAuth, debug } = context,\n    componentSets: PublishedComponentSet[] = [];\n  let hasMore = true;\n  let after: number | undefined;\n\n  log.info(`Extracting component sets for team ${teamId}`);\n\n  while (hasMore) {\n    const params: GetTeamComponentSetsQueryParams = { page_size: 100 };\n    if (after) {\n      params.after = after;\n    }\n\n    debug({ url: `teams/${teamId}/component_sets`, params });\n\n    onProgress();\n    const response = await figmaApi<GetTeamComponentSetsResponse>(\n      sys,\n      args,\n      `teams/${teamId}/component_sets`,\n      {\n        auth: figmaAuth,\n        params,\n      },\n    );\n\n    const {\n      meta: { component_sets, cursor },\n    } = response;\n    componentSets.push(...component_sets);\n\n    if (cursor) {\n      after = cursor.after;\n    } else {\n      hasMore = false;\n    }\n  }\n\n  return componentSets;\n}\n\n/**\n * Returns a list of components and component sets that are present in the file or selection as\n * well as a set of remote keys for components that are referenced but not present.\n */\nexport async function processFileOrSelection(\n  context: Context,\n  fileKey: string,\n  nodeId?: string,\n): Promise<{\n  fileComponents: FigmaTeamComponent[];\n  remoteKeys: Set<string>;\n}> {\n  const { sys, args, figmaAuth, debug } = context;\n  let fileResponse: {\n    name: string;\n    thumbnailUrl?: string;\n    role: \"owner\" | \"editor\" | \"viewer\";\n    lastModified: string;\n  } & GetFileNodesResponse[\"nodes\"][0];\n  let url;\n  if (nodeId) {\n    // nodes response includes the component and component set metadata but not necessarily the nodes themselves\n    // if they are outside of the selection.\n    url = `files/${fileKey}/nodes`;\n    const nodesResponse = await figmaApi<GetFileNodesResponse>(sys, args, url, {\n      auth: figmaAuth,\n      params: { ids: nodeId },\n    });\n\n    fileResponse = Object.assign(\n      {\n        name: nodesResponse.name,\n        thumbnailUrl: nodesResponse.thumbnailUrl,\n        role: nodesResponse.role,\n        lastModified: nodesResponse.lastModified,\n      },\n      nodesResponse.nodes[nodeId],\n    );\n  } else {\n    url = `files/${fileKey}`;\n    // File response `components` and `componentSets` may include components that were deleted from the node tree.\n    // To limit to only components that are in the node tree, we need to traverse the node tree and check if the component is in the node tree.\n    fileResponse = await figmaApi<GetFileResponse>(sys, args, url, {\n      auth: figmaAuth,\n    });\n  }\n\n  const { components, componentSets } = fileResponse;\n\n  // Reverse lookup of component and component set to node ids\n  const idsMap = new Map<Component | ComponentSet, string>();\n  for (const [id, component] of Object.entries(components)) {\n    idsMap.set(component, id);\n  }\n  for (const [id, componentSet] of Object.entries(componentSets)) {\n    idsMap.set(componentSet, id);\n  }\n\n  let remoteComponents = 0,\n    remoteComponentSets = 0;\n\n  const componentSetIds = new Set<string>();\n  // The keys are the component set ids mapped to the component set metadata\n  for (const [id, componentSet] of Object.entries(fileResponse.componentSets)) {\n    componentSetIds.add(id);\n    if (componentSet.remote) {\n      remoteComponentSets++;\n    }\n  }\n\n  const standaloneComponents: Component[] = [];\n\n  const componentToSetMap = new Map<string, string>();\n  for (const [_id, component] of Object.entries(fileResponse.components)) {\n    if (component.componentSetId) {\n      if (componentSetIds.has(component.componentSetId)) {\n        componentToSetMap.set(component.key, component.componentSetId);\n      }\n    } else {\n      standaloneComponents.push(component);\n      if (component.remote) {\n        remoteComponents++;\n      }\n    }\n  }\n\n  log.info(`Name: ${fileResponse.name}${nodeId ? `\\nSelection: ${nodeId}` : \"\"}\nLast Modified: ${fileResponse.lastModified}\nRole: ${fileResponse.role}\n`);\n  debug(`Component Sets: ${Object.keys(fileResponse.componentSets).length}\n  - Remote Component Sets: ${remoteComponentSets}\nComponents: ${Object.keys(fileResponse.components).length}\n  - Standalone Components: ${standaloneComponents.length}\n  - Components in Component Sets: ${componentToSetMap.size}\nRemote Components: ${remoteComponents}\n`);\n\n  let instanceCount = 0,\n    componentCount = 0,\n    componentSetCount = 0;\n\n  /** Set of components that are instanced within the file / selection */\n  const instancedStandaloneComponents = new Set<Component>(),\n    instancedComponentSets = new Set<ComponentSet>();\n\n  function setInstancedComponentOrSet(id: string) {\n    if (componentSets[id]) {\n      instancedComponentSets.add(componentSets[id]);\n      return;\n    }\n\n    // If the component is in a set add the set rather than the instance\n    let componentSetId;\n    if ((componentSetId = components[id]?.componentSetId)) {\n      const componentSet = componentSets[componentSetId];\n      instancedComponentSets.add(componentSet);\n    } else {\n      const component = components[id];\n      instancedStandaloneComponents.add(component);\n    }\n  }\n\n  traverse(fileResponse.document);\n\n  function traverse(node: Node) {\n    switch (node.type) {\n      case \"INSTANCE\":\n        instanceCount++;\n        setInstancedComponentOrSet(node.componentId);\n        break;\n      case \"COMPONENT\": {\n        componentCount++;\n        setInstancedComponentOrSet(node.id);\n        break;\n      }\n      case \"COMPONENT_SET\": {\n        componentSetCount++;\n        setInstancedComponentOrSet(node.id);\n        break;\n      }\n    }\n\n    if (\"children\" in node && node.children) {\n      node.children.forEach((child) => traverse(child));\n    }\n  }\n\n  debug(`\nSelection Info:\n  - Instances: ${instanceCount}\n    - Unique Instanced Standalone Components: ${instancedStandaloneComponents.size}\n    - Unique Instanced Component Sets: ${instancedComponentSets.size}\n  - Components: ${componentCount}\n  - Component Sets: ${componentSetCount}\n`);\n  const remoteKeys = new Set<string>(),\n    fileComponents = [\n      ...Array.from(instancedStandaloneComponents).map((component) => {\n        if (component.remote) {\n          remoteKeys.add(component.key);\n        }\n        return {\n          ...component,\n          file_key: fileKey,\n          node_id: idsMap.get(component)!,\n        };\n      }),\n      ...Array.from(instancedComponentSets).map((componentSet) => {\n        if (componentSet.remote) {\n          remoteKeys.add(componentSet.key);\n        }\n        return {\n          ...componentSet,\n          file_key: fileKey,\n          node_id: idsMap.get(componentSet)!,\n        };\n      }),\n    ];\n\n  return {\n    fileComponents,\n    remoteKeys,\n  };\n}\n\nasync function fetchRemoteComponent(\n  context: Context,\n  key: string,\n): Promise<FigmaTeamComponent | undefined> {\n  const { sys, args, figmaAuth, debug } = context;\n  debug(`Fetching remote component ${key}`);\n  try {\n    const { meta: component } = await figmaApi<GetComponentResponse>(\n      sys,\n      args,\n      `components/${key}`,\n      {\n        auth: figmaAuth,\n      },\n    );\n\n    return {\n      ...component,\n      key: component.key,\n      isPublished: true,\n    };\n  } catch (error: any) {\n    log.error(`Error fetching remote component ${key}\n  ${\"message\" in error ? error.message : \"Unknown error\"}`);\n    return undefined;\n  }\n}\n\n/**\n * Executes tasks with a concurrency limit using a worker pool pattern\n * @param tasks Array of tasks to execute\n * @param concurrencyLimit Maximum number of concurrent tasks\n * @param onProgress Optional callback for progress updates\n * @returns Array of task results in the same order as input tasks\n */\nasync function executeWithPool<T>(\n  tasks: (() => Promise<T>)[],\n  concurrencyLimit: number,\n  onProgress?: (completed: number, total: number) => void,\n): Promise<T[]> {\n  const results: T[] = new Array(tasks.length);\n  const pool = new Set<Promise<void>>();\n  let completed = 0;\n\n  for (let i = 0; i < tasks.length; i++) {\n    if (pool.size >= concurrencyLimit) {\n      await Promise.race(pool);\n    }\n\n    const task = tasks[i];\n    const workerPromise = (async () => {\n      try {\n        results[i] = await task();\n      } finally {\n        completed++;\n        onProgress?.(completed, tasks.length);\n      }\n    })();\n\n    pool.add(workerPromise);\n    workerPromise.finally(() => pool.delete(workerPromise));\n  }\n\n  await Promise.all(pool);\n  return results;\n}\n\nexport async function fetchRemoteComponentData(\n  context: Context,\n  remoteKeys: Set<string>,\n): Promise<(FigmaTeamComponent | undefined)[]> {\n  const { debug } = context;\n  const CONCURRENCY_LIMIT = 5;\n  const keys = Array.from(remoteKeys);\n\n  return executeWithPool(\n    keys.map((key) => () => fetchRemoteComponent(context, key)),\n    CONCURRENCY_LIMIT,\n    (completed, total) =>\n      debug(`Fetched remote component ${completed}/${total}`),\n  );\n}\n\nexport async function resolveComponentData(\n  context: Context,\n  components: FigmaTeamComponent[],\n): Promise<FigmaTeamComponent[]> {\n  const { sys, args, figmaAuth } = context;\n\n  // Group components by file_key to minimize API calls\n  const fileGroups = new Map<string, FigmaTeamComponent[]>();\n\n  for (const component of components) {\n    const fileComponents = fileGroups.get(component.file_key) || [];\n    fileComponents.push(component);\n    fileGroups.set(component.file_key, fileComponents);\n  }\n\n  // Fetch data for each file\n  await Promise.all(\n    Array.from(fileGroups.entries()).map(async ([fileKey, fileComponents]) => {\n      const nodeIds = fileComponents.map((c) => c.node_id).join(\",\");\n      const nodeData = await figmaApi<GetFileNodesResponse>(\n        sys,\n        args,\n        `files/${fileKey}/nodes`,\n        {\n          auth: figmaAuth,\n          params: { ids: nodeIds },\n        },\n      );\n\n      // Create a map of component keys\n      const componentKeysMap = new Map<string, string>();\n      if (nodeData.nodes) {\n        Object.entries(nodeData.nodes).forEach(([id, node]) => {\n          Object.entries(node.components || {}).forEach(([compId, comp]) => {\n            const { key } = comp;\n            componentKeysMap.set(compId, key);\n          });\n          Object.entries(node.componentSets || {}).forEach(([setId, set]) => {\n            const { key } = set;\n            componentKeysMap.set(setId, key);\n          });\n        });\n      }\n\n      // Update each component with its resolved data\n      for (const component of fileComponents) {\n        if (nodeData.nodes[component.node_id]) {\n          const rawJson = nodeData.nodes[component.node_id];\n          //@ts-expect-error `documents` is mandatory even though `document` works and is present\n          const processedData = processRawFigmaJson(rawJson);\n\n          // Get the component key from our map\n          const componentKey = componentKeysMap.get(component.node_id);\n\n          if (componentKey) {\n            component.key = componentKey;\n            component.isPublished = true;\n          }\n\n          component.componentData = {\n            ...processedData,\n            exportJson: rawJson,\n            key: componentKey || component.key,\n          };\n        }\n      }\n    }),\n  );\n\n  return components;\n}\n\nasync function downloadFile(url: string, outputPath: string): Promise<void> {\n  const response = await fetch(url);\n  const arrayBuffer = await response.arrayBuffer();\n  await fs.writeFile(outputPath, new Uint8Array(arrayBuffer));\n}\n\nexport async function generateComponentReport(\n  component: FigmaTeamComponent,\n  baseDir: string,\n): Promise<void> {\n  // Create component directory name (sanitize the component name for filesystem)\n  const componentDirName = sanitizeComponentName(component.name);\n  const componentDir = path.join(baseDir, componentDirName);\n\n  // Create component directory\n  await fs.mkdir(componentDir, { recursive: true });\n\n  const markdown = `\n# ${component.name}\n\nIf creating a new mapping is required, please, you must read the [Mapping guide](../MAPPING_GUIDE.md)\n\n${component.thumbnail_url ? await generateThumbnailSection(component, componentDir) : \"\"}\n\n## Component Details\n\n- **componentName**: \\`${component.name}\\`\n- **componentKey**: \\`${component.key}\\`\n- **Status**: ${component.isPublished ? \"\u2705 Published\" : \"\u26A0\uFE0F Not Published\"}${component.description ? `\\n- **Description**: ${component.description}` : \"\"}\n\n${component.componentData ? generateComponentDataSection(component) : \"\"}\n`;\n\n  // Write README.md\n  await fs.writeFile(path.join(componentDir, \"README.md\"), markdown, \"utf-8\");\n}\n\nasync function generateThumbnailSection(\n  component: FigmaTeamComponent,\n  componentDir: string,\n): Promise<string> {\n  // Remove query parameters from URL for the filename\n  const cleanUrl = new URL(component.thumbnail_url!);\n  const thumbnailFilename = `thumbnail${path.extname(cleanUrl.pathname)}`;\n  const thumbnailPath = path.join(componentDir, thumbnailFilename);\n\n  await downloadFile(component.thumbnail_url!, thumbnailPath);\n  return `![Component Thumbnail](./${thumbnailFilename})`;\n}\n\nfunction generateComponentDataSection(component: FigmaTeamComponent): string {\n  // Ensure componentData uses the correct key\n  component.componentData!.key = component.key;\n\n  const propsInterface =\n    component.componentData!.inputs.length > 0\n      ? `interface Figma${getFigmaComponentName(component.name)}Props {\\n${getFigmaPropsInterface(component.componentData!)}\\n}`\n      : `// This component has no configurable inputs\\ninterface Figma${getFigmaComponentName(component.name)}Props {}`;\n\n  let jsxSection = \"\\n\\n## Figma Component JSX\\n\";\n  if (component.componentData!.type === \"COMPONENT_SET\") {\n    const rawJson = component.componentData!.exportJson;\n    if (rawJson?.document?.children?.length) {\n      jsxSection += generateComponentSetVariants(rawJson);\n    } else {\n      jsxSection = \"\";\n    }\n  } else {\n    jsxSection += `\\`\\`\\`jsx\\n${component.componentData!.jsx}\\n\\`\\`\\``;\n  }\n\n  return `\n## Figma Component Inputs \\`{figma[PROP]}\\`\n\\`\\`\\`typescript\n${propsInterface}\n\\`\\`\\`${jsxSection}`;\n}\n\nfunction generateComponentSetVariants(rawJson: any): string {\n  const variants = rawJson.document.children\n    .map((variant: ComponentNode, index: number) => {\n      const variantData = processRawFigmaJson({\n        document: variant,\n        documents: [variant],\n        components: rawJson.components,\n        componentSets: rawJson.componentSets,\n        schemaVersion: rawJson.schemaVersion,\n        styles: rawJson.styles,\n      });\n\n      return `\n### Variant ${index + 1}: \\`${variant.name}\\`${variant.key ? ` (component key: ${variant.key})` : \"\"}\n\nVariant JSX:\n\\`\\`\\`jsx\n${variantData.jsx}\n\\`\\`\\``;\n    })\n    .join(\"\\n\");\n\n  if (variants.length === 0) {\n    return \"\";\n  }\n\n  return `\\nThis component has the following variants:\\n\\n${variants}`;\n}\n\nexport const runFigmaReport = async (sys: DevToolsSys, args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" figma report \"))) + `  ` + dim(pkgVersion));\n\n  const { figmaAuth } = await getCredentials(sys, args, {\n    requireFigmaAuth: \"if-unset\",\n  });\n\n  const debug = (msg: unknown) => {\n    if (args.debug || args.verbose) {\n      if (typeof msg !== \"string\") {\n        msg = JSON.stringify(msg, null, 2);\n      }\n      log.info(msg as string);\n    }\n  };\n\n  const context: Context = {\n    sys,\n    args,\n    debug,\n    figmaAuth: figmaAuth!,\n  };\n\n  if (!args.url) {\n    throw new Error(\n      \"Please provide a Figma team or file URL using the --url flag\",\n    );\n  }\n\n  const { teamId, fileKey, nodeId } = extractFigmaIds(args.url);\n  debug({ teamId, fileKey, nodeId });\n\n  if (!teamId && !fileKey) {\n    throw new Error(\n      \"Invalid Figma URL. Expected format: https://www.figma.com/files/team/{team_id}/... or https://www.figma.com/file/{file_key}/...\",\n    );\n  }\n\n  // Setup reports directory\n  const reportsDir = path.join(process.cwd(), \"figma-components\");\n\n  // Check if directory exists and ask for confirmation about merging\n  if (\n    await fs\n      .access(reportsDir)\n      .then(() => true)\n      .catch(() => false)\n  ) {\n    const shouldMerge = await confirm({\n      message: `Directory ${reportsDir} exists. Would you like to merge with existing files?`,\n      initialValue: true,\n    });\n\n    if (isCancel(shouldMerge)) {\n      process.exit(1);\n    } else if (shouldMerge) {\n      log.info(\"Will merge with existing directory\");\n    } else {\n      log.info(\"Removing existing directory and starting fresh\");\n      await fs.rm(reportsDir, { recursive: true, force: true });\n    }\n  }\n\n  await fs.mkdir(reportsDir, { recursive: true });\n  await fs.writeFile(path.join(reportsDir, \"MAPPING_GUIDE.md\"), GUIDE, \"utf-8\");\n  await fs.writeFile(path.join(reportsDir, \"MAP_VUE.md\"), GUIDE_VUE, \"utf-8\");\n  await fs.writeFile(\n    path.join(reportsDir, \"MAP_ANGULAR.md\"),\n    GUIDE_ANGULAR,\n    \"utf-8\",\n  );\n  await fs.writeFile(\n    path.join(reportsDir, \"MAP_REACT.md\"),\n    GUIDE_REACT,\n    \"utf-8\",\n  );\n  //www.figma.com/design/7Pp7lYPHEyWuqZlmlCap7x/Material-UI-for-Figma-(and-MUI-X)-(Community)?node-id=6466-23523\n\n  let components: FigmaTeamComponent[];\n  let remoteKeys = new Set<string>();\n\n  const s = spinner();\n  s.start();\n\n  if (teamId) {\n    let pages = 0;\n    const onProgress = () => {\n      pages++;\n      s.message(\n        `Fetching team components (this may take a while) [${pages}/??]`,\n      );\n    };\n    // Get team components\n    components = await Promise.all([\n      fetchTeamComponents(context, teamId, onProgress),\n      fetchTeamComponentSets(context, teamId, onProgress),\n    ]).then(([components, componentSets]) => [...components, ...componentSets]);\n  } else if (fileKey) {\n    s.start(\"Fetching file components\");\n    // Get file components\n    ({ fileComponents: components, remoteKeys } = await processFileOrSelection(\n      context,\n      fileKey,\n      nodeId,\n    ));\n  } else {\n    throw new Error(\"Neither team ID nor file key could be extracted from URL\");\n  }\n\n  s.stop(`Fetched ${components.length} components`);\n\n  if (remoteKeys.size > 0) {\n    s.start(\"Fetching remote component data\");\n    const remoteComponents = await fetchRemoteComponentData(\n      context,\n      remoteKeys,\n    );\n    s.stop(`Fetched ${remoteComponents.length} remote components`);\n\n    components.push(\n      ...(remoteComponents.filter(\n        (c) => c !== undefined,\n      ) as FigmaTeamComponent[]),\n    );\n  }\n\n  // Resolve additional component data\n  s.start(\"Resolving component data\");\n  let resolvedComponents = await resolveComponentData(context, components);\n  s.stop(`Resolved ${resolvedComponents.length} components`);\n\n  const emptyComponents = [],\n    hiddenComponents = [];\n\n  resolvedComponents = resolvedComponents.filter((c) => {\n    const empty = isEmptyMetadata(c.componentData);\n    if (empty) {\n      emptyComponents.push(c);\n      return false;\n    }\n    const hidden = isHiddenComponent(c);\n    if (hidden) {\n      hiddenComponents.push(c);\n      return false;\n    }\n    return true;\n  });\n\n  // Generate individual reports\n  await Promise.all(\n    resolvedComponents.map((component) =>\n      generateComponentReport(component, reportsDir),\n    ),\n  );\n\n  const indexData = {\n    components: resolvedComponents.map((c) => ({\n      name: c.name,\n      key: c.key,\n      dir: path.relative(\n        reportsDir,\n        path.join(reportsDir, sanitizeComponentName(c.name)),\n      ),\n    })),\n  };\n\n  await fs.writeFile(\n    path.join(reportsDir, \"index.json\"),\n    JSON.stringify(indexData, null, 2),\n    \"utf-8\",\n  );\n\n  const skipped = emptyComponents.length + hiddenComponents.length;\n\n  log.info(\n    `\\nReports generated in: ${reportsDir}\nProcessed ${resolvedComponents.length} components${\n      skipped > 0\n        ? `\\nSkipped ${skipped} components\n  - ${emptyComponents.length} empty (no inputs and no JSX)\n  - ${hiddenComponents.length} hidden (name starts with _ or .)`\n        : \"\"\n    }`,\n  );\n};\n\n/**\n * Figma components that start with _ or . are hidden by default.\n */\nfunction isHiddenComponent(component: FigmaTeamComponent): boolean {\n  return component.name.startsWith(\"_\") || component.name.startsWith(\".\");\n}\n\n/**\n * A component is empty if it has no inputs and no JSX.\n */\nfunction isEmptyMetadata(\n  componentData: FigmaComponentInfo | undefined,\n): boolean {\n  if (!componentData) return true;\n  return componentData.inputs.length === 0 && componentData.jsx === \"\";\n}\n", "# Creating mappings for Vue\n\nComponent mappings in Vue involve creating `.mapper.ts` files that connect Figma components to your Vue code components. These mappings define how Figma component properties translate to Vue component props.\n\nA component mapping file links a specific Figma component to a Vue component in your codebase. To identify the Figma component, you must include:\n\n- `componentName`: The exact name of the component or component set in Figma (required)\n\nAnd one of:\n- `componentKey`: A unique identifier for the Figma component\n- `url`: The Figma URL that points to the component (more human-readable)\n\nExample of a mapping:\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Primary Button\",\n  mapper(figma) {\n    return html`\n      <${VButton}\n        :variant=${figma.Variant?.toLowerCase()}\n        :size=${figma.Size?.toLowerCase()}\n      >\n        ${figma.$children}\n      <//>\n    `;\n  },\n});\n```\n\nThese mapping files are just normal files in your repository that can be created manually. Once these files exist in your project, we use `npx builder.io@latest figma publish` to [publish them](/component-mapping/publishing) to your Builder Space.\n\n## Creating Mappings Manually\n\nLet's start by understanding how to create mappings manually, which gives you complete control over how Figma designs are translated to code.\n\n### Manual Mapping Process in Detail\n\n1. **Create a Mapper File**: Create a file with the naming convention `[componentName].mapper.ts` in your project. Many developers use a dedicated `mappings` directory to organize these files, for example: `src/mappings/Button.mapper.ts`.\n\n2. **Import Required Dependencies**:\n\n   ```ts\n   import { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\n   import YourComponent from \"@/path/to/your/component\";\n   ```\n\n   > **Important**: When importing components in mapper files, always use non-relative import paths that reflect how the component will be imported in production:\n   > ```ts\n   > // \u274C Don't use relative imports\n   > import { Button } from '../components/button';\n   > \n   > // \u2705 Use the actual package import path\n   > import { Button } from '@your-org/components';\n   > ```\n   > This is especially important when creating mappings for a design system or component library, as the mappings need to work in any project that consumes your components.\n\n3. **Define Your Mapping Function**:\n\n   Vue offers two approaches for defining your mappings: HTML template literals (similar to Angular) or JSX (similar to React). Choose the approach that best fits your team's preferences and existing codebase.\n\n   #### Using HTML Template Literals:\n\n   ```ts\n   // Using the URL approach (more human-readable)\n   figmaMapping({\n     componentKey: \"xxxxx\",\n     mapper(figma) {\n       return html`\n         <${YourComponent}\n           :prop1=${figma.Property1}\n           :prop2=${figma.Property2}\n         >\n           ${figma.$children}\n         <//>\n       `;\n     },\n   });\n   ```\n\n   The URL approach is often preferred for manual mapping because it's more human-readable, easier to obtain directly from Figma, and provides a direct link back to the visual component.\n\n   ### Component Reference Options\n\n   #### 1. HTML Template Literals with Component Tag (Recommended for Vue)\n   ```ts\n   figmaMapping({\n     mapper(figma) {\n       return html`\n         <${VButton} variant=\"primary\">\n           ${figma.$children}\n         <//>\n       `;\n     },\n   });\n   ```\n\n   > **Note**: For Vue mappings, we recommend using the second approach (HTML Template Literals with Component Tag) as it provides the best balance between readability and Vue-like syntax. The `$cmp` approach is more commonly used in Angular mappings, while JSX is typically associated with React patterns.\n\n\n### HTML Template Literals:\n- More familiar to Vue developers used to Vue's template syntax\n- Uses `:prop=\"value\"` binding syntax (similar to Vue templates)\n- Great for simple components and straightforward mappings\n- Easier to visualize the final template structure\n- Uses `<${Component}>` syntax for component references with `<//>` closing tag\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<button-component>${figma.$children}</button-component>`;\n  },\n});\n```\n\n\n## Understanding the Interfaces and APIs\n\nThe mapping function has access to a rich set of properties and methods through the `figma` parameter:\n\n### Core Properties and Methods\n\n#### `figma.$children`\n\nReturns an array of all direct child nodes of the current Figma design.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<${VButton}>${figma.$children}<//>`;\n  },\n});\n```\n\n#### `figma.$textContent`\n\nRetrieves the text content from the current Figma design node or its text children.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<${VButton}>${figma.$children[1].$textContent}<//>`;\n  },\n});\n```\n\n#### `figma.$findOneByName(name)`\n\nMaps a specific child node of the current Figma component by its layer name.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Dialog Component\",\n  mapper(figma) {\n    return html`<div>${figma.$findOneByName(\"dialog\")}</div>`;\n  },\n});\n```\n\n#### `figma.$findOne(callback)`\n\nFinds the first node that meets specified criteria through a callback function.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Page Component\",\n  mapper(figma) {\n    return html`<div>\n      ${figma.$findOne((node) => node.name === \"Heading\")}\n    </div>`;\n  },\n});\n```\n\n#### `figma.$visit(callback)`\n\nTraverses all child nodes and applies a function to each one.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Content Component\",\n  mapper(figma) {\n    return figma.$visit((node) => {\n      if (node.name === \"Header\") {\n        return html`<h1>${node.$textContent}</h1>`;\n      } else if (node.name === \"Content\") {\n        return node.$textContent;\n      }\n    });\n  },\n});\n```\n\n## Advanced Mapping Examples\n\n### Basic Button Mapping\n\nUsing HTML template literals:\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { VButton } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`\n      <${VButton}\n        :color=${figma.Color?.toLowerCase()}\n        :size=${figma.Size?.toLowerCase()}\n        :type=${figma.Variant?.toLowerCase()}\n      >\n        ${figma.$children}\n      <//>\n    `;\n  },\n});\n```\n\nUsing JSX:\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { VButton } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return (\n      <VButton\n        color={figma.Color?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n        type={figma.Variant?.toLowerCase()}\n      >\n        {figma.$children}\n      </VButton>\n    );\n  },\n});\n```\n\n### Hero Section with Multiple Content Areas\n\nUsing HTML template literals:\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { VHero } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Hero Component\",\n  mapper(figma) {\n    const heading = figma.Heading;\n    const supportingText = figma.$findOneByName(\"Supporting Text\").$textContent;\n    const navigation = figma.$findOneByName(\"Navigation\");\n\n    return html`\n      <${VHero}\n        :heading=${heading}\n        :supporting-text=${supportingText}\n        :navigation=${navigation}\n      ><//>\n    `;\n  },\n});\n```\n\nUsing JSX:\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { VHero } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Hero Component\",\n  mapper(figma) {\n    const heading = figma.Heading;\n    const supportingText = figma.$findOneByName(\"Supporting Text\").$textContent;\n    const navigation = figma.$findOneByName(\"Navigation\");\n\n    return (\n      <VHero\n        heading={heading}\n        supportingText={supportingText}\n        navigation={navigation}\n      />\n    );\n  },\n});\n```\n\n### Using Your Own CSS Classes\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Make an array to hold the CSS class names\n    const classes = [\"button\"];\n\n    // If figma.variant is 'primary', add the 'button-primary' class\n    if (figma.variant === \"primary\") {\n      classes.push(\"button-primary\");\n    }\n\n    // Return a button with class binding\n    return html`<button :class=${classes.join(\" \")}>${figma.Text}</button>`;\n  },\n});\n```\n\n### Generic Mapping Function\n\nFor complex layouts or special case handling, you can create a generic mapper:\n\n```ts\nfigmaMapping({\n  genericMapper(figma) {\n    if (figma.$name === \"Grid row\") {\n      return html`<${VGrid}>${figma.$children}<//>`;\n    } else if (figma.$name === \"Section\") {\n      return html`<section>${figma.$children}</section>`;\n    }\n    return undefined;\n  },\n});\n```\n\n## Advanced Table Example\n\nHere's a more complex example mapping a table component:\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Table Component\",\n  mapper(figma) {\n    // Extract columns data\n    const columns =\n      figma.$children?.map((column) => {\n        const header = column.$findOneByName(\"Header\")?.$textContent ?? \"\";\n        return { name: header, uid: header.toLowerCase() };\n      }) ?? [];\n\n    // Extract rows data\n    const firstColumn = figma.$children?.[0];\n    const rowsFrame = firstColumn?.$findOneByName(\"Rows\");\n    const rowCount = rowsFrame?.$children?.length ?? 0;\n\n    // Create rows data structure\n    const rows = Array.from({ length: rowCount }, (_, rowIndex) => {\n      const rowData = {};\n      figma.$children?.forEach((column) => {\n        const rowItem = column.$findOneByName(\"Rows\")?.$children?.[rowIndex];\n        const cellContent =\n          rowItem?.$findOneByName(\"Row item\")?.$textContent ?? \"\";\n        const columnId =\n          column.$findOneByName(\"Header\")?.$textContent?.toLowerCase() ?? \"\";\n        rowData[columnId] = cellContent;\n      });\n      return { id: rowIndex, ...rowData };\n    });\n\n    return html`\n      <${VTableView}\n        aria-label=\"Table\"\n        :is-quiet=${figma.Style === \"Quiet\"}\n        :selection-mode=${figma[\"Selection Column\"] === \"True\"\n          ? \"multiple\"\n          : \"none\"}\n        :columns=${columns}\n        :rows=${rows}\n      ><//>\n    `;\n  },\n});\n```", "# Creating mappings for Angular\n\nComponent mappings in Angular involve creating `.mapper.ts` files that connect Figma components to your Angular code components. These mappings define how Figma component properties translate to Angular component properties.\n\nA component mapping file links a specific Figma component to an Angular component in your codebase. To identify the Figma component, you must include:\n\n- `componentName`: The exact name of the component or component set in Figma (required)\n\nAnd one of:\n- `componentKey`: A unique identifier for the Figma component\n- `url`: The Figma URL that points to the component (more human-readable)\n\nExample of a mapping:\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Primary Button\",\n  mapper(figma) {\n    return html`\n      <button-component\n        variant=${figma.Variant?.toLowerCase()}\n        size=${figma.Size?.toLowerCase()}\n      >\n        ${figma.$children}\n      </button-component>\n    `;\n  },\n});\n```\n\nThese mapping files are just normal files in your repository that can be created manually. However, for convenience, we also provide a CLI command to generate them more easily with AI assistance.\n\nOnce this files exist in your project, we use `npx builder.io@latest figma publish` to [publish them](/component-mapping/publishing) to your Builder Space.\n\n## Understanding HTML Template Literals in Angular Mappings\n\nWhen working with Angular component mappings, you'll notice that we use HTML template literals (`` html`...` ``) instead of Angular's standard template syntax. This section explains this approach and how to use it effectively.\n\n### Why HTML Template Literals?\n\nBuilder.io uses HTML template literals for component mappings because:\n\n1. **Framework Agnostic**: This syntax provides a universal way to describe templating across HTML-based frameworks like Angular, Vue, or Web Components\n2. **Lightweight**: It doesn't require large external dependencies that would bloat your application\n3. **Well-tested API**: The syntax is battle-tested and widely used in libraries like lit-element\n\nIt's important to understand that the template in a mapper function is **not a real Angular component**. These mappers are declarative definitions that run outside the Angular runtime, serving as a bridge between Figma components and your Angular components.\n\n### Syntax Comparison: Angular Templates vs HTML Template Literals\n\nHere's how the HTML template literal syntax compares to standard Angular template syntax:\n\n| Feature                    | Standard Angular Template   | HTML Template Literal                         |\n| -------------------------- | --------------------------- | --------------------------------------------- |\n| Binding properties         | `[property]=\"value\"`        | `property=${value}`                           |\n| Binding boolean attributes | `[disabled]=\"isDisabled\"`   | `disabled=${isDisabled}`                      |\n| String attributes          | `attribute=\"value\"`         | `attribute=\"value\"`                           |\n| Event binding              | `(click)=\"handleClick()\"`   | `@click=${handleClick}`                       |\n| Class binding              | `[class.active]=\"isActive\"` | `class=\"active ${isActive ? 'enabled' : ''}\"` |\n| Style binding              | `[style.color]=\"color\"`     | `style=\"color: ${color};\"`                    |\n| Interpolation              | `{{ value }}`               | `${value}`                                    |\n| Template reference         | `#templateRef`              | `id=\"some-id\"` (and reference by DOM ID)      |\n| Component selector         | `<app-component>`           | `<app-component>` (same)                      |\n| Component reference        | N/A                         | `$cmp=${Component}`                           |\n\n### Examples of HTML Template Literal Usage\n\nHere are a few examples to help you understand how to use HTML template literals in your component mappings:\n\n#### Basic Property Binding\n\n```ts\nimport { MyButton } from \"@/components/ui/button\";\n// Standard Angular template\n// <button-component [variant]=\"primary\" [size]=\"large\"></button-component>\n\n// HTML template literal in mapper\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`\n      <button-component\n        color=${figma.Color?.toLowerCase()}\n        size=${figma.Size?.toLowerCase()}\n        type=${figma.Variant?.toLowerCase()}\n        $cmp=${MyButton}\n      >\n        ${figma.$children}\n      </button-component>\n    `;\n  },\n});\n```\n\n#### Using $cmp with Angular Material Components\n\n```ts\nimport { MuiButton } from \"@angular/material\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Material Button\",\n  mapper(figma) {\n    return html`\n      <button\n        mui\n        variant=${figma.Variant}\n        color=${figma.Color}\n        $cmp=${MuiButton}\n      >\n        ${figma.Label}\n      </button>\n    `;\n  },\n});\n```\n\n#### Conditional Rendering\n\n```ts\nimport { ConditionalComponent } from \"@/components/conditional\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Conditional Component\",\n  mapper(figma) {\n    return html`\n      ${figma.ShowElement\n        ? html`<div visible=${figma.Visible} $cmp=${ConditionalComponent}>\n            Content\n          </div>`\n        : \"\"}\n    `;\n  },\n});\n```\n\n#### Handling Events\n\n```ts\nimport { ButtonComponent } from \"@/components/button\";\n\n// Standard Angular template\n// <button (click)=\"handleClick()\">Click me</button>\n\n// HTML template literal in mapper - Note: event handlers are rarely used in mappers\n// as they're typically defined in your actual components\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`\n      <button-component\n        click=${() => console.log(\"clicked\")}\n        disabled=${figma.Disabled}\n        $cmp=${ButtonComponent}\n      >\n        Click me\n      </button-component>\n    `;\n  },\n});\n```\n\n#### List Rendering\n\n```ts\nimport { ListComponent } from \"@/components/list\";\n\n// Standard Angular template\n// <ul><li *ngFor=\"let item of items\">{{item}}</li></ul>\n\n// HTML template literal in mapper\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"List Component\",\n  mapper(figma) {\n    const items = figma.Items || [];\n    return html`\n      <ul $cmp=${ListComponent} items=${items}>\n        ${items.map((item) => html`<li>${item}</li>`)}\n      </ul>\n    `;\n  },\n});\n```\n\n### Common Gotchas and Best Practices\n\n1. **Property Binding**: Use `property=${value}` for property binding (Angular's `[propName]`).\n\n2. **Boolean Attributes**: Use `disabled=${condition}` syntax for boolean attributes that should be present or absent based on a condition.\n\n3. **Expression Interpolation**: Use `${expression}` anywhere inside the template to insert dynamic values.\n\n4. **Conditional Rendering**: There's no direct equivalent to `*ngIf` - use ternary expressions: `${condition ? html`<element></element>` : ''}`.\n\n5. **List Rendering**: There's no direct equivalent to `*ngFor` - use JavaScript's `map()` to transform arrays into templates.\n\n6. **Template Structure**: The template must have a single root element or fragment. If you need multiple root-level elements, wrap them in a container.\n\n7. **Component Selector Names**: Angular components typically use kebab-case selectors in templates, so continue using that convention in your HTML template literals.\n\n8. **Component Reference**: Always use `$cmp=${Component}` to reference the actual component implementation.\n\nRemember that these mappers are not creating actual Angular components - they're just defining how Figma components map to your existing Angular components. The HTML template literal syntax is a way to express this mapping in a framework-agnostic way.\n\n## Using the CLI to Generate Mappings\n\nThe CLI provides a more convenient approach with AI assistance to help you bootstraps mappings more quickly.\nNotice that both approaches (manual and CLI) lead to the same result, creating `[componentName].mapper.ts` files in your project.\n\n### The CLI Generate Process in Detail\n\nThe CLI-based workflow leverages AI to automatically generate appropriate mappings between your Figma designs and code components. It analyzes the Figma component, your code components, and any additional documentation to figure out the best mapper function.\n\n1. **Use the Builder Figma Plugin**: Open the Builder Figma Plugin and navigate to the Design System tab. The plugin scans your selection and identifies unmapped components.\n\n2. **Select Components in Figma**: Select the components you want to map to your code components.\n\n3. **Generate the CLI Command**: In the Design System tab of the plugin, you'll see a list of unmapped components along with a CLI command. This command includes the Figma IDs for all unmapped components. Copy this command by clicking the copy icon.\n\n   ```bash\n   # Example command\n   npx builder.io@latest figma generate --token [TOKEN]\n   ```\n\n   The long string in the command is the Figma component ID, which uniquely identifies the component in Figma. This ID is automatically extracted by the plugin and inserted into the command.\n\n4. **Run the Command**: Open your terminal in your project directory and paste the command. When you run it, the CLI will:\n\n   - Look up the Figma components based on their IDs\n   - Scan your codebase for potential matching components\n\n5. **Select Local Components**: The CLI will display a list of code components found in your project and prompt you to select which ones should be mapped to your Figma components. Use the arrow keys to navigate and press Enter to select a component.\n\n   ```\n   Select a code component to map \u2756 PrimaryButton\n   \u276F \u2605 Button from '@/components/ui/button'\n     Card from '@/components/ui/card'\n     \u23ED\uFE0F  Skip (Ctrl+C)\n     \uD83C\uDFD7\uFE0F  Scaffold Mapper (Generate interface only)\n     \uD83D\uDCE6 External npm package\n   ```\n\n   > **Pro Tip**: The CLI suggests the best matches first (marked with \u2605), based on name similarity. If your component is in an external package, select that option to choose from installed packages.\n\n6. **Add Documentation (Optional)**: The CLI will ask if you want to provide a documentation URL for your component. For optimal results, provide a URL to documentation that includes actual code examples showing how to use the component:\n\n   ```\n   Providing a docs URL for Button can drastically improve results: (Ctrl+C to skip)\n   > https://material.angular.io/components/button/overview\n   ```\n\n   > **Pro Tip**: Adding a documentation URL significantly improves the quality of generated mappings, as the AI can learn from the component's official API documentation. For best results, provide URLs to pages that contain actual code examples of how to use the Angular component, showing properties, event handlers, and common patterns. Documentation with practical code samples is much more valuable than pages with only theoretical explanations or API references without examples.\n\n7. **Review AI-Generated Mappings**: The CLI uses AI to suggest appropriate mappings between your Figma and code components. It will show you the suggested mapping code:\n\n   ```ts\n   import { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\n   import { Button } from \"@/components/ui/button\";\n\n   figmaMapping({\n     componentKey: \"9ca66d3a1f5b2c4e7d8a0b9f\",\n     componentName: \"Primary Button\",\n     mapper(figma) {\n       return html`\n         <button-component\n           variant=${figma.Variant?.toLowerCase()}\n           size=${figma.Size?.toLowerCase()}\n           disabled=${figma.State === \"Disabled\"}\n         >\n           ${figma.$textContent || figma.Text || \"Button\"}\n         </button-component>\n       `;\n     },\n   });\n   ```\n\n8. **Refine the Mapping**: If needed, you can provide natural language feedback to improve the mapping:\n\n   ```\n   How does the mapping look? Reply \"good\", or provide feedback (Ctrl+C to exit)\n   > The button should use figma.Label for the text content instead of $textContent\n   ```\n\n   The AI will update the mapping based on your feedback and show you the revised code. You can continue this feedback loop until you're satisfied with the mapping.\n\n   > **Tip**: You can give specific instructions like \"Map the 'Color' property to the 'color' attribute\" or \"Use the first child as the icon.\"\n\n9. **Save the Mapping**: Once you're satisfied with the mapping, the CLI will ask where to save it:\n\n   ```\n   Where do you want to save the new mapping? (Ctrl+C to exit)\n   > src/mappings/Button.mapper.ts\n   ```\n\n   The default location is usually `src/mappings/[ComponentName].mapper.ts`, but you can specify any valid path within your project.\n\n10. **Publish the Mapping**: After creating one or more mappings, publish them to your Builder Space:\n\n    ```bash\n    npx builder.io figma publish\n    ```\n\n    This will display:\n\n    ```\n    Searching for mapping files...\n    Found 3 mapping files\n\n    Validating mappings...\n\n    You are about to publish 3 mapping files to your Builder.io space.\n    Do you want to continue? (Y/n)\n    > Y\n\n    Publishing mappings to Builder.io...\n    \u2713 Published 3 mapping files successfully\n\n    Your mappings are now available in the Builder Figma plugin\n    ```\n\n### Troubleshooting the CLI Process\n\nIf you encounter issues during the mapping process:\n\n1. **Component Not Found**: If the CLI can't find your component, it will offer to scaffold a basic mapping\n\n   ```\n   No matching components found for 'CustomButton'.\n   Do you want to scaffold a basic mapping? (Y/n)\n   > Y\n   ```\n\n2. **Authentication Problems**: Refresh your authentication with\n\n   ```bash\n   npx builder.io figma auth --force\n   ```\n\n3. **Mappings Not Working in Figma**: Verify that the CLI and Figma plugin are using the same Builder.io space, and try republishing with the verbose flag:\n\n   ```bash\n   npx builder.io figma publish --verbose\n   ```\n\n4. **TypeScript Errors During Publishing**: If the publish command fails with TypeScript errors or validation issues, you can bypass these checks using the `--force` flag:\n\n   ```bash\n   npx builder.io figma publish --force\n   ```\n\n   You'll see a warning, but the CLI will proceed with publishing:\n\n   ```\n   TypeScript errors in src/mappings/Button.mapper.ts:\n    \u2022 Cannot find name 'ButtonProps'\n    \u2022 Property 'variant' does not exist on type '{}'\n\n   Local mappings contain some errors, but --force flag was used, skipping.\n   ```\n\n   This is particularly useful when:\n\n   - You're dealing with complex TypeScript types the CLI doesn't understand\n   - The errors are in parts of the code that won't affect the mapping functionality\n   - You need to publish quickly and plan to fix the issues later\n\n   > **Caution**: While `--force` allows you to publish despite errors, it's best practice to fix the underlying issues when possible, as they might cause problems when using the Figma plugin.\n\n## Creating Mappings Manually\n\nLet's start by understanding how to create mappings manually, which gives you complete control over how Figma designs are translated to code.\n\n### Manual Mapping Process in Detail\n\n1. **Create a Mapper File**: Create a file with the naming convention `[componentName].mapper.ts` in your project. Many developers use a dedicated `mappings` directory to organize these files, for example: `src/mappings/Button.mapper.ts`.\n\n2. **Import Required Dependencies**:\n\n   ```ts\n   import { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\n   import YourComponent from \"@/path/to/your/component\";\n   ```\n\n   > **Important**: When importing components in mapper files, always use non-relative import paths that reflect how the component will be imported in production:\n   >\n   > ```ts\n   > // \u274C Don't use relative imports\n   > import { Button } from \"../components/button\";\n   >\n   > // \u2705 Use the actual package import path\n   > import { Button } from \"@your-org/components\";\n   > ```\n   >\n   > This is especially important when creating mappings for a design system or component library, as the mappings need to work in any project that consumes your components.\n\n3. **Define Your Mapping Function**:\n\n   This is where you'll write the logic that transforms Figma properties into Angular component properties.\n\n   ```ts\n   // Using the URL approach (more human-readable)\n   figmaMapping({\n     componentKey: \"XXXXXXX\",\n     componentName: \"Button Component\",\n     mapper(figma) {\n       return html`\n         <button-component\n           .property1=${figma.Property1}\n           .property2=${figma.Property2}\n         >\n           ${figma.$children}\n         </button-component>\n       `;\n     },\n   });\n   ```\n\n## Understanding the Interfaces and APIs\n\nThe mapping function has access to a rich set of properties and methods through the `figma` parameter:\n\n### Core Properties and Methods\n\n#### `figma.$children`\n\nReturns an array of all direct child nodes of the current Figma design.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<button-component>${figma.$children}</button-component>`;\n  },\n});\n```\n\n#### `figma.$textContent`\n\nRetrieves the text content from the current Figma design node or its text children.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<button-component\n      >${figma.$children[1].$textContent}</button-component\n    >`;\n  },\n});\n```\n\n#### `figma.$findOneByName(name)`\n\nMaps a specific child node of the current Figma component by its layer name.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Dialog Component\",\n  mapper(figma) {\n    return html`<div>${figma.$findOneByName(\"dialog\")}</div>`;\n  },\n});\n```\n\n#### `figma.$findOne(callback)`\n\nFinds the first node that meets specified criteria through a callback function.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Page Component\",\n  mapper(figma) {\n    return html`<div>\n      ${figma.$findOne((node) => node.name === \"Heading\")}\n    </div>`;\n  },\n});\n```\n\n#### `figma.$visit(callback)`\n\nTraverses all child nodes and applies a function to each one.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Content Component\",\n  mapper(figma) {\n    return figma.$visit((node) => {\n      if (node.name === \"Header\") {\n        return html`<h1>${node.$textContent}</h1>`;\n      } else if (node.name === \"Content\") {\n        return node.$textContent;\n      }\n    });\n  },\n});\n```\n\n## Advanced Mapping Examples\n\n### Basic Button Mapping\n\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { ButtonComponent } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`\n      <button-component\n        color=${figma.Color?.toLowerCase()}\n        size=${figma.Size?.toLowerCase()}\n        type=${figma.Variant?.toLowerCase()}\n      >\n        ${figma.$children}\n      </button-component>\n    `;\n  },\n});\n```\n\n### Hero Section with Multiple Content Areas\n\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { HeroComponent } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Hero Component\",\n  mapper(figma) {\n    const heading = figma.Heading;\n    const supportingText = figma.$findOneByName(\"Supporting Text\").$textContent;\n    const navigation = figma.$findOneByName(\"Navigation\");\n\n    return html`\n      <hero-component\n        .heading=${heading}\n        .supportingText=${supportingText}\n        .navigation=${navigation}\n      ></hero-component>\n    `;\n  },\n});\n```\n\n### Getting Content from Specific Child Layers\n\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { ButtonComponent } from \"@acme/design-system/button\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Use the text from the 2nd child ($children is zero indexed)\n    const text = figma.$children[1].$textContent;\n\n    return <Button>{text}</Button>;\n  },\n});\n```\n\nAnother option is to retrieve children by their layer name:\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    const text = figma.$findOneByName(\"Label\").$textContent;\n\n    return html`<button-component>${text}</button-component>`;\n  },\n});\n```\n\n### Using Your Own CSS Classes\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Make an array to hold the CSS class names\n    const classes = [\"button\"];\n\n    // If figma.variant is 'primary', add the 'button-primary' class\n    if (figma.variant === \"primary\") {\n      classes.push(\"button-primary\");\n    }\n\n    // Return a button with className applied\n    return html`<button class=\"${classes.join(\" \")}\">${figma.Text}</button>`;\n  },\n});\n```\n\n### Generic Mapping Function\n\nFor complex layouts or special case handling, you can create a generic mapper:\n\n```ts\nfigmaMapping({\n  genericMapper(figma) {\n    if (figma.$name === \"Grid row\") {\n      return html`<grid-component>${figma.$children}</grid-component>`;\n    } else if (figma.$name === \"Section\") {\n      return html`<section>${figma.$children}</section>`;\n    }\n    return undefined;\n  },\n});\n```\n\n## Advanced Table Example\n\nHere's a more complex example mapping a table component:\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Table Component\",\n  mapper(figma) {\n    // Extract columns data\n    const columns =\n      figma.$children?.map((column) => {\n        const header = column.$findOneByName(\"Header\")?.$textContent ?? \"\";\n        return { name: header, uid: header.toLowerCase() };\n      }) ?? [];\n\n    // Extract rows data\n    const firstColumn = figma.$children?.[0];\n    const rowsFrame = firstColumn?.$findOneByName(\"Rows\");\n    const rowCount = rowsFrame?.$children?.length ?? 0;\n\n    // Create rows data structure\n    const rows = Array.from({ length: rowCount }, (_, rowIndex) => {\n      const rowData = {};\n      figma.$children?.forEach((column) => {\n        const rowItem = column.$findOneByName(\"Rows\")?.$children?.[rowIndex];\n        const cellContent =\n          rowItem?.$findOneByName(\"Row item\")?.$textContent ?? \"\";\n        const columnId =\n          column.$findOneByName(\"Header\")?.$textContent?.toLowerCase() ?? \"\";\n        rowData[columnId] = cellContent;\n      });\n      return { id: rowIndex, ...rowData };\n    });\n\n    return html`\n      <table-view\n        aria-label=\"Table\"\n        isQuiet=${figma.Style === \"Quiet\"}\n        selectionMode=${figma[\"Selection Column\"] === \"True\"\n          ? \"multiple\"\n          : \"none\"}\n        columns=${columns}\n        rows=${rows}\n      ></table-view>\n    `;\n  },\n});\n```\n\nFor more information on the available parameters and options for the `figmaMapping` function, refer to the [API Reference](/component-mapping/api-reference).\n\nIf you're working with React instead of Angular, check out the [Creating React Mappings](/component-mapping/create-react) guide.\n\nFor a complete overview of the component mapping workflow, check the [Component Mapping Overview](/component-mapping/overview).\n\n## TypeScript Interfaces\n\nWhen working with TypeScript, you can leverage these interfaces for better type safety in your mapping functions:\n\n```tsx\nexport type FigmaNodeType =\n  | \"COMPONENT\"\n  | \"ELLIPSE\"\n  | \"FRAME\"\n  | \"GROUP\"\n  | \"INSTANCE\"\n  | \"LINE\"\n  | \"POLYGON\"\n  | \"RECTANGLE\"\n  | \"STAR\"\n  | \"TEXT\"\n  | \"VECTOR\";\n\nexport interface FigmaNode extends BaseFigmaProps {\n  /** Figma node \"name\" */\n  $name: string;\n\n  /** Figma node type (FRAME, GROUP, TEXT, etc.) */\n  $type:\n    | \"COMPONENT\"\n    | \"ELLIPSE\"\n    | \"FRAME\"\n    | \"GROUP\"\n    | \"INSTANCE\"\n    | \"LINE\"\n    | \"POLYGON\"\n    | \"RECTANGLE\"\n    | \"STAR\"\n    | \"TEXT\"\n    | \"VECTOR\";\n\n  /** Represents the text content of the node and its descendants */\n  $textContent: string;\n\n  /** URL to the rasterized image of this node */\n  $imageUrl: string;\n}\n\nexport interface BaseFigmaProps {\n  /** Direct children of the root component node or instance */\n  $children: (FigmaNode | undefined)[];\n\n  /** Recursively finds the first figma child with the given name, among all descendants */\n  $findOneByName(name: string | RegExp): FigmaNode | undefined;\n\n  /** Recursively finds all nodes with the given name, among all descendants */\n  $findAllByName(name: string | RegExp): FigmaNode[];\n\n  /** Recursively finds the first node that matches the predicate, among all descendants */\n  $findOne(predicate: (node: FigmaNode) => boolean): FigmaNode | undefined;\n\n  /** Recursively finds all nodes that match the predicate, among all descendants */\n  $findAll(predicate: (node: FigmaNode) => boolean): FigmaNode[];\n}\n```\n\nWhen creating a mapping function for a specific component, you should extend `BaseFigmaProps` with the properties from your Figma component:\n\n```tsx\nfigmaMapping({\n  componentKey: \"button-component-key\",\n  componentKey: \"[COMPONENT_KEY]\",\n  mapper(figma: FigmaButtonProps) {\n    return (\n      <Button\n        color={figma.Color?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n        type={figma.Variant?.toLowerCase()}\n      >\n        {figma.$children}\n      </Button>\n    );\n  },\n});\n```\n", "# Creating mappings for React\n\nComponent mappings in React involve creating `.mapper.tsx` or `.mapper.jsx` files that connect Figma components to your React code components. These mappings define how Figma component properties translate to React component props.\n\nA component mapping file links a specific Figma component to a React component in your codebase. To identify the Figma component, you must include:\n\n- `componentName`: The exact name of the component or component set in Figma (required)\n\nAnd one of:\n- `componentKey`: A unique identifier for the Figma component\n- `url`: The Figma URL that points to the component (more human-readable)\n\nExample of a mapping:\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Primary Button\",\n  mapper(figma) {\n    return (\n      <Button\n        variant={figma.Variant?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n      >\n        {figma.$children}\n      </Button>\n    );\n  },\n});\n```\n\nThese mapping files are just normal files in your repository that can be created manually. However, for convenience, we also provide a CLI command to generate them more easily with AI assistance.\n\nOnce this files exist in your project, we use `npx builder.io@latest figma publish` to [publish them](/component-mapping/publishing) to your Builder Space.\n\n## Creating Mappings Manually\n\nLet's start by understanding how to create mappings manually, which gives you complete control over how Figma designs are translated to code.\n\n### Manual Mapping Process in Detail\n\n1. **Create a Mapper File**: Create a file with the naming convention `[componentName].mapper.tsx` in your project. Many developers use a dedicated `mappings` directory to organize these files, for example: `src/mappings/Button.mapper.tsx`.\n\n2. **Import Required Dependencies**:\n\n   ```tsx\n   import { figmaMapping } from \"@builder.io/dev-tools/figma\";\n   import YourComponent from \"@/path/to/your/component\";\n   ```\n\n   > **Important**: When importing components in mapper files, always use non-relative import paths that reflect how the component will be imported in production:\n   >\n   > ```tsx\n   > // \u274C Don't use relative imports\n   > import { Button } from \"../components/button\";\n   >\n   > // \u2705 Use the actual package import path\n   > import { Button } from \"@your-org/components\";\n   > ```\n   >\n   > This is especially important when creating mappings for a design system or component library, as the mappings need to work in any project that consumes your components.\n\n3. **Define Your Mapping Function**:\n\n   This is where you'll write the logic that transforms Figma properties into React component props. You need to identify your Figma component using the `url` parameter:\n\n   ```tsx\n   // Using the URL approach (more human-readable)\n   figmaMapping({\n     componentKey: \"[COMPONENT_KEY]\",\n     componentName: \"Button Component\",\n     mapper(figma) {\n       return (\n         <YourComponent prop1={figma.Property1} prop2={figma.Property2}>\n           {figma.$children}\n         </YourComponent>\n       );\n     },\n   });\n   ```\n\n## Understanding the Interfaces and APIs\n\nThe mapping function has access to a rich set of properties and methods through the `figma` parameter:\n\n### Core Properties and Methods\n\n#### `figma.$children`\n\nReturns an array of all direct child nodes of the current Figma design.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return <Button>{figma.$children}</Button>;\n  },\n});\n```\n\n#### `figma.$textContent`\n\nRetrieves the text content from the current Figma design node or its text children.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return <Button>{figma.$children[1].$textContent}</Button>;\n  },\n});\n```\n\n#### `figma.$findOneByName(name)`\n\nMaps a specific child node of the current Figma component by its layer name.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Dialog Component\",\n  mapper(figma) {\n    return <div>{figma.$findOneByName(\"dialog\")}</div>;\n  },\n});\n```\n\n#### `figma.$findOne(callback)`\n\nFinds the first node that meets specified criteria through a callback function.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Page Component\",\n  mapper(figma) {\n    return <div>{figma.$findOne((node) => node.name === \"Heading\")}</div>;\n  },\n});\n```\n\n#### `figma.$visit(callback)`\n\nTraverses all child nodes and applies a function to each one.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Content Component\",\n  mapper(figma) {\n    return figma.$visit((node) => {\n      if (node.name === \"Header\") {\n        return <h1>{node.$textContent}</h1>;\n      } else if (node.name === \"Content\") {\n        return node.$textContent;\n      }\n    });\n  },\n});\n```\n\n## Advanced Mapping Examples\n\n### Basic Button Mapping\n\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { Button } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return (\n      <Button\n        color={figma.Color?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n        type={figma.Variant?.toLowerCase()}\n      >\n        {figma.$children}\n      </Button>\n    );\n  },\n});\n```\n\n### Hero Section with Multiple Content Areas\n\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { Hero } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Hero Component\",\n  mapper(figma) {\n    const heading = figma.Heading;\n    const supportingText = figma.$findOneByName(\"Supporting Text\").$textContent;\n    const navigation = figma.$findOneByName(\"Navigation\");\n\n    return (\n      <Hero\n        heading={heading}\n        supportingText={supportingText}\n        navigation={navigation}\n      />\n    );\n  },\n});\n```\n\n### Getting Content from Specific Child Layers\n\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { Button } from \"@acme/design-system/button\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Use the text from the 2nd child ($children is zero indexed)\n    const text = figma.$children[1].$textContent;\n\n    return <Button>{text}</Button>;\n  },\n});\n```\n\nAnother option is to retrieve children by their layer name:\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    const text = figma.$findOneByName(\"Label\").$textContent;\n\n    return <Button>{text}</Button>;\n  },\n});\n```\n\n### Using Your Own CSS Classes\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Make an array to hold the CSS class names\n    const classes = [\"button\"];\n\n    // If figma.variant is 'primary', add the 'button-primary' class\n    if (figma.variant === \"primary\") {\n      classes.push(\"button-primary\");\n    }\n\n    // Return a button with className applied\n    return <button className={classes.join(\" \")}>{figma.Text}</button>;\n  },\n});\n```\n\n### Generic Mapping Function\n\nFor complex layouts or special case handling, you can create a generic mapper:\n\n```tsx\nfigmaMapping({\n  genericMapper(figma) {\n    if (figma.$name === \"Grid row\") {\n      return <Grid>{figma.$children}</Grid>;\n    } else if (figma.$name === \"Section\") {\n      return <section>{figma.$children}</section>;\n    }\n    return undefined;\n  },\n});\n```\n\n## Advanced Table Example\n\nHere's a more complex example mapping a table component:\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Table Component\",\n  mapper(figma) {\n    // Extract columns data\n    const columns =\n      figma.$children?.map((column) => {\n        const header = column.$findOneByName(\"Header\")?.$textContent ?? \"\";\n        return { name: header, uid: header.toLowerCase() };\n      }) ?? [];\n\n    // Extract rows data\n    const firstColumn = figma.$children?.[0];\n    const rowsFrame = firstColumn?.$findOneByName(\"Rows\");\n    const rowCount = rowsFrame?.$children?.length ?? 0;\n\n    // Create rows data structure\n    const rows = Array.from({ length: rowCount }, (_, rowIndex) => {\n      const rowData = {};\n      figma.$children?.forEach((column) => {\n        const rowItem = column.$findOneByName(\"Rows\")?.$children?.[rowIndex];\n        const cellContent =\n          rowItem?.$findOneByName(\"Row item\")?.$textContent ?? \"\";\n        const columnId =\n          column.$findOneByName(\"Header\")?.$textContent?.toLowerCase() ?? \"\";\n        rowData[columnId] = cellContent;\n      });\n      return { id: rowIndex, ...rowData };\n    });\n\n    return (\n      <TableView\n        aria-label=\"Table\"\n        isQuiet={figma.Style === \"Quiet\"}\n        selectionMode={\n          figma[\"Selection Column\"] === \"True\" ? \"multiple\" : \"none\"\n        }\n      >\n        <TableHeader columns={columns}>\n          {(column) => <Column>{column.name}</Column>}\n        </TableHeader>\n        <TableBody items={rows}>\n          {(item) => <Row>{(columnKey) => <Cell>{item[columnKey]}</Cell>}</Row>}\n        </TableBody>\n      </TableView>\n    );\n  },\n});\n```\n\n## TypeScript Interfaces\n\nWhen working with TypeScript, you can leverage these interfaces for better type safety in your mapping functions:\n\n```tsx\nexport type FigmaNodeType =\n  | \"COMPONENT\"\n  | \"ELLIPSE\"\n  | \"FRAME\"\n  | \"GROUP\"\n  | \"INSTANCE\"\n  | \"LINE\"\n  | \"POLYGON\"\n  | \"RECTANGLE\"\n  | \"STAR\"\n  | \"TEXT\"\n  | \"VECTOR\";\n\nexport interface FigmaNode extends BaseFigmaProps {\n  /** Figma node \"name\" */\n  $name: string;\n\n  /** Figma node type (FRAME, GROUP, TEXT, etc.) */\n  $type:\n    | \"COMPONENT\"\n    | \"ELLIPSE\"\n    | \"FRAME\"\n    | \"GROUP\"\n    | \"INSTANCE\"\n    | \"LINE\"\n    | \"POLYGON\"\n    | \"RECTANGLE\"\n    | \"STAR\"\n    | \"TEXT\"\n    | \"VECTOR\";\n\n  /** Represents the text content of the node and its descendants */\n  $textContent: string;\n\n  /** URL to the rasterized image of this node */\n  $imageUrl: string;\n}\n\nexport interface BaseFigmaProps {\n  /** Direct children of the root component node or instance */\n  $children: (FigmaNode | undefined)[];\n\n  /** Recursively finds the first figma child with the given name, among all descendants */\n  $findOneByName(name: string | RegExp): FigmaNode | undefined;\n\n  /** Recursively finds all nodes with the given name, among all descendants */\n  $findAllByName(name: string | RegExp): FigmaNode[];\n\n  /** Recursively finds the first node that matches the predicate, among all descendants */\n  $findOne(predicate: (node: FigmaNode) => boolean): FigmaNode | undefined;\n\n  /** Recursively finds all nodes that match the predicate, among all descendants */\n  $findAll(predicate: (node: FigmaNode) => boolean): FigmaNode[];\n}\n```\n\nWhen creating a mapping function for a specific component, you should extend `BaseFigmaProps` with the properties from your Figma component:\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma: FigmaButtonProps) {\n    return (\n      <Button\n        color={figma.Color?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n        type={figma.Variant?.toLowerCase()}\n      >\n        {figma.$children}\n      </Button>\n    );\n  },\n});\n```\n", "Look at all the pairs of READMEs and Image (load the images too) inside the /figma-components folder.\n- Each represent information we know about an existing figma component we wanna map to a local/reusable component within the project.\n\nIn order to continue, plan a mapping strategy:\n\n1. Analyze all the figma components (the pairs), maybe even note that some figma components are internal implementation details and should not be mapped.\n2. Find all the local components that could be mapped to the figma components.\n3. Cluster the components into groups, for example in order to map a Table, TableHeader, TableBody, ... you might need to take all into account when creating 1 or more mappings.\nStandalone components like a Button, or Input could be by themselves, just pay attention to highly coupled components.\n\n4. Create a MAPPING_PLAN.md file with the information collected, groups of components and relations between figma components and local components.\n\n5. Proceed one by one, mapping each figma component to a vue component.\n\n- Read the [MAP_VUE](./MAP_VUE.md), [MAP_REACT](./MAP_REACT.md) or [MAP_ANGULAR](./MAP_ANGULAR.md) depending on the project, do not read all of them, just the one that applies to your project.\n- Follow the guide to create the mapper files inside the mappings/ folder.\n- Remember that the end goal is to create COMPONENT_NAME.mapper.ts/tsx files inside the mappings/ folder.\n\nThey look like this:\n\n```tsx\n// 1. Import the figma mapping function from \"@builder.io/dev-tools/figma\"\nimport { figmaMapping, type BaseFigmaProps } from \"@builder.io/dev-tools/figma\";\n\n// 2.Import the local component, or multiple components\nimport { Avatar } from \"@/components/ui/primitives/Avatar/Avatar\";\nimport { Icon } from \"@/components/ui/primitives/Icon/Icon\";\n\n// Figma component props\ninterface FigmaAvatarProps extends BaseFigmaProps {\n  Type?: \"Initial\" | \"Image\";\n  Size?: string;\n  Shape?: \"Circle\" | \"Square\";\n}\n\nfigmaMapping({\n  componentKey: \"COMPONENT_KEY\",\n  mapper(figma: FigmaAvatarProps) {\n    return (\n      <Avatar\n        square={figma.Shape === \"Square\"}\n        size={figma.Size?.toLowerCase() as \"large\" | \"medium\" | \"small\"}\n        src={figma.Type === \"Image\" ? figma.$imageUrl : undefined}\n      >\n        {!!figma.$findOneByName(\"Icon\") && <Icon />}\n      </Avatar\n    );\n  },\n});\n```\n\nThe `figma` variable allows to access the state of the figma components:\n- like props: `figma.Type`\n- like children: `figma.$findOneByName(\"Icon\")`, `figma.$children[]`\n...\n\nCheck out the API reference for more in `./figma-api-reference.md`.\n", "import type { AddCliOptions } from \"../../types\";\n\nexport function getOptions(cwd: string, args: string[]) {\n  const opts: AddCliOptions = {\n    cwd,\n    command: args[0],\n    snippetId: args[1],\n    path: args[2],\n  };\n\n  return opts;\n}\n", "import type { DevToolsSys } from \"@builder.io/dev-tools/core\";\nimport express, { type RequestHandler } from \"express\";\nimport * as http from \"http\";\nimport type { IncomingMessage } from \"http\";\nimport * as https from \"https\";\nimport * as net from \"net\";\nimport type { Duplex } from \"stream\";\nimport * as Amplitude from \"@amplitude/analytics-node\";\nimport { bgCyan, bold, cyan, dim, white } from \"picocolors\";\nimport {\n  getCredentials,\n  storeCredentials,\n  type Credentials,\n} from \"./credentials\";\nimport { exit } from \"./exit\";\nimport type { CLIArgs } from \"./index\";\nimport { track } from \"./track\";\nimport { RPCWebSocketServer } from \"./server-ws\";\nimport { CodeGenSession } from \"./codegen\";\nimport { cancel, intro, log } from \"@clack/prompts\";\nimport {\n  BUILDER_API_ENDPOINT_PREFIX,\n  BUILDER_ENDPOINT_PREFIX,\n  configureServer,\n} from \"./launch/server\";\nimport DebuggingRule from \"./launch/debugging-rule.txt?raw\";\nimport { openBrowser } from \"./utils/open\";\nimport type {\n  FusionConfig,\n  LaunchServerStatus,\n  CustomInstruction,\n  LaunchServerState,\n  PrivacyMode,\n  ShutdownResponse,\n  GenerateCodeEventPing,\n} from \"$/ai-utils\";\nimport { getFusionConfig, trackConfigData } from \"./launch/config\";\nimport { InitStateMachine } from \"./launch/InitStateMachine\";\nimport {\n  devServerOrchestrator,\n  type DevServerOrchestrator,\n} from \"./launch/dev-server-orchestrator\";\nimport { createProxy } from \"./launch/proxy\";\nimport { hasUpgrade } from \"../types/proxy-middleware\";\nimport { apiAirV2Host } from \"./constants\";\nimport { safeFetch } from \"./fetch\";\nimport { unregisterSigTerm } from \"./utils/signals\";\nimport { pkgVersion } from \"./version\";\nimport { createFusionStatusMonitor } from \"./launch/machine-health\";\nimport { attemptDryRunBackupGit } from \"./launch/dry-run-backup\";\nimport { setRuntimeStatus } from \"./backup\";\nimport { setFeatureFlags } from \"./utils/feature-flags\";\nimport { registerLock } from \"./utils/lock-file\";\n\nexport const DEFAULT_PROXY_PORT = 48752;\n/**\n * Check if a port is available\n */\nasync function isPortAvailable(port: number): Promise<boolean> {\n  return new Promise((resolve) => {\n    const server = net.createServer();\n\n    server.listen(port, () => {\n      server.once(\"close\", () => {\n        resolve(true);\n      });\n      server.close();\n    });\n\n    server.on(\"error\", () => {\n      resolve(false);\n    });\n  });\n}\n\n/**\n * Find an available port starting from the given port\n */\nasync function findAvailablePort(startPort: number): Promise<number> {\n  let port = startPort;\n  const maxAttempts = 100; // Prevent infinite loop\n\n  for (let i = 0; i < maxAttempts; i++) {\n    if (await isPortAvailable(port)) {\n      return port;\n    }\n    // Generate a new random port in a reasonable range (49152-65535 is the dynamic/private port range)\n    port = Math.floor(Math.random() * (65535 - 49152 + 1)) + 49152;\n  }\n\n  throw new Error(\n    `Could not find an available port after ${maxAttempts} attempts`,\n  );\n}\n\n/**\n * Get HTTP and HTTPS ports based on fusion config\n */\nasync function getPorts(fusionConfig: FusionConfig, isLocal: boolean) {\n  const parsedProxyPort = parseInt(process.env.FUSION_SERVER_PORT ?? \"\");\n  const PROXY_PORT = !isNaN(parsedProxyPort)\n    ? parsedProxyPort\n    : DEFAULT_PROXY_PORT;\n\n  // Determine HTTP port\n  let httpPort: number;\n  const fusionServerPort = fusionConfig.fusionServerPort;\n\n  if (fusionServerPort !== undefined) {\n    // Use specific port from config, don't check availability\n    httpPort = fusionServerPort;\n    log.info(`\uD83D\uDD0D Using configured HTTP port: ${httpPort}`);\n  } else {\n    // Use existing logic for port selection\n    const checkAvailablePort = isLocal;\n    httpPort = PROXY_PORT;\n\n    if (checkAvailablePort) {\n      httpPort = await findAvailablePort(PROXY_PORT);\n      if (httpPort !== PROXY_PORT) {\n        log.info(\n          `\u26A0\uFE0F  Port ${PROXY_PORT} is in use, using port ${httpPort} instead`,\n        );\n      }\n    }\n  }\n\n  if (!fusionConfig.https) {\n    return { httpPort };\n  }\n\n  const httpsPort =\n    fusionConfig.httpsServerOptions?.port ??\n    (await findAvailablePort(httpPort + 1));\n\n  return { httpPort, httpsPort };\n}\n\n/**\n * Helper function to output structured error data when jsonOutput is enabled\n *\n */\nfunction outputError(args: LaunchArgs, error: string, details?: any) {\n  if (args.jsonOutput) {\n    const output = {\n      type: \"server_error\",\n      data: {\n        error,\n        details,\n        timestamp: Date.now(),\n      },\n    };\n    console.log(JSON.stringify(output));\n  }\n}\n\nexport interface LaunchArgs extends CLIArgs {\n  /** Project ID for the dev server. Only needed when running in a remote container. */\n  projectId?: string;\n\n  /** Branch name for the dev server. Only needed when running in a remote container. */\n  branchName?: string;\n\n  /** Silent mode for launch command */\n  silent?: boolean;\n\n  /** Port number for the dev server */\n  port?: number;\n  /** Port number for the dev server (shorthand) */\n  p?: number;\n  /** Dev server command to execute */\n  command?: string;\n  /** Install command to execute */\n  installCommand?: string;\n  /** Dev server command to execute (shorthand) */\n  c?: string;\n  /** Dev server URL to proxy to (alternative to command + port) */\n  serverUrl?: string;\n\n  /**\n   * If true, CLI will run the init command instead of the launch command.\n   *\n   * @default false\n   */\n  fusionInit?: boolean;\n\n  /**\n   * If true, CLI will be interactive and prompt the user for input.\n   *\n   * @default true\n   */\n  interactive?: boolean;\n\n  /**\n   * Decides whether to skip authentication for the user's proxy server.\n   * Our own _builder.io/ endpoitns are always authenticated.\n   *\n   * @default false\n   */\n  authenticateProxy?: boolean;\n\n  /**\n   * Indicates the type of docker image the CLI is running on.\n   *\n   * @default \"node\"\n   */\n  dockerImageType?: \"fusion-starter\" | \"node\";\n\n  /**\n   * Output structured JSON data.\n   * Useful for programmatic consumption (e.g., VSCode extensions).\n   *\n   * @default false\n   */\n  jsonOutput?: boolean;\n\n  /**\n   * Enable local development mode with port availability checking.\n   * When enabled, automatically finds an available port if the default is in use.\n   *\n   * @default false\n   */\n  local?: boolean;\n\n  /**\n   * Enable privacy mode for codegen.\n   * When enabled, encrypts sensitive data in communication with the AI service.\n   *\n   * @default false\n   */\n  privacyMode?: boolean;\n\n  /**\n   * Auto-detect dev server URL and port from command output.\n   * When enabled, the system will parse the dev server output to automatically\n   * detect the server URL and port instead of requiring manual configuration.\n   *\n   * @default false\n   */\n  autoDetectDevServer?: boolean;\n\n  /** Inlined to builder.config.json file */\n  configJson?: string;\n\n  /** Path to fusion.config.json file */\n  configPath?: string;\n\n  /**\n   * Enable HTTPS server.\n   * When enabled, creates both HTTP and HTTPS servers.\n   *\n   * @default false\n   */\n  https?: boolean;\n\n  /**\n   * Custom domain to use instead of localhost in proxy URLs.\n   * Useful for development with custom SSL certificates.\n   */\n  localHttpsDomain?: string;\n\n  /**\n   * Enable native app mode.\n   * When enabled, runs setup and dev commands without proxy server functionality.\n   * Useful for native app development where the simulator handles its own server.\n   *\n   * @default false\n   */\n  nativeApp?: boolean;\n}\n\nlet codeGenServerPromise: Promise<CodeGenSession> | undefined;\n\nexport async function runFusionCommand({\n  sys,\n  args,\n}: {\n  sys: DevToolsSys;\n  args: LaunchArgs;\n}) {\n  const flyIoData = process.env.FLY_APP_NAME\n    ? {\n        flyAppName: process.env.FLY_APP_NAME,\n        flyMachineId: process.env.FLY_MACHINE_ID,\n        flyRegion: process.env.FLY_REGION,\n        flyPublicIp: process.env.FLY_PUBLIC_IP,\n        flyVmMemoryMb: process.env.FLY_VM_MEMORY_MB,\n        flyPrimaryRegion: process.env.PRIMARY_REGION,\n      }\n    : undefined;\n  if (flyIoData) {\n    sys.Sentry?.setContext(\"flyIo\", flyIoData);\n    sys.Sentry?.getCurrentScope().setContext(\"flyIo\", flyIoData);\n  }\n\n  // Display intro banner\n  intro(bgCyan(bold(white(\" fusion \"))) + `  ` + dim(pkgVersion));\n\n  const fusionConfig = await getFusionConfig(sys, args);\n  trackConfigData(sys, fusionConfig);\n\n  // Register lock file if configured\n  await registerLock(sys, fusionConfig);\n\n  const credentials = await setupCredentials(sys, args, fusionConfig);\n  const startTime = performance.now();\n  let _state: LaunchServerState = \"initial\";\n  const sharedState: LaunchServerStatus = {\n    status: \"ok\",\n    get state() {\n      return _state;\n    },\n    set state(s) {\n      if (_state !== s && fusionConfig.projectId && fusionConfig.branchName) {\n        setRuntimeStatus(sys, credentials, {\n          projectId: fusionConfig.projectId,\n          branchName: fusionConfig.branchName,\n          lastServerVersion: pkgVersion,\n          lastServerState: s,\n        });\n      }\n      _state = s;\n    },\n    isFinalState: false,\n    editorReady: false,\n    initState: undefined,\n    setupState: undefined,\n    devState: undefined,\n    httpServerState: undefined,\n    errorMessage: undefined,\n    devToolsVersion: pkgVersion,\n    lastRequestTime: startTime,\n    startTime,\n    workingDirectory: process.cwd(),\n    detectedServerUrl: !fusionConfig.autoDetectDevServer\n      ? fusionConfig.serverUrl\n      : undefined,\n  };\n  let devServer: DevServerOrchestrator | undefined;\n\n  sys.Sentry?.setContext(\"fusionConfig\", { ...fusionConfig });\n  sys.Sentry?.getCurrentScope().setContext(\"fusionConfig\", { ...fusionConfig });\n\n  const {\n    app,\n    proxyUrl,\n    server,\n    httpsServer,\n    httpsProxyUrl,\n    customHttpsProxyUrl,\n  } = await setupServer(credentials, fusionConfig, sharedState, sys, args);\n\n  let fusionStatusMonitor = createFusionStatusMonitor(\n    sys,\n    credentials,\n    fusionConfig,\n    sharedState,\n  );\n  if (fusionStatusMonitor) {\n    fusionStatusMonitor.start();\n  }\n\n  const stopRogueDetection = detectRogueInstances(sys, fusionConfig, flyIoData);\n\n  let isClosing = false;\n  let isClosed = false;\n  let closeRequested = false;\n  const closeServer = (signal: string) => async () => {\n    console.log(`\uD83D\uDD0D Received ${signal} signal`);\n\n    if (sharedState.state === \"init-running\") {\n      console.log(\"\uD83D\uDD0D Init is running, skipping\");\n      closeRequested = true;\n      return;\n    }\n\n    if (isClosing) {\n      console.log(\"\uD83D\uDD0D Server already closing, skipping\");\n      return;\n    }\n\n    sharedState.state = \"closing\";\n    isClosing = true;\n    setTimeout(() => {\n      isClosing = false;\n    }, 1000);\n\n    console.log(\"\uD83D\uDD0D Closing server gracefully\");\n\n    try {\n      server.closeAllConnections();\n      if (httpsServer) {\n        httpsServer.closeAllConnections();\n      }\n      stopRogueDetection();\n\n      if (fusionStatusMonitor) {\n        fusionStatusMonitor.stop();\n        fusionStatusMonitor = null;\n      }\n\n      // Close both HTTP and HTTPS servers\n      const closePromises = [new Promise((r) => server.close(r))];\n\n      if (httpsServer) {\n        closePromises.push(new Promise((r) => httpsServer!.close(r)));\n      }\n\n      await Promise.race([\n        Promise.all(closePromises),\n        new Promise((r) => setTimeout(r, 1000)),\n      ]);\n      if (devServer) {\n        await devServer.close();\n        devServer = undefined;\n      }\n      if (!isClosed && sharedState.initState?.success) {\n        isClosed = true;\n        const codeGenServer = await getCodeGenServer();\n        sharedState.state = \"closing\";\n        if (codeGenServer) {\n          console.log(\"\uD83D\uDD0D Closing codeGenServer\");\n          await codeGenServer.close(!!fusionConfig.autoBackupGit);\n          codeGenServerPromise = undefined;\n        }\n      }\n      await sys.Sentry?.flush(2000);\n      await Amplitude.flush().promise;\n      process.exit(0);\n    } catch (error) {\n      sys.Sentry?.captureException(error);\n      const message = error instanceof Error ? error.message : String(error);\n      log.error(`\u274C FAILED TO CLOSE SERVER: ${message}`);\n      process.exit(1);\n    }\n  };\n\n  unregisterSigTerm();\n  process.on(\"SIGTERM\", closeServer(\"SIGTERM\"));\n  process.on(\"SIGINT\", closeServer(\"SIGINT\"));\n\n  if (args.fusionInit) {\n    sharedState.state = \"init-running\";\n    const sentryTags = {\n      operation: \"fusion-init\",\n      mode: fusionConfig.mode ?? \"\",\n    };\n    const initStateMachine = new InitStateMachine({\n      sys,\n      fusionConfig,\n      debug: true,\n      credentials,\n      sentryTags,\n    });\n    sharedState.initState = initStateMachine.initState;\n    sharedState.initStatusLogs = initStateMachine.initStatusLogs;\n    const initSuccess = await initStateMachine.init();\n\n    const isTestEnv = String(process.env.DEVTOOLS_SKIP_POST_INIT || \"\")\n      .toLowerCase()\n      .match(/^(1|true|yes)$/);\n\n    if (isTestEnv) {\n      process.exit(0);\n    }\n\n    // If init fails, do not continue to launch\n    if (!initSuccess) {\n      log.error(\"\u274C Initialization failed\");\n      sys.Sentry?.captureException(new Error(\"Initialization failed\"), {\n        level: \"fatal\",\n        tags: sentryTags,\n        extra: {\n          initState: initStateMachine.initState,\n        },\n      });\n      sharedState.state = \"init-error\";\n      sharedState.isFinalState = true;\n      sharedState.errorMessage = initStateMachine.initState.error;\n      if (closeRequested) {\n        await closeServer(\"init-end\")();\n      }\n      return;\n    }\n\n    log.success(\"\u2705 Initialization completed successfully\");\n    sharedState.state = \"init-complete\";\n    if (closeRequested) {\n      await closeServer(\"init-end\")();\n      return;\n    }\n\n    // close early, before we start the codegen server or dev server\n    if (\n      fusionConfig.mode === \"backup\" ||\n      fusionConfig.mode === \"backup-force-full\"\n    ) {\n      await closeServer(\"init-end\")();\n      return;\n    }\n\n    if (fusionConfig._attemptDryRunBackupGit) {\n      attemptDryRunBackupGit(\n        {\n          sys,\n          fusionConfig,\n          debug: true,\n          credentials,\n        },\n        initStateMachine.initState,\n      )\n        .then((res) => {\n          if (res) {\n            sharedState._attemptDryRunBackupOutcome = res.success\n              ? \"success\"\n              : res.error;\n          }\n        })\n        .catch((error) => {\n          sys.Sentry?.captureException(error, {\n            tags: {\n              operation: \"dry-run-backup-git\",\n              dryRunBackupGit: \"true\",\n            },\n          });\n        });\n    }\n  }\n\n  devServer = await setupDevServerOrchestrator(\n    sys,\n    fusionConfig,\n    sharedState,\n    args,\n  );\n\n  if (args.fusionInit && devServer) {\n    // Use longer timeout for native app setup commands (5 minutes vs 2 seconds)\n    const setupTimeout = fusionConfig.nativeApp ? 300000 : 2000;\n    await Promise.race([\n      devServer.ensureSetupCommand(),\n      new Promise((resolve) => setTimeout(resolve, setupTimeout)),\n    ]);\n  }\n  await setupLaunchServer({\n    sys,\n    credentials,\n    args,\n    fusionConfig,\n    proxyUrl,\n    httpsProxyUrl,\n    customHttpsProxyUrl,\n    server,\n    httpsServer,\n    app,\n    devServer,\n    sharedState,\n  });\n\n  // Track command usage\n  await track(\"launch\", {\n    ...fusionConfig,\n    dev: !!args.dev,\n  });\n}\n\nasync function setupCredentials(\n  sys: DevToolsSys,\n  args: LaunchArgs,\n  fusionConfig: FusionConfig,\n): Promise<Credentials> {\n  let credentials: Credentials | undefined;\n  try {\n    credentials = await getCredentials(sys, args, {\n      builderPrivateKey: true,\n      builderPublicKey: true,\n    });\n\n    if (!credentials.builderPublicKey || !credentials.builderPrivateKey) {\n      const errorMsg = \"You need to be logged in to use the fusion command.\";\n      outputError(args, errorMsg);\n      log.error(errorMsg);\n      cancel(\"Please login first with: npx builder.io login\");\n      return await exit(1);\n    }\n\n    if (!credentials.timestamp && !fusionConfig.projectId) {\n      // bug in old credentials that caused duplicate keys, this unify them\n      const host = await sys.getDeviceId();\n      if (host) {\n        try {\n          const url = new URL(`${apiAirV2Host}/fusion/cli-key`);\n          url.searchParams.set(\"host\", host);\n          url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n          const res = await safeFetch(url.toString(), {\n            headers: {\n              \"Content-Type\": \"application/json\",\n              Authorization: `Bearer ${credentials.builderPrivateKey}`,\n            },\n            method: \"GET\",\n          });\n\n          if (!res.ok) {\n            const resText = await res.text();\n            throw new Error(`Failed to fetch original private key: ${resText}`);\n          }\n          const data = await res.json();\n          const originalPrivateKey = data?.key;\n          if (originalPrivateKey) {\n            credentials.builderPrivateKey = originalPrivateKey;\n            credentials.timestamp = new Date().toISOString();\n            storeCredentials(sys, credentials);\n          }\n        } catch (error) {\n          sys.Sentry?.captureException(\n            new Error(\n              \"Failed to fetch original private key, using existing credentials\",\n              {\n                cause: error,\n              },\n            ),\n          );\n        }\n      }\n    }\n\n    log.success(\n      `Logged in as space: ${credentials.spaceName || credentials.builderPublicKey}`,\n    );\n  } catch (error) {\n    const errorMsg = \"Authentication failed.\";\n    outputError(\n      args,\n      errorMsg,\n      error instanceof Error ? error.message : String(error),\n    );\n    log.error(errorMsg);\n    cancel(\"Please login first with: npx builder.io login\");\n    return await exit(1);\n  }\n  return credentials;\n}\n\nasync function setupServer(\n  credentials: Credentials,\n  fusionConfig: FusionConfig,\n  sharedState: LaunchServerStatus,\n  sys: DevToolsSys,\n  args?: LaunchArgs,\n) {\n  const isLocal = !!fusionConfig.isLocal || !!args?.local;\n\n  // Get HTTP and HTTPS ports\n  const { httpPort, httpsPort } = await getPorts(fusionConfig, isLocal);\n\n  if (fusionConfig.nativeApp) {\n    log.info(\n      `\uD83D\uDD0D Setting up Builder.io API server on port ${httpPort} (Native App Mode)`,\n    );\n  } else {\n    log.info(`\uD83D\uDD0D Setting up Builder.io server on port ${httpPort}`);\n  }\n\n  const app = express();\n\n  // Add middleware to track request times\n  app.use((req, _res, next) => {\n    if (!isLocal) {\n      console.log(\"HTTP request: \", req.url);\n    }\n    if (req.query[\"_skip_activity\"] !== \"true\") {\n      sharedState.lastRequestTime = performance.now();\n    } else {\n      log.info(`\u23F0 Request ignored at ${performance.now()}`);\n    }\n    next();\n  });\n\n  const validBuilderPrivateKey = credentials.builderPrivateKey;\n  const authenticateProxy = fusionConfig.authenticateProxy ?? false;\n  configureServer({\n    app,\n    validBuilderPrivateKey,\n    authenticateProxy,\n    isLocal,\n    sharedState,\n  });\n\n  const httpServer = http.createServer(app);\n\n  let httpsServer: https.Server | undefined;\n\n  // Create HTTPS server if enabled\n  if (fusionConfig.https) {\n    try {\n      const { port: _, ...httpsOptions } =\n        fusionConfig.httpsServerOptions ?? {};\n      httpsServer = https.createServer(httpsOptions, app);\n      log.info(`\uD83D\uDD0D Setting up HTTPS server on port ${httpsPort}`);\n    } catch (error) {\n      log.error(\n        `\u274C Failed to create HTTPS server: ${error instanceof Error ? error.message : String(error)}`,\n      );\n      httpsServer = undefined;\n    }\n  }\n\n  // Get custom domain from fusionConfig\n  const customDomain = fusionConfig.localHttpsDomain;\n\n  const proxyUrl = `http://localhost:${httpPort}`;\n  const httpsProxyUrl = httpsPort\n    ? `https://localhost:${httpsPort}`\n    : undefined;\n\n  const customHttpsProxyUrl =\n    customDomain && httpsPort\n      ? `https://${customDomain}:${httpsPort}`\n      : undefined;\n\n  const serverPromises = [\n    new Promise((resolve, reject) => {\n      httpServer.listen(httpPort, async () => {\n        log.success(`\uD83D\uDE80 Builder.io HTTP server running at ${proxyUrl}`);\n        log.info(\"Available server URLs:\");\n        log.info(`  HTTP (localhost):        ${proxyUrl}`);\n        resolve(true);\n      });\n\n      httpServer.on(\"error\", (error) => {\n        log.error(\n          `\u274C Failed to create HTTP server: ${error instanceof Error ? error.message : String(error)}`,\n        );\n        reject(error);\n      });\n    }),\n  ];\n\n  if (httpsServer) {\n    serverPromises.push(\n      new Promise((resolve, reject) => {\n        httpsServer.listen(httpsPort, async () => {\n          log.success(`\uD83D\uDE80 Builder.io HTTPS server running at ${httpsProxyUrl}`);\n          log.info(`  HTTPS (localhost):       ${httpsProxyUrl}`);\n          if (customHttpsProxyUrl) {\n            log.info(`  HTTPS (custom domain):   ${customHttpsProxyUrl}`);\n          }\n          resolve(true);\n        });\n        httpsServer.on(\"error\", (error) => {\n          log.error(\n            `\u274C Failed to create HTTPS server: ${error instanceof Error ? error.message : String(error)}`,\n          );\n          reject(error);\n        });\n      }),\n    );\n  }\n\n  await Promise.all(serverPromises);\n\n  const effectiveProxyUrl = customHttpsProxyUrl || httpsProxyUrl || proxyUrl;\n\n  return {\n    app,\n    proxyUrl: effectiveProxyUrl,\n    server: httpServer,\n    httpsServer,\n    httpsProxyUrl,\n    customHttpsProxyUrl,\n  };\n}\n\nasync function setupDevServerOrchestrator(\n  sys: DevToolsSys,\n  fusionConfig: FusionConfig,\n  sharedState: LaunchServerStatus,\n  args: LaunchArgs,\n) {\n  // Handle native app mode\n  if (fusionConfig.nativeApp) {\n    if (fusionConfig.devCommand) {\n      log.info(\n        `Running ${cyan(fusionConfig.devCommand)} in native app mode...`,\n      );\n    } else {\n      log.info(\"Native app mode: No dev command specified\");\n    }\n\n    const devServer = await devServerOrchestrator(\n      sys,\n      fusionConfig,\n      args.fusionInit && fusionConfig.setupCommand?.trim()\n        ? \"not-installed\"\n        : \"installed\",\n    );\n    sharedState.devState = devServer.devState;\n    sharedState.setupState = devServer.setupState;\n    // In native app mode, we don't check HTTP server state since there's no proxy\n    sharedState.httpServerState = \"ok-2xx\";\n    devServer.emitter.on(\"devState\", (state) => {\n      sharedState.devState = state;\n    });\n    devServer.emitter.on(\"setupState\", (state) => {\n      sharedState.setupState = state;\n    });\n    return devServer;\n  }\n\n  // Start the command in a child process or create a mock for serverUrl mode\n  if (args.serverUrl && !args.command) {\n    log.info(\n      `Proxying to existing dev server at ${cyan(fusionConfig.serverUrl)}...`,\n    );\n    sharedState.devState = \"running\";\n    sharedState.setupState = \"installed\";\n    sharedState.httpServerState = \"ok-2xx\";\n\n    return undefined;\n  } else {\n    log.info(\n      `Running ${cyan(fusionConfig.devCommand)} on host ${fusionConfig.serverUrl ? cyan(fusionConfig.serverUrl) : \"TBD\"}...`,\n    );\n    const devServer = await devServerOrchestrator(\n      sys,\n      fusionConfig,\n      args.fusionInit ? \"not-installed\" : \"installed\",\n    );\n    sharedState.devState = devServer.devState;\n    sharedState.setupState = devServer.setupState;\n    sharedState.httpServerState = devServer.httpServerState;\n    devServer.emitter.on(\"devState\", (state) => {\n      sharedState.devState = state;\n    });\n    devServer.emitter.on(\"setupState\", (state) => {\n      sharedState.setupState = state;\n    });\n    devServer.emitter.on(\"httpServerState\", (state) => {\n      sharedState.httpServerState = state;\n    });\n    devServer.emitter.on(\"urlDetected\", (url) => {\n      sharedState.detectedServerUrl = url;\n    });\n    return devServer;\n  }\n}\n\n// Setup a transparent proxy to inject script into HTML responses\nasync function setupLaunchServer({\n  sys,\n  credentials,\n  args,\n  fusionConfig,\n  app,\n  server,\n  httpsServer,\n  proxyUrl,\n  httpsProxyUrl,\n  customHttpsProxyUrl,\n  devServer,\n  sharedState,\n}: {\n  sys: DevToolsSys;\n  credentials: Credentials;\n  args: LaunchArgs;\n  fusionConfig: FusionConfig;\n  app: ReturnType<typeof express>;\n  server: http.Server;\n  httpsServer: https.Server | undefined;\n  proxyUrl: string;\n  httpsProxyUrl: string | undefined;\n  customHttpsProxyUrl: string | undefined;\n  devServer: DevServerOrchestrator | undefined;\n  sharedState: LaunchServerStatus;\n}) {\n  // Shared backup logic\n  async function attemptBackup({\n    force = false,\n    forcedFullBackup = false,\n  }: {\n    force?: boolean;\n    forcedFullBackup?: boolean;\n  } = {}): Promise<ShutdownResponse> {\n    log.info(\n      `\uD83D\uDCE6 Attempting backup${force ? \" (forced)\" : \"\"}${forcedFullBackup ? \" (full)\" : \"\"}...`,\n    );\n\n    // Check if we have a codeGenServer and need to backup\n    let codeGenServer = await getCodeGenServer();\n    if (!codeGenServer) {\n      if (fusionConfig.autoBackupGit && sharedState.initState?.success) {\n        codeGenServer = await getOrCreateCodeGenServer(\n          sys,\n          credentials,\n          fusionConfig,\n          devServer,\n          undefined,\n          sharedState,\n          undefined,\n          fusionConfig.privacyMode,\n        );\n      } else {\n        // No codeGenServer\n        log.info(\"\uD83D\uDD1A No active session\");\n        return {\n          success: true,\n          message: \"No active session\",\n          skipped: true,\n          reason: \"no_active_session\",\n        };\n      }\n    }\n\n    const canBackup = force || fusionConfig.autoBackupGit;\n\n    if (!canBackup) {\n      log.info(\"\uD83D\uDD1A Auto backup git is disabled, skipping backup\");\n      return {\n        success: true,\n        message: \"Auto backup git is disabled, skipping backup\",\n        skipped: true,\n        reason: \"auto_backup_git_disabled\",\n      };\n    }\n\n    const isIdle = codeGenServer.isIdle();\n    if (!isIdle) {\n      log.info(\"\uD83D\uDD1A Not idle, skipping backup\");\n      return {\n        success: false,\n        message: \"Not idle, skipping backup\",\n        skipped: true,\n        reason: \"not_idle\",\n      };\n    }\n\n    // Skip needsBackup check if forcedFullBackup is requested\n    if (!forcedFullBackup) {\n      const needsBackup = await codeGenServer.needsBackup();\n      if (!needsBackup) {\n        log.info(\"\u2705 Already backed up after last request\");\n        return {\n          success: true,\n          message: \"Already backed up\",\n          skipped: true,\n          reason: \"already_backed_up\",\n        };\n      }\n    }\n\n    try {\n      const backupResult = await codeGenServer.uploadBackup(forcedFullBackup);\n      if (backupResult.success) {\n        log.info(\"\u2705 Backup successful\");\n      }\n\n      return backupResult;\n    } catch (error) {\n      const errorMsg = `Backup error: ${error instanceof Error ? error.message : String(error)}`;\n      log.error(`\u274C ${errorMsg}`);\n      return {\n        success: false,\n        message: errorMsg,\n        error: error instanceof Error ? error : new Error(String(error)),\n      };\n    }\n  }\n\n  // Shared shutdown logic\n  async function attemptGracefulShutdown(\n    reason: \"api-request\" | \"inactivity-timeout\",\n  ): Promise<ShutdownResponse> {\n    log.info(`\uD83D\uDD04 Attempting graceful shutdown: ${reason}`);\n\n    const stopProcess = () => {\n      if (fusionConfig.autoShutdown) {\n        log.info(\"\uD83D\uDD04 Shutting down process\");\n        process.kill(process.pid, \"SIGTERM\");\n      }\n    };\n\n    const backupResult = await attemptBackup({ force: false });\n\n    if (!backupResult.success) {\n      return backupResult;\n    }\n\n    stopProcess();\n    return backupResult;\n  }\n\n  // Initialize a codeGenInstance for use with API endpoints if Fusion is enabled\n  try {\n    const builderApiRouter = express.Router();\n\n    builderApiRouter.post(\"/generate\", async (req, res) => {\n      try {\n        const {\n          prompt,\n          userMessage,\n          context: { pushChanges },\n        } = req.body;\n\n        if (!prompt && !userMessage) {\n          return res\n            .status(400)\n            .json({ error: \"No prompt/userMessage provided\" });\n        }\n\n        // Set up response for streaming\n        res.setHeader(\"Content-Type\", \"text/event-stream\");\n        res.setHeader(\"Cache-Control\", \"no-cache\");\n        res.setHeader(\"Connection\", \"keep-alive\");\n\n        const codegen = await getOrCreateCodeGenServer(\n          sys,\n          credentials,\n          fusionConfig,\n          devServer,\n          undefined,\n          sharedState,\n          undefined,\n          fusionConfig.privacyMode,\n        );\n\n        const interval = setInterval(async () => {\n          const ping: GenerateCodeEventPing = {\n            type: \"ping\",\n          };\n          res.write(JSON.stringify(ping) + \"\\n\");\n        }, 5000);\n\n        const disconnect = codegen.connectToEventLoop(false, (step) => {\n          res.write(JSON.stringify(step) + \"\\n\");\n        });\n        try {\n          await codegen.pullLatestFromRemote();\n          await codegen.sendMessage(\n            prompt ? { userPrompt: prompt } : userMessage,\n          );\n          await new Promise((resolve) => setTimeout(resolve, 100));\n          await codegen.waitUntilIdle();\n          if (pushChanges) {\n            try {\n              await codegen.pushChanges(false);\n            } catch (error) {\n              res.write(\n                `${JSON.stringify({\n                  type: \"error\",\n                  message: `[GIT_PUSH_ERROR]: ${error instanceof Error ? error.message : String(error)}`,\n                })}\\n`,\n              );\n              sys.Sentry?.captureException(error);\n            }\n          }\n        } catch (error: unknown) {\n          sys.Sentry?.captureException(error);\n          const errorMessage =\n            error instanceof Error ? error.message : String(error);\n          res.write(\n            `${JSON.stringify({\n              type: \"error\",\n              message: `Error: ${errorMessage}`,\n            })}\\n`,\n          );\n        } finally {\n          clearInterval(interval);\n          disconnect();\n        }\n        res.end();\n      } catch (error: unknown) {\n        sys.Sentry?.captureException(error);\n        const errorMessage =\n          error instanceof Error ? error.message : String(error);\n        // If headers haven't been sent yet, send error response\n        if (!res.headersSent) {\n          res.status(500).json({ error: errorMessage });\n        } else {\n          // Otherwise end the stream with error\n          res.write(\n            `data: ${JSON.stringify({\n              type: \"error\",\n              message: `Fatal error: ${errorMessage}`,\n            })}\\n\\n`,\n          );\n          res.end();\n        }\n      }\n    });\n\n    builderApiRouter.get(\"/get-zip\", async (_req, res) => {\n      try {\n        const codegen = await getOrCreateCodeGenServer(\n          sys,\n          credentials,\n          fusionConfig,\n          devServer,\n          undefined,\n          sharedState,\n          undefined,\n          fusionConfig.privacyMode,\n        );\n        const zipPath = await codegen.archiveProject();\n\n        res.setHeader(\"Content-Type\", \"application/zip\");\n        res.setHeader(\n          \"Content-Disposition\",\n          `attachment; filename=\"${sys.basename(zipPath)}\"`,\n        );\n\n        res.download(zipPath, (err) => {\n          if (err) {\n            sys.Sentry?.captureException(err);\n          }\n          // Clean up the temporary file after download\n          sys.unlink(zipPath).catch((unlinkErr) => {\n            sys.Sentry?.captureException(unlinkErr);\n          });\n        });\n      } catch (error) {\n        sys.Sentry?.captureException(error);\n        res.status(500).json({\n          error: \"Failed to create project archive\",\n          details: error instanceof Error ? error.message : String(error),\n        });\n      }\n    });\n\n    builderApiRouter.get(\"/download-zip/:folderName(*)\", async (req, res) => {\n      try {\n        const folderName = req.params.folderName;\n        console.log(\"folderName\", folderName);\n        if (typeof folderName !== \"string\") {\n          res.status(400).json({\n            error: \"Folder name is required\",\n          });\n          return;\n        }\n\n        const codegen = await getOrCreateCodeGenServer(\n          sys,\n          credentials,\n          fusionConfig,\n          devServer,\n          undefined,\n          sharedState,\n          undefined,\n          fusionConfig.privacyMode,\n        );\n        const zipPath = await codegen.zipFolder(folderName);\n\n        res.setHeader(\"Content-Type\", \"application/zip\");\n        res.setHeader(\n          \"Content-Disposition\",\n          `attachment; filename=\"project.zip\"`,\n        );\n\n        res.download(zipPath, (err) => {\n          if (err) {\n            sys.Sentry?.captureException(err);\n          }\n          // Clean up the temporary file after download\n          sys.unlink(zipPath).catch((unlinkErr) => {\n            sys.Sentry?.captureException(unlinkErr);\n          });\n        });\n      } catch (error) {\n        sys.Sentry?.captureException(error);\n        res.status(500).json({\n          error: \"Failed to create project archive\",\n          details: error instanceof Error ? error.message : String(error),\n        });\n      }\n    });\n\n    builderApiRouter.post(\"/shutdown\", async (_req, res) => {\n      try {\n        const result = await attemptGracefulShutdown(\"api-request\");\n\n        if (result?.success) {\n          res.json(result);\n        } else {\n          res.status(500).json(result);\n        }\n      } catch (error) {\n        sys.Sentry?.captureException(error);\n        res.status(500).json({\n          success: false,\n          error: \"Failed to shutdown\",\n          details: error instanceof Error ? error.message : String(error),\n        });\n      }\n    });\n\n    builderApiRouter.post(\"/backup\", async (req, res) => {\n      try {\n        const { force = false, forcedFullBackup = false } = req.body || {};\n        const result = await attemptBackup({ force, forcedFullBackup });\n\n        if (result?.success) {\n          res.json(result);\n        } else {\n          res.status(500).json(result);\n        }\n      } catch (error) {\n        sys.Sentry?.captureException(error);\n        res.status(500).json({\n          success: false,\n          error: \"Failed to backup\",\n          details: error instanceof Error ? error.message : String(error),\n        });\n      }\n    });\n\n    if (fusionConfig?.autoBackupGit || fusionConfig.autoShutdown) {\n      const ONE_HOUR_IN_MINUTES = 60; // 1 hour in minutes\n      const ONE_SECOND_IN_MILLISECONDS = 1000;\n\n      const thresholdInMinutes =\n        fusionConfig.autoShutdownThresholdMinutes ?? ONE_HOUR_IN_MINUTES;\n      const thresholdInSeconds = thresholdInMinutes * 60;\n      const thresholdInMilliseconds = thresholdInSeconds * 1000;\n\n      let shutdownInProgress = false;\n      const inactivityTimer = setInterval(async () => {\n        const timeSinceLastRequest =\n          performance.now() - sharedState.lastRequestTime;\n\n        if (timeSinceLastRequest > thresholdInMilliseconds) {\n          if (shutdownInProgress) {\n            log.info(\"\u23F0 Shutdown already in progress\");\n            return;\n          }\n          log.info(\n            `\u23F0 Threshold reached (${Math.round(thresholdInSeconds)} seconds without requests)`,\n          );\n          shutdownInProgress = true;\n\n          try {\n            const result = await attemptGracefulShutdown(\"inactivity-timeout\");\n            if (result?.success) {\n              clearInterval(inactivityTimer);\n            }\n          } catch (error) {\n            const wrapperError = new Error(\n              \"Failed to gracefully shutdown server\",\n              {\n                cause: error,\n              },\n            );\n            sys.Sentry?.captureException(wrapperError, {\n              tags: {\n                operation: \"shutdown\",\n              },\n            });\n          } finally {\n            shutdownInProgress = false;\n          }\n        }\n      }, ONE_SECOND_IN_MILLISECONDS * 10);\n\n      // Clean up timer on process exit\n      process.on(\"exit\", () => clearInterval(inactivityTimer));\n    }\n\n    // Skip proxy setup in native app mode\n    if (!fusionConfig.nativeApp) {\n      const defaultProxyMiddleware = fusionConfig.serverUrl\n        ? createProxy(fusionConfig.serverUrl, sys)\n        : undefined;\n      const proxy: RequestHandler | undefined = devServer\n        ? (req, res, next) => {\n            const proxyMiddleware = devServer.proxyMiddleware;\n            if (proxyMiddleware) {\n              // The proxy itself will skip URL with BUILDER_ENDPOINT_PREFIX\n              proxyMiddleware(req, res, next);\n            } else if (req.url?.startsWith(BUILDER_ENDPOINT_PREFIX)) {\n              // However, when the proxy is not ready yet, we need still to let requests to /_builder.io/... pass through\n              next();\n              return;\n            } else {\n              res.status(502).json({\n                error:\n                  \"The proxy is not ready yet. Make sure the devCommand is running and the Dev Server URL is configured.\",\n              });\n              return;\n            }\n          }\n        : (defaultProxyMiddleware as RequestHandler | undefined);\n\n      if (proxy) {\n        app.use(\"/\", proxy);\n      }\n    }\n\n    app.use(\n      BUILDER_API_ENDPOINT_PREFIX,\n      express.json({\n        limit: \"15mb\",\n      }),\n      express.urlencoded({ extended: true }),\n      builderApiRouter,\n    );\n\n    // Start the websocket server\n    const ws = RPCWebSocketServer({ noServer: true });\n\n    // Shared WebSocket upgrade handler for both HTTP and HTTPS servers\n    const handleUpgrade = (\n      request: IncomingMessage,\n      socket: Duplex,\n      head: Buffer,\n    ) => {\n      const { pathname } = new URL(request.url ?? \"/\", \"wss://base.url\");\n\n      if (pathname === BUILDER_ENDPOINT_PREFIX + \"/ws\") {\n        const privateKey = request.headers[\"sec-websocket-protocol\"];\n        if (\n          !fusionConfig.isLocal &&\n          (!privateKey || privateKey !== credentials.builderPrivateKey)\n        ) {\n          // track unauthorized access attempts\n          sys.Sentry?.captureException(\n            new Error(\"Unauthorized WebSocket connection attempt\"),\n            {\n              extra: {\n                headerExists: !!request.headers[\"sec-websocket-protocol\"],\n              },\n            },\n          );\n          socket.write(\"HTTP/1.1 401 Unauthorized\\r\\n\\r\\n\");\n          socket.destroy();\n          return;\n        }\n\n        ws.handleUpgrade(request, socket, head, function done(ws) {\n          ws.emit(\"connection\", ws, request);\n        });\n      } else if (!fusionConfig.nativeApp) {\n        // Only handle proxy WebSocket connections if not in native app mode\n        const proxyMiddleware =\n          devServer?.proxyMiddleware ??\n          (fusionConfig.serverUrl\n            ? createProxy(fusionConfig.serverUrl, sys)\n            : undefined);\n\n        if (hasUpgrade(proxyMiddleware)) {\n          try {\n            sys.debug(`Proxying WebSocket connection to: ${pathname}`);\n            proxyMiddleware.upgrade!(request, socket, head);\n          } catch (error) {\n            sys.debug(`WebSocket proxy error: ${error}`);\n            if (socket.writable) {\n              socket.write(\"HTTP/1.1 500 Internal Server Error\\r\\n\\r\\n\");\n            }\n            socket.destroy();\n          }\n        } else {\n          sys.debug(`No proxy middleware available for WebSocket: ${pathname}`);\n          if (socket.writable) {\n            socket.write(\"HTTP/1.1 404 Not Found\\r\\n\\r\\n\");\n          }\n          socket.destroy();\n          return;\n        }\n      } else {\n        // In native app mode, reject non-Builder WebSocket connections\n        sys.debug(\n          `Native app mode: Rejecting WebSocket connection to: ${pathname}`,\n        );\n        if (socket.writable) {\n          socket.write(\"HTTP/1.1 404 Not Found\\r\\n\\r\\n\");\n        }\n        socket.destroy();\n        return;\n      }\n    };\n\n    server.on(\"upgrade\", handleUpgrade);\n    httpsServer?.on(\"upgrade\", handleUpgrade);\n\n    setupWebSocketServer({\n      ws,\n      sys,\n      credentials,\n      fusionConfig,\n      devServer,\n      sharedState,\n    });\n\n    sharedState.state = \"ready\";\n\n    const urlHost =\n      args.app || args.nativeApp\n        ? `builder://`\n        : args.dev\n          ? `http://localhost:1234`\n          : `https://builder.io`;\n\n    // Open browser at fiddle URL with localEditUrl pointing to our proxy\n    const fusionEditorUrl = new URL(`${urlHost}/app/projects/local`);\n\n    // Open browser at fiddle URL with localEditUrl pointing to our proxy\n    fusionEditorUrl.searchParams.set(\"localEditUrl\", proxyUrl);\n\n    const host = await sys.getDeviceId();\n    // required for authenticating the socket connection\n    if (host) {\n      fusionEditorUrl.searchParams.set(\"host\", host);\n    }\n    if (credentials.builderPublicKey) {\n      fusionEditorUrl.searchParams.set(\"spaceId\", credentials.builderPublicKey);\n    }\n\n    // Output structured data for programmatic consumption\n    if (args.jsonOutput) {\n      const output = {\n        type: \"server_ready\",\n        data: {\n          proxyUrl,\n          httpsProxyUrl,\n          customHttpsProxyUrl,\n          fusionEditorUrl: fusionConfig.nativeApp ? null : fusionEditorUrl.href,\n          urlHost,\n          command: fusionConfig.devCommand,\n          serverUrl: fusionConfig.serverUrl,\n          credentials,\n          nativeApp: fusionConfig.nativeApp,\n        },\n      };\n      console.log(JSON.stringify(output));\n    }\n\n    // Only open browser if not skipped\n    const skipOpen = args.open === false;\n    if (!skipOpen) {\n      log.info(`OPEN BROWSER: ${fusionEditorUrl.href}`);\n      await openBrowser(fusionEditorUrl.href);\n    } else if (fusionConfig.isLocal) {\n      console.log(`\uD83D\uDD17 Access Builder.io at: ${fusionEditorUrl.href}`);\n    }\n\n    setTimeout(() => {\n      sharedState.editorReady = true;\n    }, 100);\n  } catch (err) {\n    sharedState.state = \"init-error\";\n    sharedState.isFinalState = true;\n    sharedState.errorMessage = err instanceof Error ? err.message : String(err);\n    sys.Sentry?.captureException(err, {\n      level: \"fatal\",\n    });\n  }\n}\n\nfunction setupWebSocketServer({\n  ws,\n  sys,\n  fusionConfig,\n  credentials,\n  devServer,\n  sharedState,\n}: {\n  ws: ReturnType<typeof RPCWebSocketServer>;\n  sys: DevToolsSys;\n  credentials: Credentials;\n  fusionConfig: FusionConfig;\n  devServer: DevServerOrchestrator | undefined;\n  sharedState: LaunchServerStatus;\n}) {\n  ws.register(\"initializeSession\", async (args) => {\n    let sessionId: string | undefined;\n    let customInstructions: CustomInstruction[] | undefined;\n    let privacyMode: PrivacyMode | undefined;\n    if (typeof args[0] === \"object\" && args[0]) {\n      ({ sessionId, customInstructions, privacyMode } = args[0] as {\n        sessionId: string;\n        customInstructions: CustomInstruction[];\n        privacyMode: PrivacyMode;\n      });\n    } else if (typeof args[0] === \"string\") {\n      sessionId = args[0];\n    }\n    const codegen = await getOrCreateCodeGenServer(\n      sys,\n      credentials,\n      fusionConfig,\n      devServer,\n      sessionId,\n      sharedState,\n      customInstructions,\n      privacyMode || fusionConfig.privacyMode,\n    );\n    return codegen.getSessionId();\n  });\n\n  ws.register(\"connectToEventLoop\", async (_pd: any, socketId: string) => {\n    const codeGenServer = await getCodeGenServer();\n    if (!codeGenServer) {\n      throw new Error(\"Server not found\");\n    }\n    const client = ws.clients().get(socketId);\n    if (!client) {\n      throw new Error(\"Client not found\");\n    }\n    const sessionId = codeGenServer.getSessionId();\n    const discard = codeGenServer.connectToEventLoop(true, (event) => {\n      if (event && !event.timestamp) {\n        event.timestamp = Date.now();\n      }\n      ws.notify(`${sessionId}/event`, socketId, [JSON.stringify(event)]);\n    });\n\n    client.on(\"close\", discard);\n  });\n\n  ws.register(\"setFeatureFlags\", async (args) => {\n    setFeatureFlags(args[0]);\n  });\n\n  function exposeToWebSocketRPC(\n    functionName: keyof InstanceType<typeof CodeGenSession>,\n  ) {\n    // Register WebSocket endpoint\n    ws.register(functionName, async ([_sessionId, ...args]) => {\n      if (!fusionConfig.isLocal) {\n        console.log(\"WS request: \", functionName, JSON.stringify(args));\n      }\n      const codeGenServer = await getCodeGenServer();\n      if (!codeGenServer) {\n        throw new Error(\"Server not found\");\n      }\n      try {\n        const method = codeGenServer[functionName];\n\n        if (typeof method !== \"function\") {\n          throw new Error(`Method ${functionName} not found on codeGenServer`);\n        }\n\n        const result = await (method as any).apply(codeGenServer, args);\n        return result;\n      } catch (err) {\n        sys.Sentry?.captureException(err, {\n          tags: {\n            functionName,\n          },\n          extra: {\n            args,\n          },\n        });\n        throw err;\n      }\n    });\n  }\n\n  exposeToWebSocketRPC(\"stopEventLoop\");\n  exposeToWebSocketRPC(\"abort\");\n  exposeToWebSocketRPC(\"abortToolCall\");\n  exposeToWebSocketRPC(\"abortSetupCommand\");\n  exposeToWebSocketRPC(\"setPrivacyMode\");\n  exposeToWebSocketRPC(\"clearSession\");\n  exposeToWebSocketRPC(\"loadHistory\");\n  exposeToWebSocketRPC(\"loadMoreTurns\");\n  exposeToWebSocketRPC(\"getAllFiles\");\n  exposeToWebSocketRPC(\"sendFeedback\");\n  exposeToWebSocketRPC(\"setCustomInstructions\");\n  exposeToWebSocketRPC(\"sendMessage\");\n  exposeToWebSocketRPC(\"configureDevOrchestrator\");\n  exposeToWebSocketRPC(\"restoreFromCompletionId\");\n  exposeToWebSocketRPC(\"restoreBeforeCompletionId\");\n  exposeToWebSocketRPC(\"undoLastUserMessage\");\n  exposeToWebSocketRPC(\"pushChanges\");\n  exposeToWebSocketRPC(\"pullLatestFromRemote\");\n  exposeToWebSocketRPC(\"abortMerge\");\n  exposeToWebSocketRPC(\"syncChangesFromRemote\");\n  exposeToWebSocketRPC(\"pushRepoV2\");\n  exposeToWebSocketRPC(\"readFile\");\n  exposeToWebSocketRPC(\"writeFile\");\n  exposeToWebSocketRPC(\"deleteFile\");\n  exposeToWebSocketRPC(\"fileExists\");\n  exposeToWebSocketRPC(\"manualCommit\");\n  exposeToWebSocketRPC(\"uploadBackup\");\n  exposeToWebSocketRPC(\"getDiff\");\n  exposeToWebSocketRPC(\"toolFullfilment\");\n  exposeToWebSocketRPC(\"createTerminal\");\n  exposeToWebSocketRPC(\"writeTerminal\");\n  exposeToWebSocketRPC(\"updateTerminal\");\n  exposeToWebSocketRPC(\"signalTerminal\");\n  exposeToWebSocketRPC(\"disposeTerminal\");\n  exposeToWebSocketRPC(\"restartTerminal\");\n  exposeToWebSocketRPC(\"collectRepoMetrics\");\n  exposeToWebSocketRPC(\"switchSessionMode\");\n  exposeToWebSocketRPC(\"launchEditor\");\n\n  ws.register(\"ping\", () => {\n    sharedState.lastRequestTime = performance.now();\n    return {\n      version: pkgVersion,\n      supports: [\n        \"customInstructions\",\n        \"newChat\",\n        \"clearSession\",\n        \"appCustomInstructions\",\n      ],\n    };\n  });\n\n  ws.register(\"getBuilderRules\", async () => {\n    // .builderrules for now\n    const codeGenServer = await getCodeGenServer();\n\n    if (!codeGenServer) {\n      // If no codeGenServer, try to read from the current working directory\n      const builderRulesPath = sys.resolve(\n        sys.getAppRootDir(),\n        \".builderrules\",\n      );\n      if (await sys.exists(builderRulesPath)) {\n        return await sys.readFile(builderRulesPath);\n      }\n      return null;\n    }\n\n    // Use the codeGenServer's readFile method which handles workspace resolution correctly\n    try {\n      return await codeGenServer.readFile(\".builderrules\", true);\n    } catch (error) {\n      // Return null if file doesn't exist, matching the behavior when codeGenServer is not available\n      return null;\n    }\n  });\n\n  ws.register(\"setBuilderRules\", async (args) => {\n    const codeGenServer = await getCodeGenServer();\n    const content = args[1];\n\n    if (!codeGenServer) {\n      // If no codeGenServer, try to write to the current working directory\n      const builderRulesPath = sys.resolve(\n        sys.getAppRootDir(),\n        \".builderrules\",\n      );\n      if (content) {\n        await sys.writeFile(builderRulesPath, content);\n      } else {\n        // delete file\n        if (await sys.exists(builderRulesPath)) {\n          await sys.unlink(builderRulesPath);\n        }\n      }\n      return;\n    }\n\n    // Use the codeGenServer's writeFile/deleteFile methods which handle workspace resolution correctly\n    if (content) {\n      await codeGenServer.writeFile(\".builderrules\", content, true);\n    } else {\n      // delete file\n      await codeGenServer.deleteFile(\".builderrules\", true);\n    }\n  });\n\n  // Subscribe to terminal data stream\n  ws.register(\"subscribeTerminal\", async (args, socketId) => {\n    const [sessionId, { terminalId }] = args as [\n      string,\n      { terminalId: string },\n    ];\n    const codeGenServer = await getCodeGenServer();\n    if (!codeGenServer) throw new Error(\"Server not found\");\n    codeGenServer.subscribeTerminal({\n      terminalId,\n      onData: (chunk) =>\n        ws.notify(`${sessionId}/terminal/${terminalId}`, socketId, [chunk]),\n      onExit: (code) =>\n        ws.notify(`${sessionId}/terminal/${terminalId}/exit`, socketId, [code]),\n    });\n    return {\n      ok: true,\n    };\n  });\n}\n\nasync function createCodeGenServer(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  fusionConfig: FusionConfig,\n  devServer: DevServerOrchestrator | undefined,\n  sessionId: string | undefined,\n  sharedState: LaunchServerStatus,\n  customInstructions?: CustomInstruction[] | undefined,\n  privacyMode?: PrivacyMode | undefined,\n) {\n  const codeGenServer = new CodeGenSession({\n    sys,\n    credentials,\n    position: \"fusion\",\n    sessionOrCompletionId: fusionConfig.sessionId ?? sessionId,\n    mode: \"quality-v4\",\n    maxTokens: 80000,\n    mcpServers: true,\n    fusionConfig,\n    privacyMode,\n    builtInCustomInstructions: [\n      {\n        id: \"debugging-errors\",\n        name: \"debugging-errors\",\n        type: \"agent-mode\",\n        description:\n          \"If the user is experiencing an error, or debugging is mentioned by the user.\",\n        content: DebuggingRule,\n      },\n      ...(customInstructions ?? []),\n    ],\n    fusionContext: {\n      devServerOrchestrator: devServer,\n      git: !!fusionConfig.projectId,\n      gitAutoInit: true,\n    },\n  });\n  if (!!fusionConfig.projectId) {\n    codeGenServer.setDebug(true);\n  }\n  try {\n    await codeGenServer.initializeSession();\n  } catch (err) {\n    sharedState.state = \"session-error\";\n    throw err;\n  }\n  sharedState.state = \"active-session\";\n  sharedState.isFinalState = true;\n  return codeGenServer;\n}\n\nfunction getCodeGenServer(): Promise<CodeGenSession | undefined> {\n  if (codeGenServerPromise) {\n    return codeGenServerPromise;\n  }\n  return Promise.resolve(undefined);\n}\n\nfunction getOrCreateCodeGenServer(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  fusionConfig: FusionConfig,\n  devServer: DevServerOrchestrator | undefined,\n  sessionId: string | undefined,\n  sharedState: LaunchServerStatus,\n  customInstructions?: CustomInstruction[] | undefined,\n  privacyMode?: PrivacyMode | undefined,\n) {\n  if (!codeGenServerPromise) {\n    codeGenServerPromise = createCodeGenServer(\n      sys,\n      credentials,\n      fusionConfig,\n      devServer,\n      sessionId,\n      sharedState,\n      customInstructions,\n      privacyMode,\n    );\n  }\n  return codeGenServerPromise;\n}\n\nfunction detectRogueInstances(\n  sys: DevToolsSys,\n  fusionConfig: FusionConfig,\n  flyIoData: Record<string, string | undefined> | undefined,\n) {\n  if (fusionConfig.isLocal) {\n    return () => {};\n  }\n  const SECOND = 1000;\n  const HOUR = 60 * 60 * SECOND;\n  const DAY = 24 * HOUR;\n  const currentTime = Date.now();\n  const interval = setInterval(() => {\n    const timeSinceStart = Date.now() - currentTime;\n    const daysSinceStart = Math.floor(timeSinceStart / DAY);\n    if (daysSinceStart > 1) {\n      sys.Sentry?.captureException(\n        new Error(`Rogue devtools detected: ${daysSinceStart} days`),\n        {\n          extra: {\n            timeSinceStart,\n          },\n          contexts: {\n            flyIo: flyIoData,\n            fusionConfig: { ...fusionConfig },\n          },\n        },\n      );\n    }\n  }, DAY * 2);\n  return () => clearInterval(interval);\n}\n", "import stream from \"node:stream\";\nimport type { Duplex } from \"node:stream\";\nimport { randomUUID } from \"node:crypto\";\nimport type { IncomingMessage } from \"node:http\";\nimport type { ServerOptions } from \"ws\";\nimport { WebSocketServer } from \"ws\";\nimport type { WebSocket } from \"ws\";\n\nexport type SocketRequest = {\n  id: number;\n  jsonrpc: string;\n  method: string;\n  params: any;\n};\n\nexport type SocketResponse<T = any> = {\n  id?: number | null;\n  jsonrpc: string;\n  result?: T;\n  notification?: string;\n  params?: any;\n  error?: {\n    code: number;\n    message: string;\n    data?: any;\n  };\n};\n\nexport type SocketSendOptions = {\n  timeout?: number;\n};\n\nexport type SocketQueue = {\n  type: \"request\" | \"notification\";\n  result?: SocketResponse[\"result\"];\n  error?: SocketResponse[\"error\"];\n};\n\ntype SocketNamespace = {\n  clients: Map<string, WebSocket>;\n  events: Map<string, Set<string>>;\n  methods: Map<string, RegisterFn>;\n};\n\ntype RegisterFn<T = any> = (params: T, socketId: string) => Promise<any> | any;\n\ntype SocketOpts = {\n  binary?: boolean;\n  compress?: boolean;\n  fin?: boolean;\n  mask?: boolean;\n};\n\ntype SocketEvents = {\n  listening: () => Promise<void> | void;\n  connection: (socket: WebSocket, socketId: string) => Promise<void> | void;\n  disconnection: (socketId: string) => Promise<void> | void;\n  error: (error: Error) => Promise<void> | void;\n  \"socket-error\": (socketId: string, error: Error) => Promise<void> | void;\n  close: () => Promise<void> | void;\n};\n\nexport function RPCWebSocketServer(opts: ServerOptions) {\n  let listening = false;\n  const version = \"2.0\";\n\n  const ws = new WebSocketServer(opts);\n  const emitter = new stream.EventEmitter();\n\n  const namespace: SocketNamespace = {\n    clients: new Map(),\n    events: new Map(),\n    methods: new Map(),\n  };\n\n  const internalMethods = new Map<\n    string,\n    (\n      targetNs: SocketNamespace,\n      request: SocketRequest,\n      socketId: string,\n    ) => string\n  >([\n    [\"rpc.on\", subscribe],\n    [\"rpc.off\", unsubscribe],\n  ]);\n\n  function createJSONResponse(data: Partial<SocketResponse>) {\n    return JSON.stringify({\n      jsonrpc: version,\n      id: data?.id,\n      notification: data?.notification,\n      result: data?.result,\n      params: data?.params,\n      error: data?.error,\n    });\n  }\n\n  function setup() {\n    ws.on(\"listening\", () => {\n      listening = true;\n      emitter.emit(\"listening\");\n\n      ws.on(\"connection\", (socket, req) => {\n        const ns = req.url || \"/\";\n        const socketId = randomUUID();\n        namespace.clients.set(socketId, socket);\n\n        emitter.emit(\"connection\", socket, socketId);\n\n        handleRPC(socket, socketId, ns);\n\n        socket.on(\"error\", (error) =>\n          emitter.emit(\"socket-error\", socketId, error),\n        );\n\n        socket.on(\"close\", () => {\n          namespace.clients.delete(socketId);\n          emitter.emit(\"disconnection\", socketId);\n        });\n      });\n\n      ws.on(\"error\", (error) => emitter.emit(\"error\", error));\n    });\n  }\n\n  function validateRequest(payload: Partial<SocketRequest>) {\n    return (\n      !!payload.params &&\n      Array.isArray(payload.params) &&\n      payload.params.length > 0\n    );\n  }\n\n  function handleRPC(socket: WebSocket, socketId: string, ns = \"/\") {\n    socket.on(\"message\", async (data: any) => {\n      const socketOpts: SocketOpts = {};\n\n      try {\n        if (data instanceof ArrayBuffer) {\n          socketOpts.binary = true;\n          data = Buffer.from(data).toString();\n        }\n      } catch (error) {\n        return socket.send(\n          createJSONResponse({\n            id: null,\n            error: {\n              code: -32700,\n              message: \"Parse error\",\n            },\n          }),\n        );\n      }\n\n      let payload: SocketRequest;\n\n      try {\n        payload = JSON.parse(data);\n      } catch (error) {\n        return socket.send(\n          createJSONResponse({\n            id: null,\n            error: {\n              code: -32700,\n              message: \"Parse error\",\n            },\n          }),\n        );\n      }\n\n      try {\n        const targetNs = namespace;\n\n        if (internalMethods.has(payload.method)) {\n          const internalMethod = internalMethods.get(payload.method)!;\n          return socket.send(\n            internalMethod(targetNs, payload, socketId),\n            socketOpts,\n          );\n        }\n\n        if (!targetNs.methods.has(payload.method)) {\n          return socket.send(\n            createJSONResponse({\n              id: payload.id,\n              error: {\n                code: -32601,\n                message: \"Method not found\",\n              },\n            }),\n            socketOpts,\n          );\n        }\n\n        try {\n          const fn = targetNs.methods.get(payload.method)!;\n          const response = await fn(payload.params, socketId);\n\n          return socket.send(\n            createJSONResponse({\n              id: payload.id,\n              result: response || undefined,\n            }),\n            socketOpts,\n          );\n        } catch (error: Error | any) {\n          return socket.send(\n            createJSONResponse({\n              id: payload.id,\n              error: {\n                code: -32000,\n                message: error?.message || \"Internal error\",\n                data: error?.data,\n              },\n            }),\n            socketOpts,\n          );\n        }\n      } catch (error) {\n        return socket.send(\n          createJSONResponse({\n            id: payload?.id || null,\n            error: {\n              code: -32603,\n              message: \"Internal error\",\n            },\n          }),\n          socketOpts,\n        );\n      }\n    });\n  }\n\n  function notify(name: string, socketIds: Set<string>, ...params: any[]) {\n    const targetNs = namespace;\n    const sockets = [...targetNs.clients.entries()]\n      .filter(([socketId]) => socketIds.has(socketId))\n      .map(([_, socket]) => socket);\n\n    for (const socket of sockets) {\n      socket.send(\n        createJSONResponse({\n          notification: name,\n          params,\n        }),\n      );\n    }\n  }\n\n  function subscribe(\n    targetNs: SocketNamespace,\n    payload: SocketRequest,\n    socketId: string,\n  ) {\n    if (!validateRequest(payload)) {\n      return createJSONResponse({\n        id: payload.id,\n        error: {\n          code: -32602,\n          message: \"Invalid params\",\n        },\n      });\n    }\n\n    if (!targetNs.events.has(payload.params[0])) {\n      return createJSONResponse({\n        id: payload.id,\n        error: {\n          code: -32602,\n          message: \"Invalid params\",\n        },\n      });\n    }\n\n    const eventName = payload.params[0];\n    const eventSubscriptions = targetNs.events.get(eventName)!;\n    eventSubscriptions.add(socketId);\n\n    return createJSONResponse({\n      id: payload.id,\n      result: { [eventName]: true },\n    });\n  }\n\n  function unsubscribe(\n    targetNs: SocketNamespace,\n    payload: SocketRequest,\n    socketId: string,\n  ) {\n    if (!validateRequest(payload)) {\n      return createJSONResponse({\n        id: payload.id,\n        error: {\n          code: -32602,\n          message: \"Invalid params\",\n        },\n      });\n    }\n\n    if (!targetNs.events.has(payload.params[0])) {\n      return createJSONResponse({\n        id: payload.id,\n        error: {\n          code: -32602,\n          message: \"Invalid params\",\n        },\n      });\n    }\n\n    const eventName = payload.params[0];\n    const eventSubscriptions = targetNs.events.get(eventName)!;\n    eventSubscriptions.delete(socketId);\n\n    return createJSONResponse({\n      id: payload.id,\n      result: { [eventName]: false },\n    });\n  }\n\n  function register<T = any>(method: string, fn: RegisterFn<T>, ns = \"/\") {\n    namespace.methods.set(method, fn);\n  }\n\n  function on<EventKey extends keyof SocketEvents>(\n    event: EventKey,\n    cb: SocketEvents[EventKey],\n  ) {\n    emitter.on(event, cb);\n  }\n\n  function event(name: string, ns = \"/\") {\n    const targetNs = namespace;\n\n    if (!targetNs.events.has(name)) {\n      targetNs.events.set(name, new Set());\n    }\n  }\n\n  function emit(name: string, ns = \"/\", ...params: any[]) {\n    const targetNs = namespace;\n\n    if (!targetNs.events.has(name)) return;\n    const eventSubscriptions = targetNs.events.get(name)!;\n    notify(name, eventSubscriptions, ns, ...params);\n  }\n\n  async function handleUpgrade(\n    req: IncomingMessage,\n    socket: Duplex,\n    upgradeHead: Buffer,\n    callback?: (client: WebSocket, request: IncomingMessage) => void,\n  ) {\n    ws.handleUpgrade(req, socket, upgradeHead, (socket) => {\n      if (!listening) ws.emit(\"listening\");\n      ws.emit(\"connection\", socket, req);\n      if (callback) callback(socket, req);\n    });\n  }\n\n  function close() {\n    return new Promise((resolve, reject) => {\n      try {\n        ws.close();\n        emitter.emit(\"close\");\n        resolve(null);\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n\n  setup();\n\n  return {\n    on,\n    event: (e: string) => event(e),\n    handleUpgrade,\n    clients: () => namespace.clients || new Map<string, WebSocket>(),\n    register: <T = any>(method: string, fn: RegisterFn<T>) =>\n      register(method, fn),\n    emit: (name: string, ...params: any[]) => emit(name, \"/\", ...params),\n    notify: (name: string, socketId: string, ...params: any[]) =>\n      notify(name, new Set([socketId]), ...params),\n    close,\n  };\n}\n", "import createWebSocketStream from './lib/stream.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer };\nexport default WebSocket;\n", "When debugging is required, follow these steps:\n\n## Gather information\n\n1. Ask the user to provide more information, if the error is not clear. \n2. Look at the error message, stack trace provided by the user, look for specific clues, like error messages, file names.\n3. Use the `view_file` tool to view the content of files that could be related to the error.\n4. Check out the package.json to find out interesting scripts, that could be used for debugging. For example, `npm run typecheck` or `npm run build`.\n5. Use the `bash` tool to run typecheck, build, test, etc to get more information, avoid re-running the dev command, cuz it's already running.\n6. Use the `dev_server_control` tool to debug and control the dev server.\n7. If still not enough information, try to use the `search_web` tool to search the web for more information.\n\n## Describe the root of the problem, or multiple possible problems\n\nBefore jumping to make code changes, describe the root cause of the problem, which files are involved, bad dev-server command, proxy port, etc.\nIf there are multiple possible problems, describe them all\n\n## Think step by step about a solution\n\nCome up with a minimal set of changes to fix the problems\nFor example, it's better to fix the configuration using dev_server_control tool, than to change the code.\nIf the solution is unreasonable or infeasible, or if any of the tests are incorrect, please tell me. The solution should be robust, maintainable, and extendable.\n\n## Make changes\n\nDo not hack around the problem, make the necessary changes to fix the problem if it's possible.\nThose could be file changes, or (dev_server_control) dev-server command changes, or proxy port changes, etc. or a combination of them.\n", "import * as fs from \"fs\";\nimport * as fsPromises from \"fs/promises\";\nimport * as path from \"path\";\nimport type { DevToolsSys } from \"@builder.io/dev-tools/core\";\nimport { safeSpawn } from \"../utils/process-tracker\";\nimport {\n  STARTER_REPO,\n  EXAMPLE_REPOS,\n  type FusionConfig,\n  type WorkspaceFolder,\n  type InitState,\n  type InitStateStep,\n  type InitStatusLog,\n} from \"$/ai-utils\";\nimport dns from \"dns/promises\";\nimport net from \"net\";\nimport { ProxyAgent, fetch } from \"undici\";\n\n// Type for WorkspaceFolder with validated required fields\ntype ValidatedWorkspaceFolder = WorkspaceFolder &\n  Required<Pick<WorkspaceFolder, \"name\" | \"path\">>;\ntype WorkspaceFolderWithRepoInfo = ValidatedWorkspaceFolder &\n  Required<Pick<WorkspaceFolder, \"repoName\" | \"repoUrl\">>;\n\nconst isValidWorkspaceFolder = (\n  folder: WorkspaceFolder,\n): folder is ValidatedWorkspaceFolder => {\n  return Boolean(folder.name && folder.path);\n};\n\nconst isValidWorkspaceFolderWithRepoInfo = (\n  folder: WorkspaceFolder,\n): folder is WorkspaceFolderWithRepoInfo => {\n  return Boolean(\n    folder.name && folder.path && folder.repoName && folder.repoUrl,\n  );\n};\n\nimport type { Credentials } from \"../credentials\";\nimport {\n  backupGitRepo,\n  downloadGitBackup,\n  type GitBackupDownloadResult,\n  type GitBackupDownloadResultValid,\n} from \"../backup\";\nimport { runCommand } from \"../utils/git\";\nimport { getVolumePath, getAndParseGitRepoInfo } from \"./helpers\";\nimport { fetchGitConfigs } from \"../utils/git\";\n\nexport interface InitConfig {\n  fusionConfig: FusionConfig;\n  credentials: Credentials;\n  sys: DevToolsSys;\n  debug?: boolean;\n  sentryTags?: Record<string, string>;\n}\n\nexport interface InitStatus {\n  message: string;\n  error?: string;\n}\n\nexport class InitStateMachine {\n  logIdCounter = 0;\n  initStatusLogs: InitStatusLog[] = [];\n  sys: DevToolsSys;\n  config: InitConfig;\n  /**\n   * @deprecated use addInitLog instead. Do not use this directly.\n   */\n  debug: boolean = true;\n  initState: InitState = {\n    isRunning: false,\n    isComplete: false,\n    success: false,\n    currentStep: \"initial\",\n    error: undefined as string | undefined,\n    repos: [],\n  };\n\n  constructor(config: InitConfig) {\n    this.sys = config.sys;\n    this.config = config;\n    this.debug = config.debug ?? true;\n  }\n\n  async checkout(branchName: string, ref: string, repoPath: string) {\n    try {\n      await this.git([\"checkout\", branchName], repoPath);\n    } catch {\n      await this.git([\"checkout\", \"-b\", branchName, ref], repoPath, 1);\n      return true;\n    }\n    await this.git([\"reset\", \"--hard\", ref], repoPath);\n    return false;\n  }\n\n  async execAsync(\n    exec: string,\n    args: string[],\n    cwd?: string,\n    retry?: number,\n  ): Promise<string> {\n    return runCommand(exec, args, {\n      cwd,\n      debug: this.debug,\n      sys: this.sys,\n      retry,\n    });\n  }\n\n  async git(\n    args: string[],\n    cwd?: string,\n    retry?: number,\n    timeout?: number,\n  ): Promise<string> {\n    return runCommand(\"git\", args, {\n      cwd,\n      debug: this.debug,\n      sys: this.sys,\n      retry,\n      timeout: timeout ?? (args[0].includes(\"clone\") ? 600 * 1000 : 60 * 1000),\n    });\n  }\n\n  async performBackup({\n    sys,\n    credentials,\n    fusionConfig,\n    volumePath,\n    repositories,\n    isConnectedToProvider,\n    forcedFullBackup,\n  }: {\n    sys: DevToolsSys;\n    credentials: Credentials;\n    fusionConfig: FusionConfig;\n    volumePath: string;\n    repositories: ValidatedWorkspaceFolder[];\n    isConnectedToProvider: boolean;\n    forcedFullBackup: boolean;\n  }): Promise<void> {\n    try {\n      console.log(\"\uD83D\uDD0D Performing backup operation\");\n      // Find the main repository with git enabled\n      const mainRepo = repositories.find((repo) => repo.enableGit);\n      if (!mainRepo) {\n        throw new Error(\"No repository with git enabled found for backup\");\n      }\n\n      const repoPath = path.join(volumePath, mainRepo.path);\n\n      // Check if repository directory exists\n      if (!fs.existsSync(repoPath)) {\n        throw new Error(\n          `Backup mode: Repository directory does not exist at ${repoPath}`,\n        );\n      }\n\n      // Check if .git directory exists\n      if (!fs.existsSync(path.join(repoPath, \".git\"))) {\n        throw new Error(\n          `Backup mode: Git repository not initialized at ${repoPath}`,\n        );\n      }\n\n      if (!fusionConfig.branchName) {\n        throw new Error(\"Backup mode: No branch name found\");\n      }\n\n      if (!fusionConfig.projectId) {\n        throw new Error(\"Backup mode: No project ID found\");\n      }\n\n      const { featureBranch, currentBranch } = await getAndParseGitRepoInfo({\n        sys,\n        gitWorkingDirectory: repoPath,\n        /**\n         * when in forcedFullBackup mode, we don't want to throw an error if the branch is corrupted\n         */\n        strict: !forcedFullBackup,\n      });\n\n      console.log(`\uD83D\uDD0D Creating backup for AI branch: ${currentBranch}`);\n      const backupResult = await backupGitRepo({\n        sys,\n        credentials,\n        projectId: fusionConfig.projectId,\n        branchName: fusionConfig.branchName,\n        repoPath,\n        aiBranch: currentBranch,\n        featureBranch,\n        workspace: fusionConfig.workspace,\n        isConnectedToProvider,\n        forcedFullBackup,\n        debug: true,\n        canAbortMerge: false,\n      });\n\n      if (backupResult.success) {\n        console.log(\"\u2705 Backup uploaded successfully\");\n      } else {\n        const errorMsg = `Backup upload failed: ${backupResult.reason || \"Unknown error\"}`;\n        throw new Error(errorMsg);\n      }\n    } catch (error) {\n      const wrapperError = new Error(`Failed to perform git backup`, {\n        cause: error,\n      });\n      this.config.sys.Sentry?.captureException(wrapperError, {\n        tags: {\n          launchMode: this.config.fusionConfig.mode,\n          forcedFullBackup,\n          isConnectedToProvider,\n        },\n      });\n      throw wrapperError;\n    }\n  }\n\n  async performRegularBackup(\n    args: Omit<\n      Parameters<typeof this.performBackup>[0],\n      \"isConnectedToProvider\" | \"forcedFullBackup\"\n    >,\n  ) {\n    await this.performBackup({\n      ...args,\n      isConnectedToProvider: true,\n      forcedFullBackup: false,\n    });\n  }\n\n  async performOfflineBackup(\n    args: Omit<\n      Parameters<typeof this.performBackup>[0],\n      \"isConnectedToProvider\" | \"forcedFullBackup\"\n    >,\n  ) {\n    await this.performBackup({\n      ...args,\n      isConnectedToProvider: false,\n      forcedFullBackup: false,\n    });\n  }\n\n  async performForcedFullBackup(\n    args: Omit<\n      Parameters<typeof this.performBackup>[0],\n      \"isConnectedToProvider\" | \"forcedFullBackup\"\n    >,\n  ) {\n    await this.performBackup({\n      ...args,\n      isConnectedToProvider: false,\n      forcedFullBackup: true,\n    });\n  }\n\n  async init(): Promise<boolean> {\n    const config = this.config;\n\n    this.clearInitLogs();\n    this.initState.isRunning = true;\n    this.initState.isComplete = false;\n\n    const repositories =\n      config.fusionConfig.workspace?.folders?.filter(isValidWorkspaceFolder) ??\n      [];\n\n    this.addInitLog(\n      \"log\",\n      `Starting initialization with ${repositories.length} repositories`,\n      { step: \"init\" },\n    );\n\n    try {\n      if (!repositories.length) {\n        const errorMsg = \"At least one repository must be configured\";\n        throw new Error(errorMsg);\n      }\n      if (!config.sys) {\n        const errorMsg = \"DevToolsSys is required in config\";\n        this.addInitLog(\"error\", errorMsg, {\n          step: \"validation\",\n          error: errorMsg,\n        });\n        throw new Error(errorMsg);\n      }\n\n      const volumePath = getVolumePath(config.fusionConfig);\n\n      switch (config.fusionConfig.mode) {\n        case \"backup\": {\n          try {\n            await this.performRegularBackup({\n              sys: config.sys,\n              credentials: config.credentials,\n              fusionConfig: config.fusionConfig,\n              volumePath,\n              repositories,\n            });\n          } catch (error) {\n            console.log(\n              `\uD83D\uDD0D Online backup failed: ${error}. Attempting offline backup...`,\n            );\n            await this.performOfflineBackup({\n              sys: config.sys,\n              credentials: config.credentials,\n              fusionConfig: config.fusionConfig,\n              volumePath,\n              repositories,\n            });\n          }\n\n          break;\n        }\n        case \"backup-force-full\": {\n          try {\n            await this.performRegularBackup({\n              sys: config.sys,\n              credentials: config.credentials,\n              fusionConfig: config.fusionConfig,\n              volumePath,\n              repositories,\n            });\n          } catch (error) {\n            console.log(\n              `\uD83D\uDD0D Online backup failed: ${error}. Attempting offline backup...`,\n            );\n            try {\n              await this.performOfflineBackup({\n                sys: config.sys,\n                credentials: config.credentials,\n                fusionConfig: config.fusionConfig,\n                volumePath,\n                repositories,\n              });\n            } catch (error) {\n              console.log(\n                `\uD83D\uDD0D Offline backup failed: ${error}. Attempting forced full offline backup...`,\n              );\n              await this.performForcedFullBackup({\n                sys: config.sys,\n                credentials: config.credentials,\n                fusionConfig: config.fusionConfig,\n                volumePath,\n                repositories,\n              });\n            }\n          }\n          break;\n        }\n        case \"init-and-launch\": {\n          await this.step1CheckDirectories(volumePath, repositories);\n          this.addInitLog(\"log\", \"Directories checked\", {\n            step: \"check-directories\",\n          });\n\n          await this.step2ConfigureGitRepositories(volumePath, repositories);\n          this.addInitLog(\"log\", \"Git repositories configured\", {\n            step: \"configure-git-repos\",\n          });\n\n          await this.step3ConfigureGitUser(volumePath, repositories);\n          this.addInitLog(\"log\", \"Git user configured\", {\n            step: \"configure-git-user\",\n          });\n\n          await this.step4CollectRepoInfo(config, volumePath, repositories);\n          this.addInitLog(\"log\", \"Repo info collected\", {\n            step: \"collect-repo-info\",\n          });\n          break;\n        }\n        default:\n          throw new Error(`Invalid mode: ${config.fusionConfig.mode}`);\n      }\n\n      this.addInitLog(\"complete\", \"Initialization completed successfully\", {\n        step: \"init-success\",\n        success: true,\n      });\n\n      return true;\n    } catch (error) {\n      const errorMessage =\n        error instanceof Error ? error.message : String(error);\n\n      const hasSpecificStepError = this.initStatusLogs.some(\n        (log) => log.type === \"error\" && log.step && log.step !== \"init-failed\",\n      );\n\n      this.addInitLog(\n        \"complete\",\n        `Initialization failed with error: ${errorMessage}`,\n        {\n          step: !hasSpecificStepError ? \"init-failed\" : undefined,\n          success: false,\n          error: errorMessage,\n        },\n      );\n\n      config.sys.Sentry?.captureException(error, {\n        tags: { operation: \"init\", ...config.sentryTags },\n      });\n\n      return false;\n    }\n  }\n\n  addInitLog(\n    type: \"status\" | \"log\" | \"error\" | \"complete\",\n    message: string,\n    options?: {\n      step?: InitStateStep;\n      error?: string;\n      success?: boolean;\n    },\n  ) {\n    const newLog: InitStatusLog = {\n      id: ++this.logIdCounter,\n      timestamp: new Date().toISOString(),\n      type,\n      message,\n      ...options,\n    };\n\n    if (this.debug) {\n      console.log(\n        `[DEBUG] ${newLog.timestamp} ${newLog.type} ${newLog.message}`,\n      );\n    }\n\n    this.initStatusLogs.push(newLog);\n\n    if (this.initStatusLogs.length > 1000) {\n      this.initStatusLogs.splice(0, this.initStatusLogs.length - 1000);\n    }\n\n    if (options?.step) {\n      this.initState.currentStep = options.step;\n    }\n    if (type === \"complete\") {\n      this.initState.isComplete = true;\n      this.initState.isRunning = false;\n      this.initState.success = options?.success ?? false;\n      this.initState.error = options?.error;\n    }\n    if (type === \"error\" && options?.error) {\n      this.initState.error = options.error;\n    }\n  }\n\n  clearInitLogs() {\n    this.initStatusLogs.length = 0;\n    this.logIdCounter = 0;\n    this.initState.isRunning = false;\n    this.initState.isComplete = false;\n    this.initState.success = false;\n    this.initState.currentStep = \"initial\";\n    this.initState.error = undefined;\n  }\n\n  async hasFilesButNoGit(repoPath: string): Promise<boolean> {\n    if (fs.existsSync(repoPath)) {\n      try {\n        const files = await fsPromises.readdir(repoPath);\n        const hasFiles = files.length > 0;\n        const hasGit = fs.existsSync(path.join(repoPath, \".git\"));\n        return hasFiles && !hasGit;\n      } catch (error) {\n        return false;\n      }\n    }\n    return false;\n  }\n\n  async step1CheckDirectories(\n    volumePath: string,\n    repositories: ValidatedWorkspaceFolder[],\n  ): Promise<void> {\n    this.addInitLog(\"log\", \"Checking directories\", {\n      step: \"check-directories\",\n    });\n\n    if (!fs.existsSync(volumePath)) {\n      await fsPromises.mkdir(volumePath, { recursive: true });\n    }\n\n    if (volumePath.startsWith(\"/root\")) {\n      restoreUserBackup(\"root\");\n    }\n\n    this.addInitLog(\"log\", `Volume directory exists: ${volumePath}`, {\n      step: \"check-directories\",\n    });\n\n    for (const repo of repositories) {\n      const repoPath = path.join(volumePath, repo.path);\n      if (!fs.existsSync(repoPath)) {\n        this.addInitLog(\"log\", `Creating directory: ${repoPath}`, {\n          step: \"create-directories\",\n        });\n        try {\n          await fsPromises.mkdir(repoPath, { recursive: true });\n        } catch (error) {\n          const errorMsg = `Failed to create directory for ${repo.repoName} at ${repoPath}: ${error}`;\n          this.addInitLog(\"error\", errorMsg, {\n            step: \"create-directories\",\n            error: errorMsg,\n          });\n          throw new Error(errorMsg, { cause: error });\n        }\n      } else {\n        this.addInitLog(\"log\", `Directory already exists: ${repoPath}`, {\n          step: \"check-directories\",\n        });\n      }\n    }\n  }\n\n  async step2ConfigureGitRepositories(\n    volumePath: string,\n    repositories: ValidatedWorkspaceFolder[],\n  ): Promise<void> {\n    this.addInitLog(\"log\", \"Configuring git repositories\", {\n      step: \"configure-git-repos\",\n    });\n\n    const tempCloningDir = path.join(volumePath, \"temp-cloning\");\n\n    const removeTempCloningDirIfExists = async () => {\n      if (fs.existsSync(tempCloningDir)) {\n        this.addInitLog(\n          \"log\",\n          `Removing temp cloning directory: ${tempCloningDir}`,\n          { step: \"configure-git-repos\" },\n        );\n        await fsPromises.rm(tempCloningDir, {\n          recursive: true,\n          force: true,\n        });\n      }\n    };\n\n    await removeTempCloningDirIfExists();\n\n    this.addInitLog(\"log\", `Creating temp cloning path: ${tempCloningDir}`, {\n      step: \"configure-git-repos\",\n    });\n\n    await fsPromises.mkdir(tempCloningDir, { recursive: true });\n\n    try {\n      for (const repo of repositories) {\n        const repoPath = path.join(volumePath, repo.path);\n\n        this.addInitLog(\"log\", `Processing repository: ${repo.repoName}`, {\n          step: \"configure-git-repos\",\n        });\n\n        const isGitConfigured = await this.isGitConfigured(repoPath);\n        if (isGitConfigured) {\n          // refreshes the remote url and repo name so that we have the latest info\n          if (repo.enableGit) {\n            await this.refreshRepoConfig(repo);\n          }\n          // cleanup dangling lock files\n          await this.cleanupLockFiles(repoPath);\n          try {\n            if (repo.enableGit) {\n              this.addInitLog(\n                \"log\",\n                `Git already configured for ${repo.repoName}, validating repo`,\n                { step: \"check-existing-git\" },\n              );\n              await this.validateGitRepo(repoPath);\n            } else {\n              this.addInitLog(\n                \"log\",\n                `Git already configured for ${repo.repoName}, skipping validation because it's not main repo`,\n                { step: \"check-existing-git\" },\n              );\n            }\n          } catch (error) {\n            const errorMsg = `Failed to validate git repo for ${repo.repoName}: ${error}`;\n            this.addInitLog(\"error\", errorMsg, {\n              step: \"check-existing-git\",\n              error: errorMsg,\n            });\n            throw error;\n          }\n\n          this.addInitLog(\n            \"log\",\n            `Git repo is in good state, checking remote URL`,\n            { step: \"check-existing-git\" },\n          );\n\n          if (repo.initializationCommand) {\n            this.addInitLog(\n              \"log\",\n              `Skipping remote URL update because it has an initialization command`,\n              {\n                step: \"update-remote-url\",\n              },\n            );\n            continue;\n          }\n\n          if (!isValidWorkspaceFolderWithRepoInfo(repo)) {\n            throw new Error(\n              `Remote URL update failed because repoUrl is undefined`,\n            );\n          }\n\n          // Update remote URL if needed\n          const currentRemoteUrl = await this.getGitRemoteUrl(repoPath);\n          if (currentRemoteUrl) {\n            const cleanCurrentUrl = this.sanitizeGitRemoteUrl(currentRemoteUrl);\n            const cleanExpectedUrl = this.sanitizeGitRemoteUrl(repo.repoUrl);\n\n            if (cleanCurrentUrl !== cleanExpectedUrl) {\n              this.addInitLog(\n                \"log\",\n                `Updating remote URL for ${repo.repoName}`,\n                {\n                  step: \"update-remote-url\",\n                },\n              );\n              try {\n                await this.git(\n                  [\"remote\", \"set-url\", \"origin\", repo.repoUrl],\n                  repoPath,\n                );\n              } catch (error) {\n                const errorMsg = `Failed to update git remote URL for ${repo.repoName}: ${error}`;\n                this.addInitLog(\"error\", errorMsg, {\n                  step: \"update-remote-url\",\n                  error: errorMsg,\n                });\n                throw new Error(errorMsg);\n              }\n            }\n          } else {\n            this.addInitLog(\n              \"log\",\n              `Adding remote origin for ${repo.repoName}`,\n              {\n                step: \"check-existing-git\",\n              },\n            );\n            try {\n              await this.git(\n                [\"remote\", \"add\", \"origin\", repo.repoUrl],\n                repoPath,\n              );\n            } catch (error) {\n              const errorMsg = `Failed to add git remote origin for ${repo.repoName}: ${error}`;\n              this.addInitLog(\"error\", errorMsg, {\n                step: \"check-existing-git\",\n                error: errorMsg,\n              });\n              throw new Error(errorMsg);\n            }\n          }\n        } else {\n          const dirHasFileButNoGit = await this.hasFilesButNoGit(repoPath);\n          if (dirHasFileButNoGit) {\n            const errorMsg =\n              \"Code directory already exists but is not a git repo\";\n            this.addInitLog(\"error\", errorMsg, {\n              step: \"check-existing-git\",\n              error: errorMsg,\n            });\n            throw new Error(errorMsg);\n          }\n\n          const backupResult = repo.backupMetadata\n            ? await downloadGitBackup(this.config.sys, repo.backupMetadata)\n            : undefined;\n\n          if (backupResult && !backupResult.success) {\n            this.addInitLog(\n              \"error\",\n              `Failed to download backup for ${repo.repoName}: ${backupResult.error}`,\n              {\n                step: \"clone-repo\",\n                error: backupResult.error.message,\n              },\n            );\n            throw backupResult.error;\n          }\n\n          if (backupResult?.success) {\n            this.sys.Sentry?.setTag(\n              \"backup\",\n              backupResult.partial ? \"partial\" : \"full\",\n            );\n          }\n\n          const tempRepoPath = path.join(tempCloningDir, repo.path);\n\n          let success = false;\n\n          if (repo.initializationCommand) {\n            this.addInitLog(\"log\", `Running initialization command.`, {\n              step: \"init-command\",\n            });\n            const result = await this.runInitializationCommand({\n              repo,\n              tempCloningDir,\n              repoPath: tempRepoPath,\n              initCommand: repo.initializationCommand,\n            });\n\n            success = result.outcome;\n\n            if (!success) {\n              const errorMsg =\n                result.error?.message ||\n                `Failed to run initialization command.`;\n              this.addInitLog(\"error\", errorMsg, {\n                step: \"init-command\",\n                error: errorMsg,\n              });\n              throw new Error(errorMsg);\n            } else {\n              this.addInitLog(\n                \"log\",\n                `Successfully initialized ${repo.repoName}`,\n                { step: \"init-command\" },\n              );\n            }\n          } else {\n            if (!isValidWorkspaceFolderWithRepoInfo(repo)) {\n              throw new Error(`repoUrl or repoName is undefined`);\n            }\n            this.addInitLog(\"log\", `Cloning repository: ${repo.repoName}`, {\n              step: \"clone-repo\",\n            });\n\n            success = await this.cloneRepository({\n              repo,\n              repoPath: tempRepoPath,\n              backupResult,\n            });\n\n            if (!success) {\n              const errorMsg = `Failed to clone repository ${repo.repoName}`;\n              this.addInitLog(\"error\", errorMsg, {\n                step: \"clone-repo\",\n                error: errorMsg,\n              });\n              throw new Error(errorMsg);\n            } else {\n              this.addInitLog(\"log\", `Successfully cloned ${repo.repoName}`, {\n                step: \"clone-repo\",\n              });\n            }\n          }\n\n          // Check if this repo has gitEnabled and try to download backup\n          if (backupResult && backupResult.success && backupResult.partial) {\n            try {\n              await this.restoreFromPartialBackup({\n                repo,\n                repoPath: tempRepoPath,\n                backupResult,\n              });\n            } catch (error) {\n              throw error;\n            }\n          }\n\n          // If all steps suceeded, move the temp repo to the correct path\n          await fsPromises.rename(tempRepoPath, repoPath);\n        }\n      }\n    } catch (error) {\n      this.addInitLog(\n        \"error\",\n        `Failed to configure git repositories: ${error}`,\n        {\n          step: \"configure-git-repos\",\n          error: String(error),\n        },\n      );\n      throw error;\n    } finally {\n      await removeTempCloningDirIfExists();\n    }\n  }\n\n  async step3ConfigureGitUser(\n    volumePath: string,\n    repositories: ValidatedWorkspaceFolder[],\n  ): Promise<void> {\n    this.addInitLog(\"log\", \"Configuring git user\", {\n      step: \"configure-git-user\",\n    });\n\n    for (const repo of repositories) {\n      const repoPath = path.join(volumePath, repo.path);\n\n      this.addInitLog(\"log\", `Setting git user for ${repo.repoName}`, {\n        step: \"configure-git-user\",\n      });\n\n      try {\n        await this.git(\n          [\"config\", \"user.email\", \"builder-bot@builder.io\"],\n          repoPath,\n        );\n        await this.git([\"config\", \"user.name\", \"Builder.io\"], repoPath);\n      } catch (error) {\n        const errorMsg = `Failed to configure git user for ${repo.repoName}: ${error}`;\n        this.addInitLog(\"error\", errorMsg, {\n          step: \"configure-git-user\",\n          error: errorMsg,\n        });\n        throw new Error(errorMsg);\n      }\n    }\n  }\n\n  async step4CollectRepoInfo(\n    config: InitConfig,\n    volumePath: string,\n    repositories: ValidatedWorkspaceFolder[],\n  ): Promise<void> {\n    this.addInitLog(\"log\", \"Collecting repo info\", {\n      step: \"collect-repo-info\",\n    });\n\n    this.initState.repos = [];\n    for (const repo of repositories) {\n      const repoPath = path.join(volumePath, repo.path);\n      try {\n        const lastCommitHash = await this.git([\"rev-parse\", \"HEAD\"], repoPath);\n        const branch = await this.git([\"branch\", \"--show-current\"], repoPath);\n\n        const data = {\n          repoName: repo.repoName || repo.path,\n          enabledGit: !!repo.enableGit,\n          lastCommitHash: lastCommitHash.trim(),\n          branch: branch.trim(),\n        };\n        this.initState.repos.push(data);\n        this.addInitLog(\"log\", `Collected repo info: ${JSON.stringify(data)}`, {\n          step: \"collect-repo-info\",\n        });\n      } catch (error) {\n        config.sys.Sentry?.captureException(error, {\n          tags: { operation: \"init\", ...config.sentryTags },\n        });\n      }\n    }\n  }\n\n  private async isGitConfigured(repoPath: string): Promise<boolean> {\n    try {\n      await this.git([\"rev-parse\", \"--is-inside-work-tree\"], repoPath);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  private async getGitRemoteUrl(repoPath: string): Promise<string | null> {\n    try {\n      const remoteUrl = await this.git(\n        [\"config\", \"--get\", \"remote.origin.url\"],\n        repoPath,\n      );\n      return remoteUrl.trim();\n    } catch {\n      return null;\n    }\n  }\n\n  private sanitizeGitRemoteUrl(remoteUrl: string): string {\n    return remoteUrl.replace(/https:\\/\\/[^@]+@/, \"https://\");\n  }\n\n  /**\n   * Check if the repository URL is from a standard git hosting provider\n   */\n  private isStandardGitHost(repoUrl: string): boolean {\n    const standardHosts = [\"github.com\", \"gitlab.com\", \"bitbucket.org\"];\n\n    try {\n      const url = new URL(repoUrl);\n      return standardHosts.some(\n        (host) => url.hostname === host || url.hostname.endsWith(`.${host}`),\n      );\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Check if the repository host is reachable via network\n   * Performs DNS resolution and TCP connection check\n   */\n  private async checkHostConnectivity(repoUrl: string): Promise<{\n    reachable: boolean;\n    hostname?: string;\n    error?: string;\n  }> {\n    try {\n      // Detect SSH vs HTTPS URLs\n      const isSshUrl =\n        repoUrl.startsWith(\"git@\") || repoUrl.startsWith(\"ssh://\");\n      let hostname: string;\n      let port: number;\n\n      if (isSshUrl) {\n        // SSH format: git@github.com:user/repo.git or ssh://git@github.com/user/repo.git\n        const sshMatch = repoUrl.match(\n          /^(?:ssh:\\/\\/)?(?:[^@]+@)?([^/:]+)(?::|\\/)/,\n        );\n        if (!sshMatch) {\n          return {\n            reachable: false,\n            error: \"Invalid SSH repository URL format\",\n          };\n        }\n        hostname = sshMatch[1];\n        port = 22;\n      } else {\n        // HTTPS format (most cases): https://x-access-token:ghs_xxx@hostname.com/org/repo.git\n        const httpsMatch = repoUrl.match(/^https?:\\/\\/(?:[^@]+@)?([^/:?#]+)/);\n        if (!httpsMatch) {\n          return {\n            reachable: false,\n            error: \"Invalid repository URL format\",\n          };\n        }\n        hostname = httpsMatch[1];\n        port = 443;\n      }\n\n      this.addInitLog(\n        \"log\",\n        `Checking connectivity to host: ${hostname}:${port}`,\n        { step: \"clone-repo\" },\n      );\n\n      // Try DNS resolution first (fast) - try IPv4, fallback to IPv6\n      try {\n        let addresses: string[] = [];\n        try {\n          addresses = await dns.resolve4(hostname);\n          if (addresses.length > 0) {\n            this.addInitLog(\n              \"log\",\n              `DNS resolved ${hostname} to IPv4: ${addresses.join(\", \")}`,\n              { step: \"clone-repo\" },\n            );\n          }\n        } catch (ipv4Error) {\n          addresses = await dns.resolve6(hostname);\n          if (addresses.length > 0) {\n            this.addInitLog(\n              \"log\",\n              `DNS resolved ${hostname} to IPv6: ${addresses.join(\", \")}`,\n              { step: \"clone-repo\" },\n            );\n          }\n        }\n\n        if (addresses.length === 0) {\n          return {\n            reachable: false,\n            hostname,\n            error: `DNS resolution failed: no addresses found for ${hostname}`,\n          };\n        }\n      } catch (dnsError) {\n        const errorMsg =\n          dnsError instanceof Error ? dnsError.message : String(dnsError);\n        return {\n          reachable: false,\n          hostname,\n          error: `DNS resolution failed for ${hostname}: ${errorMsg}`,\n        };\n      }\n\n      try {\n        const directResult = await this.checkConnectivityDirect(hostname, port);\n        if (directResult.reachable) {\n          return directResult;\n        }\n\n        // If direct connection failed, try proxy if HTTP_PROXY is available\n        const httpProxy = process.env.HTTP_PROXY || process.env.http_proxy;\n        if (httpProxy) {\n          this.addInitLog(\n            \"log\",\n            `Direct connection failed, trying proxy: ${httpProxy}`,\n            { step: \"clone-repo\" },\n          );\n\n          return await this.checkConnectivityViaProxy(\n            hostname,\n            port,\n            httpProxy,\n          );\n        }\n\n        return directResult;\n      } catch (connectError) {\n        const errorMsg =\n          connectError instanceof Error\n            ? connectError.message\n            : String(connectError);\n        return {\n          reachable: false,\n          hostname,\n          error: `Connection attempt failed: ${errorMsg}`,\n        };\n      }\n    } catch (error) {\n      const errorMsg = error instanceof Error ? error.message : String(error);\n      return {\n        reachable: false,\n        error: `Unexpected error during connectivity check: ${errorMsg}`,\n      };\n    }\n  }\n\n  private async checkConnectivityDirect(\n    hostname: string,\n    port: number,\n  ): Promise<{\n    reachable: boolean;\n    hostname?: string;\n    error?: string;\n  }> {\n    const timeout = 5000; // 5 second timeout\n    const socket = net.createConnection({\n      host: hostname,\n      port: port,\n      timeout,\n    });\n\n    return await new Promise((resolve) => {\n      socket.on(\"connect\", () => {\n        socket.destroy();\n        this.addInitLog(\n          \"log\",\n          `Successfully connected to ${hostname}:${port}`,\n          {\n            step: \"clone-repo\",\n          },\n        );\n        resolve({ reachable: true, hostname });\n      });\n\n      socket.on(\"error\", (err) => {\n        socket.destroy();\n        this.addInitLog(\n          \"error\",\n          `Connection failed to ${hostname}:${port}: ${err.message}`,\n          {\n            step: \"clone-repo\",\n            error: err.message,\n          },\n        );\n        resolve({\n          reachable: false,\n          hostname,\n          error: `Cannot connect to ${hostname}:${port}: ${err.message}`,\n        });\n      });\n\n      socket.on(\"timeout\", () => {\n        socket.destroy();\n        this.addInitLog(\n          \"error\",\n          `Connection timeout to ${hostname}:${port} (${timeout / 1000}s)`,\n          {\n            step: \"clone-repo\",\n            error: `Connection timeout to ${hostname}:${port} after ${timeout / 1000} seconds`,\n          },\n        );\n        resolve({\n          reachable: false,\n          hostname,\n          error: `Connection timeout to ${hostname}:${port} after ${timeout / 1000} seconds`,\n        });\n      });\n    });\n  }\n\n  private async checkConnectivityViaProxy(\n    hostname: string,\n    port: number,\n    proxyUrl: string,\n  ): Promise<{ reachable: boolean; hostname?: string; error?: string }> {\n    try {\n      this.addInitLog(\n        \"log\",\n        `Attempting proxy connection to ${hostname}:${port} via proxy`,\n        { step: \"clone-repo\" },\n      );\n\n      // Parse proxy URL to handle credentials\n      const proxyUrlObj = new URL(proxyUrl);\n      const cleanProxyUrl = `${proxyUrlObj.protocol}//${proxyUrlObj.host}`;\n\n      // Create ProxyAgent with authentication if credentials are present\n      const proxyAgent = new ProxyAgent({\n        uri: cleanProxyUrl,\n        token:\n          proxyUrlObj.username && proxyUrlObj.password\n            ? `Basic ${Buffer.from(`${proxyUrlObj.username}:${proxyUrlObj.password}`).toString(\"base64\")}`\n            : undefined,\n      });\n\n      // Test connectivity by making a request to the target host through the proxy\n      const targetUrl = `http://${hostname}:${port}`;\n      await fetch(targetUrl, {\n        dispatcher: proxyAgent,\n        signal: AbortSignal.timeout(30000), // 30 second timeout for proxied requests\n      });\n\n      this.addInitLog(\n        \"log\",\n        `Successfully connected via proxy to ${hostname}:${port}`,\n        { step: \"clone-repo\" },\n      );\n      return { reachable: true, hostname };\n    } catch (error) {\n      return {\n        reachable: false,\n        hostname,\n        error: `Proxy connection failed: ${error instanceof Error ? error.message : String(error)}`,\n      };\n    }\n  }\n\n  private async cleanupLockFiles(repoPath: string): Promise<void> {\n    const gitPath = path.join(repoPath, \".git\");\n\n    try {\n      const files = await fsPromises.readdir(gitPath);\n      const lockFiles = files.filter((file) => file.endsWith(\".lock\"));\n\n      if (lockFiles.length === 0) {\n        return;\n      }\n\n      const removedFiles: string[] = [];\n\n      for (const lockFile of lockFiles) {\n        const lockFilePath = path.join(gitPath, lockFile);\n        try {\n          await fsPromises.unlink(lockFilePath);\n          removedFiles.push(lockFile);\n        } catch (fileError) {\n          this.config.sys.Sentry?.captureException(\n            new Error(\n              `Failed to remove ${lockFile} for ${repoPath}: ${fileError}`,\n            ),\n            {\n              tags: { operation: \"init\", ...this.config.sentryTags },\n            },\n          );\n        }\n      }\n\n      if (removedFiles.length > 0) {\n        this.config.sys.Sentry?.captureMessage(\n          `Lock files found for ${repoPath} and removed: ${removedFiles.join(\", \")}`,\n          {\n            tags: { operation: \"init\", ...this.config.sentryTags },\n          },\n        );\n      }\n    } catch (error) {\n      this.config.sys.Sentry?.captureException(\n        new Error(`Failed to cleanup lock files for ${repoPath}: ${error}`),\n        {\n          tags: { operation: \"init\", ...this.config.sentryTags },\n        },\n      );\n    }\n  }\n\n  async validateGitRepo(repoPath: string): Promise<void> {\n    try {\n      await this.git([\"fsck\", \"--connectivity-only\"], repoPath);\n    } catch (error) {\n      throw new Error(\"Git repo is in bad state\", { cause: error });\n    }\n  }\n\n  /**\n   * If a backup is available, perform a backup recovery (and throw if it fails and cannot be recovered from).\n   * If no backup is available, do nothing.\n   */\n  private async restoreFromPartialBackup({\n    repo,\n    repoPath,\n    backupResult,\n  }: {\n    repo: ValidatedWorkspaceFolder;\n    repoPath: string;\n    backupResult: GitBackupDownloadResultValid;\n  }) {\n    try {\n      this.addInitLog(\"log\", `Checking for git backup for ${repo.repoName}`, {\n        step: \"apply-partial-backup\",\n      });\n\n      const cleanupRestore = async () => {\n        try {\n          await this.git([\"remote\", \"remove\", \"backup\"], repoPath);\n        } catch (error) {\n          this.addInitLog(\"error\", `Failed to cleanup restore: ${error}`, {\n            step: \"apply-partial-backup\",\n            error: String(error),\n          });\n        }\n      };\n\n      if (!backupResult.bundlePath) {\n        try {\n          this.addInitLog(\n            \"log\",\n            `Found empty git backup, applying it to ${repo.repoName}`,\n            { step: \"apply-partial-backup\" },\n          );\n          await this.checkout(\n            backupResult.gitBranchName,\n            backupResult.lastCommitHash,\n            repoPath,\n          );\n        } catch (error) {\n          this.addInitLog(\n            \"error\",\n            `Failed to checkout backup branch: ${error}`,\n            {\n              step: \"apply-partial-backup\",\n              error: String(error),\n            },\n          );\n          throw error;\n        }\n        return;\n      }\n\n      try {\n        this.addInitLog(\n          \"log\",\n          `Found git backup, applying it to ${repo.repoName}`,\n          { step: \"apply-partial-backup\" },\n        );\n        // Add the bundle as a remote\n        await this.git(\n          [\"remote\", \"add\", \"backup\", backupResult.bundlePath],\n          repoPath,\n        );\n\n        // Fetch from the bundle\n        await this.git([\"fetch\", \"backup\"], repoPath);\n\n        const aiBranch = backupResult.gitBranchName;\n\n        // Create and checkout the AI branch from the backup\n        await this.checkout(aiBranch, `backup/${aiBranch}`, repoPath);\n\n        this.addInitLog(\n          \"log\",\n          `Successfully restored from backup to branch ${aiBranch}`,\n          {\n            step: \"apply-partial-backup\",\n          },\n        );\n\n        await cleanupRestore();\n        this.addInitLog(\"log\", `Cleaned up backup for ${repo.repoName}`, {\n          step: \"apply-partial-backup\",\n        });\n      } catch (gitError) {\n        await cleanupRestore();\n\n        this.addInitLog(\"error\", String(gitError), {\n          step: \"apply-partial-backup\",\n          error: String(gitError),\n        });\n        throw gitError;\n      }\n    } catch (backupError) {\n      const error = new Error(\n        `Failed to check git backup for ${repo.repoName}. Cannot proceed without backup recovery.`,\n        { cause: backupError },\n      );\n      this.addInitLog(\"error\", error.message, {\n        step: \"apply-partial-backup\",\n        error: String(backupError),\n      });\n      throw error;\n    }\n  }\n\n  private async initializeGitRepo(\n    repoPath: string,\n    isTest: boolean,\n  ): Promise<void> {\n    await this.git([\"init\"], repoPath);\n    await this.git([\"add\", \".\"], repoPath);\n    await this.git([\"branch\", \"-M\", \"main\"], repoPath);\n    await this.git(\n      [\n        ...(isTest\n          ? [\"-c\", \"user.email=team@builder.io\", \"-c\", \"user.name=Builder.io\"]\n          : []),\n        \"commit\",\n        \"-m\",\n        \"Initial setup\",\n      ],\n      repoPath,\n    );\n  }\n\n  private async refreshRepoConfig(repo: ValidatedWorkspaceFolder) {\n    try {\n      if (this.config.fusionConfig.projectId) {\n        const result = await fetchGitConfigs(\n          this.config.credentials,\n          this.config.fusionConfig.projectId,\n        );\n        if (result.success) {\n          if (Object.keys(result.gitConfigs).length === 0) {\n            console.log(\"Git configs gave an empty result. Nothing to update.\");\n            return;\n          }\n          const cfg = Object.values(result.gitConfigs)[0];\n          if (cfg?.url) {\n            const mainRepo = this.config.fusionConfig.workspace?.folders.find(\n              (f) => f.enableGit,\n            );\n            if (mainRepo) {\n              mainRepo.repoUrl = cfg.url;\n              mainRepo.repoName = Object.keys(result.gitConfigs)[0];\n            }\n          }\n        } else {\n          this.config.sys.Sentry?.captureException(result.error, {\n            tags: {\n              operation: \"init\",\n              endpoint: \"fetch-git-configs\",\n              ...this.config.sentryTags,\n            },\n          });\n        }\n      }\n    } catch (e) {\n      this.config.sys.Sentry?.captureException(\n        new Error(\"Failed to fetch git configs in InitStateMachine\", {\n          cause: e instanceof Error ? e : new Error(String(e)),\n        }),\n        {\n          tags: {\n            operation: \"init\",\n            endpoint: \"fetch-git-configs\",\n            ...this.config.sentryTags,\n          },\n          extra: { repo },\n        },\n      );\n    }\n    return;\n  }\n\n  async runInitializationCommand({\n    repo,\n    tempCloningDir,\n    repoPath,\n    initCommand,\n  }: {\n    repo: ValidatedWorkspaceFolder;\n    tempCloningDir: string;\n    repoPath: string;\n    initCommand: string;\n  }): Promise<{ outcome: boolean; error?: Error }> {\n    this.addInitLog(\n      \"log\",\n      `Init command paths args: tempCloningDir: ${tempCloningDir} repoPath: ${repoPath}`,\n      { step: \"init-command\" },\n    );\n    try {\n      this.addInitLog(\n        \"log\",\n        `Executing initialization command in ${tempCloningDir}`,\n        { step: \"init-command\" },\n      );\n\n      // Execute the entire command as a single shell command instead of splitting into parts\n      const shell = process.env.SHELL || process.env.COMSPEC || \"/bin/sh\";\n\n      try {\n        const initProc = safeSpawn(shell, initCommand, {\n          stdio: [\"ignore\", \"pipe\", \"pipe\"],\n          cwd: tempCloningDir,\n          env: {\n            ...process.env,\n            TERM: \"dumb\",\n          },\n        });\n\n        // Capture stdout and stderr\n        const stdoutChunks: Buffer[] = [];\n        const stderrChunks: Buffer[] = [];\n\n        initProc.stdout?.on(\"data\", (chunk: Buffer) => {\n          stdoutChunks.push(chunk);\n          const message = chunk.toString().trim();\n          if (message) {\n            this.addInitLog(\"log\", message, { step: \"init-command\" });\n          }\n        });\n\n        initProc.stderr?.on(\"data\", (chunk: Buffer) => {\n          stderrChunks.push(chunk);\n          const message = chunk.toString().trim();\n          if (message) {\n            this.addInitLog(\"error\", message, { step: \"init-command\" });\n          }\n        });\n\n        await new Promise<void>((resolve, reject) => {\n          initProc.on(\"error\", (error) => {\n            reject(error);\n          });\n\n          initProc.on(\"close\", (code) => {\n            if (code === 0) {\n              resolve();\n            } else {\n              const stdout = Buffer.concat(stdoutChunks as Uint8Array[])\n                .toString()\n                .trim();\n              const stderr = Buffer.concat(stderrChunks as Uint8Array[])\n                .toString()\n                .trim();\n              const errorDetails = [\n                `Command exited with code ${code}`,\n                stderr && `stderr: ${stderr}`,\n                stdout && `stdout: ${stdout}`,\n              ]\n                .filter(Boolean)\n                .join(\"\\n\");\n              reject(new Error(errorDetails));\n            }\n          });\n        });\n      } catch (error) {\n        const wrapperError = new Error(`Failed to execute initCommand.`, {\n          cause: error,\n        });\n        this.addInitLog(\"error\", wrapperError.message + `: ${error}`, {\n          step: \"init-command\",\n          error: String(error),\n        });\n        return { outcome: false, error: wrapperError };\n      }\n\n      return { outcome: true };\n    } catch (error) {\n      this.addInitLog(\n        \"error\",\n        `Failed to run initialization command: ${error}`,\n        {\n          step: \"init-command\",\n          error: String(error),\n        },\n      );\n      return {\n        outcome: false,\n        error: error instanceof Error ? error : new Error(String(error)),\n      };\n    }\n  }\n\n  async cloneRepository({\n    repo,\n    repoPath,\n    backupResult,\n  }: {\n    repo: WorkspaceFolderWithRepoInfo;\n    repoPath: string;\n    backupResult: GitBackupDownloadResult | undefined;\n  }): Promise<boolean> {\n    const possibleBranches = [\n      repo.branchName ?? \"main\",\n      null,\n      \"main\",\n      \"master\",\n    ];\n\n    if (backupResult && backupResult.success && !backupResult.partial) {\n      if (!backupResult.bundlePath) {\n        throw new Error(\"Full backups must have a bundle path\");\n      }\n      this.addInitLog(\n        \"log\",\n        `Downloaded full git backup, cloning it to ${repoPath}`,\n        {\n          step: \"clone-repo\",\n        },\n      );\n\n      try {\n        await this.git(\n          [\"clone\", backupResult.bundlePath, repoPath],\n          undefined,\n          undefined,\n          10 * 60 * 1000,\n        );\n        for (const branch of possibleBranches) {\n          if (branch) {\n            try {\n              await this.git([\"checkout\", branch], repoPath);\n            } catch {\n              continue;\n            }\n          }\n        }\n\n        await this.checkout(\n          backupResult.gitBranchName,\n          backupResult.lastCommitHash,\n          repoPath,\n        );\n\n        const currentBranch = (\n          await this.git([\"branch\", \"--show-current\"], repoPath)\n        ).trim();\n        const lastCommitHash = (\n          await this.git([\"rev-parse\", \"HEAD\"], repoPath)\n        ).trim();\n\n        if (currentBranch !== backupResult.gitBranchName) {\n          throw new Error(\n            `Backup branch ${backupResult.gitBranchName} does not match local branch ${currentBranch}`,\n          );\n        }\n\n        if (lastCommitHash !== backupResult.lastCommitHash) {\n          throw new Error(\n            `Backup commit hash ${backupResult.lastCommitHash} does not match local commit hash ${lastCommitHash}`,\n          );\n        }\n        return true;\n      } catch (error) {\n        this.addInitLog(\n          \"error\",\n          `Failed to clone git backup for ${repo.repoName}: ${error}`,\n          {\n            step: \"clone-repo\",\n            error: String(error),\n          },\n        );\n        throw error;\n      }\n    }\n\n    // For E2E tests initialize git\n    const isTestAndNeedsGitInit = process.env.TEST_NEEDS_GIT_INIT === \"1\";\n\n    // Check host connectivity for non-standard git hosts before attempting clone\n    if (!this.isStandardGitHost(repo.repoUrl)) {\n      this.addInitLog(\n        \"log\",\n        `Non-standard git host detected, checking connectivity to ${repo.repoUrl}`,\n        { step: \"clone-repo\" },\n      );\n\n      const connectivityResult = await this.checkHostConnectivity(repo.repoUrl);\n\n      if (!connectivityResult.reachable) {\n        const errorMsg = `Git host unreachable: ${connectivityResult.hostname || \"unknown host\"}. ${connectivityResult.error || \"Network connectivity check failed\"}. This host may be behind a firewall or VPN.`;\n\n        this.addInitLog(\"error\", errorMsg, {\n          step: \"clone-repo\",\n          error: errorMsg,\n        });\n\n        this.config.sys.Sentry?.captureException(\n          new Error(\"Git host unreachable\"),\n          {\n            tags: { operation: \"init\", ...this.config.sentryTags },\n            extra: { repo, connectivityResult },\n          },\n        );\n\n        throw new Error(errorMsg);\n      }\n\n      this.addInitLog(\n        \"log\",\n        `Host connectivity verified for ${connectivityResult.hostname}`,\n        { step: \"clone-repo\" },\n      );\n    }\n\n    for (const branch of possibleBranches) {\n      try {\n        const templatePath =\n          process.env.FUSION_TEMPLATE_DIR &&\n          process.env.FUSION_TEMPLATE_DIR.trim().length > 0\n            ? process.env.FUSION_TEMPLATE_DIR\n            : \"/template\";\n        if (fs.existsSync(templatePath) && repo.repoName === STARTER_REPO) {\n          this.addInitLog(\"log\", `Starting copy of template to ${repoPath}`, {\n            step: \"clone-repo\",\n          });\n\n          await this.execAsync(\"rm\", [\"-rf\", repoPath], \"/\");\n          await this.execAsync(\"cp\", [\"-a\", templatePath, repoPath], \"/\");\n\n          this.addInitLog(\"log\", `Copied from template for ${repo.repoName}`, {\n            step: \"clone-repo\",\n          });\n\n          if (isTestAndNeedsGitInit) {\n            try {\n              await this.initializeGitRepo(repoPath, isTestAndNeedsGitInit);\n            } catch (error) {\n              const errorMsg = `Failed to initialize git repo for ${repo.repoName} after template copy: ${error}`;\n              this.addInitLog(\"error\", errorMsg, {\n                step: \"clone-repo\",\n                error: String(error),\n              });\n              throw new Error(errorMsg);\n            }\n          }\n          return true;\n        } else {\n          const gitCloneCommand = [\"clone\"];\n          if (branch) {\n            gitCloneCommand.push(\"-b\", branch);\n          }\n          gitCloneCommand.push(repo.repoUrl, repoPath);\n\n          this.addInitLog(\n            \"log\",\n            `Cloning repository: ${repo.repoName} with branch: ${branch || \"default\"}`,\n            { step: \"clone-repo\" },\n          );\n\n          await this.git(gitCloneCommand);\n\n          const shouldResetGit =\n            repo.resetGit !== undefined\n              ? repo.resetGit\n              : EXAMPLE_REPOS.includes(repo.repoName);\n\n          if (shouldResetGit && repo.enableGit) {\n            fs.rmSync(path.join(repoPath, \".git\"), {\n              recursive: true,\n              force: true,\n            });\n\n            await this.initializeGitRepo(repoPath, isTestAndNeedsGitInit);\n\n            this.addInitLog(\"log\", `Cleared git history for ${repo.repoName}`, {\n              step: \"clone-repo\",\n            });\n          }\n\n          return true;\n        }\n      } catch (error) {\n        this.addInitLog(\n          \"error\",\n          `Clone failed for branch ${branch || \"default\"}: ${error}`,\n          {\n            step: \"clone-repo\",\n            error: String(error),\n          },\n        );\n        continue;\n      }\n    }\n\n    return false;\n  }\n}\n\nfunction restoreUserBackup(user: string) {\n  const exclude = [\".npm\", \".local\", \".cache\"];\n  try {\n    const userPath = `/${user}`;\n    const userBackupPath = `/${user}-backup`;\n    if (fs.existsSync(userBackupPath)) {\n      const files = fs.readdirSync(userBackupPath);\n      for (const file of files) {\n        if (!exclude.includes(file)) {\n          const destination = path.join(userPath, file);\n          if (!fs.existsSync(destination)) {\n            try {\n              fs.cpSync(path.join(userBackupPath, file), destination, {\n                recursive: true,\n                force: true,\n              });\n            } catch (error) {\n              console.error(`Failed to restore ${file} for ${user}: ${error}`);\n            }\n          }\n        }\n      }\n    }\n  } catch (error) {\n    console.error(`Failed to restore ${user} backup: ${error}`);\n  }\n}\n", "import type { Request, Response, NextFunction } from \"express\";\nimport type { IncomingMessage } from \"http\";\nimport type { Duplex } from \"stream\";\n\n/**\n * Express middleware function type\n */\nexport type MiddlewareFunction = (\n  req: Request,\n  res: Response,\n  next: NextFunction,\n) => void;\n\n/**\n * WebSocket upgrade function type\n */\nexport type WebSocketUpgradeFunction = (\n  req: IncomingMessage,\n  socket: Duplex,\n  head: Buffer,\n) => void;\n\n/**\n * Extended Express middleware that includes WebSocket upgrade functionality\n */\nexport interface ProxyMiddleware extends MiddlewareFunction {\n  /**\n   * Handle WebSocket upgrade requests\n   * @param req - The incoming request\n   * @param socket - The socket connection\n   * @param head - The first packet of the upgraded stream\n   */\n  upgrade?: WebSocketUpgradeFunction;\n\n  /**\n   * Cleanup method for graceful shutdown\n   */\n  cleanup?: () => void;\n}\n\n/**\n * Type guard to check if a middleware has WebSocket upgrade capability\n */\nexport function hasUpgrade(middleware: any): middleware is ProxyMiddleware {\n  return (\n    middleware &&\n    typeof middleware === \"function\" &&\n    typeof middleware.upgrade === \"function\"\n  );\n}\n", "import * as Sentry from \"@sentry/node\";\nimport * as Amplitude from \"@amplitude/analytics-node\";\n\nconst handleSigTerm = async () => {\n  await Promise.allSettled([Sentry.flush(), Amplitude.flush().promise]);\n  process.exit(0);\n};\n\nexport function registerSigTerm() {\n  process.on(\"SIGINT\", handleSigTerm);\n  process.on(\"SIGTERM\", handleSigTerm);\n}\n\nexport function unregisterSigTerm() {\n  process.removeListener(\"SIGINT\", handleSigTerm);\n  process.removeListener(\"SIGTERM\", handleSigTerm);\n}\n", "import type { DevToolsSys } from \"@builder.io/dev-tools/core\";\nimport type { Credentials } from \"../credentials\";\nimport type {\n  FusionConfig,\n  FusionStatus,\n  LaunchServerStatus,\n  MachineConfig,\n} from \"$/ai-utils\";\nimport { apiAirV2Host } from \"../constants\";\nimport { safeFetch } from \"../fetch\";\nimport { isInRemoteContainer } from \"./helpers\";\nimport * as os from \"os\";\n\ninterface FusionStatusMonitor {\n  start: () => void;\n  stop: () => void;\n}\n\n/**\n * Creates a fusion status monitor that pings the status endpoint periodically\n */\nexport function createFusionStatusMonitor(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  fusionConfig: FusionConfig,\n  sharedState: LaunchServerStatus,\n): FusionStatusMonitor | null {\n  let interval: ReturnType<typeof setInterval> | null = null;\n\n  const pingFusionStatus = async () => {\n    try {\n      const url = new URL(`${apiAirV2Host}/projects/machine-status`);\n      if (credentials.builderPublicKey) {\n        url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n      }\n      if (credentials.userId) {\n        url.searchParams.set(\"userId\", credentials.userId);\n      }\n\n      const isRemote = isInRemoteContainer();\n\n      // Determine machine info based on environment\n      let machineInfo: MachineConfig | undefined;\n      if (isRemote && fusionConfig.machine) {\n        // In remote container, use the machine config if available\n        machineInfo = {\n          ...fusionConfig.machine,\n          environment: \"remote\",\n        };\n      } else if (!isRemote) {\n        // In local environment, gather current machine info\n        machineInfo = {\n          cpus: os.cpus().length,\n          memory: Math.round(os.totalmem() / (1024 * 1024 * 1024)), // Convert to GB\n          platform: os.platform(),\n          arch: os.arch(),\n          environment: \"local\",\n        };\n      }\n\n      const fusionStatus: FusionStatus = {\n        status: \"ok\",\n        state: sharedState.state,\n        setupState: sharedState.setupState,\n        devState: sharedState.devState,\n        editorReady: sharedState.editorReady,\n        httpServerState: sharedState.httpServerState,\n        initState: sharedState.initState,\n        errorMessage: sharedState.errorMessage,\n        devToolsVersion: sharedState.devToolsVersion,\n        idleTime: performance.now() - sharedState.lastRequestTime,\n        upTime: performance.now() - sharedState.startTime,\n        machine: machineInfo,\n        projectId: fusionConfig.projectId,\n        detectedServerUrl: sharedState.detectedServerUrl,\n        _attemptDryRunBackupOutcome: sharedState._attemptDryRunBackupOutcome,\n        workingDirectory: sharedState.workingDirectory,\n      };\n\n      const headers: Record<string, string> = {\n        \"Content-Type\": \"application/json\",\n      };\n      if (credentials.builderPrivateKey) {\n        headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n      }\n\n      await safeFetch(url, {\n        method: \"POST\",\n        body: JSON.stringify(fusionStatus),\n        headers,\n        keepalive: true,\n        signal: AbortSignal.timeout(5000),\n      });\n    } catch {\n      // Ignore errors\n    }\n  };\n\n  return {\n    start: () => {\n      if (interval) {\n        return;\n      }\n\n      pingFusionStatus();\n\n      const pingInterval = 60 * 1000;\n      interval = setInterval(pingFusionStatus, pingInterval);\n    },\n\n    stop: () => {\n      if (interval) {\n        clearInterval(interval);\n        interval = null;\n      }\n    },\n  };\n}\n", "import { InitStateMachine, type InitConfig } from \"./InitStateMachine\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"fs\";\nimport { rm } from \"fs/promises\";\n\nimport type { InitState } from \"$/ai-utils\";\nimport { pushMetrics } from \"./grafana\";\nimport { log } from \"@clack/prompts\";\nimport { pkgVersion } from \"../version\";\n\nconst TEST_WORKING_DIR = \"/app-backup-test\";\nconst TEST_MARK = \"/app/.mark\";\n\nconst TAGS = {\n  operation: \"dry-run-backup-git\",\n  dryRunBackupGit: \"true\",\n};\n\nexport const attemptDryRunBackupGit = async (\n  initConfig: InitConfig,\n  realInitState: InitState,\n) => {\n  const result = await _attemptDryRunBackupGit(initConfig, realInitState);\n  if (!result) {\n    return result;\n  }\n  if (!result.success) {\n    log.error(`\u274C Dry run backup git failed: ${result.error}`);\n    initConfig.sys.Sentry?.captureException(\n      new Error(`Attempted dry run backup failed: ${result.error}`),\n      {\n        tags: TAGS,\n      },\n    );\n  } else {\n    log.success(\"\u2705 Dry run backup git succeeded\");\n  }\n  pushMetrics(initConfig.sys, initConfig.credentials, {\n    counters: [\n      {\n        key: \"projects_backup_dry_run_ended\",\n        value: 1,\n        attributes: {\n          outcome: result.success ? \"success\" : (result.error ?? \"unknown\"),\n          version: pkgVersion,\n        },\n      },\n    ],\n  });\n  return result;\n};\n\nconst _attemptDryRunBackupGit = async (\n  { sys, fusionConfig, credentials }: InitConfig,\n  realInitState: InitState,\n) => {\n  function getDiagnostics(initStateMachine: InitStateMachine) {\n    const backupCheck = fusionConfig.workspace?.folders.find(\n      (a) => a.backupMetadata,\n    )?.backupMetadata?.check;\n\n    const mainRepo = realInitState.repos.find((a) => a.enabledGit);\n    const backupMainRepo = initStateMachine.initState.repos.find(\n      (a) => a.enabledGit,\n    );\n    return JSON.stringify(\n      {\n        backupCheck,\n        mainRepo,\n        backupMainRepo,\n      },\n      null,\n      2,\n    );\n  }\n  try {\n    const machineId = process.env.FLY_MACHINE_ID ?? \"unknown\";\n    if (\n      existsSync(TEST_MARK) &&\n      readFileSync(TEST_MARK, \"utf8\") === machineId\n    ) {\n      return null;\n    }\n    writeFileSync(TEST_MARK, machineId);\n\n    log.info(\"Attempting dry run backup git\");\n\n    if (realInitState.currentStep !== \"init-success\") {\n      return {\n        success: false,\n        error: \"main-init-failed\",\n      };\n    }\n    if (existsSync(TEST_WORKING_DIR)) {\n      await rm(TEST_WORKING_DIR, { recursive: true, force: true });\n    }\n    mkdirSync(TEST_WORKING_DIR, { recursive: true });\n    const initStateMachine = new InitStateMachine({\n      sys,\n      fusionConfig: {\n        ...fusionConfig,\n        _attemptDryRunBackupGit: false,\n        workingDirectory: TEST_WORKING_DIR,\n      },\n      debug: true,\n      credentials,\n      sentryTags: TAGS,\n    });\n    const success = await initStateMachine.init();\n    const diagnostics = getDiagnostics(initStateMachine);\n    if (!success) {\n      console.error(\n        `\u274C Backup failed: ${initStateMachine.initState.currentStep}\\n${diagnostics}`,\n      );\n      return {\n        success: false,\n        error: `backup-failed:${initStateMachine.initState.currentStep}`,\n      };\n    }\n    const backupMainRepo = initStateMachine.initState.repos.find(\n      (a) => a.enabledGit,\n    );\n    if (!backupMainRepo) {\n      console.error(`\u274C Backup repo not found\\n${diagnostics}`);\n      return {\n        success: false,\n        error: \"backup-repo-not-found\",\n      };\n    }\n    const mainRepo = realInitState.repos.find((a) => a.enabledGit);\n    if (!mainRepo) {\n      console.error(`\u274C Main repo not found\\n${diagnostics}`);\n      return {\n        success: false,\n        error: \"main-repo-not-found\",\n      };\n    }\n    if (backupMainRepo.branch !== mainRepo.branch) {\n      console.error(\n        `\u274C Backup branch mismatch: ${backupMainRepo.branch} !== ${mainRepo.branch}\\n${diagnostics}`,\n      );\n      return {\n        success: false,\n        error: \"backup-branch-mismatch\",\n      };\n    }\n    const backupMetadata = fusionConfig.workspace?.folders.find(\n      (a) => a.backupMetadata,\n    )?.backupMetadata;\n    if (backupMetadata) {\n      if (backupMainRepo.branch !== backupMetadata.check.backup.gitBranchName) {\n        console.error(\n          `\u274C Backup branch mismatch: ${backupMainRepo.branch} !== ${backupMetadata.check.backup.gitBranchName}\\n${diagnostics}`,\n        );\n        return {\n          success: false,\n          error: \"backup-branch-mismatch-in-metadata\",\n        };\n      }\n      if (\n        backupMainRepo.lastCommitHash !==\n        backupMetadata.check.backup.lastCommitHash\n      ) {\n        console.error(\n          `\u274C Backup commit hash mismatch: ${backupMainRepo.lastCommitHash} !== ${backupMetadata.check.backup.lastCommitHash}\\n${diagnostics}`,\n        );\n        return {\n          success: false,\n          error: \"backup-commit-hash-mismatch-in-metadata\",\n        };\n      }\n    }\n    if (backupMainRepo.lastCommitHash !== mainRepo.lastCommitHash) {\n      console.error(\n        `\u274C Backup commit hash mismatch: ${backupMainRepo.lastCommitHash} !== ${mainRepo.lastCommitHash}`,\n      );\n      return {\n        success: false,\n        error: \"backup-commit-hash-mismatch\",\n      };\n    }\n    return {\n      success: true,\n    };\n  } catch (error) {\n    sys.Sentry?.captureException(error, {\n      tags: TAGS,\n    });\n    return {\n      success: false,\n      error: \"error\",\n    };\n  }\n};\n", "import { apiAirV2Host } from \"../constants\";\nimport { safeFetch } from \"../fetch\";\nimport type { FusionMetrics } from \"$/ai-utils\";\nimport type { Credentials } from \"../credentials\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport async function pushMetrics(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  body: FusionMetrics,\n): Promise<void> {\n  try {\n    const url = new URL(`${apiAirV2Host}/projects/metrics`);\n    if (credentials.builderPublicKey) {\n      url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n    }\n    if (credentials.userId) {\n      url.searchParams.set(\"userId\", credentials.userId);\n    }\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    if (credentials.builderPrivateKey) {\n      headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n    }\n\n    await safeFetch(url, {\n      method: \"POST\",\n      body: JSON.stringify(body),\n      headers,\n      keepalive: true,\n      signal: AbortSignal.timeout(5000),\n    });\n  } catch (error) {\n    sys.Sentry?.captureException(\n      new Error(\"Failed to push metrics\", {\n        cause: error,\n      }),\n    );\n  }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { DevToolsSys } from \"@builder.io/dev-tools/core\";\nimport { killProcess } from \"./process-tracker\";\nimport type { FusionConfig } from \"$/ai-utils\";\n\nexport interface LockFileData {\n  cwd: string;\n  projectId?: string;\n  branchId?: string;\n  pid: number;\n  createdAt: number;\n  port?: number;\n}\n\nexport type LockConflictBehavior = \"replace\" | \"exit\" | \"kill\";\n\n/**\n * Registers a lock file to prevent multiple instances from running.\n * - Checks if the lock file already exists\n * - Handles conflicts based on the specified behavior:\n *   - 'exit': Exits with code -10 if lock exists\n *   - 'replace': Overwrites the existing lock file\n *   - 'kill': Kills the existing process and overwrites the lock file\n * - Creates the lock file with process information\n * - Automatically removes the lock file when the process exits\n *\n * @param sys - DevToolsSys for logging and Sentry integration\n * @param lockFilePath - Absolute path where the lock file should be created\n * @param conflictBehavior - How to handle existing lock files\n * @param projectId - Optional project ID\n * @param branchId - Optional branch ID/name\n */\nexport async function registerLock(\n  sys: DevToolsSys,\n  fusionConfig: FusionConfig,\n): Promise<void> {\n  const lockFilePath = fusionConfig.lockFile?.filePath;\n  if (!lockFilePath) {\n    return;\n  }\n  const conflictBehavior = fusionConfig.lockFile?.conflictBehavior;\n  if (!conflictBehavior) {\n    return;\n  }\n  const projectId = fusionConfig.projectId;\n  const branchId = fusionConfig.branchName;\n  const port = fusionConfig.fusionServerPort;\n\n  // Check if lock file already exists\n  if (fs.existsSync(lockFilePath)) {\n    console.log(`Lock file already exists at: ${lockFilePath}`);\n\n    // Read existing lock file to get the PID\n    let existingLock: LockFileData | null = null;\n    try {\n      const content = fs.readFileSync(lockFilePath, \"utf8\");\n      existingLock = JSON.parse(content) as LockFileData;\n    } catch (error) {\n      console.warn(\n        `Failed to read existing lock file, treating as corrupted:`,\n        error,\n      );\n    }\n\n    switch (conflictBehavior) {\n      case \"exit\":\n        console.error(\"Another instance may already be running.\");\n        if (existingLock) {\n          console.error(`Existing process PID: ${existingLock.pid}`);\n          console.error(\n            `Existing process started at: ${new Date(existingLock.createdAt).toISOString()}`,\n          );\n        }\n        process.exit(-10);\n\n      case \"replace\":\n        console.log(\"Replacing existing lock file (conflictBehavior: replace)\");\n        if (existingLock) {\n          console.log(`Previous process PID: ${existingLock.pid}`);\n        }\n        // Continue to create new lock file\n        break;\n\n      case \"kill\":\n        console.log(\n          \"Attempting to kill existing process (conflictBehavior: kill)\",\n        );\n        if (existingLock) {\n          if (existingLock.pid === process.pid) {\n            console.log(\"Skipping kill, same process\");\n            break;\n          }\n          console.log(`Attempting to kill process ${existingLock.pid}...`);\n          const killed = await killProcess(sys, existingLock.pid);\n          if (!killed) {\n            console.error(\n              `Failed to kill process ${existingLock.pid}, exiting...`,\n            );\n            process.exit(-10);\n          }\n          console.log(`Process ${existingLock.pid} terminated successfully`);\n        } else {\n          console.log(\n            \"Could not read PID from lock file, replacing lock file anyway\",\n          );\n        }\n        // Continue to create new lock file\n        break;\n    }\n  }\n\n  // Prepare lock file data\n  const lockData: LockFileData = {\n    cwd: process.cwd(),\n    projectId,\n    branchId,\n    pid: process.pid,\n    createdAt: Date.now(),\n    port,\n  };\n\n  try {\n    // Ensure the directory exists\n    const lockDir = path.dirname(lockFilePath);\n    if (!fs.existsSync(lockDir)) {\n      fs.mkdirSync(lockDir, { recursive: true });\n    }\n\n    // Write lock file\n    fs.writeFileSync(lockFilePath, JSON.stringify(lockData, null, 2), \"utf8\");\n    console.log(`Lock file created at: ${lockFilePath}`);\n\n    // Register cleanup handlers\n    let cleanupCalled = false;\n    const cleanup = () => {\n      if (cleanupCalled) {\n        return;\n      }\n      try {\n        if (fs.existsSync(lockFilePath)) {\n          fs.unlinkSync(lockFilePath);\n          console.log(`Lock file removed: ${lockFilePath}`);\n        }\n      } catch (error) {\n        console.error(`Failed to remove lock file at ${lockFilePath}:`, error);\n      }\n      cleanupCalled = true;\n    };\n\n    // Register cleanup on various exit signals\n    process.on(\"exit\", cleanup);\n    process.on(\"SIGINT\", cleanup);\n    process.on(\"SIGTERM\", cleanup);\n    process.on(\"uncaughtException\", cleanup);\n    process.on(\"unhandledRejection\", cleanup);\n  } catch (error) {\n    console.error(`Failed to create lock file at ${lockFilePath}:`, error);\n    throw error;\n  }\n}\n", "import type { DevToolsSys } from \"../../types\";\nimport type { CLIArgs } from \"../index\";\nimport * as Sentry from \"@sentry/node\";\n\nimport { bold, bgCyan, dim, white, cyan } from \"picocolors\";\n\nimport {\n  intro,\n  spinner,\n  log,\n  confirm,\n  text,\n  select,\n  isCancel,\n} from \"@clack/prompts\";\nimport { type Credentials, getCredentials } from \"../credentials\";\nimport { apiAirV2Host } from \"../constants\";\nimport crypto from \"crypto\";\nimport { safeFetch } from \"../fetch\";\nimport { pkgVersion } from \"../version\";\nimport type {\n  DesignSystem,\n  WorkspaceConfiguration,\n  DesignSystemScope,\n} from \"$/ai-utils\";\n// TODO fix me\n//import { mockDeps } from \"./repo-indexing.mock\";\nimport cliProgress from \"cli-progress\";\nimport wrapAnsi from \"wrap-ansi\";\nimport {\n  parseDesignSystem,\n  ICONS_FILE,\n  REPO_INDEXING_FOLDER,\n  getAllDesignSystems,\n  addDesignSystem,\n  updateDesignSystem,\n  getDesignSystemByName,\n  getDesignSystemByNameAndScope,\n  promptForDesignSystemScope,\n  checkRepoIndexingFolder,\n  type UserSettings,\n} from \"./repo-indexing-utils\";\nimport { getUserSettingsByUserId } from \"../auth/auth-utils\";\nimport type { IndexDocument, ComponentTask, Task, TokenTask } from \"./types\";\nimport {\n  isComponentDocument,\n  isIconDocument,\n  isTokenDocument,\n  isAgentDocument,\n} from \"./types\";\nimport { discoverComponents } from \"./component-discovery\";\nimport { discoverIcons, processIcons } from \"./icons\";\nimport { discoverTokens, processTokens } from \"./tokens\";\nimport {\n  processComponent,\n  processAgent,\n  deprecateObsoleteComponents,\n} from \"./component-indexing\";\nimport { isAbsolute } from \"path\";\nimport {\n  displayNetworkError,\n  NetworkError,\n  PrivateError,\n} from \"../../common/errors\";\nimport { track } from \"../track\";\n\nconst CONCURRENCY_LIMIT = 8;\n//const MOCK_DEPENDENCIES = false;\nconst WORKER_COMPLETED_MESSAGE = \"Done \u2713\";\n\n/**\n * Parse comma-separated component names into an array\n */\nconst parseComponentNames = (componentsArg?: string): string[] => {\n  if (!componentsArg) return [];\n  return componentsArg\n    .split(\",\")\n    .map((name) => name.trim())\n    .filter((name) => name.length > 0);\n};\n\nexport const displayComponentLibrarySummary = (\n  components: ComponentTask[],\n  indexedComponents: ComponentTask[],\n  startTime: number,\n  failedComponents: string[] = [],\n  isForce: boolean = false,\n  designSystemName: string,\n  designSystemId?: string,\n  numIconsIndexed: number = 0,\n  tokenGroupsFound: TokenTask[] = [],\n  tokenGroupsToIndex: TokenTask[] = [],\n  tokenGroupsFailed: string[] = [],\n) => {\n  const endTime = Date.now();\n  const durationMs = endTime - startTime;\n  const durationMinutes = Math.floor(durationMs / 60000);\n  const durationSeconds = Math.floor((durationMs % 60000) / 1000);\n  const durationFormatted = `${durationMinutes}m ${durationSeconds}s`;\n  const numTokenGroupsIndex =\n    tokenGroupsToIndex.length - tokenGroupsFailed.length;\n\n  // Get current date in readable format\n  const currentDate = new Date().toLocaleDateString(\"en-US\", {\n    year: \"numeric\",\n    month: \"long\",\n    day: \"numeric\",\n  });\n\n  // Determine if this is an update or new creation\n  // If force is true, it's always an update\n  // Otherwise, it's an update if we indexed fewer components than discovered (some might have failed or been skipped)\n  const isUpdate =\n    isForce ||\n    indexedComponents.length < components.length ||\n    numIconsIndexed > 0 ||\n    numTokenGroupsIndex > 0;\n  const actionText = isUpdate\n    ? \"Component Library updated\"\n    : \"Component Library created\";\n  const dateLabel = isUpdate ? \"Updated on\" : \"Created On\";\n\n  // Check if repository was already indexed and no new components were processed\n  if (\n    indexedComponents.length === 0 &&\n    components.length > 0 &&\n    failedComponents.length === 0 &&\n    !isForce &&\n    numIconsIndexed === 0 &&\n    numTokenGroupsIndex === 0\n  ) {\n    log.info(\n      \"\\n\uD83D\uDCCB This Repository is already fully indexed, if you want to overwrite use --force.\",\n    );\n    return;\n  }\n\n  log.info(`\uD83D\uDCCB ${actionText}\n   ${dateLabel}: ${currentDate}\n   Components indexed: ${indexedComponents.length} of ${components.length} total components\n   Icons indexed: ${numIconsIndexed}\n   Design Token groups indexed: ${numTokenGroupsIndex} of ${tokenGroupsFound.length} total token groups.\n   Index Url: https://builder.io/app/design-system-intelligence/${designSystemId || \"\"}\n   took: ${durationFormatted}`);\n\n  if (failedComponents.length > 0 || tokenGroupsFailed.length > 0) {\n    let message = \"\";\n\n    if (failedComponents.length > 0) {\n      message += `${failedComponents.length} component${failedComponents.length === 1 ? \"\" : \"s\"} had issues during indexing:\n${failedComponents.join(\", \")}\\n`;\n    }\n\n    if (tokenGroupsFailed.length > 0) {\n      message += `${tokenGroupsFailed.length} token group${tokenGroupsFailed.length === 1 ? \"\" : \"s\"} had issues during indexing:\n${tokenGroupsFailed.join(\", \")}\\n`;\n    }\n\n    message += `\\nRe-run your command and try again. If this problem persists, please contact us at support@builder.io.`;\n\n    log.warn(message);\n    return;\n  }\n\n  log.info(`Add \"${designSystemName}\" to your \"builder.config.json\" file to use your design system with code generation.\n\nLearn more at https://www.builder.io/c/docs/component-indexing#generating-code.\n`);\n};\n\nexport interface RepoIndexingDoc {\n  name: string;\n  content:\n    | string\n    | {\n        name: string;\n        description: string;\n        components: string[];\n        relevantFiles: string[];\n      }[];\n  createdDate: string;\n  description: string;\n  id: string;\n  ownerId: string;\n  userId: string;\n}\n\n// TODO do we keep skipDetailedGrouping? we need group information/component discovery on every run for delta indexing to work. is there value in keeping this flag?\nexport const runRepoIndexing = async (sys: DevToolsSys, args: CLIArgs) => {\n  const {\n    designSystemPackage,\n    skipDetailedGrouping,\n    force,\n    skipHeader,\n    listIndexedRepos,\n    components,\n  } = args;\n  let { designSystemName } = args;\n\n  // Record start time for duration calculation\n  const startTime = Date.now();\n\n  Sentry.getCurrentScope().setTag(\"operation\", \"repo-indexing\");\n  Sentry.getCurrentScope().setTag(\n    \"designSystemPackage\",\n    designSystemPackage || \"none\",\n  );\n\n  if (!skipHeader) {\n    console.log();\n    intro(\n      bgCyan(bold(white(\" repository indexing \"))) + `  ` + dim(pkgVersion),\n    );\n  }\n\n  const credentials = await getCredentials(sys, args, {\n    forceSpaceId: args.spaceId,\n    builderPrivateKey: true,\n    builderPublicKey: true,\n  });\n\n  const userSettings: UserSettings | null =\n    await getUserSettingsByUserId(credentials);\n\n  if (listIndexedRepos) {\n    const designSystems = await getAllDesignSystems(credentials);\n    if (designSystems.length === 0) {\n      console.log(\"No indexed repositories found\");\n      return;\n    }\n\n    console.log(\"Indexed repositories:\");\n    designSystems.forEach((ds: DesignSystem, index: number) => {\n      console.log(`${index + 1}. ${ds.designSystemName}`);\n    });\n    return;\n  }\n\n  const sessionId = crypto.randomUUID().slice(0, 8);\n  Sentry.getCurrentScope().setTag(\"sessionId\", sessionId);\n\n  // Check if the space is enterprise and user has proper permissions\n  try {\n    const featureCheck = await isFeatureAllowed(credentials, args.debug);\n    if (!featureCheck.isAllowed) {\n      log.error(\n        `Error: ${featureCheck.reason || \"Access denied for repository indexing\"}`,\n      );\n      process.exit(1);\n    }\n  } catch (error) {\n    if (error instanceof NetworkError) {\n      displayNetworkError(error);\n      return;\n    }\n    log.error(\n      \"Error: We were unable to determine if your subscription is an enterprise subscription. Contact support@builder.io for more information.\",\n    );\n    process.exit(1);\n  }\n\n  const designSystem = await parseDesignSystem(sys, designSystemPackage);\n\n  const designSystemVersion = designSystem.version;\n  const designSystemPackageName = designSystem.name;\n\n  const allDesignSystems = await getAllDesignSystems(credentials, {\n    onlyEditAccess: true,\n  });\n\n  // TODO move this into a helper function\n  let designSystemData: DesignSystem | null;\n  let scope: DesignSystemScope;\n  try {\n    if (designSystemName === undefined) {\n      const options = [\n        ...allDesignSystems.map((ds) => {\n          return {\n            value: ds.id,\n            label:\n              ds.designSystemName +\n              \" (\" +\n              ds.scope +\n              \")\" +\n              (args.debug ? ` - ${ds.id}` : \"\"),\n          };\n        }),\n      ];\n\n      // If the user does not have any design systems go directly to creating a new one\n      let selection: symbol | string = \"new\";\n      if (options.length > 0) {\n        selection = await select({\n          message:\n            \"Which design system would you like to index? You can bypass this by re-running this command with the --designSystemName flag.\",\n          options: [\n            ...options,\n            {\n              value: \"new\",\n              label: \"Create a new design system\",\n            },\n          ],\n        });\n\n        if (isCancel(selection)) {\n          return;\n        }\n      }\n\n      if (selection === \"new\") {\n        // Ask for scope only when creating a new design system\n        const selectedScope = await promptForDesignSystemScope(\n          credentials,\n          userSettings,\n        );\n        if (!selectedScope) {\n          return;\n        }\n        scope = selectedScope;\n        const name = await text({\n          message: \"What is your design system name?\",\n          /**\n           * If user has a package.json in the workspace or they have provided\n           * designSystemPackage flag then default to the parsed name\n           */\n          initialValue: designSystemPackageName,\n          validate(value) {\n            if (value.trim().length === 0) {\n              return \"A design system name is required\";\n            }\n          },\n        });\n        if (isCancel(name)) {\n          return;\n        }\n\n        designSystemName = name;\n        designSystemData = getDesignSystemByNameAndScope(\n          credentials,\n          designSystemName,\n          scope,\n          allDesignSystems,\n        );\n\n        if (designSystemData) {\n          if (\n            scope === \"organization\" &&\n            designSystemData.spaceId !== credentials.builderPublicKey\n          ) {\n            log.warn(\n              \"A design system with this name already exists within your organization, but you do not have permission to re-index it.\",\n            );\n            return;\n          }\n          const proceed = await confirm({\n            message: `A design system with the name \"${designSystemName}\" already exists in your ${scope}. Would you like to proceed with this design system?`,\n          });\n          if (isCancel(proceed) || !proceed) {\n            return;\n          }\n        }\n      } else {\n        designSystemData = allDesignSystems.find((ds) => ds.id === selection)!;\n        scope = designSystemData.scope; // Use the scope from the selected design system\n\n        if (\n          scope === \"organization\" &&\n          (designSystemData.spaceId !== credentials.builderPublicKey ||\n            !userSettings?.isAdminInOrganization)\n        ) {\n          log.warn(\n            \"A design system with this name already exists within your organization, but you do not have permission to re-index it.\",\n          );\n          return;\n        }\n        designSystemName = designSystemData.designSystemName;\n      }\n    } else {\n      /**\n       * Important: Create/Update the design system based on the name provided\n       * by the user as the DS name may be different than the name of the package\n       * e.g. \"Adobe React Spectrum\" for package \"@adobe/react-spectrum\".\n       */\n      designSystemData = getDesignSystemByName(\n        designSystemName,\n        allDesignSystems,\n      );\n\n      if (designSystemData) {\n        // Use the scope from the existing design system\n        scope = designSystemData.scope;\n\n        // Check permissions for organization-scoped design systems\n        if (\n          scope === \"organization\" &&\n          (designSystemData.spaceId !== credentials.builderPublicKey ||\n            !userSettings?.isAdminInOrganization)\n        ) {\n          log.warn(\n            \"A design system with this name already exists within your organization, but you do not have permission to re-index it.\",\n          );\n          return;\n        }\n      } else {\n        /**\n         * Design system doesn't exist, so we need to ask for scope to create a new one.\n         * Verify that user wants to create a new design system index with this name.\n         * User may have mistyped, so give them a chance to correct.\n         */\n        const proceed = await confirm({\n          message: `No indexed design system named \"${designSystemName}\" exists. Would you like to proceed with creating a new design system index?`,\n        });\n        if (isCancel(proceed) || !proceed) {\n          return;\n        }\n\n        // Ask for scope only when creating a new design system\n        const selectedScope = await promptForDesignSystemScope(\n          credentials,\n          userSettings,\n        );\n        if (!selectedScope) {\n          return;\n        }\n        scope = selectedScope;\n      }\n    }\n  } catch (err) {\n    const e = new PrivateError(\"Failed to select a design system\", {\n      cause: err,\n    });\n    Sentry.captureException(e, {\n      tags: {\n        operation: \"repo-indexing\",\n        sessionId,\n        designSystemPackage: designSystemPackage || \"none\",\n      },\n    });\n    console.log(\n      \"Sorry, we encountered a problem when selecting a design system to index. Please try again. If the issue persists, contact support@builder.io.\",\n    );\n    return;\n  }\n\n  let s = spinner();\n\n  /**\n   * Repo indexing should only have access to the current design system by\n   * default. This prevents it from indexing other variants of a design system\n   * in the same monorepo (e.g. a React version or an Angular version).\n   */\n  let workspaceConfig: WorkspaceConfiguration = {\n    folders: [\n      {\n        path: sys.getCwdDir(),\n      },\n    ],\n  };\n\n  if (designSystemPackage) {\n    /**\n     * Design system packages can be specified as an absolute path. This is common in\n     * non-web design systems such as SwiftUI which uses packages outside of the\n     * project root.\n     */\n    if (isAbsolute(designSystemPackage)) {\n      workspaceConfig.folders.push({\n        path: designSystemPackage,\n      });\n    } else {\n      // Otherwise, assume that this is a node dependency.\n      const nodeDependencyPath = sys.join(\n        sys.getAppRootDir(),\n        `node_modules/${designSystemPackage}`,\n      );\n      const isInstalled = await sys.exists(nodeDependencyPath);\n      if (!isInstalled) {\n        log.error(\n          `Design system package ${designSystemPackage} is not installed. Please install it first.`,\n        );\n        process.exit(1);\n      }\n\n      /**\n       * Do not add it to the workspaceConfig. Instead, the runCodeGen function will\n       * ensure that node_modules/${designSystemPackage} will be included in the file\n       * tree in a way that preserves the order/structure of the file tree.\n       */\n    }\n  }\n\n  if (args.includeDirectories) {\n    const paths = args.includeDirectories.split(\",\");\n    paths.forEach((path) => {\n      const cleanedPath = path.trim();\n      if (cleanedPath.length > 0) {\n        workspaceConfig.folders.push({\n          path: cleanedPath,\n        });\n      }\n    });\n  }\n\n  if (args.debug) {\n    console.log(\"Workspace config\", workspaceConfig);\n  }\n\n  let designSystemId: string = designSystemData?.id || \"\";\n\n  // For now only adding the DS if it doesn't exist and a name was provided, will implement parsing from package.json in the future\n  const shouldAddDesignSystem = !designSystemData && designSystemName;\n\n  if (shouldAddDesignSystem) {\n    designSystemId = await addDesignSystem(credentials, {\n      designSystemName,\n      designSystemVersion,\n      designSystemPackage,\n      status: \"in-progress\",\n      scope,\n    });\n  }\n  const hasExistingRepoIndexingFiles = await checkRepoIndexingFolder(sys);\n  if (hasExistingRepoIndexingFiles) {\n    log.warn(\n      wrapAnsi(\n        `\u26A0\uFE0F  Warning: Existing ${REPO_INDEXING_FOLDER} folder found.\\n\\n` +\n          \"For best results, please delete the repo-indexing folder in your project before running this command. Indexed component documentation can be viewed at https://builder.io/app/design-system-intelligence after completion.\",\n        (process.stdout.columns || 80) - 4,\n      ),\n    );\n\n    const shouldContinue = await confirm({\n      message: \"Continue with existing files?\",\n    });\n\n    if (typeof shouldContinue === \"symbol\" || !shouldContinue) {\n      log.info(\"Repository indexing canceled.\");\n      return;\n    }\n\n    s = spinner();\n  }\n\n  s.start(\"Indexing repository\");\n\n  const metadata = {\n    sessionId,\n    commandString: process.argv.slice(2).join(\" \"),\n    forceBoolean: args.force || false,\n    currentDirectory: sys.getCwdDir(),\n    skipDetailedGroupingBoolean: args.skipDetailedGrouping,\n    designSystemPackage: designSystemPackage || \"none\",\n    designSystemPackageName: designSystemPackageName || \"none\",\n    designSystemVersion: designSystemVersion || \"none\",\n    designSystemId: designSystemId || \"none\",\n    workspaceConfig: workspaceConfig,\n    includeDirectories: args.includeDirectories || \"none\",\n    debugBoolean: args.debug || false,\n    listIndexedReposBoolean: listIndexedRepos || false,\n    userId: credentials.userId,\n    spaceId: credentials.builderPublicKey,\n  };\n\n  try {\n    await track(\"repo indexing started\", metadata);\n    s.message(\"Looking for components\");\n    const storedComponentDocs = await getStoredComponentDocs(\n      credentials,\n      designSystemId,\n      args.debug,\n    );\n    const iconDoc = storedComponentDocs.find((doc) => isIconDocument(doc));\n    const tokenDocs = storedComponentDocs.filter((doc) => isTokenDocument(doc));\n    const remoteComponents = storedComponentDocs.filter((doc) =>\n      isComponentDocument(doc),\n    );\n\n    const specificComponentNames = parseComponentNames(components);\n\n    // Skip icons and tokens when --components flag is used\n    const shouldSkipIconsAndTokens = specificComponentNames.length > 0;\n\n    const [\n      componentDiscoveryResults,\n      iconDiscoveryResults,\n      tokenDiscoveryResults,\n    ] = await Promise.all([\n      discoverComponents(\n        sys,\n        credentials,\n        `${sessionId}-component-discovery`,\n        remoteComponents,\n        {\n          designSystemPackage,\n          designSystemVersion,\n          workspaceConfig,\n          debug: args.debug,\n          force,\n          specificComponents: specificComponentNames,\n        },\n      ),\n      (!shouldSkipIconsAndTokens &&\n        discoverIcons(sys, credentials, `${sessionId}-icon-discovery`, {\n          designSystemPackage,\n          workspaceConfig,\n          debug: args.debug,\n        })) ||\n        undefined,\n      !shouldSkipIconsAndTokens &&\n        discoverTokens(\n          sys,\n          credentials,\n          `${sessionId}-token-discovery`,\n          tokenDocs,\n          {\n            designSystemPackage,\n            workspaceConfig,\n            debug: args.debug,\n            force,\n          },\n        ),\n    ]);\n\n    const { numComponentsFound, componentsToIndex, discoveredComponents } =\n      componentDiscoveryResults;\n\n    const { tokenGroupsToIndex, discoveredTokenGroups } = tokenDiscoveryResults\n      ? tokenDiscoveryResults\n      : { tokenGroupsToIndex: [], discoveredTokenGroups: [] };\n\n    if (specificComponentNames.length > 0) {\n      if (componentsToIndex.length === 0) {\n        log.info(\n          \"No changes detected for the specified components. Use --force to reindex anyway.\",\n        );\n        return;\n      }\n    }\n\n    const hasNewIcons =\n      !shouldSkipIconsAndTokens &&\n      (force || !iconDoc || iconDoc.hash !== iconDiscoveryResults?.hash);\n    const hasNewDesignTokens =\n      !shouldSkipIconsAndTokens && tokenGroupsToIndex.length > 0;\n\n    if (numComponentsFound === 0 && !hasNewIcons && !hasNewDesignTokens) {\n      log.warn(\n        // wraps long text to prevent it from getting truncated horizontally\n        wrapAnsi(\n          \"We were unable to index your repository because no components were found. If your components are a dependency of your project be sure to specify the package name using --designSystemPackage when re-running this command.\",\n          // - 4 subtracts width of clack's prefix symbols\n          (process.stdout.columns || 80) - 4,\n        ),\n      );\n      process.exit(1);\n    }\n\n    if (componentsToIndex.length === 0 && !hasNewIcons && !hasNewDesignTokens) {\n      log.info(\n        // wraps long text to prevent it from getting truncated horizontally\n        wrapAnsi(\n          \"Component index is up to date!\",\n          // - 4 subtracts width of clack's prefix symbols\n          (process.stdout.columns || 80) - 4,\n        ),\n      );\n      return;\n    }\n\n    if (skipDetailedGrouping) {\n      return;\n    }\n\n    const agentDoc = storedComponentDocs.find((doc) => isAgentDocument(doc));\n    if (force) {\n      const docCount = remoteComponents.length;\n\n      s.stop(\n        `${numComponentsFound} new and ${docCount} existing component docs found`,\n      );\n\n      if (docCount > 0) {\n        const shouldOverwrite = await confirm({\n          message: `Using --force will remove existing component documents. Continue?`,\n        });\n\n        if (typeof shouldOverwrite === \"symbol\" || !shouldOverwrite) {\n          s.stop(\"Canceled\");\n          return;\n        }\n      }\n      s.start(\"\");\n    }\n\n    let indexedTasksCount = 0;\n    const indexedComponents: ComponentTask[] = [];\n\n    s.stop(\"Started indexing component docs:\");\n\n    // create new container\n    const multibar = new cliProgress.MultiBar(\n      {\n        clearOnComplete: false,\n        hideCursor: true,\n      },\n      cliProgress.Presets.shades_grey,\n    );\n\n    // TODO: This doesn't seem to work\n    multibar.log(\"\");\n    multibar.log(`Indexing in progress with ${CONCURRENCY_LIMIT} workers...`);\n\n    // create total progress bar\n    const totalBar = multibar.create(\n      componentsToIndex.length + tokenGroupsToIndex.length,\n      indexedTasksCount,\n      {\n        name: \"Total\",\n      },\n      {\n        format: `${cyan(\"{bar}\")} | {name} | {percentage}% | (Step {value}/{total})`,\n      },\n    );\n\n    // create worker status bars container\n    const workerStatus: Record<\n      number,\n      { statusBar: cliProgress.SingleBar; name: string }\n    > = {};\n\n    // create worker status bars\n    for (let i = 0; i < CONCURRENCY_LIMIT; i++) {\n      workerStatus[i] = {\n        statusBar: multibar.create(\n          1,\n          0,\n          {\n            name: `Starting...`,\n          },\n          {\n            format: `{name}`,\n          },\n        ),\n        name: `Starting...`,\n      };\n    }\n\n    // update worker status bars and total progress bar\n    const updateWorkerStatus = (index: number, taskName: string) => {\n      if (taskName) {\n        workerStatus[index].name = `Indexing: ${taskName}`;\n      } else {\n        workerStatus[index].name = WORKER_COMPLETED_MESSAGE;\n      }\n      totalBar.update(indexedTasksCount);\n    };\n\n    const workerPool = async (tasks: Task[], concurrency: number) => {\n      const failedToIndex: string[] = [];\n      const failedTokens: string[] = [];\n\n      // Create a queue of tasks\n      const taskQueue = [...tasks];\n\n      // Function to process a single task\n      const worker = async (index: number) => {\n        while (taskQueue.length > 0) {\n          const task = taskQueue.shift();\n          if (!task) break;\n          updateWorkerStatus(index, task.name);\n\n          switch (task.type) {\n            case \"token\":\n              try {\n                await processTokens(\n                  sys,\n                  credentials,\n                  `${sessionId}-${task.name}-doc`,\n                  task,\n                  {\n                    designSystemId,\n                    designSystemPackage,\n                    designSystemVersion,\n                    workspaceConfig,\n                    debug: args.debug,\n                  },\n                );\n                indexedTasksCount++;\n              } catch (error) {\n                failedTokens.push(task.name);\n              }\n              break;\n            case \"component\":\n              try {\n                await processComponent(\n                  sys,\n                  credentials,\n                  `${sessionId}-${task.name}-doc`,\n                  task,\n                  {\n                    designSystemId,\n                    designSystemPackage,\n                    designSystemVersion,\n                    workspaceConfig,\n                    debug: args.debug,\n                  },\n                );\n                s.message(`Component docs stored for ${task.name}`);\n                indexedComponents.push(task);\n                indexedTasksCount++;\n              } catch (error) {\n                failedToIndex.push(task.name);\n              }\n              break;\n          }\n        }\n        updateWorkerStatus(index, \"\");\n      };\n\n      // Start workers\n      const workers = Array.from({ length: concurrency }, (_, i) => worker(i));\n\n      let frame = 0;\n      const frames = [\"\u280B\", \"\u2819\", \"\u2839\", \"\u2838\", \"\u283C\", \"\u2834\", \"\u2826\", \"\u2827\", \"\u2807\", \"\u280F\"];\n      const workerSpinners = setInterval(() => {\n        for (let i = 0; i < CONCURRENCY_LIMIT; i++) {\n          if (workerStatus[i].name !== WORKER_COMPLETED_MESSAGE) {\n            workerStatus[i].statusBar.update(0, {\n              name: `${workerStatus[i].name} ${frames[frame]}`,\n            });\n          } else {\n            workerStatus[i].statusBar.update(0, {\n              name: WORKER_COMPLETED_MESSAGE,\n            });\n          }\n        }\n        frame = (frame + 1) % frames.length;\n      }, 100);\n\n      // Wait for all workers to complete\n      await Promise.all(workers);\n\n      clearInterval(workerSpinners);\n      for (let i = 0; i < CONCURRENCY_LIMIT; i++) {\n        workerStatus[i].statusBar.update(0, {\n          name: WORKER_COMPLETED_MESSAGE,\n        });\n      }\n\n      multibar.stop();\n\n      return { failedComponents: failedToIndex, failedTokens };\n    };\n\n    const hasNewComponents = discoveredComponents.some(\n      (component) => !remoteComponents.find((rc) => rc.name === component.name),\n    );\n\n    // Run agent processing and component processing in parallel (increases concurrency to CONCURRENCY_LIMIT + 1 threads)\n    const [_agentResult, iconsUpdated, componentResult] = await Promise.all([\n      // Agent processing (only if needed)\n      (async () => {\n        if (\n          !agentDoc ||\n          force ||\n          hasNewComponents ||\n          hasNewIcons ||\n          hasNewDesignTokens\n        ) {\n          s.message(\"Summarizing component library\");\n          try {\n            await processAgent(sys, credentials, discoveredComponents, {\n              designSystemId,\n              debug: args.debug,\n              hasIcons:\n                !shouldSkipIconsAndTokens &&\n                (iconDiscoveryResults?.icons.length || 0) > 0,\n              hasDesignTokens:\n                !shouldSkipIconsAndTokens && discoveredTokenGroups.length > 0,\n            });\n            s.message(\"Agent docs stored\");\n            return { success: true };\n          } catch (error: unknown) {\n            if (designSystemId) {\n              await updateDesignSystem(credentials, {\n                id: designSystemId,\n                designSystemName,\n                designSystemPackage,\n                designSystemVersion,\n                status: \"failed\",\n                scope,\n              });\n            }\n            throw error;\n          }\n        }\n        return { success: true };\n      })(),\n      iconDiscoveryResults &&\n        processIcons(credentials, iconDiscoveryResults, {\n          designSystemId,\n          debug: args.debug,\n          sessionId: `${sessionId}-icon-discovery`,\n          previousHash: iconDoc?.hash,\n          force,\n        }),\n      // Component processing\n      workerPool(\n        shouldSkipIconsAndTokens\n          ? componentsToIndex\n          : [...componentsToIndex, ...tokenGroupsToIndex],\n        CONCURRENCY_LIMIT,\n      ),\n    ]);\n\n    const { failedComponents, failedTokens } = componentResult;\n\n    /**\n     * If we used to have icons but do not have them anymore, make sure the icons\n     * file is deprecated.\n     */\n    const componentsToCheck: Task[] = [\n      ...discoveredComponents,\n      ...(shouldSkipIconsAndTokens ? [] : discoveredTokenGroups),\n    ];\n    if ((iconDiscoveryResults?.icons.length || 0) > 0) {\n      componentsToCheck.push({\n        name: ICONS_FILE,\n        type: \"icon\",\n      });\n    }\n    await deprecateObsoleteComponents(\n      credentials,\n      componentsToCheck, // make sure we look at all the discovered components, not just the ones we need to re-index\n      storedComponentDocs.filter(\n        (doc) =>\n          !isAgentDocument(doc) &&\n          (specificComponentNames.length === 0 ||\n            specificComponentNames.includes(doc.name)),\n      ),\n    );\n\n    displayComponentLibrarySummary(\n      discoveredComponents,\n      indexedComponents,\n      startTime,\n      failedComponents,\n      force,\n      designSystemName,\n      designSystemId,\n      shouldSkipIconsAndTokens\n        ? 0\n        : iconsUpdated\n          ? iconDiscoveryResults?.icons.length || 0\n          : 0,\n      shouldSkipIconsAndTokens ? [] : discoveredTokenGroups,\n      shouldSkipIconsAndTokens ? [] : tokenGroupsToIndex,\n      shouldSkipIconsAndTokens ? [] : failedTokens,\n    );\n    await track(\"repo indexing completed\", {\n      sessionId,\n      commandString: process.argv.slice(2).join(\" \"),\n      forceBoolean: args.force,\n      skipDetailedGroupingBoolean: args.skipDetailedGrouping,\n      designSystemPackage: designSystemPackage || \"none\",\n      designSystemId: designSystemId || \"none\",\n      userId: credentials.userId,\n      spaceId: credentials.builderPublicKey,\n    });\n\n    // For now, update the design system only if it exists\n    if (designSystemId) {\n      await updateDesignSystem(credentials, {\n        id: designSystemId,\n        designSystemName,\n        designSystemPackage,\n        designSystemVersion,\n        status: \"completed\",\n        scope,\n      });\n    }\n  } catch (error: unknown) {\n    log.error(error instanceof Error ? error.message : String(error));\n\n    Sentry.captureException(error, {\n      tags: {\n        operation: \"repo-indexing\",\n        sessionId,\n        designSystemPackage: designSystemPackage || \"none\",\n      },\n      extra: {\n        skipDetailedGrouping,\n        force,\n      },\n    });\n\n    if (args.debug) {\n      console.error(\n        \"\\nStack trace:\",\n        error instanceof Error ? error.stack : \"\",\n      );\n    }\n    if (designSystemId) {\n      await updateDesignSystem(credentials, {\n        id: designSystemId,\n        designSystemName,\n        designSystemPackage,\n        designSystemVersion,\n        status: \"failed\",\n        scope,\n      });\n    }\n\n    throw error;\n  }\n};\n\nconst getStoredComponentDocs = async (\n  credentials: Credentials,\n  designSystemId: string,\n  debug?: boolean,\n): Promise<IndexDocument[]> => {\n  const url = new URL(\n    `/design-systems/v1/${designSystemId}/docs`,\n    apiAirV2Host,\n  );\n  url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n  url.searchParams.set(\"userId\", credentials.userId!);\n\n  const response = await safeFetch(url, {\n    method: \"GET\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey}`,\n    },\n  });\n\n  if (!response.ok) {\n    const errorText = await response.text();\n    if (debug) {\n      console.error(\"API request failed:\", response.status, errorText);\n    }\n    return [];\n  }\n\n  return await response.json();\n};\n\nexport const isFeatureAllowed = async (\n  credentials: Credentials,\n  debug?: boolean,\n): Promise<{\n  isAllowed: boolean;\n  reason?: string;\n}> => {\n  const url = new URL(\"/allow-feature\", apiAirV2Host);\n  url.searchParams.set(\"feature\", \"repo-indexing\");\n  url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n  url.searchParams.set(\"userId\", credentials.userId!);\n  const response = await safeFetch(url, {\n    method: \"GET\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey}`,\n    },\n  });\n\n  if (!response.ok) {\n    const errorText = await response.text();\n    if (debug) {\n      console.error(\"API request failed:\", response.status, errorText);\n    }\n    return {\n      isAllowed: false,\n      reason: errorText || \"Unable to verify permissions\",\n    };\n  }\n\n  const result = await response.json();\n  return {\n    isAllowed: result.isAllowed,\n    reason: result.reason,\n  };\n};\n", "import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = url => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows.at(-1)));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\n\t\t\tconst ansiEscapeLinkCandidate = characters.slice(index + 1, index + 1 + ANSI_ESCAPE_LINK.length).join('');\n\t\t\tisInsideLinkEscape = ansiEscapeLinkCandidate === ANSI_ESCAPE_LINK;\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows.at(-1).length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode.\n//\n// 'hard' will never allow a string to take up more than columns characters.\n//\n// 'soft' allows long words to expand past the column length.\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows.at(-1).trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows.at(-1));\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst preString = rows.join('\\n');\n\tconst pre = [...preString];\n\n\t// We need to keep a separate index as `String#slice()` works on Unicode code units, while `pre` is an array of codepoints.\n\tlet preStringIndex = 0;\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(preString.slice(preStringIndex)) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\n\t\tpreStringIndex += character.length;\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replaceAll('\\r\\n', '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n", "import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\nimport emojiRegex from 'emoji-regex';\n\nconst segmenter = new Intl.Segmenter();\n\nconst defaultIgnorableCodePointRegex = /^\\p{Default_Ignorable_Code_Point}$/u;\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment: character} of segmenter.segment(string)) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore zero-width characters\n\t\tif (\n\t\t\t(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark\n\t\t\t|| codePoint === 0xFE_FF // Zero-width no-break space\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (\n\t\t\t(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks\n\t\t\t|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended\n\t\t\t|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement\n\t\t\t|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols\n\t\t\t|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore surrogate pairs\n\t\tif (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore variation selectors\n\t\tif (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// This covers some of the above cases, but we still keep them for performance reasons.\n\t\tif (defaultIgnorableCodePointRegex.test(character)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: Use `/\\p{RGI_Emoji}/v` when targeting Node.js 20.\n\t\tif (emojiRegex().test(character)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n", "import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// For Prettier. This doesn't count \"ambiguous\" characters or check for valid input.\n// https://github.com/sindresorhus/get-east-asian-width/pull/6\nexport const _isNarrowWidth = codePoint => !(isFullWidth(codePoint) || isWide(codePoint));\n", "// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x === 0x16FF0\n\t\t|| x === 0x16FF1\n\t\t|| x >= 0x17000 && x <= 0x187F7\n\t\t|| x >= 0x18800 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D08\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D7\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA89\n\t\t|| x >= 0x1FA8F && x <= 0x1FAC6\n\t\t|| x >= 0x1FACE && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAE9\n\t\t|| x >= 0x1FAF0 && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction getCategory(x) {\n\tif (isAmbiguous(x)) return 'ambiguous';\n\n\tif (isFullWidth(x)) return 'fullwidth';\n\n\tif (\n\t\tx === 0x20A9\n\t\t|| x >= 0xFF61 && x <= 0xFFBE\n\t\t|| x >= 0xFFC2 && x <= 0xFFC7\n\t\t|| x >= 0xFFCA && x <= 0xFFCF\n\t\t|| x >= 0xFFD2 && x <= 0xFFD7\n\t\t|| x >= 0xFFDA && x <= 0xFFDC\n\t\t|| x >= 0xFFE8 && x <= 0xFFEE\n\t) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (\n\t\tx >= 0x20 && x <= 0x7E\n\t\t|| x === 0xA2\n\t\t|| x === 0xA3\n\t\t|| x === 0xA5\n\t\t|| x === 0xA6\n\t\t|| x === 0xAC\n\t\t|| x === 0xAF\n\t\t|| x >= 0x27E6 && x <= 0x27ED\n\t\t|| x === 0x2985\n\t\t|| x === 0x2986\n\t) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(x)) return 'wide';\n\n\treturn 'neutral';\n}\n\nexport {isAmbiguous, isFullWidth, isWide, getCategory};\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import { apiAirV2Host } from \"../constants\";\nimport { safeFetch } from \"../fetch\";\nimport type { Credentials } from \"../credentials\";\n\n// Function to validate user by sending request to service endpoint\nexport async function getUserSettingsByUserId(credentials: Credentials) {\n  if (!credentials.builderPrivateKey || !credentials.builderPublicKey) {\n    throw new Error(\"Missing authentication credentials\");\n  }\n\n  try {\n    const url = new URL(`${apiAirV2Host}/users/${credentials.userId}/email`);\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n\n    const response = await safeFetch(url, {\n      method: \"GET\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${credentials.builderPrivateKey}`,\n      },\n    });\n\n    if (!response.ok) {\n      if (response.status === 404) {\n        return null;\n      }\n    }\n\n    const userSettings = await response.json();\n    return userSettings;\n  } catch (err) {\n    console.warn(\"Failed to validate user:\", err);\n    return null;\n  }\n}\n", "export type IndexDocument =\n  | ComponentDocument\n  | TokenDocument\n  | IconDocument\n  | AgentDocument;\n\nexport interface DocumentBase {\n  id?: string;\n  name: string;\n  description: string;\n  content: string;\n  designSystemId: string;\n  designSystemPackage?: string;\n  designSystemVersion?: string;\n  tokens?: number;\n  sessionId?: string;\n}\n\nexport const isAgentDocument = (doc: IndexDocument): doc is AgentDocument => {\n  return doc.type === \"agent\";\n};\n\nexport const isIconDocument = (doc: IndexDocument): doc is IconDocument => {\n  return doc.type === \"icon\";\n};\n\nexport const isTokenDocument = (doc: IndexDocument): doc is TokenDocument => {\n  return doc.type === \"token\";\n};\n\nexport const isComponentDocument = (\n  doc: IndexDocument,\n): doc is ComponentDocument => {\n  return doc.type === \"component\";\n};\n\nexport interface ComponentDocument extends DocumentBase {\n  type: \"component\";\n  relatedComponents: string[];\n  relevantFiles: string[];\n  hash: string;\n}\n\nexport interface TokenDocument extends DocumentBase {\n  type: \"token\";\n  hash: string;\n  relevantFiles: string[];\n}\n\nexport interface IconDocument extends DocumentBase {\n  type: \"icon\";\n  hash: string;\n}\n\nexport interface AgentDocument extends DocumentBase {\n  type: \"agent\";\n}\n\ninterface BaseTask {\n  name: string;\n}\n\nexport interface ComponentTask extends BaseTask {\n  type: \"component\";\n  description: string;\n  relevantFiles: string[];\n  relatedComponents: string[];\n  designSystemPackage?: string;\n  designSystemVersion?: string;\n  hash: string;\n}\n\nexport interface TokenTask extends BaseTask {\n  type: \"token\";\n  relevantFiles: string[];\n  tokens: string[];\n  hash: string;\n}\n\nexport interface IconTask extends BaseTask {\n  type: \"icon\";\n}\n\nexport type Task = ComponentTask | TokenTask | IconTask;\n", "import { runCodeGen } from \"./repo-indexing-utils\";\nimport type { DevToolsSys } from \"../../types\";\nimport type { Credentials } from \"../credentials\";\nimport type { GenerateUserMessage, WorkspaceConfiguration } from \"$/ai-utils\";\nimport { REPO_INDEXING_GROUP_PROMPT } from \"../utils/repo-indexing-group-prompt\";\nimport type { ComponentDocument, ComponentTask } from \"./types\";\nimport crypto from \"crypto\";\nimport * as Sentry from \"@sentry/node\";\n\nexport const discoverComponents = async (\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionId: string,\n  remoteComponents: ComponentDocument[],\n  opts: {\n    force?: boolean;\n    designSystemPackage?: string;\n    designSystemVersion?: string;\n    workspaceConfig?: WorkspaceConfiguration;\n    debug?: boolean;\n    specificComponents?: string[];\n  } = {},\n): Promise<{\n  numComponentsFound: number;\n  componentsToIndex: ComponentTask[];\n  discoveredComponents: ComponentTask[];\n}> => {\n  const metadata = {\n    sessionId,\n    designSystemPackage: opts.designSystemPackage || \"none\",\n    designSystemVersion: opts.designSystemVersion || \"none\",\n    userId: credentials.userId,\n    spaceId: credentials.builderPublicKey,\n  };\n  const {\n    designSystemPackage,\n    designSystemVersion,\n    workspaceConfig,\n    debug,\n    force,\n    specificComponents,\n  } = opts;\n\n  if (specificComponents?.length && force) {\n    console.warn(\n      \"Warning: --force is ignored when using --components. The --components flag already forces reindexing of the specified components.\",\n    );\n  }\n\n  const message: GenerateUserMessage = {\n    maxCompletions: 1000,\n    userPrompt: adjustRepoIndexingPrompt(\n      REPO_INDEXING_GROUP_PROMPT,\n      /**\n       * If user is forcibly re-indexing, do not pass previously seen components as that\n       * can cause any old/bad data to be persisted in the force re-indexing.\n       */\n      force ? [] : remoteComponents,\n      designSystemPackage,\n    ),\n    modelOverride: \"acs45\",\n    category: \"indexing-discovery\",\n  };\n\n  const data = await runCodeGen(\n    sys,\n    credentials,\n    sessionId,\n    message,\n    debug,\n    designSystemPackage,\n    workspaceConfig,\n    {\n      // Output component-groups.json file can be very large for big design systems\n      maxTokens: 64000,\n      tags: {\n        operation: \"component-discovery\",\n      },\n      retriesAllowed: 1,\n    },\n    metadata,\n  );\n\n  const discoveredComponents =\n    typeof data === \"string\" ? JSON.parse(data) : data;\n  const components: ComponentTask[] = [];\n\n  for (const discoverComponent of discoveredComponents) {\n    components.push({\n      type: \"component\",\n      name: discoverComponent.name,\n      description: discoverComponent.description,\n\n      /**\n       * When any component in a group needs to be reindexed we need to reindex all of\n       * them because these components are tightly coupled together.\n       */\n      relevantFiles: discoverComponent.relevantFiles,\n      relatedComponents: discoverComponent.relatedComponents,\n      designSystemPackage,\n      designSystemVersion,\n      hash: await computeHash(sys, discoverComponent.relevantFiles),\n    });\n  }\n\n  if (debug) {\n    console.log(\"Discovered components\", components);\n  }\n\n  let filteredComponents = components;\n  if (specificComponents && specificComponents.length > 0) {\n    filteredComponents = components.filter((component) =>\n      specificComponents.includes(component.name),\n    );\n\n    if (debug) {\n      console.log(\"Filtered components to specific ones:\", filteredComponents);\n    }\n\n    if (filteredComponents.length === 0) {\n      console.warn(\n        `No components found matching the specified names: ${specificComponents.join(\", \")}`,\n      );\n      return {\n        numComponentsFound: components.length,\n        componentsToIndex: [],\n        discoveredComponents: components,\n      };\n    }\n  }\n\n  const componentsToReindex = new Set<string>();\n\n  for (const component of filteredComponents) {\n    const remoteComponent = remoteComponents.find(\n      (rc) => rc.name === component.name,\n    );\n\n    /**\n     * If component is new or has changed, mark it and its related components for re-indexing.\n     * If user has passed --force then we should re-index all discovered components\n     * even if they have not changed.\n     */\n    if (\n      specificComponents?.length ||\n      force ||\n      remoteComponent === undefined ||\n      component.hash !== remoteComponent.hash\n    ) {\n      componentsToReindex.add(component.name);\n\n      component.relatedComponents.forEach((name) => {\n        componentsToReindex.add(name);\n      });\n    }\n  }\n\n  const componentsToIndex = components.filter((component) =>\n    componentsToReindex.has(component.name),\n  );\n\n  if (debug) {\n    console.log(\"Components to be re-indexed\", componentsToIndex);\n  }\n\n  return {\n    numComponentsFound: components.length,\n    componentsToIndex,\n    discoveredComponents:\n      specificComponents && specificComponents.length > 0\n        ? components\n        : filteredComponents,\n  };\n};\n\nexport const computeHash = async (sys: DevToolsSys, files: string[]) => {\n  // Sort files alphabetically to ensure consistent hash generation\n  const sortedFiles = [...files].sort();\n  const fileContents: string[] = [];\n\n  for (const file of sortedFiles) {\n    try {\n      const content = await sys.readFile(sys.join(sys.getCwdDir(), file));\n      if (content) {\n        // Remove BOM (Byte Order Mark) if present to ensure consistent encoding\n        const normalizedContent = content.replace(/^\\uFEFF/, \"\");\n        fileContents.push(normalizedContent);\n      }\n    } catch (error) {\n      Sentry.captureException(error, { extra: { file } });\n    }\n  }\n\n  // Create a hash of all file contents combined\n  const combinedContent = fileContents.join(\"\\n\");\n  const hash = crypto\n    .createHash(\"sha256\")\n    .update(combinedContent)\n    .digest(\"hex\");\n  return hash;\n};\n\nconst adjustRepoIndexingPrompt = (\n  prompt: string,\n  remoteComponents: ComponentDocument[],\n  designSystemPackage?: string,\n): string => {\n  return prompt\n    .replace(\n      \"{{previously-seen-components}}\",\n      JSON.stringify(\n        remoteComponents.map(({ name, relevantFiles, relatedComponents }) => {\n          return {\n            name,\n            relevantFiles,\n            relatedComponents,\n          };\n        }),\n        null,\n        2,\n      ),\n    )\n    .replace(\n      \"{{component-discovery}}\",\n      designSystemPackage\n        ? `- Scan the design system package ${designSystemPackage}\n- If the design system package is installed, search it to find components (i.e. node_modules/${designSystemPackage}/ if the project is a node project)\n- Identify component files, their exports, and related files\n`\n        : `- Scan the current directory and its subdirectories\n- Identify component files, their exports, and related files\n- Never scan higher than the current directory\n`,\n    )\n    .replace(\n      \"{{component-coverage}}\",\n      designSystemPackage\n        ? `- Include ALL exported components found in the design system package ${designSystemPackage}`\n        : `- Include ALL components found in the repository`,\n    );\n};\n", "export const REPO_INDEXING_GROUP_PROMPT: string = `# Component Repository Analysis and Grouping\n\n## Objective\n\nIdentify all UI components.\n\n## Instructions\n\n1. Component Discovery with Relevant Files\n{{component-discovery}}\n\nOnly focus on reusable UI components. Ignore utility functions, helper modules, pages, and screens. You must identify all reusable UI components.\n\nUse the following guidelines when searching for relevant files:\n\n- If the component is re-exported from a dependent library it MUST be included.\n- If the component is an icon that is re-exported from a dependent library it MUST be included.\n- Include files about a UI component's implementation.\n- Include documentation files about the UI component as it may include important API or usage information.\n- Ignore test files.\n- The file paths must be relative to the current working directory. You may use \"../\" if necessary.\n\n### Icons\n\nYou may come across icon data during your discovery. While you MUST index icon container components (e.g. an <Icon /> component that you pass an icon to) you must never index the individual icons (e.g. <ShareIcon />).\n\n2. Identify Related Components\n\nFor each reusable UI component you discovered, identify if there are other UI components that they are used with. For each component, identify the relationships by asking yourself the following questions:\n\n- What other components MUST be present for this component to work?\n- Does this component require specific context providers?\n- Are there mandatory parent-child relationships?\n- Do they share mandatory (not optional) context or state?\n- Are ALL components in this group reusable UI primitives?\n\nWhen in doubt, do not group components.\n\n## Previously Seen Components\n\nHere is a list of components that you have previously indexed.\n\nYou must continue to discover these components with the same name, related components, and relevant files only if the components still exist in the design system. If they do not exist anymore then it is permissible to exclude them. You may also add any new relevant files that were not seen previously.\n\n{{previously-seen-components}}\n\n## Output Schema\n\nGenerate a file named component-groups.json that contains a DiscoveredComponent array using the following schema:\n\ninterface DiscoveredComponent {\n  name: string; // UI component name in pascal case based on the tag name such as \"ToggleButton\"\n  description: string; // what the UI component is used for based on the component implementation and examples you have discovered\n  relatedComponents: string[]; // the names of other UI components that this one is related to\n  relevantFiles: string[]; // relevant files for the UI component that you have discovered. Paths must be relative to current working directory\n}\n\nYou must use the Write tool in your response.\n\n## Output Requirements\n- Return ONLY the JSON array\n- No additional commentary or explanation\n- Ensure valid JSON format\n- Include all required fields for each component\n- Validate that every VALID component appears exactly once\n- EXCLUDE all page/screen/view components entirely`;\n", "import {\n  ICONS_FILE,\n  runCodeGen,\n  storeComponentDocs,\n} from \"./repo-indexing-utils\";\nimport { PrivateError } from \"../../common/errors\";\nimport type { DevToolsSys } from \"../../types\";\nimport type { Credentials } from \"../credentials\";\nimport type { WorkspaceConfiguration } from \"$/ai-utils\";\nimport crypto from \"crypto\";\nimport type { IconDocument } from \"./types\";\n\nconst ICON_DISCOVERY_PROMPT = `\n# Icon Discovery\n\n## Instructions\n\n1. Identify the names of all icons available in the icon library.\n2. Create a usage example that shows how to create an icon with a specific icon name. Be sure to document any variants available for icons such as outline, round, sharp, and two-tone. Note that logo icons (e.g. a Builder.io logo icon) may not have the same variants that generic glyphs (e.g. a delete icon) do.\n\n### Long Icon Lists\n\nYou may find that your discovery yields truncated results due to a large number of icons. While not required, you may use the TodoWrite tool to keep track of your progress as you work through the discovery process. DO NOT create temporary .txt files or any other files on disk for intermediate storage.\n\n## Output Schema\n\nUse the Write tool to create an icons.json file with the following schema:\n\ninterface Output {\n  icons: string[]; // a list of all icon names\n  usage: string; // MDX-formatted usage example with proper TypeScript code blocks\n}\n\n## Usage Example Format\n\nThe usage field should be formatted as MDX content with TypeScript code blocks. For example:\n\n\\`\\`\\`typescript\nimport { Icon } from '@your-library/icons';\n\n// Basic usage\n<Icon name=\"save\" />\n\n// With variants\n<Icon name=\"delete\" variant=\"outline\" />\n\\`\\`\\`\n\nIf there are no icons then you can output the following: { icons: [], usage: '' }\n`;\n\nexport const discoverIcons = async (\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionId: string,\n  opts: {\n    designSystemPackage?: string;\n    workspaceConfig?: WorkspaceConfiguration;\n    debug?: boolean;\n  } = {},\n) => {\n  const data = await runCodeGen(\n    sys,\n    credentials,\n    sessionId,\n    {\n      maxCompletions: 1000,\n      userPrompt: ICON_DISCOVERY_PROMPT,\n      category: \"indexing-icon-discovery\",\n      modelOverride: \"acs45\",\n    },\n    opts.debug,\n    opts.designSystemPackage,\n    opts.workspaceConfig,\n    {\n      maxTokens: 64000,\n      tags: {\n        operation: \"icon-discovery\",\n      },\n      retriesAllowed: 1,\n    },\n  );\n\n  const res = JSON.parse(data) as {\n    icons: string[];\n    usage: string;\n  };\n\n  const normalizedIcons = res.icons.sort((a, b) => a.localeCompare(b));\n\n  return {\n    icons: normalizedIcons,\n    usage: res.usage,\n    hash:\n      normalizedIcons.length > 0\n        ? crypto\n            .createHash(\"sha256\")\n            .update(normalizedIcons.join())\n            .digest(\"hex\")\n        : undefined,\n  };\n};\n\nexport const processIcons = async (\n  credentials: Credentials,\n  iconDiscovery: {\n    icons: string[];\n    usage: string;\n    hash?: string;\n  },\n  opts: {\n    designSystemId: string;\n    sessionId: string;\n    debug?: boolean;\n    previousHash?: string | null;\n    force?: boolean;\n  },\n) => {\n  const { icons, usage, hash } = iconDiscovery;\n\n  if (hash === undefined || (!opts.force && opts.previousHash === hash)) {\n    return false;\n  }\n\n  try {\n    const body: IconDocument = {\n      type: \"icon\",\n      name: ICONS_FILE,\n      description: \"Icon list and usage documentation\",\n      content: `# Icons\n\nThis document contains a list of all icons available as well as how to use them.\n\n## Available Icons\n\n${icons.join(\", \")}\n\n## Usage\n\n${usage}`,\n      sessionId: opts.sessionId,\n      designSystemId: opts.designSystemId,\n      hash,\n    };\n\n    await storeComponentDocs(credentials, body, opts.debug);\n\n    return true;\n  } catch (error: unknown) {\n    throw new PrivateError(\"Failed to store icon docs\", {\n      cause: error,\n    });\n  }\n};\n", "import {\n  TOKENS_FILE,\n  runCodeGen,\n  storeComponentDocs,\n} from \"./repo-indexing-utils\";\nimport { PrivateError } from \"../../common/errors\";\nimport type { DevToolsSys } from \"../../types\";\nimport type { TokenDocument, TokenTask } from \"./types\";\nimport type { Credentials } from \"../credentials\";\nimport type { WorkspaceConfiguration } from \"$/ai-utils\";\nimport { computeHash } from \"./component-discovery\";\nimport * as Sentry from \"@sentry/node\";\n\ninterface DiscoveredTokenGroup {\n  name: string;\n  tokens: string[];\n  relevantFiles: string[];\n}\n\n/**\n * Extract just the group name from the full token filename\n * @example extractTokenGroupName(\"spacing-tokens.md\") => \"spacing\"\n */\nconst extractTokenGroupName = (fullName: string): string => {\n  return fullName.replace(TOKENS_FILE, \"\");\n};\n\nconst TOKEN_DISCOVERY_PROMPT = `\n# Token Discovery\n\n## Instructions\n\nIdentify all public API design tokens available in this library. Use the following guidelines:\n\n- You must record the design token's name\n- You must assign a category to the design token such as \"elevation\" or \"spacing\".\n- Design tokens can include but are not limited to variables, classes, and mixins.\n- Only include design tokens that are when consuming UI components in code. Any internal or private variables, classes, or mixins that are used to generate the tokens should be ignored.\n{{OTHER_GUIDELINES}}\n\n### Long Token Lists\n\nYou may find that your discovery yields truncated results due to a large number of tokens. While not required, you may use the TodoWrite tool to keep track of your progress as you work through the discovery process. DO NOT create temporary .txt files or any other files on disk for intermediate storage.\n\n### Existing Tokens\n\nHere is a list of existing token groups you have discovered. You should continue to discover them.\n\n{{ EXISTING_TOKENS }}\n\n## Output Schema\n\nUse the Write tool to create an tokens.json file with the following schema:\n\ninterface Output {\n  tokenGroups: TokenGroup[]; // all token groups\n}\n\ninterface TokenGroup {\n  name: string; // name of the token group (e.g \"elevation\", \"color\", etc.)\n  tokens: string[]; // a list of all token names (e.g. \"--bg-primary\" or \"$color-mixin\")\n  relevantFiles: string[]; // relevant files for the design token group that you have discovered. Paths must be relative to current working directory\n}`;\n\nexport const discoverTokens = async (\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionId: string,\n  remoteTokens: TokenDocument[],\n  opts: {\n    force?: boolean;\n    designSystemPackage?: string;\n    workspaceConfig?: WorkspaceConfiguration;\n    debug?: boolean;\n  } = {},\n): Promise<{\n  tokenGroupsToIndex: TokenTask[];\n  discoveredTokenGroups: TokenTask[];\n}> => {\n  const { debug, force, designSystemPackage } = opts;\n  const data = await runCodeGen(\n    sys,\n    credentials,\n    sessionId,\n    {\n      maxCompletions: 1000,\n      userPrompt: TOKEN_DISCOVERY_PROMPT.replaceAll(\n        \"{{ EXISTING_TOKENS }}\",\n        (force ? [] : remoteTokens)\n          .map((t) => {\n            const groupNameOnly = extractTokenGroupName(t.name);\n            return `<group name=\"${groupNameOnly}\" relevantFiles={[${t.relevantFiles.join(\",\")}]} />`;\n          })\n          .join(\"\\n\"),\n      ).replaceAll(\n        \"{{OTHER_GUIDELINES}}\",\n        designSystemPackage\n          ? `- Scan the design system package ${designSystemPackage}\n- If the design system package is installed, search it to find design tokens (i.e. node_modules/${designSystemPackage}/ if the project is a node project)`\n          : \"\",\n      ),\n      category: \"indexing-token-discovery\",\n    },\n    opts.debug,\n    opts.designSystemPackage,\n    opts.workspaceConfig,\n    {\n      maxTokens: 64000,\n      tags: {\n        operation: \"token-discovery\",\n      },\n      retriesAllowed: 1,\n    },\n  );\n\n  const res = JSON.parse(data) as {\n    tokenGroups: DiscoveredTokenGroup[];\n  };\n\n  const groups: TokenTask[] = await Promise.all(\n    res.tokenGroups.map(async (group) => {\n      return {\n        type: \"token\",\n        name: `${group.name.trim().toLowerCase()}-${TOKENS_FILE}`,\n        relevantFiles: group.relevantFiles,\n        tokens: group.tokens.sort((a, b) => a.localeCompare(b)),\n        hash: await computeHash(sys, group.relevantFiles),\n      };\n    }),\n  );\n\n  if (debug) {\n    console.log(\"Discovered token groups\", groups);\n  }\n\n  const groupsToReindex = new Set<string>();\n\n  for (const group of groups) {\n    const remoteGroup = remoteTokens.find((rc) => rc.name === group.name);\n\n    if (\n      opts.force ||\n      remoteGroup === undefined ||\n      group.hash !== remoteGroup.hash\n    ) {\n      groupsToReindex.add(group.name);\n    }\n  }\n\n  const tokenGroupsToIndex = groups.filter((group) =>\n    groupsToReindex.has(group.name),\n  );\n\n  if (debug) {\n    console.log(\"Token groups to be re-indexed\", tokenGroupsToIndex);\n  }\n\n  return {\n    tokenGroupsToIndex,\n    discoveredTokenGroups: groups,\n  };\n};\n\nexport const processTokens = async (\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionId: string,\n  group: TokenTask,\n  opts: {\n    designSystemId: string;\n    designSystemPackage?: string;\n    designSystemVersion?: string;\n    debug?: boolean;\n    workspaceConfig?: WorkspaceConfiguration;\n  },\n): Promise<void> => {\n  const metadata = {\n    sessionId,\n    groupName: group.name,\n    designSystemId: opts.designSystemId || \"none\",\n    userId: credentials.userId,\n    spaceId: credentials.builderPublicKey,\n  };\n  const { designSystemPackage, designSystemVersion, workspaceConfig, debug } =\n    opts;\n\n  const groupNameOnly = extractTokenGroupName(group.name);\n\n  try {\n    const content = await runCodeGen(\n      sys,\n      credentials,\n      sessionId,\n      {\n        maxCompletions: 1000,\n        modelOverride: \"acs45\",\n        userPrompt: `\n# Design Token Documentation Generation\n\n## Instructions\n\nGenerate documentation for the provided design token group. Use the following guidelines:\n\n- You must document all of the provided design tokens including their name and default values.\n- You must document how to use the design tokens when consumsing the library's public UI components. Never document any usage with the UI component internals.\n- Do not include descriptions or information on when to use each design token unless its description or usage is not obvious. For example, you do not need to describe what a \"--border\" design token does because that information can be derived from the name.\n\n<group\n  name=\"${groupNameOnly}\"\n  relevantFiles={[${group.relevantFiles.join(\",\")}]}\n>\n${group.tokens\n  .map((t) => {\n    return `  <design-token name=\"${t}\" />`;\n  })\n  .join(\"\\n\")}\n</group>\n\n## Output\nReturn only the complete MDX file content, ready to be saved as \\`repo-indexing/${group.name}\\`. You must use the Write tool in your response.\n\n`,\n      },\n      debug,\n      designSystemPackage,\n      workspaceConfig,\n      {\n        retriesAllowed: 1,\n      },\n      metadata,\n    );\n\n    if (content) {\n      const body: TokenDocument = {\n        type: \"token\",\n        sessionId,\n        name: group.name,\n        description: \"Documentation for design tokens\",\n        relevantFiles: group.relevantFiles,\n        content,\n        hash: group.hash,\n        designSystemId: opts.designSystemId,\n        ...(designSystemVersion && {\n          designSystemVersion,\n        }),\n        ...(designSystemPackage && {\n          designSystemPackage,\n        }),\n      };\n\n      await storeComponentDocs(credentials, body);\n    }\n  } catch (error: unknown) {\n    const privateError = new PrivateError(\n      \"Failed to generate and store design token docs\",\n      { cause: error },\n    );\n    Sentry.captureException(privateError);\n\n    throw privateError;\n  }\n};\n", "import { runCodeGen, storeComponentDocs } from \"./repo-indexing-utils\";\nimport { PrivateError } from \"../../common/errors\";\nimport type { DevToolsSys } from \"../../types\";\nimport type { Credentials } from \"../credentials\";\nimport type {\n  AgentDocument,\n  ComponentDocument,\n  ComponentTask,\n  IndexDocument,\n  Task,\n} from \"./types\";\nimport type { GenerateUserMessage, WorkspaceConfiguration } from \"$/ai-utils\";\nimport { COMPONENT_GROUP_MDX_PROMPT } from \"../utils/component-group-mdx-prompt\";\nimport { REPO_INDEXING_AGENT_PROMPT } from \"../utils/repo-indexing-agent-prompt\";\nimport { AGENT_FILE, ICONS_FILE, TOKENS_FILE } from \"./repo-indexing-utils\";\nimport * as Sentry from \"@sentry/node\";\nimport { apiAirV2Host } from \"../constants\";\nimport { safeFetch } from \"../fetch\";\n\nexport const processComponent = async (\n  sys: DevToolsSys,\n  credentials: Credentials,\n  sessionId: string,\n  component: ComponentTask,\n  opts: {\n    designSystemId: string;\n    designSystemPackage?: string;\n    designSystemVersion?: string;\n    workspaceConfig?: WorkspaceConfiguration;\n    debug?: boolean;\n  },\n): Promise<void> => {\n  const metadata = {\n    sessionId,\n    componentName: component.name,\n    designSystemPackage: opts.designSystemPackage || \"none\",\n    designSystemVersion: opts.designSystemVersion || \"none\",\n    designSystemId: opts.designSystemId || \"none\",\n    userId: credentials.userId,\n    spaceId: credentials.builderPublicKey,\n  };\n  const { designSystemPackage, designSystemVersion, workspaceConfig, debug } =\n    opts;\n\n  const kebabName = component.name.toLowerCase().replace(/ /g, \"-\");\n\n  const message: GenerateUserMessage = {\n    maxCompletions: 1000,\n    userPrompt: COMPONENT_GROUP_MDX_PROMPT.replaceAll(\n      \"{{COMPONENT_NAME}}\",\n      component.name,\n    )\n      .replaceAll(\"{{COMPONENT_DESCRIPTION}}\", component.description)\n      .replaceAll(\n        \"{{RELATED_COMPONENTS}}\",\n        component.relatedComponents.join(\", \"),\n      )\n      .replaceAll(\"{{FILE_LIST}}\", component.relevantFiles.join(\", \"))\n      .replaceAll(\"{{COMPONENT_NAME_KEBAB}}\", kebabName),\n    category: \"indexing-component\",\n    modelOverride: \"acs45\",\n  };\n\n  try {\n    const content = await runCodeGen(\n      sys,\n      credentials,\n      sessionId,\n      message,\n      debug,\n      designSystemPackage,\n      workspaceConfig,\n      {\n        tags: {\n          component: component.name,\n          operation: \"component-docs\",\n        },\n        retriesAllowed: 1,\n      },\n      metadata,\n    );\n\n    if (content) {\n      const body: ComponentDocument = {\n        type: \"component\",\n        sessionId,\n        name: component.name,\n        description: component.description,\n        relatedComponents: component.relatedComponents,\n        relevantFiles: component.relevantFiles,\n        content,\n        hash: component.hash,\n        designSystemId: opts.designSystemId,\n        ...(designSystemVersion && {\n          designSystemVersion,\n        }),\n        ...(designSystemPackage && {\n          designSystemPackage,\n        }),\n      };\n\n      await storeComponentDocs(credentials, body);\n    }\n  } catch (error: unknown) {\n    const privateError = new PrivateError(\n      \"Failed to generate and store component docs\",\n      { cause: error },\n    );\n    Sentry.captureException(privateError, {\n      tags: {\n        operation: \"generate-component-docs\",\n        component: component.name,\n      },\n      extra: {\n        kebabName,\n        components: component.relatedComponents,\n      },\n    });\n\n    throw privateError;\n  }\n};\n\nexport const processAgent = async (\n  sys: DevToolsSys,\n  credentials: Credentials,\n  discoveredComponents: ComponentTask[],\n  opts: {\n    hasIcons?: boolean;\n    hasDesignTokens?: boolean;\n    designSystemId: string;\n    retriesAllowed?: number;\n    debug?: boolean;\n  },\n): Promise<void> => {\n  const { debug } = opts;\n\n  // Sort components alphabetically and by grouping related components together\n  const sortedComponents = [...discoveredComponents].sort((a, b) => {\n    const aRelated = a.relatedComponents.join(\",\");\n    const bRelated = b.relatedComponents.join(\",\");\n\n    const aHasRelatedToB = a.relatedComponents.includes(b.name);\n    const bHasRelatedToA = b.relatedComponents.includes(a.name);\n\n    if (aHasRelatedToB && !bHasRelatedToA) return 1;\n    if (bHasRelatedToA && !aHasRelatedToB) return -1;\n\n    if (aRelated !== bRelated) {\n      return aRelated.localeCompare(bRelated);\n    }\n    return a.name.localeCompare(b.name);\n  });\n\n  const componentsString = sortedComponents\n    .map((c) => `**${c.name}**: ${c.description}`)\n    .join(\"\\n\");\n\n  const ICON_PROMPT = `\n## Icons\n\nThis design system provides an icon library. A list of icons available as well as icon usage examples can be found in \\`design-system-docs/${ICONS_FILE}\\`.  \n`;\n  const TOKENS_PROMPT = `\n## Design Tokens\n\nThis design system provides design tokens. A list of tokens available as well as token usage examples can be found in \\`design-system-docs/*-${TOKENS_FILE}\\`.  \n`;\n  const agentMessage = REPO_INDEXING_AGENT_PROMPT.replaceAll(\n    \"{{COMPONENTS}}\",\n    componentsString,\n  )\n    .replaceAll(\"{{ICONS}}\", opts.hasIcons ? ICON_PROMPT : \"\")\n    .replaceAll(\"{{TOKENS}}\", opts.hasDesignTokens ? TOKENS_PROMPT : \"\");\n\n  try {\n    const body: AgentDocument = {\n      type: \"agent\",\n      name: AGENT_FILE,\n      description: \"Repository agent documentation\",\n      content: agentMessage,\n      designSystemId: opts.designSystemId,\n    };\n\n    await storeComponentDocs(credentials, body, debug);\n  } catch (error: unknown) {\n    throw new PrivateError(\"Failed to store agent docs\", {\n      cause: error,\n    });\n  }\n};\n\nexport const deprecateObsoleteComponents = async (\n  credentials: Credentials,\n  localComponents: Task[],\n  remoteComponents: IndexDocument[],\n) => {\n  const localComponentNames = new Set(localComponents.map((c) => c.name));\n\n  const obsoleteComponents = remoteComponents.filter((cmp) => {\n    return !localComponentNames.has(cmp.name);\n  });\n\n  if (obsoleteComponents.length > 0) {\n    await deprecateComponents(\n      credentials,\n      obsoleteComponents.map((c) => c.id!),\n    );\n  }\n};\n\nconst deprecateComponents = async (\n  credentials: Credentials,\n  componentIds: string[],\n) => {\n  const url = new URL(\"/mappings/deprecate-component-docs\", apiAirV2Host);\n  url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n  url.searchParams.set(\"userId\", credentials.userId!);\n\n  const response = await safeFetch(url, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey}`,\n    },\n    body: JSON.stringify(componentIds),\n  });\n\n  if (!response.ok) {\n    const errorText = await response.text();\n    console.error(\"API request failed:\", response.status, errorText);\n    throw new Error(\n      `Failed to mark component as deprecated: ${response.status} ${errorText}`,\n    );\n  }\n};\n", "export const COMPONENT_GROUP_MDX_PROMPT = `# Component Documentation Generation\n\n## Objective\nGenerate comprehensive MDX documentation for a specific component, analyzing their interfaces, relationships, and usage patterns using the relevant files provided in the input.\n\n## Instructions\n\n### 1. Component Analysis\nFor the given component, analyze each relevant file by:\n- **Interdependency mapping** - Document how components depend on each other\n- **Interface examination** - Extract and document all props, their types, and descriptions\n- **Context analysis** - Identify shared state, contexts, or communication patterns\n- **Compositional patterns** - Document required parent-child relationships\n- **Usage pattern analysis** - Identify how components work together\n- **Example extraction** - Find real usage examples from the codebase\n\n{{COMPONENT_NAME}} has the following related components: {{RELATED_COMPONENTS}}\nThe following files are associated with {{COMPONENT_NAME}}: {{FILE_LIST}}\n\n### 2. Documentation Structure\nCreate comprehensive documentation covering:\n- **Component rationale** - Why these components work together and when to use them\n- **Architectural overview** - How the components form a cohesive system\n- **Component interfaces** - Detailed prop documentation with interdependencies\n- **Composition patterns** - Required and optional usage combinations\n- **Integration examples** - Real-world scenarios showing the component in action\n- **Best practices** - Recommended usage patterns and guidelines\n\n## Required Output Format\n\nGenerate an MDX file with this structure:\n\n\\`\\`\\`mdx\n---\n# {{COMPONENT_NAME}}\n\n## Overview\n\n### Purpose\n{{COMPONENT_DESCRIPTION}}\n\n### When to Use\n[Expand on the use cases mentioned in the description - be specific about scenarios, user needs, and implementation contexts]\n\n### Architecture\n[Explain the architectural pattern based on coupling strength:]\n- **Critical/Strong Coupling**: Describe the required relationships, shared context, or compositional hierarchy\n- **Moderate Coupling**: Explain how components enhance each other\n- **No Coupling**: Note that this is a standalone component\n\n### Component Interdependencies\n[Map out component relationships - only for components with coupling:]\n- Required parent-child relationships\n- Shared context dependencies  \n- Communication patterns between components\n- Related components\n\n## API\n**Types**: Interfaces related to the component including all props, methods, or children along with descriptions.\n**Dependencies:** Other components that must be used\n**Provides:** Context/state this component provides to children. Only required for coupled components.\n\n## Usage Examples\nInclude examples that show how to fully use the component. At a minimum, you must include the following examples:\n\n- Basic usage including how to import the component if applicable\n- Usage with any dependency components\n- Variations with conditional rendering, different prop combinations, etc\n\n## Component Relationships {Only for coupled components}\n\n### Data Flow\n[Explain how data flows between the component and related components}\n\n### Context Sharing\n[Document shared contexts, providers, or state management]\n\n### Event Handling\n[Describe how events bubble up or propagate between components]\n\n## Best Practices\n\n### Usage Guidelines\n- [Specific recommendation based on component purpose and use cases]\n- [Another recommendation focusing on accessibility or performance]\n- [Usage pattern guidance based on the component's architecture]\n\n### Accessibility {When relevant}\n- [ARIA relationships between components]\n- [Keyboard navigation patterns]\n- [Screen reader considerations]\n\n### Performance {When relevant}\n- [Optimization recommendations]\n- [State management best practices]\n- [Rendering performance considerations]\n\n## Common Patterns {Expand based on component functionality}\n\n### Pattern 1: [Specific Pattern Name]\n\\`\\`\\`tsx\n// Example showing a specific usage pattern\n// Include comments explaining why this pattern is recommended\n\\`\\`\\`\n\n### Pattern 2: [Another Pattern Name]\n\\`\\`\\`tsx\n// Another common pattern with explanation\n\\`\\`\\`\n\n\\`\\`\\`\n\n## File Generation Requirements\n\n**File Naming:**\n- Use kebab-case derived from component name: \\`{{COMPONENT_NAME_KEBAB}}.mdx\\`\n- Place in \\`repo-indexing/\\` folder\n- Example: \\`repo-indexing/{{COMPONENT_NAME_KEBAB}}.mdx\\`\n\n**Content Requirements:**\n1. **Use coupling strength context** - Adapt documentation structure based on couplingStrength value\n2. **Extract real interfaces** - Don't create placeholder interfaces, extract actual type interfaces from the codebase\n3. **Leverage component description** - Expand on the provided description with specific use cases and implementation guidance\n4. **Document interdependencies** - For coupled components, clearly explain component relationships and requirements\n5. **Include practical examples** - Use realistic, working code examples that demonstrate proper usage\n6. **Show integration patterns** - For coupled components, demonstrate required composition patterns\n**Coupling-Specific Requirements:**\n- **Critical/Strong Coupling**: Focus on required relationships, composition patterns, and shared context\n- **Moderate Coupling**: Show how components enhance each other and optional usage patterns  \n- **No Coupling**: Document standalone usage, variants, and individual component capabilities\n\n## Output\nReturn only the complete MDX file content, ready to be saved as \\`repo-indexing/{{COMPONENT_NAME_KEBAB}}.mdx\\`. You must use the Write tool in your response.`;\n", "export const REPO_INDEXING_AGENT_PROMPT = `# Design System Component Reference\n\nThis document provides a comprehensive overview of the design system's component architecture and available components for code generation and development reference.\n\n## System Architecture\n\nThe design system follows a modular component-based architecture where each component provides specific functionality. Components are organized into logical groups that can work independently or in combination with other components.\n\n### Component Organization Principles\n\n- **Single Responsibility**: Each component serves a specific purpose\n- **Composability**: Components can be combined to create complex interfaces\n- **Consistency**: All components follow the same design patterns and API conventions\n- **Accessibility**: Components are built with accessibility standards in mind\n\n## Documentation Structure\n\nFor detailed documentation on any component, refer to the corresponding MDX file in the \\`design-system-docs\\` folder. The documentation files follow the naming convention:\n\n\\`\\`\\`\ndesign-system-docs/[componentname].mdx\n\\`\\`\\`\n\nFor example:\n- \\`design-system-docs/button.mdx\\` - Detailed documentation for Button component\n- \\`design-system-docs/table.mdx\\` - Detailed documentation for Table component\n- \\`design-system-docs/annotationcontext.mdx\\` - Detailed documentation for AnnotationContext\n- \\`design-system-docs/applayout.mdx\\` - Detailed documentation for AppLayout component\n\nThese MDX files contain comprehensive information including:\n- Component API documentation\n- Usage examples\n- Props and configuration options\n- Best practices and implementation guidelines\n- Accessibility requirements\n- Integration patterns with other components\n\n## Components\n\n{{COMPONENTS}}\n{{ICONS}}\n{{TOKENS}}\n\n## Usage Guidelines\n\n### Component Dependencies\n- Most components are self-contained and can be used independently\n- Identify any components that require multiple components to work together\n- Some components work better in combination (e.g., Form + FormField, Table + Pagination)\n\n### Integration Patterns\n- Layout components typically serve as containers for other components\n- Form controls should be wrapped in FormField components for proper labeling\n- Navigation components can be used independently or as part of larger layout structures\n- Data display components can be enhanced with interactive elements like buttons and popovers\n\n### Accessibility Considerations\n- All components are built with accessibility in mind\n- Use semantic HTML structures provided by the components\n- Leverage built-in ARIA attributes and keyboard navigation\n- The LiveRegion component provides additional accessibility announcements when needed\n\n### Responsive Design\n- Layout components provide responsive behavior out of the box\n- Grid and ColumnLayout components adapt to different screen sizes\n- Mobile-friendly navigation patterns are built into navigation components\n\n## Usage Reference\n\nThis reference should be used to understand the available components and their intended purposes when generating code or building applications with this design system. For specific implementation details, always consult the corresponding MDX documentation file in the \\`design-system-docs\\` folder.`;\n", "import type { DevToolsSys } from \"../../types\";\nimport type { CLIArgs } from \"../index\";\nimport { runAuthStatus } from \"./status\";\nimport { getCredentials, clearCredentials } from \"../credentials\";\nimport { intro, outro, log, select, isCancel } from \"@clack/prompts\";\nimport { bgCyan, white, bold, dim, bgGreen } from \"picocolors\";\nimport { pkgVersion } from \"../version\";\nimport { track } from \"../track\";\n\nexport const runAuthCommand = async (\n  sys: DevToolsSys,\n  subCommand: string,\n  args: CLIArgs,\n) => {\n  if (subCommand === \"status\") {\n    runAuthStatus(sys, args);\n    return;\n  }\n\n  if (args.reset) {\n    console.log(\"\");\n    intro(bgCyan(bold(white(\" auth reset \"))) + `  ` + dim(pkgVersion));\n    const removed = clearCredentials(sys);\n    if (removed) {\n      log.success(\"Credentials have been cleared successfully\");\n      await track(\"auth reset\", {});\n    } else {\n      log.info(\"No credentials found to clear\");\n    }\n    outro(bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))));\n    return;\n  }\n\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" auth \"))) + `  ` + dim(pkgVersion));\n\n  const figmaAuth = await select({\n    message: \"Authenticate with Figma?\",\n    options: [\n      {\n        value: true,\n        label: \"Yes\",\n      },\n      {\n        value: false,\n        label: \"No\",\n      },\n    ],\n  });\n\n  if (isCancel(figmaAuth)) {\n    return;\n  }\n\n  const { builderPublicKey: spaceId } = await getCredentials(sys, args, {\n    builderPrivateKey: true,\n    builderPublicKey: true,\n    force: true,\n    requireFigmaAuth: figmaAuth ? \"always\" : undefined,\n  });\n  await track(\"auth\", {\n    spaceId,\n  });\n  outro(bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))));\n};\n", "import type { DevToolsSys } from \"../../types\";\nimport type { CLIArgs } from \"../index\";\nimport { readCredentials } from \"../credentials\";\nimport { green, red } from \"picocolors\";\nimport { log } from \"@clack/prompts\";\nimport { PrivateError } from \"../../common/errors\";\n\nexport const runAuthStatus = (sys: DevToolsSys, args: CLIArgs) => {\n  try {\n    const { builderPublicKey, userId, spaceName } = readCredentials(sys, args);\n\n    if (builderPublicKey === undefined) {\n      log.message(red(\"\u2717 Not Authenticated to Builder.io\"));\n      log.message(\n        'Re-run this with the \"auth\" command to authenticate with Builder.io.',\n      );\n      return;\n    }\n\n    log.message(green(\"\u2713 Authenticated to Builder.io\"));\n\n    if (spaceName !== undefined) {\n      log.message(`Space Name: ${spaceName}`);\n    }\n\n    if (builderPublicKey !== undefined) {\n      log.message(`Space ID: ${builderPublicKey}`);\n    }\n\n    if (userId !== undefined) {\n      log.message(`User ID: ${userId}`);\n    }\n  } catch (e) {\n    const id = sys.Sentry?.captureException(\n      new PrivateError(\"Failed to read credentials\", {\n        cause: e,\n      }),\n    );\n    log.error(\n      `Sorry, we ran into a problem while checking authentication. Please try again. If this issue persists, contact support@builder.io, and provide the error ID: ${id}`,\n    );\n  }\n};\n", "import type { DevToolsSys } from \"../../types\";\nimport type { CLIArgs } from \"../index\";\nimport {\n  intro,\n  outro,\n  log,\n  confirm,\n  isCancel,\n  cancel,\n  note,\n  text,\n  select,\n} from \"@clack/prompts\";\nimport { bgCyan, bold, white, dim, green, cyan } from \"picocolors\";\nimport { pkgVersion } from \"../version\";\nimport { spinner } from \"../spinner\";\nimport { getCredentials } from \"../credentials\";\nimport { safeFetch } from \"../fetch\";\nimport { apiAirV2Host } from \"../constants\";\nimport { openBrowser } from \"../utils/open\";\nimport { detectGitInfo, formatGitInfo, type GitInfo } from \"./git-detector\";\nimport { exec } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execAsync = promisify(exec);\n\nimport {\n  detectPackageVersions,\n  packagesToSetupDependencies,\n  formatPackageVersions,\n} from \"./package-detector\";\nimport { selectEnvironmentVariables, formatEnvSummary } from \"./env-collector\";\nimport { collectConfigFiles, selectFileOverrides } from \"./file-collector\";\nimport { runInstallCommand } from \"./install-runner\";\nimport type {\n  CreateProjectOptions,\n  EnvironmentVariable,\n  PartialBranchData,\n} from \"$/ai-utils\";\n\n/**\n * Convert git SSH URL to HTTPS URL\n * Examples:\n *   git@github.com:BuilderIO/ai-services.git -> https://github.com/BuilderIO/ai-services\n *   git@gitlab.com:org/repo.git -> https://gitlab.com/org/repo\n *   https://github.com/owner/repo.git -> https://github.com/owner/repo\n */\nfunction normalizeRepoUrl(url: string): string {\n  // Remove .git suffix if present\n  let normalized = url.replace(/\\.git$/, \"\");\n\n  // Convert SSH format (git@host:path) to HTTPS (https://host/path)\n  if (normalized.startsWith(\"git@\")) {\n    normalized = normalized\n      .replace(/^git@/, \"https://\")\n      .replace(/:([^/])/, \"/$1\"); // Replace first : with /\n  }\n\n  // Ensure https:// prefix for URLs without protocol\n  if (!normalized.startsWith(\"http://\") && !normalized.startsWith(\"https://\")) {\n    normalized = `https://${normalized}`;\n  }\n\n  return normalized;\n}\n\n/**\n * Main connect-repo command handler\n */\nexport async function runRepoConnectCommand(\n  sys: DevToolsSys,\n  args: CLIArgs,\n): Promise<void> {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" connect-repo \"))) + `  ` + dim(pkgVersion));\n\n  try {\n    // Phase 1: Git Detection\n    log.step(\"Detecting git repository...\");\n    const gitInfo = await detectGitInfo(sys);\n    const gitLines = formatGitInfo(gitInfo);\n    note(gitLines.join(\"\\n\"), \"Repository Detected\");\n\n    // Prompt for project name (with default from git)\n    const projectNameInput = await text({\n      message: \"Project name\",\n      initialValue: gitInfo.projectName,\n      validate: (value) => {\n        if (!value || value.trim().length === 0) {\n          return \"Project name cannot be empty\";\n        }\n      },\n    });\n\n    if (isCancel(projectNameInput)) {\n      cancel(\"Project creation cancelled\");\n      return;\n    }\n\n    const projectName = projectNameInput.trim();\n\n    // Phase 2: Install Command\n    const installResult = await runInstallCommand(\n      gitInfo.gitRoot,\n      args.installCommand,\n    );\n\n    if (!installResult.success && !installResult.skipped) {\n      cancel(\"Installation failed. Cannot continue.\");\n      return;\n    }\n\n    // Phase 3: Environment Variables\n    log.step(\"Collecting environment variables...\");\n\n    const envVars = await selectEnvironmentVariables(sys, gitInfo.gitRoot);\n\n    if (envVars === null) {\n      cancel(\"Environment variable selection cancelled\");\n      return;\n    }\n\n    const envSummary = formatEnvSummary(envVars);\n    log.info(\n      `\u2713 Selected ${envSummary.total} variables (${envSummary.secrets} secret, ${envSummary.public} public)`,\n    );\n\n    // Phase 4: Collect Config Files\n    log.step(\"Collecting configuration files...\");\n    const configFiles = await collectConfigFiles(sys, gitInfo.gitRoot);\n\n    // Let user select which files to include\n    const fileOverrides = await selectFileOverrides(configFiles);\n\n    if (fileOverrides === null) {\n      cancel(\"Configuration file selection cancelled\");\n      return;\n    }\n\n    if (fileOverrides.length > 0) {\n      log.info(`\u2713 Selected ${fileOverrides.length} configuration file(s)`);\n    } else {\n      log.info(`\u25CB No configuration files selected`);\n    }\n\n    // Phase 5: Detect Package Versions\n    log.step(\"Detecting tool versions...\");\n    const s2 = spinner();\n    s2.start(\"Checking installed tools\");\n\n    const packageVersions = await detectPackageVersions();\n    const setupDependencies = packagesToSetupDependencies(packageVersions);\n    s2.stop();\n\n    log.info(`\u2713 Detected: ${formatPackageVersions(packageVersions)}`);\n\n    // Phase 6: Create Project\n    await createFusionProject(\n      sys,\n      args,\n      gitInfo,\n      projectName,\n      installResult.command,\n      setupDependencies,\n      envVars,\n      fileOverrides,\n    );\n  } catch (error) {\n    sys.Sentry?.captureException(error);\n    log.error(error instanceof Error ? error.message : String(error));\n    cancel(\"Command failed\");\n    throw error;\n  }\n}\n\n/**\n * Create Fusion project via API\n */\nasync function createFusionProject(\n  sys: DevToolsSys,\n  args: CLIArgs,\n  gitInfo: GitInfo,\n  projectName: string,\n  installCommand: string,\n  setupDependencies: any[],\n  environmentVariables: EnvironmentVariable[],\n  fileOverrides: any[],\n): Promise<void> {\n  log.step(\"Creating Fusion project...\");\n\n  // Show summary\n  const summaryLines = [\n    `Project: ${bold(projectName)}`,\n    `Provider: ${gitInfo.repoProvider} (${gitInfo.isPrivate ? \"private\" : \"public\"})`,\n  ];\n\n  if (gitInfo.recommendedRoot) {\n    summaryLines.push(`Recommended root: ${gitInfo.recommendedRoot}`);\n  }\n\n  summaryLines.push(\n    `Environment: ${environmentVariables.length} variables`,\n    `Config files: ${fileOverrides.length} files`,\n    `Tools: ${setupDependencies.length} dependencies`,\n  );\n\n  note(summaryLines.join(\"\\n\"), \"Summary\");\n\n  // Authenticate\n  const s = spinner();\n  s.start(\"Authenticating\");\n\n  let credentials = await getCredentials(sys, args, {\n    builderPublicKey: true,\n    builderPrivateKey: true,\n  });\n\n  s.stop();\n  log.success(\n    `\u2713 Authenticated as ${credentials.userId} (Space: ${credentials.spaceName || credentials.builderPublicKey})`,\n  );\n\n  // Confirm project creation with space selection\n  const confirmAction = await select({\n    message: `Create project \"${bold(projectName)}\" in space \"${bold(credentials.spaceName || credentials.builderPublicKey)}\"?`,\n    options: [\n      { value: \"confirm\", label: \"Confirm\", hint: \"Create the project\" },\n      {\n        value: \"changeSpace\",\n        label: \"Choose Different Space\",\n        hint: \"Switch to another space\",\n      },\n      { value: \"cancel\", label: \"Cancel\", hint: \"Cancel project creation\" },\n    ],\n  });\n\n  if (isCancel(confirmAction)) {\n    cancel(\"Project creation cancelled\");\n    return;\n  }\n\n  if (confirmAction === \"cancel\") {\n    cancel(\"Project creation cancelled\");\n    return;\n  }\n\n  if (confirmAction === \"changeSpace\") {\n    credentials = await getCredentials(sys, args, {\n      builderPublicKey: true,\n      builderPrivateKey: true,\n      force: true,\n    });\n  }\n\n  // Detect main branch name\n  let mainBranchName: string | undefined;\n  try {\n    const { stdout } = await execAsync(\n      \"git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null || git remote show origin | grep 'HEAD branch' | cut -d' ' -f5\",\n      { cwd: gitInfo.gitRoot },\n    );\n    mainBranchName = stdout.trim().replace(\"refs/remotes/origin/\", \"\");\n  } catch (error) {\n    // If we can't determine the main branch, leave it undefined\n    log.warning(\"Could not determine main branch name\");\n  }\n\n  // Build request payload\n  // Always normalize to HTTPS URL and set protocol accordingly\n  const normalizedUrl = normalizeRepoUrl(gitInfo.originUrl);\n\n  const projectData: CreateProjectOptions = {\n    name: projectName,\n    repoFullName: gitInfo.repoFullName,\n    repoProvider: gitInfo.repoProvider,\n    // For GitHub repos, repoProtocol should be undefined\n    repoProtocol: gitInfo.repoProvider === \"github\" ? undefined : \"https\",\n    repoUrl: normalizedUrl,\n    repoPrivate: gitInfo.isPrivate,\n    needSetup: true,\n    settings: {\n      installCommand,\n      setupDependencies,\n      recommendedRoot: gitInfo.recommendedRoot,\n      environmentVariables,\n      fileOverrides,\n      mainBranchName,\n    },\n  };\n  const branchName = \"happy-cli\";\n  const branchData: PartialBranchData = {\n    name: branchName,\n    createdBy: credentials.userId!,\n    friendlyName: branchName,\n    isDefault: true,\n    isPublic: false,\n    lockedFusionEnvironment: \"cloud\",\n  };\n\n  const requestPayload = {\n    ...projectData,\n    branchData,\n  };\n\n  // Dry run mode - print configuration and exit\n  if (args.dryrun) {\n    s.stop();\n    log.info(\"Dry run mode - project will not be created\");\n    note(\n      `API Endpoint: POST ${apiAirV2Host}/projects?apiKey=${credentials.builderPublicKey}&userId=${credentials.userId}\\n\\nRequest Body:\\n${JSON.stringify(requestPayload, undefined, 2)}`,\n      \"Dry Run Configuration\",\n    );\n    outro(green(\"Dry run complete! \uD83C\uDFAF\"));\n    return;\n  }\n\n  // Create project\n  s.start(\"Creating project on Builder.io\");\n\n  try {\n    const response = await safeFetch(\n      `${apiAirV2Host}/projects?apiKey=${credentials.builderPublicKey}&userId=${credentials.userId}`,\n      {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${credentials.builderPrivateKey}`,\n        },\n        body: JSON.stringify(requestPayload),\n      },\n    );\n\n    s.stop();\n\n    if (!response.ok) {\n      const errorText = await response.text();\n      let errorMessage: string;\n      try {\n        const errorJson = JSON.parse(errorText);\n        errorMessage = errorJson.message || errorJson.error || errorText;\n      } catch {\n        errorMessage = errorText;\n      }\n      throw new Error(`Failed to create project: ${errorMessage}`);\n    }\n\n    const result = await response.json();\n\n    log.success(green(\"\u2713 Project created successfully\"));\n    log.success(green(\"\u2713 Default branch created\"));\n\n    // Success message\n    const urlHost =\n      args.app || args.nativeApp\n        ? `builder://`\n        : args.dev\n          ? `http://localhost:1234`\n          : `https://builder.io`;\n    const projectUrl = `${urlHost}/app/projects/${result.project.id}/${branchName}`;\n\n    outro(green(\"\uD83C\uDF89 Project created successfully!\"));\n\n    note(\n      [\n        `${cyan(projectUrl)}`,\n        ``,\n        `Next steps:`,\n        `1. Configure your dev server command in project settings`,\n        `2. Set up any required secrets`,\n        `3. Launch your development environment`,\n      ].join(\"\\n\"),\n      \"Project URL\",\n    );\n\n    // Ask to open browser\n    const shouldOpen = await confirm({\n      message: \"Open project in browser?\",\n      initialValue: true,\n    });\n\n    if (!isCancel(shouldOpen) && shouldOpen) {\n      const s = spinner();\n      s.start(\"Opening browser\");\n      await openBrowser(projectUrl);\n      s.stop(\"Browser opened\");\n    }\n\n    outro(green(\"Done! \uD83D\uDE80\"));\n  } catch (error) {\n    s.stop();\n    throw error;\n  }\n}\n", "import { exec } from \"child_process\";\nimport { promisify } from \"util\";\nimport { relative } from \"path\";\nimport type { DevToolsSys } from \"../../types\";\n\nconst execAsync = promisify(exec);\n\nexport interface GitInfo {\n  gitRoot: string;\n  recommendedRoot?: string; // Relative path from git root to cwd (for monorepos)\n  originUrl: string;\n  repoProvider: \"github\" | \"gitlab\" | \"bitbucket\" | \"azure\" | \"custom\";\n  repoProtocol: \"https\" | \"ssh\";\n  repoFullName: string; // e.g., \"owner/repo\"\n  repoOwner: string;\n  repoName: string;\n  isPrivate: boolean;\n  projectName: string; // Derived from repo name\n}\n\n/**\n * Detect git repository information\n */\nexport async function detectGitInfo(sys: DevToolsSys): Promise<GitInfo> {\n  const cwd = sys.cwd();\n\n  // Check if we're in a git repository and get root\n  let gitRoot: string;\n  try {\n    const { stdout } = await execAsync(\"git rev-parse --show-toplevel\", {\n      cwd,\n    });\n    gitRoot = stdout.trim();\n  } catch (error) {\n    throw new Error(\n      \"Not a git repository. Please run this command from within a git repository.\",\n    );\n  }\n\n  // Calculate relative path for monorepos\n  const relPath = relative(gitRoot, cwd);\n  const recommendedRoot = relPath ? `./${relPath}` : \"./\";\n\n  // Get git origin URL\n  let originUrl: string;\n  try {\n    const { stdout } = await execAsync(\"git remote get-url origin\", { cwd });\n    originUrl = stdout.trim();\n  } catch (error) {\n    throw new Error(\n      \"No git origin found. Please add a remote origin:\\n  git remote add origin <url>\",\n    );\n  }\n\n  // Parse repository information\n  const parsedInfo = parseGitUrl(originUrl);\n\n  return {\n    gitRoot,\n    recommendedRoot: recommendedRoot === \"./\" ? undefined : recommendedRoot,\n    originUrl,\n    ...parsedInfo,\n  };\n}\n\n/**\n * Parse git URL to extract provider, protocol, owner, repo name, etc.\n */\nfunction parseGitUrl(\n  url: string,\n): Omit<GitInfo, \"gitRoot\" | \"recommendedRoot\" | \"originUrl\"> {\n  // Determine protocol\n  const repoProtocol =\n    url.startsWith(\"git@\") || url.startsWith(\"ssh://\") ? \"ssh\" : \"https\";\n\n  // Extract provider and repo info\n  let repoProvider: GitInfo[\"repoProvider\"] = \"custom\";\n  let repoFullName = \"\";\n  let repoOwner = \"\";\n  let repoName = \"\";\n  let isPrivate = true; // Default to private for safety\n\n  // Clean up URL for parsing\n  let cleanUrl = url\n    .replace(/^git@/, \"\")\n    .replace(/^https?:\\/\\//, \"\")\n    .replace(/^ssh:\\/\\//, \"\")\n    .replace(/\\.git$/, \"\");\n\n  // Parse different URL formats\n  if (cleanUrl.includes(\"github.com\")) {\n    repoProvider = \"github\";\n    const match = cleanUrl.match(/github\\.com[:/]([^/]+)\\/(.+)/);\n    if (match) {\n      repoOwner = match[1];\n      repoName = match[2].replace(/\\.git$/, \"\");\n      repoFullName = `${repoOwner}/${repoName}`;\n    }\n  } else if (cleanUrl.includes(\"gitlab.com\")) {\n    repoProvider = \"gitlab\";\n    const match = cleanUrl.match(/gitlab\\.com[:/]([^/]+)\\/(.+)/);\n    if (match) {\n      repoOwner = match[1];\n      repoName = match[2].replace(/\\.git$/, \"\");\n      repoFullName = `${repoOwner}/${repoName}`;\n    }\n  } else if (cleanUrl.includes(\"bitbucket.org\")) {\n    repoProvider = \"bitbucket\";\n    const match = cleanUrl.match(/bitbucket\\.org[:/]([^/]+)\\/(.+)/);\n    if (match) {\n      repoOwner = match[1];\n      repoName = match[2].replace(/\\.git$/, \"\");\n      repoFullName = `${repoOwner}/${repoName}`;\n    }\n  } else if (\n    cleanUrl.includes(\"dev.azure.com\") ||\n    cleanUrl.includes(\"visualstudio.com\")\n  ) {\n    repoProvider = \"azure\";\n    // Azure DevOps URLs: dev.azure.com/org/project/_git/repo\n    const match = cleanUrl.match(\n      /dev\\.azure\\.com[:/]([^/]+)\\/([^/]+)\\/_git\\/(.+)/,\n    );\n    if (match) {\n      repoOwner = match[1];\n      repoName = match[3].replace(/\\.git$/, \"\");\n      repoFullName = `${match[1]}/${match[2]}/${repoName}`;\n    }\n  } else {\n    // Custom/self-hosted git\n    repoProvider = \"custom\";\n    const parts = cleanUrl.split(/[:/]/);\n    if (parts.length >= 2) {\n      repoOwner = parts[parts.length - 2];\n      repoName = parts[parts.length - 1].replace(/\\.git$/, \"\");\n      repoFullName = `${repoOwner}/${repoName}`;\n    }\n  }\n\n  // Derive project name from repo name (clean up special chars)\n  const projectName = repoName.replace(/[^a-zA-Z0-9-_]/g, \"-\");\n\n  return {\n    repoProvider,\n    repoProtocol,\n    repoFullName,\n    repoOwner,\n    repoName,\n    isPrivate,\n    projectName,\n  };\n}\n\n/**\n * Display git info in a user-friendly format\n */\nexport function formatGitInfo(info: GitInfo): string[] {\n  const lines: string[] = [];\n\n  lines.push(`Repository root: ${info.gitRoot}`);\n\n  if (info.recommendedRoot && info.recommendedRoot !== \"./\") {\n    lines.push(`Current path: ${info.recommendedRoot} (monorepo detected)`);\n  }\n\n  lines.push(`Git origin: ${info.originUrl}`);\n  lines.push(\n    `Provider: ${\n      info.repoProvider.charAt(0).toUpperCase() + info.repoProvider.slice(1)\n    }`,\n  );\n  lines.push(`Repository: ${info.repoFullName}`);\n  lines.push(`Status: ${info.isPrivate ? \"Private\" : \"Public\"} repository`);\n\n  return lines;\n}\n", "import { exec } from \"child_process\";\nimport { promisify } from \"util\";\nimport type { SetupMiseDependency } from \"$/ai-utils\";\n\nconst execAsync = promisify(exec);\n\nexport interface PackageVersions {\n  node?: string;\n  npm?: string;\n  pnpm?: string;\n  yarn?: string;\n  bun?: string;\n  deno?: string;\n}\n\n/**\n * Detect versions of installed package managers and runtimes\n */\nexport async function detectPackageVersions(): Promise<PackageVersions> {\n  const versions: PackageVersions = {};\n\n  // Detect Node.js\n  try {\n    const { stdout } = await execAsync(\"node --version\");\n    versions.node = stdout.trim().replace(/^v/, \"\"); // Remove 'v' prefix\n  } catch {\n    // Node not found (unlikely since we're running in Node)\n  }\n\n  // Detect npm\n  try {\n    const { stdout } = await execAsync(\"npm --version\");\n    versions.npm = stdout.trim();\n  } catch {\n    // npm not found\n  }\n\n  // Detect pnpm\n  try {\n    const { stdout } = await execAsync(\"pnpm --version\");\n    versions.pnpm = stdout.trim();\n  } catch {\n    // pnpm not installed\n  }\n\n  // Detect yarn\n  try {\n    const { stdout } = await execAsync(\"yarn --version\");\n    versions.yarn = stdout.trim();\n  } catch {\n    // yarn not installed\n  }\n\n  // Detect bun\n  try {\n    const { stdout } = await execAsync(\"bun --version\");\n    versions.bun = stdout.trim();\n  } catch {\n    // bun not installed\n  }\n\n  // Detect deno\n  try {\n    const { stdout } = await execAsync(\"deno --version\");\n    // Deno outputs multi-line, first line is \"deno X.Y.Z\"\n    const match = stdout.match(/deno (\\d+\\.\\d+\\.\\d+)/);\n    if (match) {\n      versions.deno = match[1];\n    }\n  } catch {\n    // deno not installed\n  }\n\n  return versions;\n}\n\n/**\n * Convert package versions to SetupMiseDependency array\n */\nexport function packagesToSetupDependencies(\n  versions: PackageVersions,\n): SetupMiseDependency[] {\n  const dependencies: SetupMiseDependency[] = [];\n\n  if (versions.node) {\n    dependencies.push({\n      key: \"node\",\n      type: \"mise\",\n      tool: \"node\",\n      version: versions.node,\n    });\n  }\n\n  if (versions.npm) {\n    dependencies.push({\n      key: \"npm\",\n      type: \"mise\",\n      tool: \"npm\",\n      version: versions.npm,\n    });\n  }\n\n  if (versions.pnpm) {\n    dependencies.push({\n      key: \"pnpm\",\n      type: \"mise\",\n      tool: \"pnpm\",\n      version: versions.pnpm,\n    });\n  }\n\n  if (versions.yarn) {\n    dependencies.push({\n      key: \"yarn\",\n      type: \"mise\",\n      tool: \"yarn\",\n      version: versions.yarn,\n    });\n  }\n\n  if (versions.bun) {\n    dependencies.push({\n      key: \"bun\",\n      type: \"mise\",\n      tool: \"bun\",\n      version: versions.bun,\n    });\n  }\n\n  if (versions.deno) {\n    dependencies.push({\n      key: \"deno\",\n      type: \"mise\",\n      tool: \"deno\",\n      version: versions.deno,\n    });\n  }\n\n  return dependencies;\n}\n\n/**\n * Format package versions for display\n */\nexport function formatPackageVersions(versions: PackageVersions): string {\n  const parts: string[] = [];\n\n  if (versions.node) parts.push(`node v${versions.node}`);\n  if (versions.npm) parts.push(`npm ${versions.npm}`);\n  if (versions.pnpm) parts.push(`pnpm ${versions.pnpm}`);\n  if (versions.yarn) parts.push(`yarn ${versions.yarn}`);\n  if (versions.bun) parts.push(`bun ${versions.bun}`);\n  if (versions.deno) parts.push(`deno ${versions.deno}`);\n\n  return parts.join(\", \");\n}\n", "import { multiselect, isCancel } from \"@clack/prompts\";\nimport type { EnvironmentVariable } from \"$/ai-utils\";\nimport type { DevToolsSys } from \"../../types\";\nimport { config as dotenvConfig } from \"dotenv\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\n\n/**\n * System environment variables to exclude (common across all platforms)\n */\nconst SYSTEM_ENV_VARS = new Set([\n  \"PATH\",\n  \"HOME\",\n  \"SHELL\",\n  \"USER\",\n  \"LOGNAME\",\n  \"TMPDIR\",\n  \"TEMP\",\n  \"TMP\",\n  \"PWD\",\n  \"OLDPWD\",\n  \"TERM\",\n  \"TERM_PROGRAM\",\n  \"TERM_PROGRAM_VERSION\",\n  \"TERM_SESSION_ID\",\n  \"LANG\",\n  \"LC_ALL\",\n  \"LC_CTYPE\",\n  \"LC_COLLATE\",\n  \"LC_TIME\",\n  \"LC_NUMERIC\",\n  \"LC_MONETARY\",\n  \"LC_MESSAGES\",\n  \"SHLVL\",\n  \"_\",\n  \"DISPLAY\",\n  \"COLORTERM\",\n  \"XDG_CONFIG_HOME\",\n  \"XDG_DATA_HOME\",\n  \"XDG_CACHE_HOME\",\n  \"XDG_RUNTIME_DIR\",\n  \"SSH_AUTH_SOCK\",\n  \"SSH_AGENT_PID\",\n  \"MANPATH\",\n  \"INFOPATH\",\n  \"HOMEBREW_PREFIX\",\n  \"HOMEBREW_CELLAR\",\n  \"HOMEBREW_REPOSITORY\",\n  \"COMMAND_MODE\",\n  \"__CFBundleIdentifier\",\n  \"__CF_USER_TEXT_ENCODING\",\n  \"Apple_PubSub_Socket_Render\",\n  \"SUDO_COMMAND\",\n  \"SUDO_USER\",\n  \"SUDO_UID\",\n  \"SUDO_GID\",\n  \"ORIGINAL_XDG_CURRENT_DESKTOP\",\n  \"EDITOR\",\n  \"VISUAL\",\n  \"PAGER\",\n  \"LESS\",\n  \"LESSOPEN\",\n  // Node/npm runtime variables (not user-configurable)\n  \"NODE\",\n  \"NODE_PATH\",\n  \"NODE_OPTIONS\",\n  // IDE-specific variables\n  \"CLAUDE_CODE_SSE_PORT\",\n  \"COLOR\",\n  \"CURSOR_TRACE_ID\",\n  \"ENABLE_IDE_INTEGRATION\",\n  \"GIT_ASKPASS\",\n  \"VSCODE_GIT_ASKPASS_EXTRA_ARGS\",\n  \"VSCODE_GIT_ASKPASS_MAIN\",\n  \"VSCODE_GIT_ASKPASS_NODE\",\n  \"VSCODE_GIT_IPC_HANDLE\",\n  \"VSCODE_INJECTION\",\n  \"VSCODE_INSPECTOR_OPTIONS\",\n  // System-specific\n  \"INIT_CWD\",\n  \"MallocNanoZone\",\n  \"OSLogRateLimit\",\n  \"XPC_FLAGS\",\n  \"XPC_SERVICE_NAME\",\n  \"PNPM_HOME\",\n]);\n\n/**\n * Patterns for environment variables to exclude\n */\nconst EXCLUDE_PATTERNS = [\n  /^npm_config_/,\n  /^npm_command$/,\n  /^npm_execpath$/,\n  /^npm_lifecycle_/,\n  /^npm_node_execpath$/,\n  /^npm_package_/,\n];\n\n/**\n * Check if a variable should be excluded\n */\nfunction shouldExcludeVar(key: string): boolean {\n  // Check static set\n  if (SYSTEM_ENV_VARS.has(key)) {\n    return true;\n  }\n\n  // Check patterns\n  return EXCLUDE_PATTERNS.some((pattern) => pattern.test(key));\n}\n\n/**\n * Patterns for categorizing environment variables\n */\nconst ENV_CATEGORIES = {\n  \"Build & Development\": [\n    /^NODE_ENV$/,\n    /^CI$/,\n    /^NODE_OPTIONS$/,\n    /^DEBUG$/,\n    /^PORT$/,\n    /^HOST$/,\n    /^ENVIRONMENT$/,\n    /^ENV$/,\n    /^BUILD_/,\n    /^DEV_/,\n  ],\n  \"NPM & Package Managers\": [/^NPM_/, /^YARN_/, /^PNPM_/, /^BUN_/],\n  \"Framework Specific\": [\n    /^NEXT_/,\n    /^REACT_/,\n    /^VITE_/,\n    /^NUXT_/,\n    /^VUE_/,\n    /^ANGULAR_/,\n    /^SVELTE_/,\n    /^GATSBY_/,\n    /^REMIX_/,\n  ],\n  \"Public Variables\": [/^PUBLIC_/, /^NEXT_PUBLIC_/, /^REACT_APP_/, /^VITE_/],\n  \"API & Services\": [\n    /^API_/,\n    /^DATABASE_/,\n    /^DB_/,\n    /^REDIS_/,\n    /^AWS_/,\n    /^GCP_/,\n    /^AZURE_/,\n    /^STRIPE_/,\n    /^SENTRY_/,\n    /^VERCEL_/,\n    /^NETLIFY_/,\n  ],\n  Custom: [], // Catch-all for everything else\n};\n\n/**\n * Patterns for identifying secret variables\n */\nconst SECRET_PATTERNS = [\n  /TOKEN/i,\n  /KEY/i,\n  /SECRET/i,\n  /PASSWORD/i,\n  /PASS/i,\n  /AUTH/i,\n  /PRIVATE/i,\n  /CREDENTIAL/i,\n];\n\n/**\n * Variables that should be pre-selected by default\n */\nconst DEFAULT_SELECTED = new Set([\n  \"NODE_ENV\",\n  \"CI\",\n  \"PORT\",\n  \"HOST\",\n  \"ENVIRONMENT\",\n]);\n\ninterface CategorizedEnvVar {\n  key: string;\n  value: string;\n  category: string;\n  isSecret: boolean;\n  shouldPreselect: boolean;\n  fromDotEnv?: boolean;\n}\n\n/**\n * Load environment variables from .env files using dotenv package\n */\nasync function loadDotEnvFiles(\n  sys: DevToolsSys,\n  gitRoot: string,\n): Promise<Record<string, string>> {\n  const dotEnvFiles = [\n    \".env\",\n    \".env.local\",\n    \".env.development\",\n    \".env.development.local\",\n  ];\n  const envVars: Record<string, string> = {};\n\n  for (const fileName of dotEnvFiles) {\n    const filePath = join(gitRoot, fileName);\n\n    // Check if file exists\n    if (!existsSync(filePath)) {\n      continue;\n    }\n\n    try {\n      // Use dotenv to parse the file\n      const result = dotenvConfig({ path: filePath });\n      if (result.parsed) {\n        // Merge, later files override earlier ones\n        Object.assign(envVars, result.parsed);\n      }\n    } catch {\n      // File can't be read or parsed\n    }\n  }\n\n  return envVars;\n}\n\n/**\n * Filter and categorize environment variables\n */\nexport function filterAndCategorizeEnvVars(\n  dotEnvVars?: Record<string, string>,\n): CategorizedEnvVar[] {\n  const vars: CategorizedEnvVar[] = [];\n\n  // First, add all .env variables (highest priority)\n  if (dotEnvVars) {\n    for (const [key, value] of Object.entries(dotEnvVars)) {\n      if (!value || shouldExcludeVar(key)) {\n        continue;\n      }\n\n      // Categorize\n      let category = \"Custom\";\n      for (const [catName, patterns] of Object.entries(ENV_CATEGORIES)) {\n        if (patterns.some((pattern) => pattern.test(key))) {\n          category = catName;\n          break;\n        }\n      }\n\n      // Check if secret\n      const isSecret = SECRET_PATTERNS.some((pattern) => pattern.test(key));\n\n      // All .env variables should be pre-selected\n      vars.push({\n        key,\n        value,\n        category: category === \"Custom\" ? \".env Variables\" : category,\n        isSecret,\n        shouldPreselect: true,\n        fromDotEnv: true,\n      });\n    }\n  }\n\n  // Then add process.env variables (lower priority, skip if already in .env)\n  const dotEnvKeys = new Set(dotEnvVars ? Object.keys(dotEnvVars) : []);\n\n  for (const [key, value] of Object.entries(process.env)) {\n    // Skip if already added from .env\n    if (dotEnvKeys.has(key)) {\n      continue;\n    }\n\n    // Skip system variables\n    if (shouldExcludeVar(key)) {\n      continue;\n    }\n\n    // Skip undefined values\n    if (value === undefined) {\n      continue;\n    }\n\n    // Categorize\n    let category = \"Custom\";\n    for (const [catName, patterns] of Object.entries(ENV_CATEGORIES)) {\n      if (patterns.some((pattern) => pattern.test(key))) {\n        category = catName;\n        break;\n      }\n    }\n\n    // Check if secret\n    const isSecret = SECRET_PATTERNS.some((pattern) => pattern.test(key));\n\n    // Check if should be pre-selected\n    const shouldPreselect =\n      DEFAULT_SELECTED.has(key) ||\n      key.startsWith(\"NEXT_PUBLIC_\") ||\n      key.startsWith(\"REACT_APP_\") ||\n      key.startsWith(\"VITE_\") ||\n      key.startsWith(\"PUBLIC_\") ||\n      key === \"NODE_ENV\" ||\n      key === \"CI\";\n\n    vars.push({\n      key,\n      value,\n      category,\n      isSecret,\n      shouldPreselect,\n    });\n  }\n\n  // Sort by category then by key\n  vars.sort((a, b) => {\n    if (a.category !== b.category) {\n      return a.category.localeCompare(b.category);\n    }\n    return a.key.localeCompare(b.key);\n  });\n\n  return vars;\n}\n\n/**\n * Present multiselect UI for environment variables\n */\nexport async function selectEnvironmentVariables(\n  sys: DevToolsSys,\n  gitRoot: string,\n): Promise<EnvironmentVariable[] | null> {\n  // Load .env files first\n  const dotEnvVars = await loadDotEnvFiles(sys, gitRoot);\n  const categorized = filterAndCategorizeEnvVars(dotEnvVars);\n\n  if (categorized.length === 0) {\n    return [];\n  }\n\n  // Group by category for display\n  const grouped = new Map<string, CategorizedEnvVar[]>();\n  for (const envVar of categorized) {\n    if (!grouped.has(envVar.category)) {\n      grouped.set(envVar.category, []);\n    }\n    grouped.get(envVar.category)!.push(envVar);\n  }\n\n  // Build options for multiselect\n  const options: Array<{\n    value: string;\n    label: string;\n    hint?: string;\n  }> = [];\n\n  for (const [category, vars] of grouped) {\n    // Add category header as a disabled option\n    options.push({\n      value: `__category_${category}__`,\n      label: `\\n${category} (${vars.length})`,\n      hint: \"\",\n    });\n\n    // Add variables in this category\n    for (const envVar of vars) {\n      const displayValue = envVar.isSecret\n        ? \"***\"\n        : envVar.value.length > 50\n          ? `${envVar.value.substring(0, 47)}...`\n          : envVar.value;\n\n      options.push({\n        value: envVar.key,\n        label: `  ${envVar.key}`,\n        hint: displayValue,\n      });\n    }\n  }\n\n  // Get pre-selected values\n  const initialValues = categorized\n    .filter((v) => v.shouldPreselect)\n    .map((v) => v.key);\n\n  const preselectedCount = initialValues.length;\n  const totalCount = categorized.length;\n  const dotEnvCount = categorized.filter((v) => v.fromDotEnv).length;\n\n  const message =\n    dotEnvCount > 0\n      ? `Select environment variables (${dotEnvCount} from .env, ${preselectedCount} pre-selected)`\n      : `Select environment variables (${preselectedCount} of ${totalCount} pre-selected)`;\n\n  const selected = await multiselect({\n    message,\n    options: options.filter((opt) => !opt.value.startsWith(\"__category_\")),\n    initialValues,\n    required: false,\n  });\n\n  if (isCancel(selected)) {\n    return null;\n  }\n\n  // Convert selected keys to EnvironmentVariable array\n  const selectedKeys = new Set(selected as string[]);\n  const result: EnvironmentVariable[] = [];\n\n  for (const envVar of categorized) {\n    if (selectedKeys.has(envVar.key)) {\n      result.push({\n        key: envVar.key,\n        value: envVar.value,\n        isSecret: envVar.isSecret,\n      });\n    }\n  }\n\n  return result;\n}\n\n/**\n * Format environment variables summary\n */\nexport function formatEnvSummary(envVars: EnvironmentVariable[]): {\n  total: number;\n  secrets: number;\n  public: number;\n} {\n  const secrets = envVars.filter((v) => v.isSecret).length;\n  const public_ = envVars.length - secrets;\n\n  return {\n    total: envVars.length,\n    secrets,\n    public: public_,\n  };\n}\n", "import { join } from \"path\";\nimport { homedir } from \"os\";\nimport type { DevToolsSys } from \"../../types\";\nimport type { FileOverride } from \"$/ai-utils\";\nimport { multiselect, isCancel } from \"@clack/prompts\";\n\nexport interface CollectedFiles {\n  projectNpmrc?: { path: string; content: string };\n  userNpmrc?: { path: string; content: string };\n  etcHosts?: { path: string; content: string };\n}\n\n/**\n * Collect configuration files from the project and system\n */\nexport async function collectConfigFiles(\n  sys: DevToolsSys,\n  gitRoot: string,\n): Promise<CollectedFiles> {\n  const collected: CollectedFiles = {};\n\n  // Try to read project .npmrc\n  const projectNpmrcPath = join(gitRoot, \".npmrc\");\n  try {\n    const content = await sys.readFile(projectNpmrcPath);\n    if (content) {\n      collected.projectNpmrc = {\n        path: projectNpmrcPath,\n        content,\n      };\n    }\n  } catch {\n    // File doesn't exist or can't be read\n  }\n\n  // Try to read user .npmrc\n  const userNpmrcPath = join(homedir(), \".npmrc\");\n  try {\n    const content = await sys.readFile(userNpmrcPath);\n    if (content) {\n      collected.userNpmrc = {\n        path: userNpmrcPath,\n        content,\n      };\n    }\n  } catch {\n    // File doesn't exist or can't be read\n  }\n\n  // Try to read /etc/hosts (may fail due to permissions, which is fine)\n  const etcHostsPath = \"/etc/hosts\";\n  try {\n    const content = await sys.readFile(etcHostsPath);\n    if (content) {\n      collected.etcHosts = {\n        path: etcHostsPath,\n        content,\n      };\n    }\n  } catch {\n    // File doesn't exist or can't be read (permission denied is common)\n  }\n\n  return collected;\n}\n\n/**\n * Convert collected files to FileOverride array with proper path conventions\n *\n * Path conventions:\n * - ./ prefix = relative to git repository root\n * - ~/ prefix = relative to home directory\n * - absolute paths = only for well-known system files\n */\nexport function filesToFileOverrides(\n  collected: CollectedFiles,\n): FileOverride[] {\n  const overrides: FileOverride[] = [];\n\n  // Project .npmrc \u2192 ./.npmrc (relative to repo root)\n  if (collected.projectNpmrc) {\n    overrides.push({\n      path: \"./.npmrc\",\n      content: collected.projectNpmrc.content,\n    });\n  }\n\n  // User .npmrc \u2192 ~/.npmrc (relative to home directory)\n  if (collected.userNpmrc) {\n    overrides.push({\n      path: \"~/.npmrc\",\n      content: collected.userNpmrc.content,\n    });\n  }\n\n  // /etc/hosts \u2192 /etc/hosts (absolute path for system file)\n  if (collected.etcHosts) {\n    overrides.push({\n      path: \"/etc/hosts\",\n      content: collected.etcHosts.content,\n    });\n  }\n\n  return overrides;\n}\n\n/**\n * Format collected files summary\n */\nexport function formatFilesSummary(collected: CollectedFiles): string[] {\n  const lines: string[] = [];\n  const files: string[] = [];\n\n  if (collected.projectNpmrc) {\n    files.push(\".npmrc (project)\");\n  }\n\n  if (collected.userNpmrc) {\n    files.push(\".npmrc (user)\");\n  }\n\n  if (collected.etcHosts) {\n    files.push(\"/etc/hosts\");\n  }\n\n  if (files.length > 0) {\n    lines.push(`\u2713 Config files: ${files.join(\", \")}`);\n  } else {\n    lines.push(`\u25CB No config files found`);\n  }\n\n  return lines;\n}\n\n/**\n * Present multiselect UI for file overrides\n */\nexport async function selectFileOverrides(\n  collected: CollectedFiles,\n): Promise<FileOverride[] | null> {\n  const availableFiles: Array<{\n    key: string;\n    displayName: string;\n    path: string;\n    content: string;\n    hint: string;\n  }> = [];\n\n  if (collected.projectNpmrc) {\n    availableFiles.push({\n      key: \"projectNpmrc\",\n      displayName: \".npmrc (project)\",\n      path: \"./.npmrc\",\n      content: collected.projectNpmrc.content,\n      hint: \"NPM configuration for project\",\n    });\n  }\n\n  if (collected.userNpmrc) {\n    availableFiles.push({\n      key: \"userNpmrc\",\n      displayName: \".npmrc (user)\",\n      path: \"~/.npmrc\",\n      content: collected.userNpmrc.content,\n      hint: \"Your user NPM configuration\",\n    });\n  }\n\n  if (collected.etcHosts) {\n    availableFiles.push({\n      key: \"etcHosts\",\n      displayName: \"/etc/hosts\",\n      path: \"/etc/hosts\",\n      content: collected.etcHosts.content,\n      hint: \"System hosts file\",\n    });\n  }\n\n  // If no files found, return empty array\n  if (availableFiles.length === 0) {\n    return [];\n  }\n\n  // Build options for multiselect\n  const options = availableFiles.map((file) => ({\n    value: file.key,\n    label: file.displayName,\n    hint: file.hint,\n  }));\n\n  // Pre-select all files by default\n  const initialValues = availableFiles.map((f) => f.key);\n\n  const selected = await multiselect({\n    message: `Select configuration files to include (${availableFiles.length} found)`,\n    options,\n    initialValues,\n    required: false,\n  });\n\n  if (isCancel(selected)) {\n    return null;\n  }\n\n  // Convert selected keys to FileOverride array\n  const selectedKeys = new Set(selected as string[]);\n  const result: FileOverride[] = [];\n\n  for (const file of availableFiles) {\n    if (selectedKeys.has(file.key)) {\n      result.push({\n        path: file.path,\n        content: file.content,\n      });\n    }\n  }\n\n  return result;\n}\n", "import { spawn } from \"child_process\";\nimport { text, select, isCancel, log } from \"@clack/prompts\";\nimport { green, red, yellow } from \"picocolors\";\n\nexport interface InstallResult {\n  success: boolean;\n  command: string;\n  exitCode?: number;\n  skipped: boolean;\n}\n\n/**\n * Run install command with live output and retry logic\n */\nexport async function runInstallCommand(\n  cwd: string,\n  initialCommand?: string,\n): Promise<InstallResult> {\n  const MAX_RETRIES = 3;\n  let attempt = 0;\n  let command = initialCommand;\n\n  while (attempt < MAX_RETRIES) {\n    attempt++;\n\n    // Prompt for command if not provided\n    if (!command) {\n      // Show cwd before prompting\n      log.info(`Working directory: ${cwd}`);\n\n      const commandInput = await text({\n        message: \"Enter install command\",\n        placeholder: \"npm install\",\n        defaultValue: \"npm install\",\n        validate: (value) => {\n          if (!value || value.trim().length === 0) {\n            return \"Command cannot be empty\";\n          }\n        },\n      });\n\n      if (isCancel(commandInput)) {\n        return {\n          success: false,\n          command: \"\",\n          skipped: true,\n        };\n      }\n\n      command = commandInput;\n    } else {\n      // If command was provided via args, show cwd\n      log.info(`Working directory: ${cwd}`);\n    }\n\n    // Execute command with live output\n    const result = await executeCommand(command, cwd);\n\n    if (result.success) {\n      log.success(green(\"\u2713 Install completed successfully!\"));\n      return {\n        success: true,\n        command,\n        exitCode: 0,\n        skipped: false,\n      };\n    }\n\n    // Install failed\n    log.error(red(`\u2717 Install failed with exit code ${result.exitCode}`));\n\n    // Ask if user wants to retry (unless we've hit max retries)\n    if (attempt < MAX_RETRIES) {\n      const retry = await select({\n        message: \"Try again with a different command?\",\n        options: [\n          { value: \"retry\", label: \"Yes, try again\" },\n          { value: \"skip\", label: \"No, skip and continue anyway\" },\n        ],\n      });\n\n      if (isCancel(retry) || retry === \"skip\") {\n        log.warn(yellow(\"\u26A0 Skipping install step\"));\n        return {\n          success: false,\n          command,\n          exitCode: result.exitCode,\n          skipped: true,\n        };\n      }\n\n      // Reset command so user can enter a new one\n      command = undefined;\n    } else {\n      // Max retries reached\n      log.warn(yellow(\"\u26A0 Maximum retry attempts reached\"));\n\n      const continueAnyway = await select({\n        message: \"Continue without successful install?\",\n        options: [\n          { value: \"yes\", label: \"Yes, continue anyway\" },\n          { value: \"no\", label: \"No, exit\" },\n        ],\n      });\n\n      if (isCancel(continueAnyway) || continueAnyway === \"no\") {\n        return {\n          success: false,\n          command,\n          exitCode: result.exitCode,\n          skipped: false,\n        };\n      }\n\n      return {\n        success: false,\n        command,\n        exitCode: result.exitCode,\n        skipped: true,\n      };\n    }\n  }\n\n  // Should never reach here\n  return {\n    success: false,\n    command: command || \"\",\n    skipped: true,\n  };\n}\n\n/**\n * Execute a command with live output piping\n */\nfunction executeCommand(\n  command: string,\n  cwd: string,\n): Promise<{ success: boolean; exitCode: number }> {\n  return new Promise((resolve) => {\n    // Parse command (simple split, assumes no complex quoting)\n    const parts = command.trim().split(/\\s+/);\n    const cmd = parts[0];\n    const args = parts.slice(1);\n\n    const child = spawn(cmd, args, {\n      cwd,\n      stdio: \"inherit\", // Pipe stdout/stderr directly to parent process\n      shell: true,\n    });\n\n    child.on(\"error\", (error) => {\n      log.error(`Failed to execute command: ${error.message}`);\n      resolve({ success: false, exitCode: 1 });\n    });\n\n    child.on(\"exit\", (code) => {\n      const exitCode = code ?? 1;\n      resolve({\n        success: exitCode === 0,\n        exitCode,\n      });\n    });\n  });\n}\n"],
  "mappings": "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,MAC1BA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MAC1BA,GAAV,MACUA,GAAV,MACUA,GAAV,MACUA,GAAV,MACA,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,GAAa,MACpC,MAAUA,GAAaA,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ACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,QACF,EAGMC,EAAiB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,QACF,EAEMC,EAAa,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,cACF,EAEMC,EAAiB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,UACF,EAaMC,EAAe,CACnB,KAAMH,EACN,QAASD,EACT,QAde,CACf,OACA,QACA,UACA,UACA,MACF,EASE,SANe,CAAE,SAAU,EAO3B,YAAaE,CACf,EAEMG,EAAoB,CACxB,UAAW,oBACX,UAAW,EACX,SAAU,CAER,MAAOF,CAAe,EACxB,MAAOd,EAAM,OACX,KACA,eACA,SACA,UACA,aACA,YACAD,EAAK,SACLC,EAAM,UAAU,kBAAkB,CAAC,CACvC,EAEMiB,EAAsB,CAC1BD,EACAR,EACAH,EACAJ,EACAF,EAAK,qBACLQ,EACAD,CACF,EAEMY,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,KACP,IAAK,IACP,EACA,CACE,cAAe,wBACf,IAAK,GACP,CACF,EACA,SAAUH,EACV,SAAUE,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUF,EACV,SAAUE,EAAoB,OAAO,CAAE,MAAO,CAAC,EAC/C,UAAW,CACb,CACF,CAAC,EACD,UAAW,CACb,EAEME,EAAuB,CAC3B,UAAW,WACX,MAAO,IAAMf,EAAmB,eAAiBM,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUK,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOb,EACP,SAAUa,EACV,UAAW,CACb,EACA,CACE,MAAOL,EACP,YAAa,GACb,SAAU,CAAED,CAAW,EACvB,UAAW,CACb,EAGA,CACE,MAAO,KACP,UAAW,CACb,EAEA,CACE,MAAO,IACP,eAAgB,GAChB,SAAU,CACRH,EACAC,CACF,CACF,EAGA,CACE,UAAW,EACX,MAAO,GACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUQ,EACV,UAAW,EACX,SAAU,CACRd,EACAF,EAAK,qBACLO,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUU,EACV,UAAW,EACX,SAAU,CACR,OACAd,EACAF,EAAK,qBACLO,EACAC,EACAF,CACF,CACF,CACF,CACF,EACAA,EACAJ,EACAF,EAAK,qBACLS,CACF,CACF,EAEA,MAAO,CACL,KAAM,MACN,QAAS,CACP,KACA,MACA,MACA,MACA,KACA,MACA,KACF,EACA,SAAUO,EACV,QAAS,KACT,iBAAkB,CAAE,oBAAqB,UAAW,EACpD,SAAU,CAAC,EAAE,OACXG,EACAC,EACAH,EACAC,EACA,CACET,EACA,CACE,MAAO,4MACP,IAAK,IACL,SAAUO,EACV,SAAU,CACR,OACAV,CACF,CACF,EACA,CACE,MAAON,EAAK,SAAW,KACvB,SAAUgB,CACZ,EACA,CACE,MAAO,CAEL,wDACA,MACA,KACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,CACF,CAAC,CACL,CACF,CAWA,SAASK,GAAQrB,EAAM,CACrB,IAAMsB,EAAa,CACjB,KAAM,CACJ,UACA,OACA,OACA,QACF,EACA,SAAU,CACR,qBACA,kBACA,iBACA,iBACA,iBACA,gBACA,eACA,eACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,IACF,EACA,OAAQ,CACN,QACA,OACA,gCACA,wBACA,wBACA,uBACA,uBACA,sBACA,sBACA,qBACA,qBACA,qBACA,qBACA,qBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF,EACA,QAAS,CACP,kBACA,iBACA,iBACA,iBACA,gBACA,eACA,eACA,eACA,eACA,cACA,cACA,cACA,WACA,WACA,UACA,SACA,QACA,OACA,KACF,CACF,EAEMC,EAAUxB,IAAUC,CAAI,EAExBwB,EAAyCD,EAAQ,SAEvD,OAAAC,EAAI,KAAO,CACT,GAAGA,EAAI,KACP,GAAGF,EAAW,IAChB,EACAE,EAAI,QAAU,CACZ,GAAGA,EAAI,QACP,GAAGF,EAAW,OAChB,EACAE,EAAI,SAAW,CACb,GAAGA,EAAI,SACP,GAAGF,EAAW,QAChB,EACAE,EAAI,OAASF,EAAW,OAExBC,EAAQ,KAAO,UACfA,EAAQ,QAAU,CAAE,KAAM,EAC1BA,EAAQ,WAAa,MAEdA,CACT,CAv8BA,IAAAE,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAM,CAAC,EACPC,EAAa,CACjB,MAAO,OACP,IAAK,KACL,SAAU,CACR,OACA,CACE,MAAO,KACP,SAAU,CAAED,CAAI,CAClB,CACF,CACF,EACA,OAAO,OAAOA,EAAK,CACjB,UAAW,WACX,SAAU,CACR,CAAE,MAAOD,EAAM,OAAO,qBAGpB,qBAAqB,CAAE,EACzBE,CACF,CACF,CAAC,EAED,IAAMC,EAAQ,CACZ,UAAW,QACX,MAAO,OACP,IAAK,KACL,SAAU,CAAEJ,EAAK,gBAAiB,CACpC,EACMK,EAAW,CACf,MAAO,iBACP,OAAQ,CAAE,SAAU,CAClBL,EAAK,kBAAkB,CACrB,MAAO,QACP,IAAK,QACL,UAAW,QACb,CAAC,CACH,CAAE,CACJ,EACMM,EAAe,CACnB,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACRN,EAAK,iBACLE,EACAE,CACF,CACF,EACAA,EAAM,SAAS,KAAKE,CAAY,EAChC,IAAMC,EAAgB,CACpB,MAAO,KACT,EACMC,EAAc,CAClB,UAAW,SACX,MAAO,IACP,IAAK,GACP,EACMC,EAAe,CACnB,MAAO,KACT,EACMC,EAAa,CACjB,MAAO,UACP,IAAK,OACL,SAAU,CACR,CACE,MAAO,gBACP,UAAW,QACb,EACAV,EAAK,YACLE,CACF,CACF,EACMS,EAAiB,CACrB,OACA,OACA,MACA,KACA,MACA,MACA,OACA,OACA,MACF,EACMC,EAAgBZ,EAAK,QAAQ,CACjC,OAAQ,IAAIW,EAAe,KAAK,GAAG,CAAC,IACpC,UAAW,EACb,CAAC,EACKE,EAAW,CACf,UAAW,WACX,MAAO,4BACP,YAAa,GACb,SAAU,CAAEb,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,YAAa,CAAC,CAAE,EACnE,UAAW,CACb,EAEMc,EAAW,CACf,KACA,OACA,OACA,OACA,KACA,MACA,QACA,QACA,KACA,KACA,OACA,OACA,OACA,WACA,QACF,EAEMC,EAAW,CACf,OACA,OACF,EAGMC,EAAY,CAAE,MAAO,gBAAiB,EAGtCC,EAAkB,CACtB,QACA,KACA,WACA,OACA,OACA,OACA,SACA,UACA,OACA,MACA,WACA,SACA,QACA,OACA,QACA,OACA,QACA,OACF,EAEMC,EAAiB,CACrB,QACA,OACA,UACA,SACA,UACA,UACA,OACA,SACA,OACA,MACA,QACA,SACA,UACA,SACA,OACA,YACA,SACA,OACA,UACA,SACA,SACF,EAEMC,EAAgB,CACpB,WACA,KACA,UACA,MACA,MACA,QACA,QACA,gBACA,WACA,UACA,eACA,YACA,aACA,YACA,WACA,UACA,aACA,OACA,UACA,SACA,SACA,SACA,UACA,KACA,KACA,QACA,YACA,SACA,QACA,UACA,UACA,OACA,OACA,QACA,MACA,SACA,OACA,QACA,QACA,SACA,SACA,QACA,SACA,SACA,OACA,UACA,SACA,aACA,SACA,UACA,WACA,QACA,OACA,SACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,aACA,QACA,OACA,cACA,UACA,SACA,MACF,EAEMC,EAAiB,CACrB,QACA,QACA,QACA,QACA,KACA,KACA,KACA,MACA,YACA,KACA,KACA,QACA,SACA,QACA,SACA,KACA,WACA,KACA,QACA,QACA,OACA,QACA,WACA,OACA,QACA,SACA,SACA,MACA,QACA,OACA,SACA,MACA,SACA,MACA,OACA,OACA,OACA,SACA,KACA,SACA,KACA,QACA,MACA,KACA,UACA,YACA,YACA,YACA,YACA,OACA,OACA,QACA,MACA,MACA,OACA,KACA,QACA,WACA,OACA,KACA,OACA,WACA,SACA,OACA,UACA,KACA,OACA,MACA,OACA,SAEA,SACA,SACA,KACA,OACA,UACA,OACA,QACA,QACA,UACA,QACA,WACA,SACA,MACA,WACA,SACA,MACA,QACA,OACA,SACA,OACA,MACA,OACA,UAEA,MACA,QACA,SACA,SACA,QACA,MACA,SACA,KACF,EAEA,MAAO,CACL,KAAM,OACN,QAAS,CAAE,IAAK,EAChB,SAAU,CACR,SAAU,wBACV,QAASN,EACT,QAASC,EACT,SAAU,CACR,GAAGE,EACH,GAAGC,EAEH,MACA,QACA,GAAGC,EACH,GAAGC,CACL,CACF,EACA,SAAU,CACRR,EACAZ,EAAK,QAAQ,EACba,EACAH,EACAV,EAAK,kBACLK,EACAW,EACAV,EACAC,EACAC,EACAC,EACAP,CACF,CACF,CACF,CApYA,IAAAmB,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAEC,EAAM,CACf,IAAMC,EAAQD,EAAK,MAIbE,EAAsBF,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAAE,CAAE,MAAO,MAAO,CAAE,CAAE,CAAC,EACjFG,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,IACrBF,EAAmB,IACnBF,EAAM,SAASG,CAAY,EAC3B,gBAAkBH,EAAM,SAJC,UAI4B,EACvD,IAGIK,EAAQ,CACZ,UAAW,OACX,SAAU,CACR,CAAE,MAAO,oBAAqB,EAC9B,CAAE,MAAO,uBAAwB,CACnC,CAEF,EAKMC,EAAU,CACd,UAAW,SACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEP,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,eAXa,uDAWyB,MAC7C,IAAK,IACL,QAAS,GACX,EACAA,EAAK,kBAAkB,CACrB,MAAO,mCACP,IAAK,qBACP,CAAC,CACH,CACF,EAEMQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,uFAA2F,EACpG,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EAEMC,EAAe,CACnB,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,wFACwC,EAC5C,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAT,EAAK,QAAQO,EAAS,CAAE,UAAW,QAAS,CAAC,EAC7C,CACE,UAAW,SACX,MAAO,OACT,EACAL,EACAF,EAAK,oBACP,CACF,EAEMU,EAAa,CACjB,UAAW,QACX,MAAOT,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAC3C,UAAW,CACb,EAEMW,EAAiBV,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAAW,UAsEhEY,EAAW,CACf,QArEiB,CACjB,MACA,OACA,QACA,OACA,WACA,UACA,KACA,OACA,OACA,SACA,MACA,UACA,OACA,KACA,SACA,WACA,WACA,SACA,SACA,SACA,SACA,UACA,QACA,WACA,QACA,WACA,WACA,UACA,WACA,YACA,iBACA,gBAEA,UACA,UACA,WACA,gBACA,eAEA,SACF,EA6BE,KA3Bc,CACd,QACA,SACA,SACA,WACA,MACA,QACA,OACA,OACA,OACA,QACA,WACA,aACA,aACA,aACA,cAEA,QACA,SAEA,UACA,OACA,WACF,EAKE,QAAS,kBAET,SAAU,kzBASZ,EAEMC,EAAsB,CAC1BJ,EACAH,EACAJ,EACAF,EAAK,qBACLQ,EACAD,CACF,EAEMO,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,KACP,IAAK,IACP,EACA,CACE,cAAe,wBACf,IAAK,GACP,CACF,EACA,SAAUF,EACV,SAAUC,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUD,EACV,SAAUC,EAAoB,OAAO,CAAE,MAAO,CAAC,EAC/C,UAAW,CACb,CACF,CAAC,EACD,UAAW,CACb,EAEME,EAAuB,CAC3B,MAAO,IAAMV,EAAmB,eAAiBM,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUC,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOT,EACP,SAAUS,EACV,UAAW,CACb,EACA,CACE,MAAOD,EACP,YAAa,GACb,SAAU,CAAEX,EAAK,QAAQU,EAAY,CAAE,UAAW,gBAAiB,CAAC,CAAE,EACtE,UAAW,CACb,EAGA,CACE,UAAW,EACX,MAAO,GACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUE,EACV,UAAW,EACX,SAAU,CACRV,EACAF,EAAK,qBACLO,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUM,EACV,UAAW,EACX,SAAU,CACR,OACAV,EACAF,EAAK,qBACLO,EACAC,EACAF,CACF,CACF,CACF,CACF,EACAA,EACAJ,EACAF,EAAK,qBACLS,CACF,CACF,EAEA,MAAO,CACL,KAAM,IACN,QAAS,CAAE,GAAI,EACf,SAAUG,EAGV,kBAAmB,GACnB,QAAS,KACT,SAAU,CAAC,EAAE,OACXE,EACAC,EACAF,EACA,CACEJ,EACA,CACE,MAAOT,EAAK,SAAW,KACvB,SAAUY,CACZ,EACA,CACE,UAAW,QACX,cAAe,0BACf,IAAK,WACL,SAAU,CACR,CAAE,cAAe,oBAAqB,EACtCZ,EAAK,UACP,CACF,CACF,CAAC,EACH,QAAS,CACP,aAAcS,EACd,QAASF,EACT,SAAUK,CACZ,CACF,CACF,CA3TA,IAAAI,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MAIbE,EAAsBF,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAAE,CAAE,MAAO,MAAO,CAAE,CAAE,CAAC,EACjFG,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,cACrBF,EAAmB,IACnBF,EAAM,SAASG,CAAY,EAC3B,gBAAkBH,EAAM,SAJC,UAI4B,EACvD,IAEIK,EAAsB,CAC1B,UAAW,OACX,MAAO,oBACT,EAKMC,EAAU,CACd,UAAW,SACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEP,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,eAXa,uDAWyB,MAC7C,IAAK,IACL,QAAS,GACX,EACAA,EAAK,kBAAkB,CACrB,MAAO,mCACP,IAAK,qBACP,CAAC,CACH,CACF,EAEMQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,uFAA2F,EACpG,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EAEMC,EAAe,CACnB,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,wFACwC,EAC5C,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAT,EAAK,QAAQO,EAAS,CAAE,UAAW,QAAS,CAAC,EAC7C,CACE,UAAW,SACX,MAAO,OACT,EACAL,EACAF,EAAK,oBACP,CACF,EAEMU,EAAa,CACjB,UAAW,QACX,MAAOT,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAC3C,UAAW,CACb,EAEMW,EAAiBV,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAAW,UAGhEY,EAAoB,CACxB,UACA,UACA,MACA,SACA,MACA,gBACA,gBACA,kBACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,WACA,YACA,WACA,QACA,UACA,gBACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,KACA,kBACA,OACA,OACA,WACA,SACA,SACA,QACA,QACA,MACA,SACA,OACA,KACA,SACA,SACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,QACF,EAGMC,EAAiB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,QACF,EAEMC,EAAa,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,cACF,EAEMC,EAAiB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,UACF,EAaMC,EAAe,CACnB,KAAMH,EACN,QAASD,EACT,QAde,CACf,OACA,QACA,UACA,UACA,MACF,EASE,SANe,CAAE,SAAU,EAO3B,YAAaE,CACf,EAEMG,EAAoB,CACxB,UAAW,oBACX,UAAW,EACX,SAAU,CAER,MAAOF,CAAe,EACxB,MAAOd,EAAM,OACX,KACA,eACA,SACA,UACA,aACA,YACAD,EAAK,SACLC,EAAM,UAAU,kBAAkB,CAAC,CACvC,EAEMiB,EAAsB,CAC1BD,EACAR,EACAH,EACAJ,EACAF,EAAK,qBACLQ,EACAD,CACF,EAEMY,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,KACP,IAAK,IACP,EACA,CACE,cAAe,wBACf,IAAK,GACP,CACF,EACA,SAAUH,EACV,SAAUE,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUF,EACV,SAAUE,EAAoB,OAAO,CAAE,MAAO,CAAC,EAC/C,UAAW,CACb,CACF,CAAC,EACD,UAAW,CACb,EAEME,EAAuB,CAC3B,UAAW,WACX,MAAO,IAAMf,EAAmB,eAAiBM,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUK,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOb,EACP,SAAUa,EACV,UAAW,CACb,EACA,CACE,MAAOL,EACP,YAAa,GACb,SAAU,CAAED,CAAW,EACvB,UAAW,CACb,EAGA,CACE,MAAO,KACP,UAAW,CACb,EAEA,CACE,MAAO,IACP,eAAgB,GAChB,SAAU,CACRH,EACAC,CACF,CACF,EAGA,CACE,UAAW,EACX,MAAO,GACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUQ,EACV,UAAW,EACX,SAAU,CACRd,EACAF,EAAK,qBACLO,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUU,EACV,UAAW,EACX,SAAU,CACR,OACAd,EACAF,EAAK,qBACLO,EACAC,EACAF,CACF,CACF,CACF,CACF,EACAA,EACAJ,EACAF,EAAK,qBACLS,CACF,CACF,EAEA,MAAO,CACL,KAAM,MACN,QAAS,CACP,KACA,MACA,MACA,MACA,KACA,MACA,KACF,EACA,SAAUO,EACV,QAAS,KACT,iBAAkB,CAAE,oBAAqB,UAAW,EACpD,SAAU,CAAC,EAAE,OACXG,EACAC,EACAH,EACAC,EACA,CACET,EACA,CACE,MAAO,4MACP,IAAK,IACL,SAAUO,EACV,SAAU,CACR,OACAV,CACF,CACF,EACA,CACE,MAAON,EAAK,SAAW,KACvB,SAAUgB,CACZ,EACA,CACE,MAAO,CAEL,wDACA,MACA,KACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,CACF,CAAC,CACL,CACF,CArjBA,IAAAK,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAOC,EAAM,CACpB,IAAMC,EAAoB,CACxB,OACA,OACA,OACA,UACA,WACA,SACA,UACA,OACA,QACA,MACA,OACA,OACA,QACA,SACA,QACA,QACA,SACA,QACA,OACA,QACF,EACMC,EAAqB,CACzB,SACA,UACA,YACA,SACA,WACA,YACA,WACA,QACA,SACA,WACA,SACA,UACA,MACA,SACA,SACF,EACMC,EAAmB,CACvB,UACA,QACA,OACA,MACF,EACMC,EAAkB,CACtB,WACA,KACA,OACA,QACA,OACA,QACA,QACA,QACA,WACA,KACA,OACA,QACA,WACA,SACA,UACA,QACA,MACA,UACA,OACA,KACA,WACA,KACA,YACA,WACA,KACA,OACA,YACA,MACA,WACA,MACA,WACA,SACA,UACA,YACA,SACA,WACA,SACA,MACA,SACA,SACA,SACA,SACA,aACA,SACA,SACA,SACA,OACA,QACA,MACA,SACA,YACA,SACA,QACA,UACA,OACA,WACA,OACF,EACMC,EAAsB,CAC1B,MACA,QACA,MACA,YACA,QACA,QACA,KACA,aACA,SACA,OACA,MACA,SACA,QACA,OACA,OACA,OACA,MACA,SACA,MACA,UACA,KACA,KACA,UACA,UACA,SACA,SACA,MACA,YACA,UACA,MACA,OACA,QACA,OACA,OACF,EAEMC,EAAW,CACf,QAASF,EAAgB,OAAOC,CAAmB,EACnD,SAAUJ,EACV,QAASE,CACX,EACMI,EAAaP,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,oBAAqB,CAAC,EAC1EQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,iEAAqE,EAC9E,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EACMC,EAAkB,CACtB,UAAW,SACX,MAAO,KACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAK,CAAE,CAC9B,EACMC,EAAwBV,EAAK,QAAQS,EAAiB,CAAE,QAAS,IAAK,CAAC,EACvEE,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUL,CACZ,EACMM,EAAcZ,EAAK,QAAQW,EAAO,CAAE,QAAS,IAAK,CAAC,EACnDE,EAAsB,CAC1B,UAAW,SACX,MAAO,MACP,IAAK,IACL,QAAS,KACT,SAAU,CACR,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,MAAO,EAChBb,EAAK,iBACLY,CACF,CACF,EACME,EAA+B,CACnC,UAAW,SACX,MAAO,OACP,IAAK,IACL,SAAU,CACR,CAAE,MAAO,MAAO,EAChB,C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BACT,CACF,GAGIa,IAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACF,EAEMD,IAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAGMH,IAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAGMC,IAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAEMC,IAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,SAGF,EAAE,QAAQ,IC9kBV,SAASM,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACnB,MAAO,CACL,KAAM,OACN,QAAS,CAAE,OAAQ,EACnB,SAAU,CACR,CACE,UAAW,OACX,UAAW,GACX,MAAOC,EAAM,OACX,+BACA,8BACA,sBACF,CACF,EACA,CACE,UAAW,UACX,SAAU,CACR,CACE,MAAOA,EAAM,OACX,UACA,SACA,QACA,QACA,UACA,SACA,aACF,EACA,IAAK,GACP,EACA,CAAE,MAAO,UAAW,CACtB,CACF,EACA,CACE,UAAW,WACX,MAAO,MACP,IAAK,GACP,EACA,CACE,UAAW,WACX,MAAO,KACP,IAAK,GACP,EACA,CACE,UAAW,WACX,MAAO,KACP,IAAK,GACP,CACF,CACF,CACF,CA3DA,IAAAC,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAGC,EAAM,CAyEhB,IAAMC,EAAW,CACf,QA5BU,CACV,QACA,OACA,OACA,QACA,WACA,UACA,QACA,OACA,cACA,MACA,OACA,KACA,OACA,KACA,SACA,YACA,MACA,UACA,QACA,SACA,SACA,SACA,SACA,OACA,KACF,EAGE,KAnDY,CACZ,OACA,OACA,YACA,aACA,QACA,UACA,UACA,OACA,QACA,QACA,QACA,SACA,QACA,SACA,SACA,SACA,MACA,OACA,UACA,MACF,EA+BE,QA3Ee,CACf,OACA,QACA,OACA,KACF,EAuEE,SAtEgB,CAChB,SACA,MACA,QACA,UACA,OACA,OACA,MACA,OACA,MACA,QACA,QACA,UACA,OACA,UACA,QACF,CAuDA,EACA,MAAO,CACL,KAAM,KACN,QAAS,CAAE,QAAS,EACpB,SAAUA,EACV,QAAS,KACT,SAAU,CACRD,EAAK,oBACLA,EAAK,qBACL,CACE,UAAW,SACX,SAAU,CACRA,EAAK,kBACLA,EAAK,iBACL,CACE,MAAO,IACP,IAAK,GACP,CACF,CACF,EACA,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAOA,EAAK,YAAc,MAC1B,UAAW,CACb,EACAA,EAAK,aACP,CACF,EACA,CAAE,MAAO,IACT,EACA,CACE,UAAW,WACX,cAAe,OACf,IAAK,cACL,WAAY,GACZ,SAAU,CACRA,EAAK,WACL,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,WAAY,GACZ,SAAUC,EACV,QAAS,MACX,CACF,CACF,CACF,CACF,CACF,CA1IA,IAAAC,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAQC,EAAM,CACrB,IAAMC,EAAQD,EAAK,MACbE,EAAW,yBACjB,MAAO,CACL,KAAM,UACN,QAAS,CAAE,KAAM,EACjB,iBAAkB,GAClB,kBAAmB,GACnB,SAAU,CACR,QAAS,CACP,QACA,WACA,eACA,OACA,QACA,SACA,YACA,YACA,QACA,SACA,WACA,OACA,IACF,EACA,QAAS,CACP,OACA,QACA,MACF,CACF,EACA,SAAU,CACRF,EAAK,kBACLA,EAAK,kBACLA,EAAK,YACL,CACE,MAAO,cACP,MAAO,SACP,UAAW,CACb,EACA,CACE,MAAO,cACP,MAAO,4BACP,UAAW,CACb,EACA,CACE,MAAO,WACP,MAAO,KACP,IAAK,KACL,WAAY,GACZ,UAAW,CACb,EACA,CACE,MAAO,OACP,MAAO,OACP,WAAY,EACd,EACA,CACE,MAAO,SACP,MAAOC,EAAM,OAAOC,EAAUD,EAAM,UAAU,MAAM,CAAC,EACrD,UAAW,CACb,CACF,EACA,QAAS,CACP,QACA,OACF,CACF,CACF,CA3EA,IAAAE,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MACbE,EAAU,CACd,UAAW,SACX,UAAW,EACX,SAAU,CACR,CAAE,MAAO,sBAAuB,EAChC,CAAE,MAAOF,EAAK,SAAU,CAC1B,CACF,EACMG,EAAWH,EAAK,QAAQ,EAC9BG,EAAS,SAAW,CAClB,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,CACF,EACA,IAAMC,EAAY,CAChB,UAAW,WACX,SAAU,CACR,CAAE,MAAO,mBAAoB,EAC7B,CAAE,MAAO,aAAc,CACzB,CACF,EACMC,EAAW,CACf,UAAW,UACX,MAAO,8BACT,EACMC,EAAU,CACd,UAAW,SACX,SAAU,CAAEN,EAAK,gBAAiB,EAClC,SAAU,CACR,CACE,MAAO,MACP,IAAK,MACL,UAAW,EACb,EACA,CACE,MAAO,MACP,IAAK,MACL,UAAW,EACb,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,CACF,CACF,EACMO,EAAQ,CACZ,MAAO,KACP,IAAK,KACL,SAAU,CACRJ,EACAE,EACAD,EACAE,EACAJ,EACA,MACF,EACA,UAAW,CACb,EAEMM,EAAW,iBACXC,EAA0B,gBAC1BC,EAA0B,UAC1BC,EAAUV,EAAM,OACpBO,EAAUC,EAAyBC,CACrC,EACME,EAAaX,EAAM,OACvBU,EAAS,eAAgBA,EAAS,KAClCV,EAAM,UAAU,eAAe,CACjC,EAEA,MAAO,CACL,KAAM,iBACN,QAAS,CAAE,MAAO,EAClB,iBAAkB,GAClB,QAAS,KACT,SAAU,CACRE,EACA,CACE,UAAW,UACX,MAAO,MACP,IAAK,KACP,EACA,CACE,MAAOS,EACP,UAAW,OACX,OAAQ,CACN,IAAK,IACL,SAAU,CACRT,EACAI,EACAF,EACAD,EACAE,EACAJ,CACF,CACF,CACF,CACF,CACF,CACF,CAtHA,IAAAW,GAAAC,EAAA,KAAAC,MCsDA,SAASC,GAAWC,EAAIC,EAAcC,EAAO,CAC3C,OAAIA,IAAU,GAAW,GAElBF,EAAG,QAAQC,EAAcE,GACvBJ,GAAWC,EAAIC,EAAcC,EAAQ,CAAC,CAC9C,CACH,CAGA,SAASE,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAgB,iDAChBC,EAAmBD,EACrBR,GAAW,OAASQ,EAAgB,kBAAoBA,EAAgB,WAAY,OAAQ,CAAC,EAoE3FE,EAAW,CACf,QApEoB,CACpB,eACA,WACA,UACA,MACA,SACA,KACA,SACA,MACA,QACA,WACA,UACA,YACA,SACA,SACA,QACA,OACA,OACA,OACA,QACA,YACA,QACA,aACA,WACA,OACA,SACA,UACA,UACA,SACA,MACA,SACA,WACA,SACA,YACA,SACA,UACA,SACA,WACA,UACA,KACA,SACA,QACA,SACF,EA0BE,QAnBe,CACf,QACA,OACA,MACF,EAgBE,KAdY,CACZ,OACA,UACA,OACA,QACA,MACA,OACA,QACA,QACF,EAME,SA1BgB,CAChB,QACA,MACF,CAwBA,EAEMC,EAAa,CACjB,UAAW,OACX,MAAO,IAAMH,EACb,SAAU,CACR,CACE,MAAO,KACP,IAAK,KACL,SAAU,CAAE,MAAO,CACrB,CACF,CACF,EACMI,EAAS,CACb,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUF,EACV,UAAW,EACX,SAAU,CAAEJ,EAAK,oBAAqB,EACtC,WAAY,EACd,EAEA,MAAO,CACL,KAAM,OACN,QAAS,CAAE,KAAM,EACjB,SAAUI,EACV,QAAS,QACT,SAAU,CACRJ,EAAK,QACH,UACA,OACA,CACE,UAAW,EACX,SAAU,CACR,CAEE,MAAO,OACP,UAAW,CACb,EACA,CACE,UAAW,SACX,MAAO,YACT,CACF,CACF,CACF,EAEA,CACE,MAAO,wBACP,SAAU,SACV,UAAW,CACb,EACAA,EAAK,oBACL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Gf,WAAYA,EAAQ,kBACpB,IAAKA,EAAQ,GACf,CACF,EACA,YAAa,MACb,SAAU,CACR,CACE,MAAOA,EAAQ,MACf,IAAKA,EAAQ,IACb,KAAM,GACN,SAAU,CAAC,MAAM,CACnB,CACF,CACF,CACF,CACF,EACA8B,EACA,CAGE,cAAe,2BACjB,EACA,CAIE,MAAO,kBAAoBxC,EAAK,oBAC9B,gEAOF,YAAY,GACZ,MAAO,WACP,SAAU,CACRkC,EACAlC,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAOM,EAAY,UAAW,gBAAiB,CAAC,CAClF,CACF,EAEA,CACE,MAAO,SACP,UAAW,CACb,EACAwC,EAIA,CACE,MAAO,MAAQxC,EACf,UAAW,CACb,EACA,CACE,MAAO,CAAE,wBAAyB,EAClC,UAAW,CAAE,EAAG,gBAAiB,EACjC,SAAU,CAAE4B,CAAO,CACrB,EACAU,EACAH,EACAN,EACAY,EACA,CACE,MAAO,QACT,CACF,CACF,CACF,CA3vBA,IAAMxC,GACAU,IA2CAC,IAUAmB,GAoDAC,GAWAO,GAsBAzB,IAaAD,IAxJN+B,GAAAC,EAAA,KAAAC,IAAM7C,GAAW,2BACXU,IAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,SACF,EACMC,IAAW,CACf,OACA,QACA,OACA,YACA,MACA,UACF,EAGMmB,GAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,aACF,EAEMC,GAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,UACF,EAEMO,GAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,UACF,EAEMzB,IAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,QACF,EAEMD,IAAY,CAAC,EAAE,OACnB0B,GACAR,GACAC,EACF,ICpJA,SAASe,GAAKC,EAAM,CAClB,IAAMC,EAAY,CAChB,UAAW,OACX,MAAO,8BACP,UAAW,IACb,EACMC,EAAc,CAClB,MAAO,YACP,UAAW,cACX,UAAW,CACb,EACMC,EAAW,CACf,OACA,QACA,MACF,EAMMC,EAAgB,CACpB,MAAO,UACP,cAAeD,EAAS,KAAK,GAAG,CAClC,EAEA,MAAO,CACL,KAAM,OACN,SAAS,CACP,QAASA,CACX,EACA,SAAU,CACRF,EACAC,EACAF,EAAK,kBACLI,EACAJ,EAAK,cACLA,EAAK,oBACLA,EAAK,oBACP,EACA,QAAS,KACX,CACF,CAlDA,IAAAK,GAAAC,EAAA,KAAAC,MC4CA,SAASC,GAAOC,EAAM,CACpB,IAAMC,EAAW,CACf,QACE,wYAKF,SACE,kEACF,QACE,iBACJ,EACMC,EAAsB,CAC1B,UAAW,UACX,MAAO,mCACP,OAAQ,CAAE,SAAU,CAClB,CACE,UAAW,SACX,MAAO,MACT,CACF,CAAE,CACJ,EACMC,EAAQ,CACZ,UAAW,SACX,MAAOH,EAAK,oBAAsB,GACpC,EAGMI,EAAQ,CACZ,UAAW,QACX,MAAO,OACP,IAAK,KACL,SAAU,CAAEJ,EAAK,aAAc,CACjC,EACMK,EAAW,CACf,UAAW,WACX,MAAO,MAAQL,EAAK,mBACtB,EACMM,EAAS,CACb,UAAW,SACX,SAAU,CACR,CACE,MAAO,MACP,IAAK,cACL,SAAU,CACRD,EACAD,CACF,CACF,EAIA,CACE,MAAO,IACP,IAAK,IACL,QAAS,KACT,SAAU,CAAEJ,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,IACP,IAAK,IACL,QAAS,KACT,SAAU,CACRA,EAAK,iBACLK,EACAD,CACF,CACF,CACF,CACF,EACAA,EAAM,SAAS,KAAKE,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CACF,EACA,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACb,EACA,aAAc,CACZ,UAAW,OACX,MAAO,2BACT,CACF,GAGI0B,IAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACF,EAEMT,IAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAGMU,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAGMC,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAEMN,IAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,SAGF,EAAE,QAAQ,EAGJlB,IAAmBuB,GAAe,OAAOC,EAAe,ICllB9D,SAASK,GAAIC,EAAM,CACjB,IAAMC,EAAuB,WACvBC,EAAuB,WACvBC,EAAgB,CACpB,MAAOF,EACP,IAAKC,EACL,SAAU,CAAE,MAAO,CACrB,EACME,EAAW,CACfJ,EAAK,QAAQ,QAAUC,EAAuB,IAAK,GAAG,EACtDD,EAAK,QACH,KAAOC,EACPC,EACA,CACE,SAAU,CAAEC,CAAc,EAC1B,UAAW,EACb,CACF,CACF,EACA,MAAO,CACL,KAAM,MACN,SAAU,CACR,SAAUH,EAAK,oBACf,QAAS,iBACT,QAAS,0FACT,SAEE,slCAcJ,EACA,SAAUI,EAAS,OAAO,CACxB,CACE,UAAW,WACX,cAAe,WACf,IAAK,MACL,SAAU,CACRJ,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,mDAAoD,CAAC,EAC5F,CACE,UAAW,SACX,MAAO,MACP,eAAgB,GAChB,SAAUI,CACZ,CACF,EAAE,OAAOA,CAAQ,CACnB,EACAJ,EAAK,cACLA,EAAK,iBACLA,EAAK,kBACL,CACE,UAAW,SACX,MAAOC,EACP,IAAKC,EACL,SAAU,CAAEC,CAAc,EAC1B,UAAW,CACb,CACF,CAAC,CACH,CACF,CA7EA,IAAAE,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAASC,EAAM,CAEtB,IAAMC,EAAW,CACf,UAAW,WACX,SAAU,CACR,CACE,MAAO,SAAWD,EAAK,oBAAsB,MAC7C,SAAU,CAAEA,EAAK,gBAAiB,CACpC,EACA,CAAE,MAAO,gBAAiB,CAC5B,CACF,EAEME,EAAe,CACnB,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACRF,EAAK,iBACLC,CACF,CACF,EAEME,EAAO,CACX,UAAW,WACX,MAAO,eACP,IAAK,KACL,SAAU,CAAE,SACR,gPAG+D,EACnE,SAAU,CAAEF,CAAS,CACvB,EAEMG,EAAa,CAAE,MAAO,IAAMJ,EAAK,oBAAsB,iBAAkB,EAEzEK,EAAO,CACX,UAAW,OACX,MAAO,YACP,IAAK,IACL,SAAU,CACR,SAAU,UACV,QAAS,QACX,CACF,EAEMC,EAAS,CACb,UAAW,UACX,MAAO,WACP,IAAK,IACL,SAAU,CAAEL,CAAS,CACvB,EACA,MAAO,CACL,KAAM,WACN,QAAS,CACP,KACA,MACA,MACF,EACA,SAAU,CACR,SAAU,SACV,QAAS,2HAEX,EACA,SAAU,CACRD,EAAK,kBACLC,EACAC,EACAC,EACAC,EACAC,EACAC,CACF,CACF,CACF,CAnFA,IAAAC,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAASC,EAAM,CACtB,IAAMC,EAAQD,EAAK,MACbE,EAAc,CAClB,MAAO,gBACP,IAAK,IACL,YAAa,MACb,UAAW,CACb,EACMC,EAAkB,CACtB,MAAO,cACP,IAAK,GACP,EACMC,EAAO,CACX,UAAW,OACX,SAAU,CAER,CAAE,MAAO,+BAAgC,EACzC,CAAE,MAAO,+BAAgC,EAEzC,CACE,MAAO,MACP,IAAK,WACP,EACA,CACE,MAAO,MACP,IAAK,WACP,EACA,CAAE,MAAO,OAAQ,EACjB,CACE,MAAO,kBAGP,SAAU,CACR,CACE,MAAO,cACP,IAAK,QACP,CACF,EACA,UAAW,CACb,CACF,CACF,EACMC,EAAO,CACX,UAAW,SACX,MAAO,kCACP,IAAK,OACL,WAAY,EACd,EACMC,EAAiB,CACrB,MAAO,eACP,YAAa,GACb,SAAU,CACR,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,EACd,EACA,CACE,UAAW,OACX,MAAO,OACP,IAAK,IACL,aAAc,EAChB,CACF,CACF,EACMC,EAAa,0BACbC,EAAO,CACX,SAAU,CAGR,CACE,MAAO,iBACP,UAAW,CACb,EAEA,CACE,MAAO,gEACP,UAAW,CACb,EACA,CACE,MAAOP,EAAM,OAAO,YAAaM,EAAY,YAAY,EACzD,UAAW,CACb,EAEA,CACE,MAAO,wBACP,UAAW,CACb,EAEA,CACE,MAAO,iBACP,UAAW,CACb,CACF,EACA,YAAa,GACb,SAAU,CACR,CAEE,MAAO,UAAW,EACpB,CACE,UAAW,SACX,UAAW,EACX,MAAO,MACP,IAAK,MACL,aAAc,GACd,UAAW,EACb,EACA,CACE,UAAW,OACX,UAAW,EACX,MAAO,SACP,IAAK,MACL,aAAc,GACd,WAAY,EACd,EACA,CACE,UAAW,SACX,UAAW,EACX,MAAO,SACP,IAAK,MACL,aAAc,GACd,WAAY,EACd,CACF,CACF,EACME,EAAO,CACX,UAAW,SACX,SAAU,CAAC,EACX,SAAU,CACR,CACE,MAAO,aACP,IAAK,MACP,EACA,CACE,MAAO,cACP,IAAK,OACP,CACF,CACF,EACMC,EAAS,CACb,UAAW,WACX,SAAU,CAAC,EACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,aACP,IAAK,IACL,UAAW,CACb,CACF,CACF,EAKMC,EAAsBX,EAAK,QAAQS,EAAM,CAAE,SAAU,CAAC,CAAE,CAAC,EACzDG,EAAsBZ,EAAK,QAAQU,EAAQ,CAAE,SAAU,CAAC,CAAE,CAAC,EACjED,EAAK,SAAS,KAAKG,CAAmB,EACtCF,EAAO,SAAS,KAAKC,CAAmB,EAExC,IAAIE,EAAc,CAChBX,EACAM,CACF,EAEA,OACEC,EACAC,EACAC,EACAC,CACF,EAAE,QAAQE,GAAK,CACbA,EAAE,SAAWA,EAAE,SAAS,OAAOD,CAAW,CAC5C,CAAC,EAEDA,EAAcA,EAAY,OAAOJ,EAAMC,CAAM,EA+BtC,CACL,KAAM,WACN,QAAS,CACP,KACA,SACA,KACF,EACA,SAAU,CApCG,CACb,UAAW,UACX,SAAU,CACR,CACE,MAAO,UACP,IAAK,IACL,SAAUG,CACZ,EACA,CACE,MAAO,uBACP,SAAU,CACR,CAAE,MAAO,SAAU,EACnB,CACE,MAAO,IACP,IAAK,MACL,SAAUA,CACZ,CACF,CACF,CACF,CACF,EAkBIX,EACAG,EACAI,EACAC,EAnBe,CACjB,UAAW,QACX,MAAO,SACP,SAAUG,EACV,IAAK,GACP,EAgBIT,EACAD,EACAK,EACAF,CACF,CACF,CACF,CA9OA,IAAAS,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAWC,EAAM,CACxB,IAAMC,EAAY,CAChB,UAAW,WACX,MAAO,sEACT,EACMC,EAAgB,yBAuJhBC,EAAW,CACf,oBAAqB,CACnB,OACA,OACF,EACA,SAAUD,EACV,QA3IU,CACV,QACA,SACA,SACA,UACA,QACA,SACA,MACA,QACA,WACA,SACA,UACA,KACA,KACA,SACA,OACA,OACA,OACA,QACA,SACA,MACA,OACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,WACA,SACA,YACA,OACA,gBACA,KACA,SACA,YACA,WACA,WACA,SACA,OACA,OACA,KACA,MACA,QACA,SACA,QACA,SACA,WACA,SACA,UACA,kBACA,WACA,aACA,UACA,OACA,YACA,OACA,SACA,SACA,WACA,mBACA,cACA,WACA,YACA,YACA,YACA,UACA,WACA,UACA,QACA,uBACA,WACA,oBACA,oBACA,kBACA,cACA,kBACA,WACA,WACA,YACA,oBACA,eACA,sBACA,gBACA,SACA,SACA,SACA,oBACA,UACA,WACA,mBACA,kBACA,QACA,eACA,4BACA,iBACA,oBACA,2BACA,YACA,eACA,gBACA,UACA,aACA,uBACA,0BACA,wBACA,uBACA,gBACA,mBACA,YACA,aACA,gBACA,iBACA,eACF,EAyBE,QAxBe,CACf,QACA,OACA,QACA,OACA,MACA,MACA,KACA,MACF,EAgBE,SAfgB,CAChB,kBACA,mBACA,gBACA,iBACA,eACF,EAUE,KA/JY,CACZ,MACA,QACA,OACA,WACA,SACA,QACA,OACA,SACA,UACA,UACA,OACA,OACA,OACA,OACA,OACF,CAgJA,EACME,EAAiB,CACrB,SAAUF,EACV,QAAS,CACP,aACA,SACA,YACA,iBACF,CACF,EACA,MAAO,CACL,KAAM,cACN,QAAS,CACP,KACA,OACA,QACA,UACA,eACF,EACA,SAAUC,EACV,QAAS,KACT,SAAU,CACRF,EACAD,EAAK,oBACLA,EAAK,qBACLA,EAAK,cACLA,EAAK,kBACLA,EAAK,iBACL,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAO,KACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEA,EAAK,gBAAiB,CACpC,CACF,CACF,EACA,CACE,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,gFACgC,EACpC,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAA,EAAK,QAAQA,EAAK,kBAAmB,CAAE,UAAW,QAAS,CAAC,EAC5D,CACE,UAAW,SACX,MAAO,QACP,IAAK,IACL,QAAS,KACX,EACAA,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CACE,UAAW,QACX,MAAO,IAAMI,EAAe,QAAQ,KAAK,GAAG,EAAI,OAChD,IAAK,SACL,WAAY,GACZ,SAAUA,EACV,SAAU,CAAEJ,EAAK,qBAAsB,CACzC,EACA,CACE,MAAO,MAAQA,EAAK,oBACpB,UAAW,CACb,CACF,CACF,CACF,CA1PA,IAAAK,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAW,CACf,MACA,SACA,QACA,MACA,QACA,OACA,UACA,QACA,QACA,SACA,QACA,QACA,QACA,OACA,QACA,MACA,SACA,QACA,WACA,UACA,WACA,MACA,QACA,WACA,UACA,UACA,SACA,MACA,KACA,OACA,OACA,OACA,QACA,WACA,aACA,YACA,cACA,WACA,aACA,MACA,OACA,OACA,SACA,OACA,MACA,QACA,SACA,QACA,MACA,UACA,OACA,SACA,WACA,OACA,WACA,WACA,WACA,gBACA,gBACA,aACA,WACA,eACA,eACA,YACA,cACA,UACA,cACA,iBACA,mBACA,cACA,WACA,WACA,WACA,gBACA,gBACA,aACA,cACA,aACA,QACA,OACA,SACA,OACA,OACA,KACA,MACA,KACA,QACA,MACA,QACA,OACA,OACA,OACA,OACA,KACA,UACA,SACA,OACA,SACA,QACA,YACA,MACA,QACA,KACA,KACA,MACA,QACA,SACA,SACA,SACA,SACA,KACA,KACA,OACA,KACA,MACA,MACA,OACA,UACA,KACA,MACA,MACA,OACA,UACA,OACA,MACA,MACA,QACA,SACA,YACA,OACA,MACA,KACA,YACA,KACA,KACA,OACA,OACA,UACA,WACA,WACA,WACA,OACA,OACA,MACA,SACA,UACA,QACA,SACA,UACA,YACA,SACA,QACA,MACA,SACA,OACA,UACA,SACA,SACA,SACA,QACA,OACA,WACA,aACA,YACA,UACA,cACA,cACA,WACA,aACA,aACA,QACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,SACA,aACA,OACA,SACA,QACA,UACA,OACA,QACA,OACA,QACA,QACA,MACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,OACA,UACA,MACA,OACA,OACA,QACA,KACA,WACA,KACA,UACA,QACA,QACA,SACA,SACA,SACA,UACA,QACA,QACA,MACA,QACA,SACA,MACA,OACA,UACA,YACA,OACA,OACA,QACA,QACA,MACA,MACA,KACF,EAGMC,EAAkB,uBAClBC,EAAgB,CACpB,SAAU,SACV,QAASF,EAAS,KAAK,GAAG,CAC5B,EACMG,EAAQ,CACZ,UAAW,QACX,MAAO,UACP,IAAK,MACL,SAAUD,CACZ,EACME,EAAS,CACb,MAAO,OACP,IAAK,IAEP,EACMC,EAAM,CAAE,SAAU,CACtB,CAAE,MAAO,MAAO,EAChB,CAAE,MAAON,EAAM,OACb,iDAGA,uBACF,CAAE,EACF,CACE,MAAO,gBACP,UAAW,CACb,CACF,CAAE,EACIO,EAAkB,CACtBR,EAAK,iBACLK,EACAE,CACF,EACME,EAAe,CACnB,IACA,KACA,KACA,KACA,IACA,IACA,GACF,EAMMC,EAAmB,CAACC,EAAQC,EAAMC,EAAQ,QAAU,CACxD,IAAMC,EAAUD,IAAU,MACtBA,EACAZ,EAAM,OAAOY,EAAOD,CAAI,EAC5B,OAAOX,EAAM,OACXA,EAAM,OAAO,MAAOU,EAAQ,GAAG,EAC/BC,EACA,oBACAE,EACA,oBACAD,EACAV,CACF,CACF,EAMMY,EAAY,CAACJ,EAAQC,EAAMC,IACxBZ,EAAM,OACXA,EAAM,OAAO,MAAOU,EAAQ,GAAG,EAC/BC,EACA,oBACAC,EACAV,CACF,EAEIa,EAAwB,CAC5BT,EACAP,EAAK,kBACLA,EAAK,QACH,OACA,OACA,CAAE,eAAgB,EAAK,CACzB,EACAM,EACA,CACE,UAAW,SACX,SAAUE,EACV,SAAU,CACR,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACb,EACA,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACb,EACA,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACb,EACA,CACE,MAAO,kBACP,IAAK,MACL,UAAW,CACb,EACA,CACE,MAAO,gBACP,IAAK,IACL,UAAW,CACb,EACA,CACE,MAAO,UACP,IAAK,IACL,UAAW,CACb,EACA,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAER,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEA,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,UACP,UAAW,CACb,EACA,CACE,MAAO,eACP,UAAW,CACb,CACF,CACF,EACA,CACE,UAAW,SA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ACA,OACA,UACA,QACA,UACA,QACA,MACA,UACA,OACA,SACA,OACA,KACA,aACA,aACA,YACA,MACA,UACA,YACA,QACA,WACA,OACA,UACA,QACA,MACA,QACA,SACA,KACA,UACA,YACA,SACA,WACA,OACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,MACA,OACA,QACA,MACA,OACF,EAEMC,EAAY,CAGhB,UACA,iBACA,qBACA,kBACA,gBACA,cACA,iBACA,2BACA,yBACA,kBACA,yBACA,eACA,YACA,oBACA,sBACA,kBACA,gBACA,iBACA,YACA,qBACA,iBACA,eACA,mBACA,2BACA,mBACA,kBACA,gBACA,iBACA,mBACA,mBACA,uBACA,sBACA,gBACA,oBACA,iBACA,aACA,iBACA,yBACA,2BACA,kCACA,6BACA,0BACA,oBACA,4BACA,yBACA,wBACA,gBACA,mBACA,mBACA,sBACA,cACA,gBACA,gBACA,UACA,aACA,aACA,mBACA,cACA,mBACA,WACA,WACA,aACA,oBACA,YACA,qBACA,2BACA,sBAGA,cACA,aACA,UACA,QACA,YACA,WACA,oBACA,eACA,aACA,YACA,cACA,WACA,gBACA,UAGA,YACA,yBACA,SACA,kBACA,OACA,SACA,UACF,EAsBMC,EAAW,CACf,QAASF,EACT,SAhBgBG,GAAU,CAE1B,IAAMC,EAAS,CAAC,EAChB,OAAAD,EAAM,QAAQE,GAAQ,CACpBD,EAAO,KAAKC,CAAI,EACZA,EAAK,YAAY,IAAMA,EACzBD,EAAO,KAAKC,EAAK,YAAY,CAAC,EAE9BD,EAAO,KAAKC,EAAK,YAAY,CAAC,CAElC,CAAC,EACMD,CACT,GAIoBL,CAAQ,EAC1B,SAAUE,CACZ,EAIMK,EAAqBH,GAClBA,EAAM,IAAIE,GACRA,EAAK,QAAQ,SAAU,EAAE,CACjC,EAGGE,EAAmB,CAAE,SAAU,CACnC,CACE,MAAO,CACL,MACAxB,EAAM,OAAOa,EAAY,GAAG,EAE5Bb,EAAM,OAAO,MAAOuB,EAAkBL,CAAS,EAAE,KAAK,MAAM,EAAG,MAAM,EACrEf,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,aACL,CACF,CACF,CAAE,EAEIsB,EAAqBzB,EAAM,OAAOE,EAAU,YAAY,EAExDwB,EAAsC,CAAE,SAAU,CACtD,CACE,MAAO,CACL1B,EAAM,OACJ,KACAA,EAAM,UAAU,aAAa,CAC/B,EACAyB,CACF,EACA,MAAO,CAAE,EAAG,mBAAqB,CACnC,EACA,CACE,MAAO,CACL,KACA,OACF,EACA,MAAO,CAAE,EAAG,mBAAqB,CACnC,EACA,CACE,MAAO,CACLtB,EACAH,EAAM,OACJ,KACAA,EAAM,UAAU,aAAa,CAC/B,EACAyB,CACF,EACA,MAAO,CACL,EAAG,cACH,EAAG,mBACL,CACF,EACA,CACE,MAAO,CACLtB,EACAH,EAAM,OACJ,KACAA,EAAM,UAAU,aAAa,CAC/B,CACF,EACA,MAAO,CAAE,EAAG,aAAe,CAC7B,EACA,CACE,MAAO,CACLG,EACA,KACA,OACF,EACA,MAAO,CACL,EAAG,cACH,EAAG,mBACL,CACF,CACF,CAAE,EAEIwB,EAAiB,CACrB,MAAO,OACP,MAAO3B,EAAM,OAAOE,EAAUF,EAAM,UAAU,GAAG,EAAGA,EAAM,UAAU,QAAQ,CAAC,CAC/E,EACM4B,EAAc,CAClB,UAAW,EACX,MAAO,KACP,IAAK,KACL,SAAUT,EACV,SAAU,CACRQ,EACAvB,EACAsB,EACA3B,EAAK,qBACLe,EACAC,EACAS,CACF,CACF,EACMK,EAAkB,CACtB,UAAW,EACX,MAAO,CACL,KAEA7B,EAAM,OAAO,wBAAyBuB,EAAkBN,CAAG,EAAE,KAAK,MAAM,EAAG,IAAKM,EAAkBL,CAAS,EAAE,KAAK,MAAM,EAAG,MAAM,EACjIhB,EACAF,EAAM,OAAOa,EAAY,GAAG,EAC5Bb,EAAM,UAAU,QAAQ,CAC1B,EACA,MAAO,CAAE,EAAG,uBAAyB,EACrC,SAAU,CAAE4B,CAAY,CAC1B,EACAA,EAAY,SAAS,KAAKC,CAAe,EAEzC,IAAMC,EAAqB,CACzBH,EACAD,EACA3B,EAAK,qBACLe,EACAC,EACAS,CACF,EAEMO,EAAa,CACjB,MAAO/B,EAAM,OAAO,SAAUG,CAAyB,EACvD,WAAY,OACZ,IAAK,IACL,SAAU,OACV,SAAU,CACR,QAASa,EACT,QAAS,CACP,MACA,OACF,CACF,EACA,SAAU,CACR,CACE,MAAO,KACP,IAAK,IACL,SAAU,CACR,QAASA,EACT,QAAS,CACP,MACA,OACF,CACF,EACA,SAAU,CACR,OACA,GAAGc,CACL,CACF,EACA,GAAGA,EACH,CACE,MAAO,OACP,MAAO3B,CACT,CACF,CACF,EAEA,MAAO,CACL,iBAAkB,GAClB,SAAUgB,EACV,SAAU,CACRY,EACAhC,EAAK,kBACLA,EAAK,QAAQ,KAAM,GAAG,EACtBA,EAAK,QACH,OACA,OACA,CAAE,SAAU,CACV,CACE,MAAO,SACP,MAAO,YACT,CACF,CAAE,CACJ,EACA,CACE,MAAO,uBACP,SAAU,kBACV,OAAQ,CACN,MAAO,UACP,IAAKA,EAAK,iBACV,SAAU,CACR,CACE,MAAO,MACP,MAAO,OACP,WAAY,EACd,CACF,CACF,CACF,EACAM,EACA,CACE,MAAO,oBACP,MAAO,UACT,EACAD,EACAyB,EACAH,EACA,CACE,MAAO,CACL,QACA,KACAxB,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,mBACL,CACF,EACAsB,EACA,CACE,MAAO,WACP,UAAW,EACX,cAAe,cACf,IAAK,OACL,WAAY,GACZ,QAAS,UACT,SAAU,CACR,CAAE,cAAe,KAAO,EACxBzB,EAAK,sBACL,CACE,MAAO,KACP,WAAY,EACd,EACA,CACE,MAAO,SACP,MAAO,MACP,IAAK,MACL,aAAc,GACd,WAAY,GACZ,SAAUoB,EACV,SAAU,CACR,OACAf,EACAsB,EACA3B,EAAK,qBACLe,EACAC,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,QACP,SAAU,CACR,CACE,cAAe,OACf,QAAS,OACX,EACA,CACE,cAAe,wBACf,QAAS,QACX,CACF,EACA,UAAW,EACX,IAAK,KACL,WAAY,GACZ,SAAU,CACR,CAAE,cAAe,oBAAqB,EACtChB,EAAK,qBACP,CACF,EAIA,CACE,cAAe,YACf,UAAW,EACX,IAAK,IACL,QAAS,OACT,SAAU,CAAEA,EAAK,QAAQA,EAAK,sBAAuB,CAAE,MAAO,aAAc,CAAC,CAAE,CACjF,EACA,CACE,cAAe,MACf,UAAW,EACX,IAAK,IACL,SAAU,CAER,CACE,MAAO,0BACP,MAAO,SACT,EAEAA,EAAK,qBACP,CACF,EACAe,EACAC,CACF,CACF,CACF,CAlmBA,IAAAiB,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAYC,EAAM,CACzB,MAAO,CACL,KAAM,eACN,YAAa,MACb,SAAU,CACR,CACE,MAAO,cACP,IAAK,MACL,YAAa,MACb,SAAU,CAGR,CACE,MAAO,OACP,IAAK,OACL,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,IACL,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,IACL,KAAM,EACR,EACAA,EAAK,QAAQA,EAAK,iBAAkB,CAClC,QAAS,KACT,UAAW,KACX,SAAU,KACV,KAAM,EACR,CAAC,EACDA,EAAK,QAAQA,EAAK,kBAAmB,CACnC,QAAS,KACT,UAAW,KACX,SAAU,KACV,KAAM,EACR,CAAC,CACH,CACF,CACF,CACF,CACF,CAnDA,IAAAC,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAUC,EAAM,CACvB,MAAO,CACL,KAAM,aACN,QAAS,CACP,OACA,KACF,EACA,kBAAmB,EACrB,CACF,CAhBA,IAAAC,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAOC,EAAM,CACpB,IAAMC,EAAQD,EAAK,MACbE,EAAW,qCACXC,EAAiB,CACrB,MACA,KACA,SACA,QACA,QACA,QACA,OACA,QACA,WACA,MACA,MACA,OACA,OACA,SACA,UACA,MACA,OACA,SACA,KACA,SACA,KACA,KACA,SACA,QACA,cACA,MACA,KACA,OACA,QACA,SACA,MACA,QACA,OACA,OACF,EAsGMC,EAAW,CACf,SAAU,sBACV,QAASD,EACT,SAvGgB,CAChB,aACA,MACA,MACA,MACA,QACA,MACA,OACA,aACA,YACA,QACA,WACA,MACA,cACA,UACA,UACA,UACA,OACA,MACA,SACA,YACA,OACA,OACA,SACA,QACA,SACA,YACA,UACA,UACA,UACA,OACA,OACA,MACA,KACA,QACA,MACA,aACA,aACA,OACA,MACA,OACA,SACA,MACA,MACA,aACA,MACA,OACA,SACA,MACA,OACA,MACA,MACA,QACA,WACA,QACA,OACA,WACA,QACA,MACA,UACA,QACA,SACA,eACA,MACA,MACA,QACA,QACA,OACA,OACA,KACF,EAkCE,QAhCe,CACf,YACA,WACA,QACA,OACA,iBACA,MACF,EA0BE,KArBY,CACZ,MACA,WACA,YACA,OACA,OACA,UACA,UACA,WACA,WACA,MACA,QACA,OACA,OACF,CAQA,EAEME,EAAS,CACb,UAAW,OACX,MAAO,gBACT,EAEMC,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUF,EACV,QAAS,GACX,EAEMG,EAAkB,CACtB,MAAO,OACP,UAAW,CACb,EAEMC,EAAS,CACb,UAAW,SACX,SAAU,CAAER,EAAK,gBAAiB,EAClC,SAAU,CACR,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACRA,EAAK,iBACLK,CACF,EACA,UAAW,EACb,EACA,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACRL,EAAK,iBACLK,CACF,EACA,UAAW,EACb,EACA,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACRL,EAAK,iBACLK,EACAE,EACAD,CACF,CACF,EACA,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACRN,EAAK,iBACLK,EACAE,EACAD,CACF,CACF,EACA,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACb,EACA,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACb,EACA,CACE,MAAO,4BACP,IAAK,GACP,EACA,CACE,MAAO,4BACP,IAAK,GACP,EACA,CACE,MAAO,4BACP,IAAK,IACL,SAAU,CACRN,EAAK,iBACLO,EACAD,CACF,CACF,EACA,CACE,MAAO,4BACP,IAAK,IACL,SAAU,CACRN,EAAK,iBACLO,EACAD,CACF,CACF,EACAN,EAAK,iBACLA,EAAK,iBACP,CACF,EAGMS,EAAY,kBACZC,EAAa,QAAQD,CAAS,UAAUA,CAAS,SAASA,CAAS,OAMnEE,EAAY,OAAOR,EAAe,KAAK,GAAG,CAAC,GAC3CS,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CAWR,CACE,MAAO,QAAQH,CAAS,MAAMC,CAAU,eAAeD,CAAS,YAAYE,CAAS,GACvF,EACA,CACE,MAAO,IAAID,CAAU,QACvB,EAQA,CACE,MAAO,0CAA0CC,CAAS,GAC5D,EACA,CACE,MAAO,4BAA4BA,CAAS,GAC9C,EACA,CACE,MAAO,6BAA6BA,CAAS,GAC/C,EACA,CACE,MAAO,mCAAmCA,CAAS,GACrD,EAIA,CACE,MAAO,OAAOF,CAAS,WAAWE,CAAS,GAC7C,CACF,CACF,EACME,EAAe,CACnB,UAAW,UACX,MAAOZ,EAAM,UAAU,SAAS,EAChC,IAAK,IACL,SAAUG,EACV,SAAU,CACR,CACE,MAAO,SACT,EAEA,CACE,MAAO,IACP,IAAK,OACL,eAAgB,EAClB,CACF,CACF,EACMU,EAAS,CACb,UAAW,SACX,SAAU,CAER,CACE,UAAW,GACX,MAAO,UACP,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAUV,EACV,SAAU,CACR,OACAC,EACAO,EACAJ,EACAR,EAAK,iBACP,CACF,CACF,CACF,EACA,OAAAM,EAAM,SAAW,CACfE,EACAI,EACAP,CACF,EAEO,CACL,KAAM,SACN,QAAS,CACP,KACA,MACA,SACF,EACA,aAAc,GACd,SAAUD,EACV,QAAS,cACT,SAAU,CACRC,EACAO,EACA,CAEE,MAAO,UACT,EACA,CAGE,cAAe,KACf,UAAW,CACb,EACAJ,EACAK,EACAb,EAAK,kBACL,CACE,MAAO,CACL,QAAS,MACTE,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CAAEY,CAAO,CACrB,EACA,CACE,SAAU,CACR,CACE,MAAO,CACL,UAAW,MACXZ,EAAU,MACV,QAASA,EAAS,OACpB,CACF,EACA,CACE,MAAO,CACL,UAAW,MACXA,CACF,CACF,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,cACH,EAAG,uBACL,CACF,EACA,CACE,UAAW,OACX,MAAO,WACP,IAAK,UACL,SAAU,CACRU,EACAE,EACAN,CACF,CACF,CACF,CACF,CACF,CA/aA,IAAAO,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAWC,EAAM,CACxB,MAAO,CACL,QAAS,CAAE,OAAQ,EACnB,SAAU,CACR,CACE,UAAW,cACX,OAAQ,CAGN,IAAK,MACL,OAAQ,CACN,IAAK,IACL,YAAa,QACf,CACF,EACA,SAAU,CACR,CAAE,MAAO,eAAgB,EACzB,CAAE,MAAO,kBAAmB,CAC9B,CACF,CACF,CACF,CACF,CA7BA,IAAAC,GAAAC,EAAA,KAAAC,MCUA,SAASC,GAAEC,EAAM,CACf,IAAMC,EAAQD,EAAK,MAObE,EAAW,uDACXC,EAAkBF,EAAM,OAE5B,gDAEA,0CAEA,+CACF,EACMG,EAAe,mEACfC,EAAiBJ,EAAM,OAC3B,OACA,OACA,OACA,QACA,KACA,GACF,EAEA,MAAO,CACL,KAAM,IAEN,SAAU,CACR,SAAUC,EACV,QACE,kDACF,QACE,wFAEF,SAEE,ghCAqBJ,EAEA,SAAU,CAERF,EAAK,QACH,KACA,IACA,CAAE,SAAU,CACV,CAME,MAAO,SACP,MAAO,YACP,OAAQ,CACN,IAAKC,EAAM,UAAUA,EAAM,OAEzB,yBAEA,WACF,CAAC,EACD,WAAY,EACd,CACF,EACA,CAGE,MAAO,SACP,MAAO,SACP,IAAK,IACL,SAAU,CACR,CACE,MAAO,WACP,SAAU,CACR,CAAE,MAAOC,CAAS,EAClB,CAAE,MAAO,mBAAoB,CAC/B,EACA,WAAY,EACd,CACF,CACF,EACA,CACE,MAAO,SACP,MAAO,YACT,EACA,CACE,MAAO,UACP,MAAO,aACT,CACF,CAAE,CACJ,EAEAF,EAAK,kBAEL,CACE,MAAO,SACP,SAAU,CAAEA,EAAK,gBAAiB,EAClC,SAAU,CACRA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACD,CACE,MAAO,IACP,IAAK,IACL,UAAW,CACb,EACA,CACE,MAAO,IACP,IAAK,IACL,UAAW,CACb,CACF,CACF,EAWA,CACE,UAAW,EACX,SAAU,CACR,CACE,MAAO,CACL,EAAG,WACH,EAAG,QACL,EACA,MAAO,CACLI,EACAD,CACF,CACF,EACA,CACE,MAAO,CACL,EAAG,WACH,EAAG,QACL,EACA,MAAO,CACL,UACAA,CACF,CACF,EACA,CACE,MAAO,CACL,EAAG,cACH,EAAG,QACL,EACA,MAAO,CACLE,EACAF,CACF,CACF,EACA,CACE,MAAO,CAAE,EAAG,QAAS,EACrB,MAAO,CACL,mBACAA,CACF,CACF,CACF,CACF,EAGA,CAEE,MAAO,CAAE,EAAG,UAAW,EACvB,MAAO,CACLD,EACA,MACA,KACA,KACF,CACF,EAEA,CACE,MAAO,WACP,UAAW,EACX,SAAU,CACR,CAAE,MAAOE,CAAa,EACtB,CAAE,MAAO,SAAU,CACrB,CACF,EAEA,CACE,MAAO,cACP,UAAW,EACX,MAAOC,CACT,EAEA,CAEE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,KAAM,CAAE,CAC/B,CACF,CACF,CACF,CA9PA,IAAAC,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAiB,qFAEjBC,EAAgBF,EAAM,OAC1B,uBAEA,4BACF,EAEMG,EAA+BH,EAAM,OAAOE,EAAe,UAAU,EAarEE,EAAgB,CACpB,oBAAqB,CACnB,WACA,WACA,cACF,EACA,oBAAqB,CACnB,OACA,OACF,EACA,QAAS,CACP,QACA,MACA,QACA,QACA,QACA,OACA,QACA,UACA,KACA,OACA,QACA,MACA,MACA,SACA,MACA,KACA,KACA,SACA,OACA,MACA,KACA,OACA,UACA,SACA,QACA,SACA,OACA,QACA,SACA,QACA,OACA,QACA,QACA,GAtDe,CACjB,UACA,SACA,UACA,SACA,UACA,YACA,QACA,OACF,CA8CE,EACA,SAAU,CACR,OACA,SACA,gBACA,cACA,cACA,gBACA,mBACA,iBACF,EACA,QAAS,CACP,OACA,QACA,KACF,CACF,EACMC,EAAY,CAChB,UAAW,SACX,MAAO,YACT,EACMC,EAAa,CACjB,MAAO,KACP,IAAK,GACP,EACMC,EAAgB,CACpBR,EAAK,QACH,IACA,IACA,CAAE,SAAU,CAAEM,CAAU,CAAE,CAC5B,EACAN,EAAK,QACH,UACA,QACA,CACE,SAAU,CAAEM,CAAU,EACtB,UAAW,EACb,CACF,EACAN,EAAK,QAAQ,WAAYA,EAAK,gBAAgB,CAChD,EACMS,EAAQ,CACZ,UAAW,QACX,MAAO,MACP,IAAK,KACL,SAAUJ,CACZ,EACMK,EAAS,CACb,UAAW,SACX,SAAU,CACRV,EAAK,iBACLS,CACF,EACA,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,aACP,IAAK,GACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,aACP,IAAK,GACP,EACA,CACE,MAAO,aACP,IAAK,GACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EAGA,CAAE,MAAO,iBAAkB,EAC3B,CAAE,MAAO,2BAA4B,EACrC,CAAE,MAAO,iCAAkC,EAC3C,CAAE,MAAO,yDAA0D,EACnE,CAAE,MAAO,yBAA0B,EACnC,CAAE,MAAO,WAAY,EAErB,CAGE,MAAOR,EAAM,OACX,YACAA,EAAM,UAAU,0CAA0C,CAC5D,EACA,SAAU,CACRD,EAAK,kBAAkB,CACrB,MAAO,QACP,IAAK,QACL,SAAU,CACRA,EAAK,iBACLS,CACF,CACF,CAAC,CACH,CACF,CACF,CACF,EAKME,EAAU,oBACVC,EAAS,kBACTC,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CAER,CAAE,MAAO,OAAOF,CAAO,SAASC,CAAM,iBAAiBA,CAAM,YAAa,EAI1E,CAAE,MAAO,gCAAiC,EAC1C,CAAE,MAAO,gCAAiC,EAC1C,CAAE,MAAO,gCAAiC,EAC1C,CAAE,MAAO,4CAA6C,EAGtD,CAAE,MAAO,uBAAwB,CACnC,CACF,EAEME,EAAS,CACb,SAAU,CACR,CACE,MAAO,MACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,SACL,aAAc,GACd,WAAY,GACZ,SAAUT,CACZ,CACF,CACF,EA2EMU,EAAwB,CAC5BL,EA/DuB,CACvB,SAAU,CACR,CACE,MAAO,CACL,WACAN,EACA,UACAA,CACF,CACF,EACA,CACE,MAAO,CACL,sBACAA,CACF,CACF,CACF,EACA,MAAO,CACL,EAAG,cACH,EAAG,uBACL,EACA,SAAUC,CACZ,EAjCuB,CACrB,MAAO,CACL,sBACAD,CACF,EACA,MAAO,CACL,EAAG,aACL,EACA,SAAUC,CACZ,EA8CwB,CACtB,UAAW,EACX,MAAO,CACLD,EACA,YACF,EACA,MAAO,CACL,EAAG,aACL,CACF,EA7B4B,CAC1B,UAAW,EACX,MAAO,sBACP,UAAW,mBACb,EA4BwB,CACtB,UAAW,EACX,MAAOD,EACP,MAAO,aACT,EA9B0B,CACxB,MAAO,CACL,MAAO,MACPD,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CACRY,CACF,CACF,EA4BE,CAEE,MAAOd,EAAK,SAAW,IAAK,EAC9B,CACE,UAAW,SACX,MAAOA,EAAK,oBAAsB,YAClC,UAAW,CACb,EACA,CACE,UAAW,SACX,MAAO,WACP,SAAU,CACRU,EACA,CAAE,MAAOR,CAAe,CAC1B,EACA,UAAW,CACb,EACAW,EACA,CAGE,UAAW,WACX,MAAO,4DACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,UAAW,EACX,SAAUR,CACZ,EACA,CACE,MAAO,IAAML,EAAK,eAAiB,eACnC,SAAU,SACV,SAAU,CACR,CACE,UAAW,SACX,SAAU,CACRA,EAAK,iBACLS,CACF,EACA,QAAS,KACT,SAAU,CACR,CACE,MAAO,IACP,IAAK,SACP,EACA,CACE,MAAO,OACP,IAAK,UACP,EACA,CACE,MAAO,QACP,IAAK,WACP,EACA,CACE,MAAO,MACP,IAAK,SACP,EACA,CACE,MAAO,QACP,IAAK,WACP,CACF,CACF,CACF,EAAE,OAAOF,EAAYC,CAAa,EAClC,UAAW,CACb,CACF,EAAE,OAAOD,EAAYC,CAAa,EAElCC,EAAM,SAAWM,EACjBD,EAAO,SAAWC,EASlB,IAAMC,EAAc,CAClB,CACE,MAAO,SACP,OAAQ,CACN,IAAK,IACL,SAAUD,CACZ,CACF,EACA,CACE,UAAW,cACX,MAAO,KAfW,QAeY,IAbX,kCAakC,IAZtC,iDAYyD,WACxE,OAAQ,CACN,IAAK,IACL,SAAUV,EACV,SAAUU,CACZ,CACF,CACF,EAEA,OAAAP,EAAc,QAAQD,CAAU,EAEzB,CACL,KAAM,OACN,QAAS,CACP,KACA,UACA,UACA,OACA,KACF,EACA,SAAUF,EACV,QAAS,OACT,SAAU,CAAEL,EAAK,QAAQ,CAAE,OAAQ,MAAO,CAAC,CAAE,EAC1C,OAAOgB,CAAW,EAClB,OAAOR,CAAa,EACpB,OAAOO,CAAqB,CACjC,CACF,CA7bA,IAAAE,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAkB,CACtB,UAAW,wBACX,UAAW,EACX,MAAOD,EAAM,OACX,KACA,oCACAD,EAAK,SACLC,EAAM,UAAU,OAAO,CAAC,CAC5B,EACME,EAAgB,wCAChBC,EAAW,CACf,WACA,KACA,QACA,QACA,SACA,MACA,QACA,QACA,WACA,QACA,KACA,MACA,OACA,OACA,SACA,QACA,QACA,KACA,MACA,KACA,OACA,KACA,MACA,OACA,QACA,QACA,MACA,OACA,MACA,WACA,OACA,MACA,MACA,SACA,OACA,OACA,SACA,SACA,QACA,QACA,OACA,MACA,OACA,SACA,SACA,UACA,MACA,UACA,QACA,QACA,OACF,EACMC,EAAW,CACf,OACA,QACA,OACA,OACA,KACA,KACF,EACMC,EAAW,CAEf,QAEA,OACA,OACA,QACA,OACA,OACA,KACA,QACA,SACA,UACA,QACA,QACA,YACA,aACA,KACA,MACA,QACA,QACA,OACA,OACA,UACA,WACA,SACA,eACA,sBACA,oBACA,iBACA,WAEA,UACA,aACA,YACA,SACA,OACA,OACA,UACA,iBACA,gBACA,mBACA,OACA,YACA,SACA,QACA,UACA,eACA,iBACA,eACA,QACA,kBACA,eACA,cACA,SACA,WACA,UACA,aACA,OACA,iBACA,eACA,OACA,SACA,WACA,eACA,aACA,kBACF,EACMC,EAAQ,CACZ,KACA,MACA,MACA,MACA,OACA,QACA,KACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,MACA,OACA,OACA,MACA,SACA,SACA,SACA,KACF,EACA,MAAO,CACL,KAAM,OACN,QAAS,CAAE,IAAK,EAChB,SAAU,CACR,SAAUP,EAAK,SAAW,KAC1B,KAAMO,EACN,QAASH,EACT,QAASC,EACT,SAAUC,CACZ,EACA,QAAS,KACT,SAAU,CACRN,EAAK,oBACLA,EAAK,QAAQ,OAAQ,OAAQ,CAAE,SAAU,CAAE,MAAO,CAAE,CAAC,EACrDA,EAAK,QAAQA,EAAK,kBAAmB,CACnC,MAAO,MACP,QAAS,IACX,CAAC,EACD,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,0BAA2B,EACpC,CAAE,MAAO,iCAAkC,CAC7C,CACF,EACA,CACE,UAAW,SACX,MAAO,yBACT,EACA,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,gBAAkBG,CAAc,EACzC,CAAE,MAAO,iBAAmBA,CAAc,EAC1C,CAAE,MAAO,uBAAyBA,CAAc,EAChD,CAAE,MAAO,kDACEA,CAAc,CAC3B,EACA,UAAW,CACb,EACA,CACE,MAAO,CACL,KACA,MACAH,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,CACF,EACA,CACE,UAAW,OACX,MAAO,SACP,IAAK,MACL,SAAU,CACR,CACE,UAAW,SACX,MAAO,IACP,IAAK,GACP,CACF,CACF,EACA,CACE,MAAO,CACL,MACA,MACA,cACAA,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,UACH,EAAG,UACL,CACF,EAEA,CACE,MAAO,CACL,MACA,MACAA,EAAK,oBACL,MACA,IACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,WACH,EAAG,SACL,CACF,EACA,CACE,MAAO,CACL,OACA,MACAA,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,EACA,CACE,MAAO,CACL,uCACA,MACAA,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,EACA,CACE,MAAOA,EAAK,SAAW,KACvB,SAAU,CACR,QAAS,OACT,SAAUM,EACV,KAAMC,CACR,CACF,EACA,CACE,UAAW,cACX,MAAO,IACT,EACAL,CACF,CACF,CACF,CA9SA,IAAAM,GAAAC,EAAA,KAAAC,MCmmBA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQC,IAAMF,CAAI,EAClBG,EAAoBC,IACpBC,EAAmBC,IAEnBC,EAAgB,WAChBC,EAAe,kBAEfC,EAAW,CACf,UAAW,WACX,MAAO,OAHQ,0BAGY,OAC3B,UAAW,CACb,EAEA,MAAO,CACL,KAAM,OACN,iBAAkB,GAClB,QAAS,SACT,SAAU,CACRT,EAAK,oBACLA,EAAK,qBAGLC,EAAM,gBACN,CACE,UAAW,cACX,MAAO,kBACP,UAAW,CACb,EACA,CACE,UAAW,iBACX,MAAO,oBACP,UAAW,CACb,EACAA,EAAM,wBACN,CACE,UAAW,eACX,MAAO,OAASS,IAAK,KAAK,GAAG,EAAI,OAEjC,UAAW,CACb,EACA,CACE,UAAW,kBACX,MAAO,KAAOL,EAAiB,KAAK,GAAG,EAAI,GAC7C,EACA,CACE,UAAW,kBACX,MAAO,SAAWF,EAAkB,KAAK,GAAG,EAAI,GAClD,EACAM,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CAAER,EAAM,eAAgB,CACpC,EACAA,EAAM,aACN,CACE,UAAW,YACX,MAAO,OAASU,IAAW,KAAK,GAAG,EAAI,MACzC,EACA,CAAE,MAAO,4oCAA6oC,EACtpC,CACE,MAAO,IACP,IAAK,QACL,UAAW,EACX,SAAU,CACRV,EAAM,cACNQ,EACAR,EAAM,SACNA,EAAM,gBACND,EAAK,kBACLA,EAAK,iBACLC,EAAM,UACNA,EAAM,iBACR,CACF,EAIA,CACE,MAAO,oBACP,SAAU,CACR,SAAUM,EACV,QAAS,kBACX,CACF,EACA,CACE,MAAO,IACP,IAAK,OACL,YAAa,GACb,SAAU,CACR,SAAU,UACV,QAASC,EACT,UAAWI,IAAe,KAAK,GAAG,CACpC,EACA,SAAU,CACR,CACE,MAAOL,EACP,UAAW,SACb,EACA,CACE,MAAO,eACP,UAAW,WACb,EACAE,EACAT,EAAK,kBACLA,EAAK,iBACLC,EAAM,SACNA,EAAM,eACR,CACF,EACAA,EAAM,iBACR,CACF,CACF,CArtBA,IAAMC,IA6CAQ,IA2EAE,IAsCAN,IA+DAF,IAiBAO,IA9ONE,GAAAC,EAAA,KAAAC,IAAMb,IAASF,IACN,CACL,UAAW,CACT,MAAO,OACP,MAAO,YACT,EACA,cAAeA,EAAK,qBACpB,SAAU,CACR,MAAO,SACP,MAAO,iDACT,EACA,kBAAmB,CACjB,UAAW,WACX,MAAO,cACT,EACA,wBAAyB,CACvB,MAAO,gBACP,MAAO,KACP,IAAK,KACL,QAAS,IACT,SAAU,CACRA,EAAK,iBACLA,EAAK,iBACP,CACF,EACA,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACb,EACA,aAAc,CACZ,UAAW,OACX,MAAO,2BACT,CACF,GAGIU,IAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACF,EAEME,IAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAGMN,IAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAGMF,IAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAEMO,IAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,SAGF,EAAE,QAAQ,IC9kBV,SAASK,GAAMC,EAAM,CACnB,MAAO,CACL,KAAM,gBACN,QAAS,CACP,UACA,cACF,EACA,SAAU,CACR,CACE,UAAW,cAIX,MAAO,qCACP,OAAQ,CACN,IAAK,gBACL,YAAa,MACf,CACF,CACF,CACF,CACF,CA9BA,IAAAC,GAAAC,EAAA,KAAAC,MCsBA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MACbE,EAAeF,EAAK,QAAQ,KAAM,GAAG,EACrCG,EAAS,CACb,UAAW,SACX,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAK,CAAE,CAC9B,CACF,CACF,EACMC,EAAoB,CACxB,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAK,CAAE,CAC9B,EAEMC,EAAW,CACf,OACA,QAGA,SACF,EAEMC,EAAmB,CACvB,mBACA,eACA,gBACA,kBACF,EAEMC,EAAQ,CACZ,SACA,SACA,OACA,UACA,OACA,YACA,OACA,OACA,MACA,WACA,UACA,QACA,MACA,UACA,WACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,OACA,YACA,UACA,UACA,WACF,EAEMC,EAAqB,CACzB,MACA,MACA,YACA,OACA,QACA,QACA,OACA,MACF,EAGMC,EAAiB,CACrB,MACA,OACA,MACA,WACA,QACA,MACA,MACA,MACA,QACA,YACA,wBACA,KACA,aACA,OACA,aACA,KACA,OACA,SACA,gBACA,MACA,QACA,cACA,kBACA,UACA,SACA,SACA,OACA,UACA,OACA,KACA,OACA,SACA,cACA,WACA,OACA,OACA,OACA,UACA,OACA,cACA,YACA,mBACA,QACA,aACA,OACA,QACA,WACA,UACA,UACA,SACA,SACA,YACA,UACA,aACA,WACA,UACA,OACA,OACA,gBACA,MACA,OACA,QACA,YACA,aACA,SACA,QACA,OACA,YACA,UACA,kBACA,eACA,kCACA,eACA,eACA,cACA,iBACA,eACA,oBACA,eACA,eACA,mCACA,eACA,SACA,QACA,OACA,MACA,aACA,MACA,UACA,WACA,UACA,UACA,SACA,SACA,aACA,QACA,WACA,gBACA,aACA,WACA,SACA,OACA,UACA,OACA,UACA,OACA,QACA,MACA,YACA,gBACA,WACA,SACA,SACA,QACA,SACA,OACA,UACA,SACA,MACA,WACA,UACA,QACA,QACA,SACA,cACA,QACA,QACA,MACA,UACA,YACA,OACA,OACA,OACA,WACA,SACA,MACA,SACA,QACA,QACA,WACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,UACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,eACA,WACA,OACA,KACA,OACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,WACA,QACA,aACA,UACA,OACA,UACA,OACA,OACA,aACA,UACA,KACA,QACA,YACA,iBACA,MACA,QACA,QACA,QACA,eACA,kBACA,UACA,MACA,SACA,QACA,SACA,MACA,SACA,MACA,WACA,SACA,QACA,WACA,WACA,UACA,QACA,QACA,MACA,KACA,OACA,YACA,MACA,YACA,QACA,OACA,SACA,UACA,eACA,oBACA,KACA,SACA,MACA,OACA,KACA,MACA,OACA,OACA,KACA,QACA,MACA,QACA,OACA,WACA,UACA,YACA,YACA,UACA,MACA,UACA,eACA,kBACA,kBACA,SACA,UACA,WACA,iBACA,QACA,WACA,YACA,UACA,UACA,YACA,MACA,QACA,OACA,QACA,OACA,YACA,MACA,aACA,cACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,UACA,SACA,SACA,UACA,SACA,QACA,WACA,SACA,MACA,aACA,OACA,UACA,YACA,QACA,SACA,SACA,SACA,OACA,SACA,YACA,eACA,MACA,OACA,UACA,MACA,OACA,OACA,WACA,OACA,WACA,eACA,MACA,eACA,WACA,aACA,OACA,QACA,SACA,aACA,cACA,cACA,SACA,YACA,kBACA,WACA,MACA,YACA,SACA,cACA,cACA,QACA,cACA,MACA,OACA,OACA,OACA,YACA,gBACA,kBACA,KACA,WACA,YACA,kBACA,cACA,QACA,UACA,OACA,aACA,OACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,QACA,OACA,QACA,QACA,SACA,WACA,UACA,WACA,YACA,UACA,UACA,aACA,OACA,WACA,QACA,eACA,SACA,OACA,SACA,UACA,MACF,EAKMC,EAAqB,CACzB,MACA,OACA,YACA,OACA,OACA,MACA,OACA,OACA,UACA,WACA,OACA,MACA,OACA,QACA,YACA,aACA,YACA,aACA,QACA,UACA,MACA,UACA,cACA,QACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,aACA,OACA,UACA,KACA,MACA,QACA,QACA,MACA,MACA,MACA,YACA,QACA,SACA,eACA,kBACA,kBACA,WACA,iBACA,QACA,OACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,aACA,MACA,OACA,OACA,aACA,cACA,YACA,kBACA,MACA,MACA,OACA,YACA,kBACA,QACA,OACA,aACA,SACA,QACA,WACA,UACA,WACA,cACF,EAGMC,EAA0B,CAC9B,kBACA,eACA,kCACA,eACA,eACA,iBACA,mCACA,eACA,eACA,cACA,cACA,eACA,YACA,oBACA,gBACF,EAIMC,EAAS,CACb,eACA,cACA,cACA,cACA,WACA,cACA,iBA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WACA,MACF,EAAE,IAAIQ,EAAc,EAGdP,GAAsB,CAC1B,OACA,MACF,EAAE,IAAIO,EAAc,EAGdD,IAAe,CACnB,MACA,MACF,EAGMJ,GAAW,CAIf,QACA,MACA,iBACA,QACA,QACA,OACA,MACA,KACA,YACA,QACA,OACA,QACA,QACA,UACA,YACA,WACA,cACA,OACA,UACA,QACA,SACA,SACA,cACA,KACA,UACA,OACA,OACA,OACA,YACA,cACA,qBACA,cACA,QACA,MACA,OACA,MACA,QACA,KACA,SACA,WACA,QACA,SACA,QACA,QACA,kBACA,WACA,KACA,KACA,WACA,cACA,OACA,MACA,QACA,WACA,cACA,cACA,OACA,WACA,WACA,WACA,UACA,kBACA,SACA,iBACA,UACA,WACA,gBACA,SACA,SACA,WACA,WACA,SACA,MACA,OACA,SACA,SACA,YACA,QACA,SACA,SACA,QACA,QACA,OACA,MACA,YACA,kBACA,oBACA,UACA,MACA,OACA,QACA,QACA,SACF,EAMMS,GAAW,CACf,QACA,MACA,MACF,EAGMmD,IAA0B,CAC9B,aACA,gBACA,aACA,OACA,YACA,OACA,OACF,EAIMpD,IAAqB,CACzB,gBACA,UACA,aACA,QACA,UACA,SACA,SACA,QACA,UACA,eACA,YACA,YACA,MACA,gBACA,WACA,QACA,YACA,kBACA,UACF,EAGMI,GAAW,CACf,MACA,MACA,MACA,SACA,mBACA,aACA,OACA,aACA,YACA,4BACA,MACA,MACA,cACA,eACA,eACA,eACA,sBACA,QACA,WACA,gBACA,WACA,SACA,OACA,oCACA,YACA,OACA,gBACA,iBACA,uBACA,2BACA,oBACA,aACA,0BACA,KACF,EAGMqD,GAAe3E,GACnB,oBACA,kBACA,iBACA,iBACA,iBACA,mCACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,UACF,EAGM4B,GAAoB5B,GACxB2E,GACA,kBACA,kBACA,kBACA,kBACA,iBAGF,EAGMhD,GAAWhC,GAAOgF,GAAc/C,G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OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,SACF,EACMC,GAAW,CACf,OACA,QACA,OACA,YACA,MACA,UACF,EAGMmB,GAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,aACF,EAEMC,GAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,UACF,EAEMO,GAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,UACF,EAEMzB,GAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,QACF,EAEMD,GAAY,CAAC,EAAE,OACnB0B,GACAR,GACAC,EACF,ICnJA,SAAS2B,GAAMC,EAAM,CACnB,IAAMC,EAAQD,EAAK,MAKbE,EAAY,CAChB,UAAW,SACX,MAAO,iBACT,EAEMC,EAAS,CACb,UAAW,SACX,MAAO,IACP,IAAK,IACL,QAAS,KACT,SAAU,CACR,CAEE,MAAO,IAAK,CAChB,CACF,EAGMC,EAAa,0BACbC,EAAa,wBACbC,EAAW,kCACXC,EAAW,yBACXC,EAAO,CACX,UAAW,UACX,SAAU,CACR,CAEE,MAAOP,EAAM,OAAO,MAAOA,EAAM,OAAOI,EAAYD,CAAU,EAAG,KAAK,CAAE,EAC1E,CAEE,MAAOH,EAAM,OAAO,MAAOM,EAAU,KAAK,CAAE,EAC9C,CAEE,MAAON,EAAM,OAAO,MAAOK,EAAU,KAAK,CAAE,EAC9C,CAEE,MAAOL,EAAM,OACX,MACAA,EAAM,OAAOI,EAAYD,CAAU,EACnC,KACAH,EAAM,OAAOK,EAAUC,CAAQ,EAC/B,KACF,CAAE,CACN,CACF,EAEME,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CACR,CAEE,MAAO,+DAAgE,EACzE,CAEE,MAAO,6BAA8B,EACvC,CAEE,MAAO,8BAA+B,EACxC,CAEE,MAAO,4BAA6B,EACtC,CAEE,MAAO,2BAA4B,CACvC,CACF,EAEMC,EAAQ,CACZ,UAAW,QACX,MAAO,OACT,EAEMC,EAAcX,EAAK,QAAQ,MAAO,IAAK,CAAE,SAAU,CACvD,CACE,UAAW,SACX,MAAO,OACP,IAAK,GACP,CACF,CAAE,CAAC,EAEGY,EAAUZ,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAClD,CAAE,MAAO,GAAI,EACb,CAEE,MAAO,oBAAqB,CAChC,CAAE,CAAC,EAYH,MAAO,CACL,KAAM,oBACN,QAAS,CAAE,IAAK,EAChB,iBAAkB,GAClB,iBAAkB,CAAE,MAAO,QAAS,EACpC,SAAU,CACR,QACE,k2BAWF,SAEE,2OAGF,KAEE,4GACF,QAAS,oBACX,EACA,QACE,4CACF,SAAU,CACRE,EACAC,EACAK,EACAC,EACAC,EACAC,EACAC,EA/Ce,CACjB,UAAW,OAEX,MAAO,2EACP,IAAK,IACL,SAAU,CAAE,QACR,oEAAqE,EACzE,SAAU,CAAEA,CAAQ,CACtB,CAyCE,CACF,CACF,CA1JA,IAAAC,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAKC,EAAM,CAClBA,EAAK,MACL,IAAMC,EAAgBD,EAAK,QAAQ,MAAO,KAAK,EAC/CC,EAAc,SAAS,KAAK,MAAM,EAClC,IAAMC,EAAeF,EAAK,QAAQ,KAAM,GAAG,EAErCG,EAAM,CACV,UACA,QACA,KACA,QACA,WACA,OACA,gBACA,OACA,OACA,OACA,OACA,MACA,SACA,OACA,aACA,aACA,YACA,YACA,YACA,aACA,YACA,SACA,KACA,SACA,QACA,OACA,SACA,cACA,cACA,SACA,MACA,MACA,SACA,QACA,SACA,SACA,SACA,aACA,YACA,QACA,QACA,YACA,OACA,OACA,aACF,EAEMC,EAAqB,CACzB,MAAO,CACL,8BACA,MACA,WACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,CACF,EAEMC,EAAW,CACf,UAAW,WACX,MAAO,UACT,EAEMC,EAAS,CACb,MAAO,gBACP,UAAW,cACX,UAAW,CACb,EAEMC,EAAS,CACb,UAAW,SACX,UAAW,EAEX,MAAO,iNACT,EAEMC,EAAO,CAEX,MAAO,0BACP,UAAW,MACb,EAEMC,EAAkB,CACtB,UAAW,UAEX,MAAO,mZACT,EAcA,MAAO,CACL,KAAM,cACN,SAAU,CACR,SAAU,SACV,QAASN,CACX,EACA,SAAU,CACRD,EACAD,EApBiB,CACnB,MAAO,CACL,mBACA,MACA,GACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,UACL,CACF,EAYII,EACAC,EACAF,EACAJ,EAAK,kBACLQ,EACAC,EACAF,CACF,CACF,CACF,CAxIA,IAAAG,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MAQbE,EAAcD,EAAM,OAAO,YAAaA,EAAM,SAAS,kBAAkB,EAAG,iBAAiB,EAC7FE,EAAe,mBACfC,EAAe,CACnB,UAAW,SACX,MAAO,kCACT,EACMC,EAAoB,CACxB,MAAO,KACP,SAAU,CACR,CACE,UAAW,UACX,MAAO,sBACP,QAAS,IACX,CACF,CACF,EACMC,EAAwBN,EAAK,QAAQK,EAAmB,CAC5D,MAAO,KACP,IAAK,IACP,CAAC,EACKE,EAAwBP,EAAK,QAAQA,EAAK,iBAAkB,CAAE,UAAW,QAAS,CAAC,EACnFQ,EAAyBR,EAAK,QAAQA,EAAK,kBAAmB,CAAE,UAAW,QAAS,CAAC,EACrFS,EAAgB,CACpB,eAAgB,GAChB,QAAS,IACT,UAAW,EACX,SAAU,CACR,CACE,UAAW,OACX,MAAON,EACP,UAAW,CACb,EACA,CACE,MAAO,OACP,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,WAAY,GACZ,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEC,CAAa,CAC3B,EACA,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEA,CAAa,CAC3B,EACA,CAAE,MAAO,cAAe,CAC1B,CACF,CACF,CACF,CACF,CACF,EACA,MAAO,CACL,KAAM,YACN,QAAS,CACP,OACA,QACA,MACA,OACA,MACA,MACA,MACA,QACA,MACA,KACF,EACA,iBAAkB,GAClB,aAAc,GACd,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,UAAW,GACX,SAAU,CACRC,EACAG,EACAD,EACAD,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,SAAU,CACRD,EACAC,EACAE,EACAD,CACF,CACF,CACF,CACF,CACF,CACF,EACAP,EAAK,QACH,OACA,MACA,CAAE,UAAW,EAAG,CAClB,EACA,CACE,MAAO,cACP,IAAK,QACL,UAAW,EACb,EACAI,EAEA,CACE,UAAW,OACX,IAAK,MACL,SAAU,CACR,CACE,MAAO,SACP,UAAW,GACX,SAAU,CACRI,CACF,CACF,EACA,CACE,MAAO,mBACT,CACF,CAEF,EACA,CACE,UAAW,MAMX,MAAO,iBACP,IAAK,IACL,SAAU,CAAE,KAAM,OAAQ,EAC1B,SAAU,CAAEC,CAAc,EAC1B,OAAQ,CACN,IAAK,YACL,UAAW,GACX,YAAa,CACX,MACA,KACF,CACF,CACF,EACA,CACE,UAAW,MAEX,MAAO,kBACP,IAAK,IACL,SAAU,CAAE,KAAM,QAAS,EAC3B,SAAU,CAAEA,CAAc,EAC1B,OAAQ,CACN,IAAK,aACL,UAAW,GACX,YAAa,CACX,aACA,aACA,KACF,CACF,CACF,EAEA,CACE,UAAW,MACX,MAAO,SACT,EAEA,CACE,UAAW,MACX,MAAOR,EAAM,OACX,IACAA,EAAM,UAAUA,EAAM,OACpBC,EAIAD,EAAM,OAAO,MAAO,IAAK,IAAI,CAC/B,CAAC,CACH,EACA,IAAK,OACL,SAAU,CACR,CACE,UAAW,OACX,MAAOC,EACP,UAAW,EACX,OAAQO,CACV,CACF,CACF,EAEA,CACE,UAAW,MACX,MAAOR,EAAM,OACX,MACAA,EAAM,UAAUA,EAAM,OACpBC,EAAa,GACf,CAAC,CACH,EACA,SAAU,CACR,CACE,UAAW,OACX,MAAOA,EACP,UA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AAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,IAAI,EAEj+CC,IAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EA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CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,oTAAqD,EAC7D,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sCAAQ,EAChB,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sdAAgF,EACxF,CAAC,OAAO,SAAI,EAAE,0BAAM,EACpB,CAAC,SAAS,gEAAa,EACvB,CAAC,SAAS,cAAK,EACf,CAAC,SAAS,kCAAS,EACnB,CAAC,SAAS,gCAAO,EACjB,CAAC,SAAS,QAAG,EACb,CAAC,SAAS,cAAI,EACd,CAAC,SAAS,QAAG,EACb,CAAC,SAAS,0EAAc,EACxB,CAAC,SAAS,SAAI,GAAG,cAAI,EACrB,CAAC,SAAS,SAAI,GAAG,cAAI,EACrB,CAAC,SAAS,YAAI,EACd,CAAC,SAAS,QAAG,EACb,CAAC,SAAS,QAAG,EACb,CAAC,SAAS,cAAI,EACd,CAAC,SAAS,kBAAK,EACf,CAAC,SAAS,YAAI,EACd,CAAC,SAAS,wFAAkB,EAC5B,CAAC,SAAS,4HAA0B,EACpC,CAAC,SAAS,wVAAgE,EAC1E,CAAC,SAAS,8IAA6B,EACvC,CAAC,SAAS,oCAAS,EACnB,CAAC,SAAS,4RAAqD,EAC/D,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,6CAAU,EAAE,ofAAqF,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,iFAAgB,EAAE,iaAAwE,EAAE,oBAAK,EAC3G,CAAC,SAAS,uOAAyC,EAAE,0TAAsD,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,6XAAkE,EAAE,oKAA6B,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,2KAA+B,EAAE,sXAAgE,EAC3G,CAAC,SAAS,iLAAgC,EAAE,gXAA+D,EAC3G,CAAC,SAAS,2KAA+B,EAAE,sXAAgE,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,yYAAoE,EAAE,wJAA2B,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,2QAA+C,EAAE,+GAAqB,EAAE,kJAA0B,EAC5G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,2EAAe,EAAE,wbAA2E,EACtG,CAAC,SAAS,iLAAgC,EAAE,0WAA8D,EAC1G,CAAC,SAAS,6LAAkC,EAAE,wVAA2D,EACzG,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,yhBAA4F,CAAC,EACvG,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,yDAAY,EAAE,weAAmF,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,+MAAqC,EAAE,qBAAM,EAAE,4RAAiD,EAC1G,CAAC,SAAS,mMAAmC,EAAE,8VAA4D,EAC3G,CAAC,SAAS,mJAA2B,EAAE,kYAAkE,EACzG,CAAC,SAAS,iOAAwC,EAAE,gUAAuD,EAC3G,CAAC,SAAS,2HAAuB,EAAE,saAAwE,EAC3G,CAAC,SAAS,2NAAuC,EAAE,sUAAwD,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,2BAAO,EAAE,sgBAAwF,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,uFAAiB,EAAE,2WAA+D,EAAE,oEAAa,EAC3G,CAAC,SAAS,yGAAoB,EAAE,wbAA2E,EAC3G,CAAC,SAAS,yMAAoC,EAAE,wVAA2D,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,6XAAkE,EAAE,oKAA6B,EAC3G,CAAC,SAAS,+hBAA6F,CAAC,EACxG,CAAC,SAAS,6OAA0C,EAAE,oTAAqD,EAC3G,CAAC,SAAS,+GAAqB,EAAE,kbAA0E,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,mMAAmC,EAAE,qEAAc,EAAE,kGAAkB,CACjF,ICrLA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAA,IAAA,SACA,CAAC,IAAI,KAAS,IAAI,QAAG,EACrB,CAAC,OAAO,uOAAyC,EAAE,eAAK,EAAE,SAAI,EAAE,cAAI,EACpE,CAAC,OAAO,iRAAgD,EAAE,qBAAM,EAAE,mGAAmB,EAAE,qBAAM,EAAE,wPAA2C,EAC1I,CAAC,OAAO,2BAAO,EAAE,SAAI,EAAE,qEAAc,EAAE,2HAAuB,EAAE,EAChE,CAAC,OAAO,+GAAqB,GAAG,uFAAiB,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,EAAE,mGAAmB,GAAG,iCAAQ,EAAE,SAAI,EAAE,QAAG,EACnH,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,2BAAO,GAAG,+DAAa,EAAE,SAAI,EAAE,QAAG,EACvD,CAAC,OAAO,qBAAM,EAAE,SAAI,GAAG,SAAI,GAAG,uFAAiB,EAAE,6LAAkC,EAAE,+GAAqB,CAAC,EAC3G,CAAC,OAAO,yDAAY,EAAE,2NAAuC,EAAE,kDAAU,EACzE,CAAC,OAAO,+GAAqB,EAAE,qBAAM,EAAE,SAAI,EAAE,qBAAM,EAAE,yDAAY,EAAE,+GAAqB,EAAE,iCAAQ,GAAG,SAAI,EAAE,gFAAe,EAC1H,CAAC,OAAO,qHAAsB,EAAE,oNAAqC,EACrE,CAAC,OAAO,SAAI,EAAE,6FAAkB,EAAE,yDAAY,EAAE,qTAAsD,EAAE,2BAAO,EAAE,sIAAwB,EACzI,CAAC,OAAO,2HAAuB,EAAE,uCAAS,EAAE,yDAAY,EAAE,qBAAM,EAAE,4CAAS,EAC3E,CAAC,OAAO,qHAAsB,EAAE,iCAAQ,EAAE,+DAAa,EAAE,qHAAsB,EAAE,SAAI,EAAE,6CAAU,EAAE,+DAAa,EAAE,2EAAe,EAAE,gCAAO,EAC1I,CAAC,OAAO,uCAAS,EAAE,yJAA4B,GAAG,SAAI,EAAE,iCAAQ,CAAC,EACjE,CAAC,OAAO,yGAAoB,EAAE,SAAI,EAAE,2BAAO,GAAG,SAAI,GAAG,SAAI,EAAE,iCAAQ,GAAG,SAAI,EAAE,6CAAU,EAAE,mGAAmB,CAAC,EAC5G,CAAC,OAAO,SAAI,EAAE,iFAAgB,EAAE,2EAAe,EAAE,0HAAsB,EACvE,CAAC,OAAO,uCAAS,EAAE,SAAI,EAAE,mGAAmB,EAAE,SAAI,EAAE,uFAAiB,EAAE,iOAAwC,EAAE,SAAI,EAAE,iCAAQ,CAAC,EAChI,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,yDAAY,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,GAAG,wDAAW,EAChE,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,2BAAO,EAAE,SAAI,GAAG,mDAAW,GAAG,2BAAO,GAAG,SAAI,EAAE,yDAAY,EAAE,2BAAO,EAAE,4IAAyB,EAClH,CAAC,OAAO,6FAAkB,EAAE,2BAAO,GAAG,0KAA8B,EACpE,CAAC,OAAO,uCAAS,EAAE,2BAAO,EAAE,2EAAe,EAAE,6CAAU,GAAG,iLAAgC,EAAE,qBAAM,EAAE,2BAAO,EAAE,qBAAM,EAAE,iCAAQ,CAAC,EAC9H,CAAC,OAAO,mDAAW,EAAE,6CAAU,GAAG,SAAI,EAAE,SAAI,GAAG,cAAI,EACnD,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,qBAAM,EAAE,qBAAM,EAAE,mGAAmB,EAAE,SAAI,GAAG,SAAI,GAAG,SAAI,GAAG,2BAAO,EAAE,SAAI,CAAC,EAC/F,CAAC,OAAO,SAAI,EAAE,4UAAyD,EACvE,CAAC,OAAO,eAAK,EAAE,uCAAS,EAAE,eAAK,EAAE,yVAA4D,EAAE,eAAK,EAAE,uCAAS,EAAE,yDAAY,EAAE,SAAI,CAAC,EACpI,CAAC,OAAO,mGAAmB,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,yDAAY,EAAE,SAAI,CAAC,EAClE,CAAC,OAAO,2BAAO,EAAE,SAAI,EAAE,mDAAW,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,EAAE,qBAAM,GAAG,2BAAO,GAAG,mDAAW,GAAG,SAAI,GAAG,sCAAQ,EAC3G,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,SAAI,EAAE,SAAI,GAAG,kDAAU,EAC7C,CAAC,OAAO,2BAAO,EAAE,iFAAgB,EAAE,SAAI,EAAE,qBAAM,EAAE,mDAAW,EAAE,SAAI,EAAE,SAAI,EAAE,iCAAQ,GAAG,uIAAyB,EAAE,SAAI,EAAE,uCAAS,CAAC,EAChI,CAAC,OAAO,2BAAO,EAAE,6CAAU,GAAG,eAAK,EAAE,8JAA4B,EACjE,CAAC,OAAO,uCAAS,EAAE,iCAAQ,GAAG,yPAA4C,EAAE,2BAAO,EAAE,uCAAS,EAAE,4LAAiC,EACjI,CAAC,OAAO,qHAAsB,EAAE,SAAI,EAAE,2BAAO,EAAE,wJAA2B,EAC1E,CAAC,OAAO,qNAAsC,EAAE,2BAAO,EAAE,yDAAY,EAAE,6CAAU,EAAE,yDAAY,EAAE,6FAAkB,GAAG,SAAI,CAAC,EAC3H,CAAC,OAAO,+DAAa,EAAE,yDAAY,EAAE,uCAAS,GAAG,qBAAM,EAAE,QAAG,EAC5D,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,qBAAM,EAAE,SAAI,EAAE,2BAAO,EAAE,eAAK,EAAE,eAAK,GAAG,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,6IAA0B,EAAE,gCAAO,EAChH,CAAC,OAAO,mDAAW,EAAE,2HAAuB,EAAE,kJAA0B,EACxE,CAAC,OAAO,6RAAkD,EAAE,6FAAkB,EAAE,yMAAoC,EAAE,sFAAgB,EACtI,CAAC,OAAO,uFAAiB,EAAE,qBAAM,EAAE,yGAAoB,EAAE,iCAAQ,EAAE,gCAAO,EAC1E,CAAC,OAAO,uCAAS,EAAE,SAAI,EAAE,mDAAW,EAAE,iCAAQ,EAAE,SAAI,EAAE,iCAAQ,EAAE,SAAI,EAAE,qBAAM,EAAE,yDAAY,EAAE,iIAAwB,EAAE,kDAAU,EAChI,CAAC,OAAO,yDAAY,GAAG,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,CAAC,EAC9C,CAAC,OAAO,2BAAO,EAAE,qEAAc,EAAE,6LAAkC,GAAG,6IAA0B,EAAE,yGAAoB,EAAE,gCAAO,EAC/H,CAAC,OAAO,6CAAU,EAAE,mMAAmC,EAAE,iCAAQ,EAAE,gCAAO,EAC1E,CAAC,OAAO,qEAAc,EAAE,2KAA+B,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,yDAAY,GAAG,eAAK,EAAE,qBAAM,EAAE,8DAAY,EACrH,CAAC,OAAO,yGAAoB,EAAE,yJAA4B,EAAE,0EAAc,EAC1E,CAAC,OAAO,qNAAsC,EAAE,eAAK,EAAE,yGAAoB,EAAE,2EAAe,EAAE,2BAAO,EAAE,SAAI,EAAE,2EAAe,CAAC,EAC7H,CAAC,OAAO,uCAAS,EAAE,eAAK,EAAE,qBAAM,EAAE,6CAAU,EAAE,sFAAgB,EAC9D,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,2EAAe,EAAE,qBAAM,EAAE,mGAAmB,EAAE,2BAAO,GAAG,2BAAO,EAAE,mGAAmB,GAAG,4CAAS,EACrH,CAAC,OAAO,iFAAgB,EAAE,2EAAe,EAAE,iCAAQ,EAAE,4FAAiB,EACtE,CAAC,OAAO,2BAAO,EAAE,6CAAU,EAAE,2BAAO,GAAG,iCAAQ,EAAE,eAAK,EAAE,SAAI,GAAG,SAAI,EAAE,eAAK,EAAE,+DAAa,EAAE,SAAI,EAAE,qBAAM,EAAE,SAAI,EAAE,QAAG,EAClH,CAAC,OAAO,SAAI,EAAE,2BAAO,GAAG,SAAI,EAAE,yDAAY,EAAE,eAAK,EAAE,SAAI,EAAE,SAAI,CAAC,EAC9D,CAAC,OAAO,2BAAO,IAAI,qBAAM,CAAC,EAC1B,CAAC,OAAO,iIAAwB,GAAG,SAAI,EAAE,qBAAM,GAAG,4CAAS,EAC3D,CAAC,OAAO,qEAAc,EAAE,SAAI,EAAE,SAAI,EAAE,eAAK,EAAE,2BAAO,EAAE,6CAAU,EAAE,SAAI,EAAE,uFAAiB,EAAE,SAAI,EAAE,qKAA8B,EAAE,gCAAO,EACtI,CAAC,OAAO,mDAAW,EAAE,oTAAqD,EAC1E,CAAC,OAAO,qNAAsC,EAAE,iRAAgD,EAAE,qEAAc,EAAE,2EAAe,EAAE,sCAAQ,EAC3I,CAAC,OAAO,uLAAiC,EAAE,8JAA4B,EACvE,CAAC,OAAO,2BAAO,EAAE,SAAI,EAAE,2EAAe,GAAG,qBAAM,GAAG,6CAAU,EAAE,SAAI,EAAE,uRAAiD,CAAC,EACtH,CAAC,OAAO,yDAAY,EAAE,uCAAS,EAAE,2BAAO,EAAE,uFAAiB,EAAE,0BAAM,EACnE,CAAC,OAAO,mDAAW,EAAE,qEAAc,EAAE,+DAAa,EAAE,uCAAS,GAAG,iCAAQ,EAAE,SAAI,GAAG,iCAAQ,EAAE,eAAK,EAAE,SAAI,EAAE,SAAI,GAAG,gCAAO,EACtH,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,SAAI,CAAC,EACtC,CAAC,OAAO,SAAI,EAAE,2BAAO,GAAG,qBAAM,GAAG,SAAI,GAAG,iLAAgC,GAAG,uFAAiB,GAAG,QAAG,EAClG,CAAC,OAAO,qEAAc,EAAE,iCAAQ,GAAG,SAAI,EAAE,iCAAQ,GAAG,SAAI,EAAE,oBAAK,EAC/D,CAAC,OAAO,eAAK,GAAG,6CAAU,GAAG,eAAK,EAAE,eAAK,EAAE,qEAAc,EAAE,SAAI,EAAE,2EAAe,EAAE,SAAI,EAAE,2BAAO,EAAE,iCAAQ,EAAE,SAAI,EAAE,SAAI,CAAC,EACtH,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,EAC5C,CAAC,OAAO,qBAAM,EAAE,2EAAe,EAAE,iOAAwC,EAAE,iCAAQ,GAAG,SAAI,GAAG,uCAAS,EAAE,kGAAkB,EAC1H,CAAC,OAAO,uHAAuB,EAAE,wYAAqE,EACtG,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,SAAI,CAAC,EAC3B,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,iCAAQ,GAAG,QAAG,EACtB,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,0EAAc,EACtB,CAAC,OAAO,gCAAO,EACf,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,EACrB,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,EACrB,CAAC,OAAO,iIAAwB,GAAG,SAAI,CAAC,EACxC,CAAC,OAAO,SAAI,EAAE,sFAAgB,EAC9B,CAAC,OAAO,4IAA6B,EACrC,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,4FAAiB,EAC/B,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,yDAAY,EAAE,iCAAQ,CAAC,EAC/B,CAAC,OAAO,SAAI,EAAE,0BAAM,EACpB,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,2BAAO,EAAE,qEAAc,EAAE,uLAAiC,CAAC,EACnE,CAAC,OAAO,2EAAe,EAAE,SAAI,GAAG,oBAAK,EACrC,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,uIAAyB,EAAE,6FAAkB,CAAC,EACnE,CAAC,OAAO,2BAAO,EAAE,qHAAsB,CAAC,EACxC,CAAC,OAAO,SAAI,GAAG,mDAAW,EAAE,SAAI,EAAE,+DAAa,EAAE,iCAAQ,EAAE,EAC3D,CAAC,OAAO,SAAI,EAAE,2BAAO,GAAG,qBAAM,EAAE,oBAAK,EACrC,CAAC,OAAO,6FAAkB,GAAG,eAAK,EAAE,SAAI,GAAG,SAAI,EAAE,EACjD,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,iCAAQ,EAAE,oBAAK,EACnC,CAAC,OAAO,qBAAM,EAAE,iCAAQ,EAAE,qEAAc,EAAE,oKAA6B,EACvE,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,iCAAQ,EAAE,sCAAQ,EACzC,CAAC,OAAO,6FAAkB,EAAE,0QAA8C,EAC1E,CAAC,OAAO,wMAAmC,EAC3C,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,eAAK,EAAE,uCAAS,EAAE,2BAAO,EAAE,gIAAuB,EACtE,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,2BAAO,EAAE,wkBAAmG,EAChI,CAAC,OAAO,iFAAgB,EAAE,SAAI,EAAE,yGAAoB,GAAG,oEAAa,EACpE,CAAC,OAAO,qBAAM,EAAE,+DAAa,EAAE,SAAI,EAAE,4jBAAiG,EACtI,CAAC,OAAO,yDAAY,GAAG,6CAAU,EAAE,qBAAM,GAAG,iFAAgB,CAAC,EAC7D,CAAC,OAAO,qBAAM,GAAG,SAAI,EAAE,2BAAO,EAAE,4jBAAiG,EACjI,CAAC,OAAO,6FAAkB,EAAE,oQAA6C,EACzE,CAAC,OAAO,qBAAM,GAAG,SAAI,EAAE,iCAAQ,EAAE,sjBAAgG,EACjI,CAAC,OAAO,2HAAuB,EAAE,qKAA8B,CAAC,EAChE,CAAC,OAAO,mDAAW,EAAE,uCAAS,EAAE,2BAAO,EAAE,sjBAAgG,EACzI,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,mDAAW,EAAE,sCAAQ,EAC5D,CAAC,OAAO,mDAAW,EAAE,eAAK,EAAE,ooBAA6G,EACzI,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,GAAG,SAAI,EAAE,yGAAoB,EAAE,sCAAQ,EAChE,CAAC,OAAO,qBAAM,EAAE,uFAAiB,EAAE,0lBAAsG,EACzI,CAAC,OAAO,iCAAQ,GAAG,6CAAU,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,EACjD,CAAC,OAAO,SAAI,EAAE,ktBAA0H,EACxI,CAAC,OAAO,6CAAU,EAAE,SAAI,GAAG,SAAI,GAAG,SAAI,EAAE,+DAAa,EAAE,gCAAO,EAC9D,CAAC,OAAO,SAAI,EAAE,8tBAA4H,EAC1I,CAAC,OAAO,qEAAc,EAAE,uFAAiB,GAAG,6FAAkB,EAAE,cAAI,EACpE,CAAC,OAAO,6IAA0B,EAAE,wkBAAmG,EACvI,CAAC,OAAO,qEAAc,EAAE,yGAAoB,EAAE,uCAAS,EAAE,uCAAS,EAAE,oBAAK,EACzE,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,qBAAM,GAAG,SAAI,EAAE,4jBAAiG,EACpI,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,CAAC,EAChC,CAAC,OAAO,eAAK,EAAE,qHAAsB,EAAE,kkBAAkG,EACzI,CAAC,OAAO,yDAAY,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,EAAE,qBAAM,GAAG,SAAI,CAAC,EAC3D,CAAC,OAAO,SAAI,GAAG,2EAAe,EAAE,sjBAAgG,EAChI,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,eAAK,EAAE,SAAI,EAAE,SAAI,GAAG,sjBAAgG,EAC5H,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,oBAAK,EAC3B,CAAC,OAAO,uFAAiB,EAAE,eAAK,EAAE,kkBAAkG,EACpI,CAAC,OAAO,mDAAW,EAAE,yGAAoB,EAAE,qBAAM,EAAE,SAAI,EAAE,mDAAW,EAAE,QAAG,EACzE,CAAC,OAAO,SAAI,EAAE,uFAAiB,EAAE,qBAAM,EAAE,kkBAAkG,EAC3I,CAAC,OAAO,+DAAa,EAAE,iIAAwB,EAAE,gIAAuB,EACxE,CAAC,OAAO,eAAK,GAAG,SAAI,EAAE,SAAI,GAAG,sjBAAgG,EAC7H,CAAC,OAAO,6CAAU,EAAE,qHAAsB,EAAE,SAAI,EAAE,gIAAuB,EACzE,CAAC,OAAO,mDAAW,GAAG,mDAAW,EAAE,4jBAAiG,EACpI,CAAC,OAAO,SAAI,EAAE,+DAAa,EAAE,+GAAqB,EAAE,6CAAU,EAAE,qBAAM,EAAE,cAAI,EAC5E,CAAC,OAAO,qBAAM,EAAE,SAAI,EAAE,qEAAc,EAAE,sjBAAgG,EACtI,CAAC,OAAO,SAAI,GAAG,6CAAU,EAAE,SAAI,EAAE,2BAAO,EAAE,iCAAQ,EAAE,gFAAe,EACnE,CAAC,OAAO,2EAAe,EAAE,uCAAS,EAAE,4jBAAiG,EACrI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,eAAK,EAAE,+DAAa,EAAE,smBAAwG,EACtI,CAAC,OAAO,mDAAW,EAAE,eAAK,EAAE,qBAAM,EAAE,qBAAM,EAAE,+GAAqB,EAAE,oBAAK,EACxE,CAAC,OAAO,4vBAAiI,EACzI,CAAC,OAAO,qBAAM,EAAE,uFAAiB,EAAE,2BAAO,EAAE,SAAI,EAAE,SAAI,EAAE,2BAAO,EAAE,oBAAK,EACtE,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,6CAAU,EAAE,knBAA0G,EAC1I,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,mDAAW,GAAG,kJAA0B,EAClE,CAAC,OAAO,SAAI,EAAE,iCAAQ,EAAE,2BAAO,GAAG,olBAAqG,EACvI,CAAC,OAAO,SAAI,EAAE,mGAAmB,EAAE,SAAI,EAAE,SAAI,EAAE,iCAAQ,EAAE,EACzD,CAAC,OAAO,6CAAU,EAAE,2BAAO,EAAE,knBAA0G,EACvI,CAAC,OAAO,2BAAO,EAAE,SAAI,GAAG,SAAI,EAAE,mDAAW,EAAE,eAAK,EAAE,SAAI,EAAE,SAAI,EAAE,cAAI,EAClE,CAAC,OAAO,eAAK,EAAE,SAAI,EAAE,iCAAQ,GAAG,sjBAAgG,EAChI,CAAC,OAAO,uCAAS,EAAE,SAAI,GAAG,iCAAQ,GAAG,eAAK,GAAG,4CAAS,EACtD,CAAC,OAAO,SAAI,GAAG,qBAAM,EAAE,6CAAU,EAAE,sjBAAgG,EACnI,CAAC,OAAO,2BAAO,EAAE,SAAI,EAAE,SAAI,EAAE,eAAK,EAAE,SAAI,EAAE,qEAAc,EAAE,sFAAgB,EAC1E,CAAC,OAAO,4vBAAiI,EACzI,CAAC,OAAO,yJAA4B,EAAE,2EAAe,EAAE,qBAAM,EAAE,gCAAO,EACtE,CAAC,OAAO,uFAAiB,EAAE,2BAAO,EAAE,SAAI,EAAE,sjBAAgG,EAC1I,CAAC,OAAO,qHAAsB,EAAE,2BAAO,EAAE,SAAI,EAAE,mGAAmB,CAAC,EACnE,CAAC,OAAO,yDAAY,EAAE,SAAI,EAAE,uCAAS,EAAE,4jBAAiG,EACxI,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,yDAAY,EAAE,SAAI,EAAE,2BAAO,EAAE,gFAAe,EACjE,CAAC,OAAO,yGAAoB,EAAE,SAAI,EAAE,eAAK,EAAE,sjBAAgG,EAC3I,CAAC,OAAO,iCAAQ,EAAE,6IAA0B,EAAE,iCAAQ,EAAE,qEAAc,CAAC,EACvE,CAAC,OAAO,eAAK,EAAE,eAAK,EAAE,SAAI,EAAE,spBAAgH,EAC5I,CAAC,OAAO,SAAI,EAAE,qBAAM,GAAG,SAAI,EAAE,SAAI,GAAG,QAAG,EACvC,CAAC,OAAO,6CAAU,GAAG,sjBAAgG,EACrH,CAAC,OAAO,SAAI,GAAG,+JAA6B,CAAC,EAC7C,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,GAAG,sjBAAgG,EAC3H,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,sjBAAgG,EACrH,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,EAC1B,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,qBAAM,GAAG,sjBAAgG,EACjH,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,GAAG,wkBAAmG,EAClH,CAAC,OAAO,SAAI,EAAE,mDAAW,EAAE,iCAAQ,EAAE,SAAI,EAAE,SAAI,EAAE,iCAAQ,EAAE,0BAAM,EACjE,CAAC,OAAO,qBAAM,EAAE,2BAAO,GAAG,sjBAAgG,EAC1H,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,6FAAkB,EAAE,6CAAU,EAAE,qBAAM,EAAE,cAAI,EAC3D,CAAC,OAAO,eAAK,GAAG,wqBAAmH,EACnI,CAAC,OAAO,2HAAuB,EAAE,qEAAc,EAAE,qBAAM,EAAE,0EAAc,EACvE,CAAC,OAAO,iCAAQ,EAAE,SAAI,EAAE,SAAI,GAAG,0lBAAsG,EACrI,CAAC,OAAO,qBAAM,EAAE,mDAAW,EAAE,2BAAO,EAAE,eAAK,GAAG,iCAAQ,EAAE,SAAI,CAAC,EAC7D,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,sjBAAgG,EACtH,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,sLAAgC,EAC/C,CAAC,OAAO,SAAI,EAAE,8tBAA4H,EAC1I,CAAC,OAAO,uCAAS,EAAE,SAAI,EAAE,+DAAa,EAAE,6CAAU,EAAE,mDAAW,EAAE,SAAI,EAAE,cAAI,EAC3E,CAAC,OAAO,6CAAU,EAAE,0rBAAsH,EAC1I,CAAC,OAAO,yPAA4C,GAAG,oBAAK,EAC5D,CAAC,OAAO,iCAAQ,GAAG,eAAK,EAAE,SAAI,EAAE,4jBAAiG,EACjI,CAAC,OAAO,mJAA2B,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,EAAE,oEAAa,EACzE,CAAC,OAAO,SAAI,GAAG,2BAAO,EAAE,SAAI,EAAE,sjBAAgG,EAC9H,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,2KAA+B,EAAE,gXAA+D,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,sjBAAgG,EACrH,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,SAAI,GAAG,4jBAAiG,EAChH,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,SAAI,GAAG,wkBAAmG,EAClH,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,EACpB,CAAC,OAAO,SAAI,GAAG,+PAA6C,EAAE,iCAAQ,EAAE,gOAAuC,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,0BAAM,EAC5B,CAAC,OAAO,SAAI,GAAG,8nBAA4G,EAC3H,CAAC,OAAO,iFAAgB,EAAE,SAAI,EAAE,EAChC,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,yDAAY,EAAE,0HAAsB,EACnD,CAAC,OAAO,2EAAe,EAAE,eAAK,GAAG,wkBAAmG,EACpI,CAAC,OAAO,+DAAa,EAAE,SAAI,EAAE,qHAAsB,EAAE,SAAI,EAAE,QAAG,EAC9D,CAAC,OAAO,+JAA6B,EAAE,wkBAAmG,EAC1I,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,iCAAQ,GAAG,uFAAiB,CAAC,EACtD,CAAC,OAAO,qBAAM,EAAE,SAAI,EAAE,SAAI,EAAE,yDAAY,EAAE,sjBAAgG,EAC1I,CAAC,OAAO,iCAAQ,EAAE,uCAAS,EAAE,EAC7B,CAAC,OAAO,2BAAO,EAAE,eAAK,GAAG,sjBAAgG,EACzH,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,iXAAgE,EAAE,iCAAQ,EAAE,8GAAoB,EAC/G,CAAC,OAAO,SAAI,EAAE,6CAAU,GAAG,yDAAY,CAAC,EACxC,CAAC,OAAO,qBAAM,GAAG,uIAAyB,EAAE,+PAA6C,EAAE,8GAAoB,EAC/G,CAAC,OAAO,SAAI,EAAE,qBAAM,GAAG,SAAI,EAAE,EAC7B,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,qKAA8B,EAAE,qKAA8B,EAAE,kPAA0C,EAC/H,CAAC,OAAO,qBAAM,GAAG,qBAAM,EAAE,EACzB,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,+DAAa,EAAE,2EAAe,EAAE,gFAAe,EAC9D,CAAC,OAAO,uFAAiB,EAAE,eAAK,EAAE,wkBAAmG,EACrI,CAAC,OAAO,eAAK,EAAE,2BAAO,GAAG,2BAAO,GAAG,qBAAM,EAAE,iFAAgB,CAAC,EAC5D,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,iIAAwB,EAAE,iOAAwC,EAAE,SAAI,EAAE,2BAAO,EAAE,8DAAY,EAC9G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,iIAAwB,EAAE,yDAAY,EAAE,whBAA2F,EAC3I,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,yJAA4B,EAAE,QAAG,EAChD,CAAC,OAAO,mDAAW,EAAE,SAAI,EAAE,eAAK,EAAE,0BAAM,EACxC,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,+JAA6B,EAAE,qBAAM,CAAC,EAChE,CAAC,OAAO,SAAI,EAAE,yDAAY,EAAE,eAAK,EAAE,0BAAM,EACzC,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,SAAI,GAAG,SAAI,EAAE,EACpC,CAAC,OAAO,SAAI,EAAE,qBAAM,GAAG,2BAAO,EAAE,gCAAO,EACvC,CAAC,OAAO,kGAAkB,CAC1B,ICvQA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAA,IAAA,SACA,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,QAAG,EAClB,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,0BAAM,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,oBAAK,EACb,CAAC,OAAO,eAAK,EAAE,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,4RAAiD,EACzD,CAAC,OAAO,yJAA4B,EAAE,qBAAM,EAAE,CAC9C,ICtDA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAA,IAAA,SAAC,OAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAU,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAM,CAAC,ICAvqE,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAA,IAAA,SACA,CAAC,IAAI,KAAS,GAAG,EACjB,CAAC,OAAO,iCAAQ,EAAE,6CAAU,EAAE,0BAAM,EACpC,CAAC,OAAO,yDAAY,EAAE,eAAK,EAAE,QAAG,EAChC,CAAC,OAAO,uCAAS,GAAG,uCAAS,EAAE,+DAAa,EAAE,eAAK,EAAE,2BAAO,EAAE,iFAAgB,EAAE,eAAK,EAAE,qEAAc,EAAE,6CAAU,EAAE,0BAAM,EACzH,CAAC,OAAO,qEAAc,EAAE,qBAAM,CAAC,EAC/B,CAAC,OAAO,uCAAS,EAAE,qBAAM,EAAE,sCAAQ,EACnC,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,qEAAc,EAAE,uCAAS,GAAG,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,uCAAS,EAAE,eAAK,EAAE,6CAAU,EAAE,EAClG,CAAC,OAAO,iCAAQ,EAAE,qBAAM,EAAE,SAAI,CAAC,EAC/B,CAAC,OAAO,SAAI,GAAG,4CAAS,EACxB,CAAC,OAAO,6FAAkB,EAAE,2EAAe,EAAE,eAAK,EAAE,SAAI,EAAE,SAAI,GAAG,iCAAQ,EAAE,eAAK,EAAE,qBAAM,CAAC,EACzF,CAAC,OAAO,uCAAS,EAAE,6CAAU,CAAC,EAC9B,CAAC,OAAO,mDAAW,EAAE,EACrB,CAAC,OAAO,SAAI,EAAE,iCAAQ,EAAE,6CAAU,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,6CAAU,EAAE,2BAAO,EAAE,SAAI,GAAG,0BAAM,EAChG,CAAC,OAAO,eAAK,EAAE,qBAAM,EAAE,SAAI,EAAE,SAAI,CAAC,EAClC,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,uCAAS,EAAE,cAAI,EACnC,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,SAAI,EAAE,SAAI,GAAG,6FAAkB,GAAG,uCAAS,EAAE,qBAAM,EAAE,gCAAO,EACtF,CAAC,OAAO,2EAAe,EAAE,eAAK,EAAE,QAAG,EACnC,CAAC,OAAO,iCAAQ,EAAE,iCAAQ,EAAE,EAC5B,CAAC,OAAO,SAAI,GAAG,qEAAc,EAAE,uCAAS,EAAE,eAAK,EAAE,uCAAS,EAAE,qEAAc,GAAG,6CAAU,EAAE,gFAAe,EACxG,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,EACpB,CAAC,OAAO,SAAI,GAAG,4CAAS,EACxB,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,uCAAS,EAAE,qBAAM,EAAE,iCAAQ,EAAE,qBAAM,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,GAAG,6CAAU,EAAE,SAAI,CAAC,EAC/F,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,2BAAO,CAAC,EAClC,CAAC,OAAO,6CAAU,EAAE,4FAAiB,EACrC,CAAC,OAAO,SAAI,GAAG,6CAAU,EAAE,6IAA0B,EAAE,eAAK,EAAE,SAAI,GAAG,kDAAU,EAC/E,CAAC,OAAO,2EAAe,EAAE,eAAK,EAAE,QAAG,EACnC,CAAC,OAAO,uCAAS,GAAG,SAAI,EAAE,0BAAM,EAChC,CAAC,OAAO,SAAI,GAAG,uIAAyB,GAAG,SAAI,GAAG,SAAI,EAAE,6CAAU,EAAE,eAAK,EAAE,SAAI,EAAE,EACjF,CAAC,OAAO,SAAI,GAAG,uCAAS,EAAE,oBAAK,EAC/B,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,cAAI,EACzB,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,6CAAU,EAAE,qBAAM,EAAE,6CAAU,EAAE,iCAAQ,EAAE,uCAAS,EAAE,qBAAM,EAAE,SAAI,GAAG,gCAAO,EACtG,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,uCAAS,EAAE,cAAI,EACpC,CAAC,OAAO,+DAAa,EAAE,eAAK,CAAC,EAC7B,CAAC,OAAO,SAAI,GAAG,2EAAe,EAAE,uCAAS,EAAE,eAAK,EAAE,SAAI,GAAG,SAAI,EAAE,EAC/D,CAAC,OAAO,SAAI,GAAG,uCAAS,CAAC,EACzB,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,CAAC,EAC/B,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,2BAAO,GAAG,uCAAS,EAAE,iCAAQ,EAAE,EACrD,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,kDAAU,EACzB,CAAC,OAAO,SAAI,EAAE,2BAAO,GAAG,iCAAQ,EAAE,eAAK,EAAE,6CAAU,EAAE,SAAI,EAAE,6CAAU,EAAE,qBAAM,EAAE,uCAAS,EAAE,kDAAU,EACpG,CAAC,OAAO,eAAK,EAAE,eAAK,EAAE,qBAAM,CAAC,EAC7B,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,EACrB,CAAC,OAAO,SAAI,GAAG,uCAAS,EAAE,eAAK,EAAE,uCAAS,EAAE,qBAAM,EAAE,uCAAS,EAAE,eAAK,EAAE,2BAAO,GAAG,eAAK,EAAE,uCAAS,EAAE,qBAAM,EAAE,2BAAO,CAAC,EAClH,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,EACpB,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,6CAAU,CAAC,EAC/B,CAAC,OAAO,iCAAQ,EAAE,6CAAU,EAAE,qBAAM,EAAE,uCAAS,EAAE,qBAAM,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,GAAG,uCAAS,EAAE,2BAAO,CAAC,EAChG,CAAC,OAAO,uCAAS,EAAE,qBAAM,EAAE,sCAAQ,EACnC,CAAC,OAAO,SAAI,EAAE,iCAAQ,EAAE,EACxB,CAAC,OAAO,SAAI,GAAG,uCAAS,EAAE,qBAAM,EAAE,2BAAO,EAAE,qEAAc,EAAE,eAAK,EAAE,SAAI,EAAE,SAAI,GAAG,SAAI,GAAG,8DAAY,EAClG,CAAC,OAAO,iFAAgB,EAAE,eAAK,CAAC,EAChC,CAAC,OAAO,uCAAS,EAAE,uCAAS,CAAC,EAC7B,CAAC,OAAO,SAAI,GAAG,uCAAS,EAAE,qBAAM,EAAE,2BAAO,GAAG,SAAI,GAAG,6CAAU,EAAE,qBAAM,EAAE,6CAAU,CAAC,EAClF,CAAC,OAAO,qBAAM,EAAE,2BAAO,EAAE,kDAAU,EACnC,CAAC,OAAO,iCAAQ,EAAE,eAAK,EAAE,SAAI,CAAC,EAC9B,CAAC,OAAO,SAAI,GAAG,6CAAU,GAAG,6CAAU,EAAE,qBAAM,EAAE,6CAAU,EAAE,qBAAM,GAAG,gCAAO,EAC5E,CAAC,OAAO,SAAI,EAAE,gIAAuB,EACrC,CAAC,OAAO,qBAAM,EAAE,yDAAY,CAAC,EAC7B,CAAC,OAAO,2BAAO,GAAG,uCAAS,EAAE,qBAAM,EAAE,iCAAQ,EAAE,eAAK,EAAE,uCAAS,EAAE,+DAAa,GAAG,gCAAO,EACxF,CAAC,OAAO,SAAI,EAAE,qBAAM,EAAE,2BAAO,CAAC,EAC9B,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,EAC1B,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,uCAAS,EAAE,SAAI,EAAE,2BAAO,GAAG,iCAAQ,EAAE,6CAAU,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,EACxF,CAAC,OAAO,mDAAW,GAAG,SAAI,EAAE,QAAG,EAC/B,CAAC,OAAO,uCAAS,EAAE,2BAAO,EAAE,gCAAO,EACnC,CAAC,OAAO,SAAI,EAAE,eAAK,GAAG,6CAAU,EAAE,iFAAgB,EAAE,eAAK,EAAE,uCAAS,EAAE,eAAK,EAAE,SAAI,GAAG,SAAI,EAAE,EAC1F,CAAC,OAAO,SAAI,GAAG,cAAI,EACnB,CAAC,OAAO,qBAAM,EAAE,qBAAM,EAAE,SAAI,CAAC,EAC7B,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,SAAI,GAAG,eAAK,GAAG,uCAAS,EAAE,2BAAO,EAAE,EACxD,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,uCAAS,EAAE,2BAAO,GAAG,oBAAK,EAC/C,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,oBAAK,EAC1B,CAAC,OAAO,2BAAO,EAAE,SAAI,EAAE,EACvB,CAAC,OAAO,SAAI,GAAG,uCAAS,EAAE,qBAAM,EAAE,2BAAO,EAAE,2EAAe,EAAE,eAAK,EAAE,uCAAS,EAAE,qBAAM,EAAE,6CAAU,EAAE,iCAAQ,EAAE,kDAAU,EACtH,CAAC,OAAO,qEAAc,EAAE,eAAK,EAAE,cAAI,EACnC,CAAC,OAAO,2BAAO,EAAE,eAAK,EAAE,wDAAW,EACnC,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,uCAAS,EAAE,iFAAgB,GAAG,SAAI,EAAE,6CAAU,EAAE,qBAAM,EAAE,6CAAU,EAAE,eAAK,EAAE,uCAAS,EAAE,qBAAM,EAAE,4CAAS,EAC3H,CAAC,OAAO,+DAAa,EAAE,EACvB,CAAC,OAAO,qBAAM,EAAE,uCAAS,EAAE,gCAAO,EAClC,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,qBAAM,EAAE,SAAI,EAAE,SAAI,EAAE,2BAAO,EAAE,uCAAS,EAAE,qBAAM,GAAG,iCAAQ,EAAE,2EAAe,EAAE,0BAAM,EAC3G,CAAC,OAAO,yDAAY,EAAE,qBAAM,CAAC,EAC7B,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,6CAAU,EAAE,qBAAM,EAAE,6CAAU,GAAG,SAAI,GAAG,QAAG,EAC1D,CAAC,OAAO,iCAAQ,EAAE,2BAAO,EAAE,qBAAM,CAAC,EAClC,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,CAAC,EACzB,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,6CAAU,EAAE,SAAI,EAAE,SAAI,GAAG,uCAAS,EAAE,2BAAO,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,EACpF,CAAC,OAAO,SAAI,GAAG,2BAAO,CAAC,EACvB,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,qEAAc,EAAE,6CAAU,EAAE,SAAI,GAAG,uCAAS,EAAE,qBAAM,EAAE,+GAAqB,EAAE,eAAK,EAAE,kGAAkB,EAC1H,CAAC,OAAO,mDAAW,EAAE,SAAI,EAAE,QAAG,EAC9B,CAAC,OAAO,qBAAM,EAAE,yDAAY,EAAE,0BAAM,EACpC,CAAC,OAAO,6IAA0B,EAAE,eAAK,EAAE,iIAAwB,EAAE,eAAK,EAAE,qBAAM,GAAG,2BAAO,EAAE,uCAAS,EAAE,qBAAM,EAAE,uCAAS,EAAE,QAAG,EAC/H,CAAC,OAAO,eAAK,EAAE,uCAAS,EAAE,qBAAM,EAAE,QAAG,EACrC,CAAC,OAAO,iCAAQ,EAAE,qBAAM,EAAE,4CAAS,EACnC,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,uCAAS,EAAE,qBAAM,EAAE,uCAAS,EAAE,iFAAgB,EAAE,+DAAa,EAAE,qBAAM,EAAE,qHAAsB,EAAE,eAAK,EAAE,kDAAU,EACvI,CAAC,OAAO,uCAAS,EAAE,iCAAQ,EAAE,0BAAM,EACnC,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,EAC1B,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,qBAAM,EAAE,uCAAS,EAAE,qBAAM,EAAE,6CAAU,EAAE,qBAAM,EAAE,SAAI,GAAG,6CAAU,EAAE,uCAAS,EAAE,SAAI,EAAE,gCAAO,EACpH,CAAC,OAAO,2BAAO,GAAG,0BAAM,EACxB,CAAC,OAAO,yDAAY,EAAE,qBAAM,EAAE,oBAAK,EACnC,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,uCAAS,EAAE,2HAAwB,EAAE,8XAAmE,EAC7H,CAAC,OAAO,eAAK,EAAE,SAAI,EAAE,EACrB,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,EACpB,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,eAAK,EAAE,gbAA4E,EAC5G,CAAC,OAAO,2BAAO,EAAE,SAAI,GAAG,gCAAO,EAC/B,CAAC,OAAO,SAAI,EAAE,qBAAM,EAAE,EACtB,CAAC,OAAO,SAAI,GAAG,uCAAS,EAAE,uCAAS,GAAG,eAAK,GAAG,QAAG,EACjD,CAAC,OAAO,2EAAe,EAAE,wDAAW,EACpC,CAAC,OAAO,iCAAQ,EAAE,2BAAO,EAAE,EAC3B,CAAC,OAAO,2BAAO,GAAG,SAAI,EAAE,EACxB,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,eAAK,EAAE,cAAI,EACpC,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,cAAI,EACzB,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,SAAI,CAAC,EAC3B,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,sCAAQ,EACvB,CAAC,OAAO,SAAI,EAAE,mDAAW,EAAE,SAAI,CAAC,EAChC,CAAC,OAAO,iCAAQ,EAAE,SAAI,GAAG,6XAAkE,CAAC,EAC5F,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,SAAI,CAAC,EAC/B,CAAC,OAAO,SAAI,GAAG,oBAAK,EACpB,CAAC,OAAO,yDAAY,EAAE,2BAAO,EAAE,SAAI,EAAE,qEAAc,EAAE,qEAAc,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,4IAAyB,EAChH,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,oBAAM,EAC5B,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,4CAAU,EAClB,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,SAAI,GAAG,kDAAW,EACxC,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,mDAAW,EAAE,EACrB,CAAC,OAAO,SAAI,GAAG,uCAAS,EAAE,6HAAyB,GAAG,SAAI,GAAG,SAAI,GAAG,kDAAW,EAC/E,CAAC,OAAO,6CAAU,EAAE,eAAK,EAAE,4CAAS,EACpC,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,uCAAS,EAAE,cAAI,EACpC,CAAC,OAAO,qBAAM,GAAG,SAAI,EAAE,EACvB,CAAC,OAAO,+DAAa,EAAE,eAAK,EAAE,oBAAK,EACnC,CAAC,OAAO,qBAAM,EAAE,qBAAM,EAAE,2BAAO,CAAC,EAChC,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,2BAAO,GAAG,SAAI,EAAE,EACpC,CAAC,OAAO,2BAAO,EAAE,uCAAS,EAAE,gCAAO,EACnC,CAAC,OAAO,+DAAa,GAAG,SAAI,CAAC,EAC7B,CAAC,OAAO,SAAI,GAAG,2BAAO,EAAE,eAAK,EAAE,EAC/B,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,EACrB,CAAC,OAAO,2BAAO,EAAE,qBAAM,EAAE,SAAI,CAAC,EAC9B,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,kDAAU,EAC/B,CAAC,OAAO,6CAAU,EAAE,SAAI,GAAG,QAAG,EAC9B,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,EACvB,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,qBAAM,CAAC,EACjC,CAAC,OAAO,mDAAW,EAAE,iCAAQ,EAAE,kDAAU,EACzC,CAAC,OAAO,6CAAU,EAAE,EACpB,CAAC,OAAO,SAAI,GAAG,iCAAQ,EAAE,cAAI,EAC7B,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,qBAAM,EAAE,sCAAQ,EACzC,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,EACpB,CAAC,OAAO,SAAI,GAAG,iCAAQ,EAAE,eAAK,EAAE,mDAAW,EAAE,SAAI,EAAE,8bAA4E,EAC/H,CAAC,OAAO,uCAAS,EAAE,qBAAM,EAAE,sCAAQ,EACnC,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,GAAG,uCAAS,EAAE,olBAAqG,EAC/H,CAAC,OAAO,yDAAY,EAAE,iCAAQ,EAAE,QAAG,EACnC,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,QAAG,EACxB,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,sjBAAgG,EAC3H,CAAC,OAAO,SAAI,GAAG,sCAAQ,EACvB,CAAC,OAAO,SAAI,EAAE,qBAAM,EAAE,6CAAU,CAAC,EACjC,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,GAAG,2HAAuB,EAAE,saAAwE,EAC5H,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,qBAAM,CAAC,EAChC,CAAC,OAAO,6CAAU,EAAE,SAAI,GAAG,cAAI,EAC/B,CAAC,OAAO,2BAAO,EAAE,2BAAO,GAAG,iXAAgE,EAAE,2BAAO,EAAE,gIAAuB,EAC7H,CAAC,OAAO,SAAI,GAAG,uCAAS,CAAC,EACzB,CAAC,OAAO,2BAAO,EAAE,uCAAS,EAAE,eAAK,CAAC,EAClC,CAAC,OAAO,6CAAU,EAAE,eAAK,EAAE,SAAI,GAAG,sjBAAgG,EAClI,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,EACpB,CAAC,OAAO,SAAI,GAAG,8DAAY,EAC3B,CAAC,OAAO,qBAAM,EAAE,uCAAS,EAAE,qBAAM,EAAE,8kBAAoG,EACvI,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,gCAAO,EAC5B,CAAC,OAAO,SAAI,GAAG,gCAAO,EACtB,CAAC,OAAO,SAAI,EAAE,qEAAc,GAAG,sjBAAgG,EAC/H,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,EACpB,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,EACvB,CAAC,OAAO,eAAK,EAAE,SAAI,GAAG,yJAA4B,EAAE,wYAAmE,EACvH,CAAC,OAAO,mDAAW,EAAE,qBAAM,EAAE,0BAAM,EACnC,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,0BAAM,EAC3B,CAAC,OAAO,SAAI,GAAG,+YAAqE,EAAE,SAAI,EAAE,0KAA8B,EAC1H,CAAC,OAAO,6CAAU,EAAE,6CAAU,EAAE,QAAG,EACnC,CAAC,OAAO,2BAAO,EAAE,uCAAS,EAAE,eAAK,CAAC,EAClC,CAAC,OAAO,yDAAY,EAAE,SAAI,EAAE,gmBAAuG,EACnI,CAAC,OAAO,SAAI,EAAE,qBAAM,EAAE,uCAAS,EAAE,oBAAK,EACtC,CAAC,OAAO,yDAAY,EAAE,eAAK,EAAE,0BAAM,EACnC,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,kDAAU,EACzB,CAAC,OAAO,uCAAS,EAAE,uCAAS,EAAE,oBAAK,EACnC,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,qBAAM,EAAE,SAAI,EAAE,iFAAgB,EAAE,gdAA+E,EACzI,CAAC,OAAO,eAAK,EAAE,eAAK,EAAE,kDAAU,EAChC,CAAC,OAAO,6CAAU,EAAE,SAAI,EAAE,EAC1B,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,sjBAAgG,EACrH,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,EACvB,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,0BAAM,EAChC,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,qBAAM,EAAE,SAAI,EAAE,ugBAAyF,EAAE,cAAI,EACtI,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,SAAI,GAAG,4CAAS,EACxB,CAAC,OAAO,SAAI,EAAE,qBAAM,EAAE,6CAAU,EAAE,qHAAsB,EAAE,wbAA2E,EACrI,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,eAAK,CAAC,EAChC,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,+DAAa,EAAE,qBAAM,EAAE,mPAA2C,EAAE,4UAAyD,EACrI,CAAC,OAAO,uCAAS,EAAE,uCAAS,EAAE,oBAAK,EACnC,CAAC,OAAO,iCAAQ,GAAG,cAAI,EACvB,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,6CAAU,EAAE,qBAAM,EAAE,4CAAS,EACrC,CAAC,OAAO,SAAI,EAAE,qBAAM,EAAE,uCAAS,EAAE,QAAG,EACpC,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,SAAI,EAAE,kkBAAkG,EAClI,CAAC,OAAO,uIAAyB,CAAC,EAClC,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,qBAAM,EAAE,EAC7B,CAAC,OAAO,2BAAO,EAAE,uCAAS,EAAE,qBAAM,EAAE,kkBAAkG,EACtI,CAAC,OAAO,iCAAQ,EAAE,eAAK,EAAE,gCAAO,EAChC,CAAC,OAAO,+DAAa,EAAE,6CAAU,CAAC,EAClC,CAAC,OAAO,6CAAU,EAAE,uCAAS,GAAG,wkBAAmG,EACnI,CAAC,OAAO,yDAAY,EAAE,qBAAM,EAAE,oBAAK,EACnC,CAAC,OAAO,qBAAM,EAAE,2BAAO,EAAE,2BAAO,CAAC,EACjC,CAAC,OAAO,6FAAkB,EAAE,2BAAO,EAAE,kkBAAkG,EACvI,CAAC,OAAO,2BAAO,EAAE,qBAAM,CAAC,EACxB,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,qWAA8D,EAAE,eAAK,EAAE,kJAA0B,EACzG,CAAC,OAAO,6CAAU,EAAE,qKAA8B,EAAE,eAAK,GAAG,iFAAgB,EAAE,iCAAQ,EAAE,wDAAW,EACnG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,CACxG,IChRA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAA,IAAA,SACA,CAAC,IAAI,KAAS,GAAG,EACjB,CAAC,OAAO,0XAAiE,EACzE,CAAC,OAAO,6WAAiE,EAAE,0KAA8B,EACzG,CAAC,OAAO,mNAAsC,EAAE,gIAAuB,EACvE,CAAC,OAAO,6FAAkB,EAAE,SAAI,EAAE,SAAI,EAAE,2BAAO,GAAG,SAAI,EAAE,EACxD,CAAC,OAAO,iCAAQ,GAAG,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,EAC5C,CAAC,OAAO,SAAI,GAAG,gCAAO,EACtB,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;QCAA,IAAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECAA,IAAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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MACNA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,IAAM,MACNA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,IAAM,MACNA,IAAM,MACN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",
  "names": ["init_sentry_release_injection_stub", "__esmMin", "_global", "require_lib", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "toArr", "any", "toVal", "out", "key", "val", "opts", "x", "old", "nxt", "args", "k", "arr", "arg", "name", "i", "j", "idx", "len", "alibi", "strict", "defaults", "keys", "findPrettierIgnoreFiles", "startPath", "ignoreFiles", "currentDir", "path", "ignoreFile", "fs", "gitDir", "loadPrettier", "absoluteFilePath", "builtInPrettier", "localPrettier", "createRequireFromPath", "prettierFormat", "workingDirectory", "code", "parser", "filePath", "basePath", "prettier", "config", "import_prettier", "import_node_module", "import_node_path", "import_node_fs", "init_prettier", "__esmMin", "init_sentry_release_injection_stub", "PREVIEW_URL_QS", "FRAMEWORK_QS", "PLATFORM_QS", "NODE_VERSION_QS", "BUILDER_AUTH_CONNECT_PATH", "BUILDER_AUTH_RETURN_PATH", "DEV_TOOLS_API_PATH", "DEV_TOOLS_CLIENT_SCRIPT_PATH", "DEV_TOOLS_SERVER_CLOSE_PATH", "DEV_TOOLS_MAPPINGS_PATH", "init_constants", "__esmMin", "init_sentry_release_injection_stub", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "cursor", "x", "y", "ret", "count", "scroll", "erase", "clear", "i", "require_picocolors", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "p", "argv", "env", "isColorSupported", "formatter", "open", "close", "replace", "input", "string", "index", "replaceClose", "result", "cursor", "createColors", "enabled", "f", "ansiRegex", "onlyFirst", "pattern", "stripAnsi", "string", "regex", "L", "e", "stringWidth", "options", "emojiRegex", "ambiguousCharacterWidth", "width", "character", "codePoint", "eastAsianWidth", "assembleStyles", "codes", "groupName", "group", "styles", "styleName", "style", "wrapAnsi16", "wrapAnsi256", "wrapAnsi16m", "ANSI_BACKGROUND_OFFSET", "red", "green", "blue", "hex", "matches", "colorString", "integer", "code", "remainder", "value", "result", "wrapAnsi", "columns", "line", "exec", "isActionKey", "key", "action", "settings", "diffLines", "a", "b", "aLines", "bLines", "diff", "i", "isCancel", "CANCEL_SYMBOL", "setRawMode", "input", "block", "stdin", "output", "stdout", "overwrite", "hideCursor", "rl", "clear", "data", "name", "sequence", "str", "cursor", "isWindows", "W", "sD", "foregroundColorNames", "backgroundColorNames", "ansiStyles", "ESCAPES", "END_CODE", "ANSI_ESCAPE_BELL", "ANSI_CSI", "ANSI_OSC", "ANSI_SGR_TERMINATOR", "ANSI_ESCAPE_LINK", "wrapAnsiCode", "wrapAnsiHyperlink", "wordLengths", "wrapWord", "stringVisibleTrimSpacesRight", "actions", "v", "s", "Prompt", "ConfirmPrompt", "_selectableGroups", "o", "l", "SD", "OD", "PD", "J", "SelectPrompt", "TextPrompt", "eaw", "module", "x", "y", "stringToArray", "characters", "len", "text", "start", "end", "eawLen", "chars", "char", "charLen", "FD", "offset", "uri", "rows", "word", "isInsideEscape", "isInsideLinkEscape", "visible", "index", "characterLength", "words", "last", "returnValue", "escapeCode", "escapeUrl", "lengths", "rowLength", "remainingColumns", "breaksStartingThisLine", "row", "pre", "groups", "t", "trackValue", "__publicField", "render", "signal", "opts", "event", "params", "cb", "cbs", "cleanup", "subscriber", "resolve", "reject", "sink", "Writable", "chunk", "encoding", "done", "readline", "problem", "lines", "wrap", "frame", "diffLine", "erase", "newLines", "confirm", "allSelected", "selected", "u", "s1", "s2", "s3", "color", "isUnicodeSupported", "process", "unicode", "s", "S_STEP_ACTIVE", "S_STEP_CANCEL", "S_STEP_ERROR", "S_STEP_SUBMIT", "S_BAR_START", "S_BAR", "S_BAR_END", "S_RADIO_ACTIVE", "S_RADIO_INACTIVE", "S_CHECKBOX_ACTIVE", "S_CHECKBOX_SELECTED", "S_CHECKBOX_INACTIVE", "S_PASSWORD_MASK", "S_BAR_H", "S_CORNER_TOP_RIGHT", "S_CONNECT_LEFT", "S_CORNER_BOTTOM_RIGHT", "S_INFO", "S_SUCCESS", "S_WARN", "S_ERROR", "symbol", "limitOptions", "text", "confirm", "select", "multiselect", "note", "cancel", "intro", "outro", "log", "prefix", "stream", "spinner", "c", "fallback", "state", "color", "params", "cursor", "options", "style", "paramMaxItems", "outputMaxItems", "maxItems", "slidingWindowLocation", "shouldRenderTopEllipsis", "shouldRenderBottomEllipsis", "option", "i", "arr", "isTopLimit", "isBottomLimit", "opts", "TextPrompt", "title", "placeholder", "value", "active", "inactive", "ConfirmPrompt", "opt", "label", "SelectPrompt", "item", "MultiSelectPrompt", "selected", "styleOption", "footer", "ln", "message", "lines", "titleLen", "strip", "len", "sum", "line", "msg", "parts", "firstLine", "iterable", "lineWidth", "chunk", "chunkLen", "indicator", "frames", "delay", "isCI", "unblock", "loop", "isSpinnerActive", "_message", "_prevMessage", "_origin", "handleExit", "code", "stop", "errorEventHandler", "signalEventHandler", "registerHooks", "clearHooks", "clearPrevMessage", "prevLines", "erase", "parseMessage", "formatTimer", "origin", "duration", "min", "secs", "start", "block", "frameIndex", "indicatorTimer", "frame", "loadingDots", "step", "codeToSource", "sys", "code", "codeToStatement", "sourceFile", "sourceToCode", "node", "removeComments", "printer", "init_transform", "__esmMin", "init_sentry_release_injection_stub", "require_which_pm_runs", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "pmFromUserAgent", "userAgent", "pmSpec", "separatorPos", "name", "isMapperFile", "fileName", "getImportPath", "sys", "containingModulePath", "moduleToImportPath", "normalizePathSlash", "p", "path", "getComponentImportNameFilePath", "filePath", "ext", "parts", "getComponentImportName", "str", "getComponentDisplayName", "getComponentDisplayNameFromFilePath", "getComponentImportPath", "absFilePath", "relFilePath", "frameworks", "f", "getDisplayFilePath", "part", "sortComponents", "cmps", "a", "b", "getComponentId", "exportName", "externalImportPath", "getLocalAppId", "isNumber", "v", "isBoolean", "isString", "isValidJsxTag", "tag", "clone", "obj", "shouldSkipFolder", "skipFolders", "folder", "getPackageManager", "detected", "detectPackageManager", "isWindows", "builderNpxPackage", "sanitizeComponentName", "name", "import_which_pm_runs", "init_utils", "__esmMin", "init_sentry_release_injection_stub", "hasTsconfig", "sys", "tsconfigPath", "findBuilderRegistry", "defaultFolder", "walk", "root", "depth", "files", "file", "skipFolders", "filePath", "stat", "result", "registryFileName", "findPackageJson", "dir", "fsRoot", "i", "pkgJsonPath", "content", "findUpNodeModules", "p", "nodeModulesDir", "recursiveFindDir", "findDirectoryName", "itemNames", "itemName", "itemPath", "foundDir", "r", "init_fs", "__esmMin", "init_sentry_release_injection_stub", "createTsProgram", "sys", "filePaths", "overrideTsOptions", "nodeModulesPath", "findUpNodeModules", "tsLibDir", "existsCache", "host", "p", "nm", "NODE_MODULE_CACHE", "stat", "codeToSource", "fileName", "ext", "LIB_CACHE", "MissingTsLibError", "content", "createHostProgram", "e", "fetchLib", "programOpts", "tsConfigPath", "options", "TSCONFIG_CACHE", "configFile", "_", "clone", "getTypeChecker", "filePath", "tsProgram", "sourceFile", "libName", "libUrl", "PENDING_LIB_CACHE", "rsp", "transpileFile", "opts", "code", "transpileModule", "result", "output", "d", "init_typescript", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_fs", "builderVersion", "pkgVersion", "init_version", "__esmMin", "init_sentry_release_injection_stub", "detectFrameworks", "sys", "frameworks", "pkgJson", "findPackageJson", "depFrameworks", "detectFrameworksFromPackageJson", "depNames", "depName", "FRAMEWORKS", "f", "payload", "VERSION_RESOLVER", "parseSemanticVersionNumber", "versionFragment", "parsed", "init_detect_frameworks", "__esmMin", "init_sentry_release_injection_stub", "init_fs", "init_utils", "packageManager", "getPackageManager", "command", "stdout", "nextInfo", "version", "major", "minor", "patch", "getBuilderCache", "sys", "cachePath", "getCachePath", "contents", "setBuilderCache", "cache", "rootDir", "init_cache", "__esmMin", "init_sentry_release_injection_stub", "getDotEnvValue", "sys", "dotEnvFileNames", "envKey", "envInfo", "dotEnvFileName", "envPath", "envVars", "parseDotEnvFile", "value", "envContent", "parseDotEnvContent", "lines", "match", "DOTENV_LINE", "key", "maybeQuote", "setDotEnvVar", "comment", "error", "init_dotenv", "__esmMin", "init_sentry_release_injection_stub", "getNextApiKey", "sys", "getDotEnvValue", "NEXT_BUILDER_API_KEY_ENV", "setNextApiKey", "publicApiKey", "env", "modifiedType", "setDotEnvVar", "init_next_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_dotenv", "SDK_VERSIONS", "SPACE_KIND", "init_types", "__esmMin", "init_sentry_release_injection_stub", "setObjectExpressionProperty", "sys", "obj", "propName", "propValue", "deleteIfNullOrUndefined", "props", "p", "i", "getObjLiteralPropertyIndex", "_", "j", "valueToExpression", "getTextOfPropertyName", "expressionToValue", "exp", "convertArrayExpressionToJsArray", "objectExpressionToObjectValue", "objectLiteral", "prop", "attrName", "arr", "el", "expression", "val", "valueToTsExpression", "refs", "arrayToArrayExpression", "objectToObjectLiteral", "list", "newList", "l", "newProperties", "key", "init_convert_values", "__esmMin", "init_sentry_release_injection_stub", "parseComponentSourcePropsFromNode", "sys", "typeChecker", "fnNode", "inputs", "properties", "fnParams", "propsNode", "type", "classDecl", "extendTypes", "h", "extendType", "typeArguments", "propsTypeNode", "callSignatures", "params", "symbol", "input", "parseComponentSourceInputFromSymbol", "shouldIncludeInput", "parseComponentSourceInputFromJsDocs", "value", "propName", "builderInputType", "nonPrimitiveType", "nodeType", "typeString", "normlizedBuilderType", "normalizeBuilderInputType", "isValidBuilderObjectType", "t", "resolvedType", "resolveType", "hasQuotes", "removeQuotes", "jsDocComments", "jsDoc", "tag", "jsDocType", "jsDocPropertyTags", "jsDocPropertyTag", "paramPropName", "typeExp", "VALID_OBJECT_TYPES", "INPUT_TYPES", "i", "text", "thirdChar", "PROP_BLACKLIST", "typeToString", "parseDocsType", "init_component_input_types", "__esmMin", "init_sentry_release_injection_stub", "checker", "set", "hasTrue", "hasFalse", "parts", "p", "TYPE_FORMAT_FLAGS", "s", "parseRegisteredComponentInfo", "sys", "cmpInfo", "cmpObjLit", "p", "propName", "getTextOfPropertyName", "registeredInputs", "parseRegisteredComponentInputs", "mergeComponentInputs", "meta", "expressionToValue", "arr", "inputs", "elm", "parseRegisteredComponentInput", "obj", "builderInput", "cmpInput", "normalizeBuilderInput", "updateComponentObjLiteralInfoProperties", "cmpObjExp", "builderCmp", "mapDevToolsCmpToBuilderCmp", "setObjectExpressionProperty", "updateComponentObjLiteralInputsProperty", "sortComponentInfoProperties", "arrExp", "props", "inputsIndex", "inputsObj", "updateComponentInputsArrayLiteralExp", "i", "mapDevToolsInputToBuilderInput", "isString", "isNumber", "isBoolean", "objLiteralExps", "inputName", "inputValue", "input", "updateComponentInputObjLiteralExp", "a", "b", "aProp", "bProp", "aInit", "bInit", "aName", "bName", "index", "prop", "updateComponentInputValue", "newInputObj", "objLiteralExp", "propAssignments", "inputKeys", "k", "inputKey", "updateComponentInputPropAssignment", "sortComponentInputProperties", "propIndex", "valueToExpression", "cmp", "componentAcceptsChildren", "normalizedBuilderType", "normalizeBuilderInputType", "normalizeComponentInput", "hasChildrenProp", "hasJsxProp", "tsType", "aIndex", "INFO_PROP_SORT", "bIndex", "INPUT_PROP_SORT", "componentHasAcceptChildrenProp", "initializer", "init_component_info", "__esmMin", "init_sentry_release_injection_stub", "init_convert_values", "init_component_input_types", "init_utils", "createNextRegisteredComponent", "sys", "cmpInfo", "code", "importPath", "getImportPath", "registerStatement", "codeToStatement", "updateNextRegisteredComponent", "callExp", "args", "cmpObjExp", "updateComponentObjLiteralInfoProperties", "init_next_component_info", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_component_info", "ensureImport", "sys", "sourceFile", "opts", "moduleType", "namedImport", "ensureNamedImport", "ensureDefaultImport", "importPath", "isTypeOnly", "ensureCjsImports", "ensureEsmImports", "defaultImport", "statements", "lastImportIndex", "madeNameImportChange", "madeDefaultImportChange", "i", "n", "existingNamedImports", "namedImports", "e", "a", "b", "defaultIdentifier", "namedBindings", "newImport", "lastRequireIndex", "varStatement", "d", "declarations", "decl", "requireCallExp", "requireCallExpName", "requireCallExpArg", "elements", "newRequire", "init_ensure_imports", "__esmMin", "init_sentry_release_injection_stub", "getExportedStatements", "sys", "sourceFile", "moduleType", "getCjsExportedStatements", "getEsmExportedStatements", "exports", "s", "elm", "identifierName", "s2", "d", "isDefaultExport", "exportedIdentifier", "m", "left", "right", "init_exported_statements", "__esmMin", "init_sentry_release_injection_stub", "getImportPathFromIdentifier", "sys", "sourceFile", "identifierName", "s", "elm", "getFilePathFromIdentifier", "containerPath", "filePath", "resolveComponentPath", "relFilePath", "getDisplayFilePath", "findVariableStatement", "variableName", "i", "statement", "declaration", "findArrayStatementInitializer", "hasJsxNode", "n", "isJsxNode", "foundJsx", "c", "ext", "RESOLVE_EXTS", "tryExt", "checkPath", "init_utils", "__esmMin", "init_sentry_release_injection_stub", "getSourceDependencies", "sys", "typeChecker", "fnNode", "symbol", "valueDeclaration", "filePath", "moduleName", "getModuleNameFromPath", "normalizePathSlash", "parts", "nodeModuleIndex", "moduleParts", "getAppDependencies", "cmps", "deps", "cmp", "dep", "d", "a", "b", "init_app_dependencies", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "getImportedStatements", "sys", "sourceFile", "moduleType", "getCjsImportedStatements", "getEsmImportedStatements", "exports", "s", "externalImportRegex", "n", "_sys", "_sourceFile", "init_imported_statements", "__esmMin", "init_sentry_release_injection_stub", "parseReactAllComponentSourceInputs", "sys", "components", "c", "tsProgram", "createTsProgram", "typeChecker", "cmp", "sourceFile", "typedSrcCmp", "getReactComponentsFromSourceFile", "t", "parseComponentSourcePropsFromNode", "parseReactComponentSourceInputs", "srcCmp", "includeImports", "getTypeChecker", "getReactComponentsFromPath", "filePath", "ext", "code", "getReactComponentsFromCode", "codeToSource", "fileCmps", "s", "exports", "getExportedStatements", "getImportedStatements", "exp", "sCmps", "getReactComponentSource", "srcCmps", "relFilePath", "importPath", "getComponentImportPath", "declaration", "isValidJsxTag", "cmpExp", "getReactComponentExpression", "cmpName", "exportName", "exportType", "getComponentId", "getDisplayFilePath", "getComponentDisplayName", "getComponentDisplayNameFromFilePath", "getComponentImportNameFilePath", "fnName", "modulePath", "moduleSpecifier", "closestExportDeclaration", "closestImportDeclaration", "symbol", "exportedComponentNames", "extractReactComponentsFromModule", "node", "x", "hasJsxNode", "getSourceDependencies", "args", "reactIdentifier", "forwardRefIdentifier", "expIdentifier", "nameIdentifier", "callSignatures", "expression", "asExpression", "componentExp", "getReactSourceComponentsFromDir", "cmps", "sourceFiles", "shouldSkipFolder", "SKIP_FOLDERS", "a", "b", "moduleSymbol", "exportedSymbols", "isLikelyReactComponent", "importName", "error", "aliasedDeclaration", "signature", "returnType", "isJsxElement", "clause", "type", "sig", "typeString", "init_react_components", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_exported_statements", "init_typescript", "init_component_input_types", "init_app_dependencies", "init_imported_statements", "getNextSourceComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "sourceFile", "fileName", "SKIP_APP_FILES", "filePath", "fileCmps", "getReactComponentsFromSourceFile", "isMapperFile", "a", "b", "init_next_components", "__esmMin", "init_sentry_release_injection_stub", "init_react_components", "init_utils", "normalizeImports", "sys", "sourceFile", "externalImportStatements", "importStatements", "unknownImportStatements", "statements", "statement", "importPath", "importClause", "sortImports", "normalizeLineBreaks", "code", "lines", "l", "foundImport", "i", "line", "a", "b", "aText", "getImportName", "bText", "s", "namedBindings", "ensureUseClientStringLiteral", "removeUseClientStringLiteral", "normalizeRegisteredArrayElements", "elements", "aName", "getNameProperty", "bName", "obj", "prop", "p", "getTextOfPropertyName", "init_normalize_statements", "__esmMin", "init_sentry_release_injection_stub", "init_convert_values", "parseNextRegistryFromFile", "sys", "code", "parseNextRegistryFromCode", "codeToSource", "sourceFile", "SDK_VERSIONS", "parseNextRegistryFromSourceSdkGen2", "parseNextRegistryFromSource", "cmps", "i", "s", "exp", "propAccessExp", "propAccessExpIdentifier", "args", "infoArg", "cmpArg", "fnName", "wrappedCmpArg", "checkWrapperFunction", "cmp", "parseNextRegisteredDynamicComponent", "cmpArgArgs", "parseNextRegisteredIdentifierComponent", "sortComponents", "node", "statementIndex", "dynamicArg", "withChildrenWrapper", "importArgArgs", "importArgArg", "importBody", "importPathArg", "importPath", "resolvedPath", "resolveNextImportPath", "getComponentImportPath", "getComponentDisplayNameFromFilePath", "paranthesizedExp", "awaitExpr", "callExp", "getComponentDisplayName", "parseRegisteredComponentInfo", "getDisplayFilePath", "getComponentId", "identifierArg", "importDeclarations", "defaultImportDeclaration", "namedImportDeclaration", "e", "resolveComponentPath", "ensureBuilderIsInitialized", "typescriptEnabled", "isApiKeyInitialized", "lastImportIndex", "statements", "envKeyExpression", "NEXT_BUILDER_API_KEY_ENV", "nonNullEnvKeyExpression", "initializeBuilderApiKey", "findArrayStatementInitializer", "cmpElm", "parseNextRegisteredComponentSdkGen2", "cmpObjLit", "componentHasAcceptChildrenProp", "p", "getTextOfPropertyName", "identifierName", "initializer", "getFilePathFromIdentifier", "init_next_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_transform", "init_utils", "init_convert_values", "init_component_info", "init_next_api_key", "removeUnusedImports", "sys", "sourceFile", "statements", "madeUpdates", "importDec", "removeImportDeclaration", "namedBindings", "namedBindingsElements", "j", "namedImportElement", "importName", "namedImportFn", "isIdentifierFound", "updatedImport", "s", "node", "identifier", "foundIdentifier", "visit", "childNode", "init_remove_unused_imports", "__esmMin", "init_sentry_release_injection_stub", "updateRegistry", "cmpId", "srcCmps", "regCmps", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "addCmpToRegistry", "removeCmpFromRegistry", "updateRegisteredCmp", "nodeIndex", "clone", "srcCmpInfo", "c", "regCmpInfo", "i", "updateCmpInfoValues", "input", "updateCmpInputValues", "mergeComponents", "sourceComponents", "registeredCmps", "cmps", "sortComponents", "r", "cmp", "normalizeComponentInput", "a", "b", "regCmp", "componentAcceptsChildren", "externalCmp", "cmpInfo", "isString", "cmpInput", "isNumber", "isBoolean", "init_component_registry", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "init_component_info", "createReactTsProgram", "sys", "entryPaths", "recursive", "childDir", "itemNames", "itemName", "itemPath", "ext", "createTsProgram", "init_react_ts_program", "__esmMin", "init_sentry_release_injection_stub", "init_typescript", "ensureArrayStatement", "sys", "sourceFile", "opts", "findVariableStatement", "appendArrayStatement", "arrayType", "initializer", "variableDeclaration", "variableDeclarationList", "exportModifier", "variableStatement", "statements", "init_ensure_array_statement", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "nextComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "typescriptEnabled", "nextApiKey", "getNextSourceComponentsFromDir", "parseNextRegistryFromFile", "hasTsconfig", "getNextApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseReactAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseReactComponentSourceInputs", "isMapperFile", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "SDK_VERSIONS", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getNextRegisteredComponentSourceSdkGen2", "createNextRegisteredComponentSdkGen2", "element", "updateComponentObjLiteralInfoProperties", "createNextComponentPropertyAssignmentSdkGen2", "statements", "normalizeRegisteredArrayElements", "ensureNextComponentImportStatements", "ensureImport", "ensureArrayStatement", "createNextRegisteredComponent", "updateNextRegisteredComponent", "ensureBuilderIsInitialized", "removeUnusedImports", "normalizeImports", "removeUseClientStringLiteral", "code", "sourceToCode", "normalizeLineBreaks", "ensureUseClientStringLiteral", "identifier", "getDynamicComponentImport", "createNextAcceptChildrenPropertyAssignmentSdkGen2", "s", "findArrayStatementInitializer", "ex", "i", "parseNextRegisteredComponentSdkGen2", "regCmp", "importPath", "getImportPath", "useArrowFunction", "arrowFunctionBody", "arrowFunction", "init_next_registry", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_next_component_info", "init_typescript", "init_ensure_imports", "init_transform", "init_next_components", "init_utils", "init_normalize_statements", "init_next_registry_parse", "init_react_components", "init_remove_unused_imports", "init_component_registry", "init_component_info", "init_react_ts_program", "init_app_dependencies", "init_next_api_key", "init_ensure_array_statement", "init_fs", "nextEnsureBuilderSetup", "sys", "modifiedFiles", "counterCmpPath", "nextEnsureCounterComponent", "nextEnsureBuilderRegistry", "nextAppEnsureBuilderSetup", "nextPagesEnsureBuilderSetup", "nextEnsureFigmaImportPageSetup", "nextAppEnsureFigmaImportSetup", "nextPagesEnsureFigmaImportSetup", "appDir", "routeFileName", "routePath", "code", "getNextAppRoute", "getNextAppBuilderComponent", "ts", "SDK_VERSIONS", "getImportPath", "NEXT_BUILDER_API_KEY_ENV", "generatePagePropsType", "modelName", "buildContentImport", "pagesDir", "getNextPagesRoute", "ext", "counterCmpDir", "counterStylesPath", "component", "styles", "getCounterComponent", "getNextBuilderRegistryReactGen2", "counterCmp", "nextComponentRegistry", "c", "init_next_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_utils", "init_next_api_key", "init_next_registry", "detectReactSdkVersion", "sys", "pkgJson", "findPackageJson", "depNames", "SDK_VERSIONS", "init_react_builder_sdk_setup", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_fs", "createNextDevTools", "sys", "nextSys", "createNextDevToolsSys", "nextEnsureBuilderSetup", "nextEnsureFigmaImportPageSetup", "opts", "nextComponentRegistry", "pkgName", "r", "c", "getNextApiKey", "setNextApiKey", "SDK_VERSIONS", "getBuilderCache", "cache", "setBuilderCache", "rootDir", "srcDir", "nextConfigPath", "getNextConfigPath", "typescriptEnabled", "hasTsconfig", "nextFramework", "f", "features", "externalPackages", "path", "realFiles", "detectReactSdkVersion", "srcAppDir", "srcPagesDir", "findBuilderRegistry", "appDir", "pagesDir", "nextConfigTsPath", "nextConfigMjsPath", "nextConfigJsPath", "init_next", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_next_api_key", "init_next_registry", "init_next_ensure_builder_setup", "init_types", "init_react_builder_sdk_setup", "init_fs", "getQwikApiKey", "sys", "getDotEnvValue", "QWIK_BUILDER_API_KEY_ENV", "setQwikApiKey", "publicApiKey", "setBuilderPublicApiKeyEnvVar", "env", "modifiedType", "setDotEnvVar", "init_qwik_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_dotenv", "ensureComments", "code", "commentText", "lineTextAfterComments", "lines", "lineIndex", "l", "commentLines", "c", "init_ensure_comments", "__esmMin", "init_sentry_release_injection_stub", "getQwikComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "sourceFile", "fileName", "QWIK_SKIP", "filePath", "fileCmps", "getQwikComponentsFromSourceFile", "getQwikComponentsFromPath", "code", "getQwikComponentsFromCode", "codeToSource", "exports", "getExportedStatements", "exp", "sCmp", "getQwikComponentSource", "_typeChecker", "relFilePath", "importPath", "getComponentImportPath", "declaration", "cmpExp", "getQwikComponentExpression", "cmpName", "getComponentId", "getDisplayFilePath", "getComponentDisplayName", "getComponentDisplayNameFromFilePath", "getComponentImportNameFilePath", "arg", "init_qwik_components", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_exported_statements", "parseQwikComponentSourceInputs", "sys", "srcCmp", "fnNode", "sourceFile", "typeChecker", "getTypeChecker", "getQwikComponentsFromSourceFile", "t", "parseComponentSourcePropsFromNode", "init_qwik_component_source_inputs", "__esmMin", "init_sentry_release_injection_stub", "init_qwik_components", "init_typescript", "init_component_input_types", "qwikEnsureBuilderSetup", "sys", "qwikEnsureBuilderRegistry", "modifiedFiles", "DEFAULT_REGISTRY", "init_qwik_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "parseQwikRegistryFromFile", "sys", "qwikEnsureBuilderRegistry", "code", "parseQwikRegistryFromCode", "codeToSource", "sourceFile", "parseRegistryFromSource", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseQwikRegisteredComponent", "sortComponents", "cmpObjLit", "p", "getTextOfPropertyName", "identifierName", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "getQwikComponentsFromPath", "namedCmp", "c", "parseRegisteredComponentInfo", "getComponentId", "init_qwik_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_qwik_components", "init_convert_values", "init_component_info", "init_qwik_ensure_builder_setup", "createQwikTsProgram", "sys", "entryPaths", "recursive", "childDir", "itemNames", "itemName", "itemPath", "ext", "createTsProgram", "init_qwik_ts_program", "__esmMin", "init_sentry_release_injection_stub", "init_typescript", "qwikComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createQwikTsProgram", "srcCmps", "parsedRegistry", "qwikApiKey", "getQwikComponentsFromDir", "parseQwikRegistryFromFile", "getQwikApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "srcCmp", "sourceFile", "cmpInfo", "sourceInputs", "parseQwikComponentSourceInputs", "mergeComponentInputs", "update", "updateRegistry", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getQwikRegisteredComponentSource", "madeChanges", "createQwikRegisteredComponent", "updateComponentObjLiteralInfoProperties", "statements", "normalizeRegisteredArrayElements", "ensureImport", "getImportPath", "ensureArrayStatement", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "ensureComments", "COMMENTS", "s", "findArrayStatementInitializer", "ex", "i", "parseQwikRegisteredComponent", "init_qwik_registry", "__esmMin", "init_sentry_release_injection_stub", "init_ensure_comments", "init_ensure_imports", "init_ensure_array_statement", "init_utils", "init_qwik_components", "init_component_registry", "init_normalize_statements", "init_qwik_component_source_inputs", "init_qwik_registry_parse", "init_remove_unused_imports", "init_transform", "init_component_info", "init_qwik_ts_program", "init_app_dependencies", "init_qwik_api_key", "createQwikCityDevTools", "sys", "qwikSys", "createQwikDevToolsSys", "qwikEnsureBuilderSetup", "opts", "qwikComponentRegistry", "_pkgName", "r", "c", "getQwikApiKey", "setQwikApiKey", "_opts", "getBuilderCache", "cache", "setBuilderCache", "componentsDir", "recursiveFindDir", "registryPath", "findBuilderRegistry", "envPath", "init_qwik_city", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_qwik_api_key", "init_qwik_registry", "init_qwik_ensure_builder_setup", "init_fs", "getRemixApiKey", "sys", "getDotEnvValue", "REMIX_BUILDER_API_KEY_ENV", "setRemixApiKey", "publicApiKey", "env", "modifiedType", "setDotEnvVar", "init_remix_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_dotenv", "getRemixSourceComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "buildDir", "sourceFile", "fileName", "shouldSkipFolder", "SKIP_FOLDERS", "SKIP_APP_FILES", "filePath", "fileCmps", "getReactComponentsFromSourceFile", "init_remix_components", "__esmMin", "init_sentry_release_injection_stub", "init_react_components", "init_utils", "parseRemixRegistryFromFile", "sys", "remixEnsureBuilderRegistry", "code", "parseRemixRegistryFromCode", "codeToSource", "sourceFile", "parseRegistryFromSource", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseRemixRegisteredComponent", "sortComponents", "cmpObjLit", "SDK_VERSIONS", "componentHasAcceptChildrenProp", "p", "getTextOfPropertyName", "identifierName", "initializer", "arg", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "getReactComponentsFromPath", "isMapperFile", "namedCmp", "c", "parseRegisteredComponentInfo", "getComponentId", "init_remix_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_transform", "init_utils", "init_convert_values", "init_component_info", "init_remix_ensure_builder_setup", "init_react_components", "remixComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "remixApiKey", "getRemixSourceComponentsFromDir", "parseRemixRegistryFromFile", "getRemixApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseReactAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseReactComponentSourceInputs", "isMapperFile", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getRemixRegisteredComponentSource", "createRemixRegisteredComponent", "element", "updateComponentObjLiteralInfoProperties", "createRemixComponentPropertyAssignment", "statements", "normalizeRegisteredArrayElements", "ensureImport", "getImportPath", "sdkImportPath", "SDK_VERSIONS", "ensureArrayStatement", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "identifier", "initializer", "s", "findArrayStatementInitializer", "ex", "i", "parseRemixRegisteredComponent", "init_remix_registry", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_typescript", "init_ensure_imports", "init_transform", "init_remix_components", "init_utils", "init_normalize_statements", "init_remix_registry_parse", "init_remove_unused_imports", "init_component_registry", "init_component_info", "init_react_components", "init_ensure_array_statement", "init_react_ts_program", "init_app_dependencies", "init_remix_api_key", "remixEnsureBuilderSetup", "sys", "modifiedFiles", "counterCmpPath", "remixEnsureCounterComponent", "remixEnsureBuilderRegistry", "remixEnsureCounterRegistered", "remixEnsureAppRoute", "remixEnsureFigmaImportSetup", "remixEnsureFigmaImportRoute", "routeFileName", "routePath", "hasRoute", "code", "getRemixAppRoute", "SDK_VERSIONS", "modelName", "ts", "registryImportPath", "getImportPath", "loaderArgsImport", "loaderArgsType", "envVar", "REMIX_BUILDER_API_KEY_ENV", "usesContext", "f", "ext", "counterCmpDir", "counterStylesPath", "component", "styles", "getCounterComponent", "hasCounterCmp", "hasCounterStyles", "counterCmp", "remixComponentRegistry", "c", "getRemixBuilderRegistry", "isSdkGen2", "init_remix_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_remix_registry", "init_remix_api_key", "init_utils", "createRemixDevTools", "sys", "remixSys", "createRemixDevToolsSys", "pathname", "localePathname", "remixEnsureBuilderSetup", "remixEnsureFigmaImportSetup", "opts", "remixComponentRegistry", "pkgName", "r", "c", "getRemixApiKey", "setRemixApiKey", "SDK_VERSIONS", "getBuilderCache", "cache", "setBuilderCache", "remixConfigPath", "getRemixConfigPath", "rootDir", "routesDir", "getRemixRoutesDir", "appDir", "componentsDir", "typescriptEnabled", "hasTsconfig", "registryPath", "findBuilderRegistry", "externalPackages", "hasLocaleParam", "path", "realFiles", "p", "detectReactSdkVersion", "f", "configs", "configName", "configPath", "recursiveFindDir", "init_remix", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_remix_api_key", "init_fs", "init_remix_ensure_builder_setup", "init_remix_registry", "init_types", "init_react_builder_sdk_setup", "getReactApiKey", "sys", "dotEnvFileNames", "publicApiKey", "REACT_VITE_BUILDER_KEY_ENV", "REACT_WEBPACK_BUILDER_KEY_ENV", "getDotEnvValue", "setReactApiKey", "env", "modifiedType", "setDotEnvVar", "init_react_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_dotenv", "createReactRegisteredComponent", "sys", "cmpInfo", "code", "registerStatement", "codeToStatement", "updateReactRegisteredComponent", "callExp", "args", "cmpObjExp", "updateComponentObjLiteralInfoProperties", "init_react_component_info", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_component_info", "parseReactRegistryFromFile", "sys", "code", "parseReactRegistryFromCode", "codeToSource", "sourceFile", "SDK_VERSIONS", "parseReactRegistryFromSourceSdkGen2", "parseReactRegistryFromSource", "cmps", "i", "s", "exp", "propAccessExp", "propAccessExpIdentifier", "args", "infoArg", "cmpArg", "cmp", "parseReactRegisteredIdentifierComponent", "sortComponents", "statementIndex", "identifierArg", "withChildrenWrapper", "importDeclarations", "defaultImportDeclaration", "importPath", "resolveReactImportPath", "getComponentImportPath", "getComponentDisplayNameFromFilePath", "namedImportDeclaration", "e", "resolvedPath", "getComponentDisplayName", "parseRegisteredComponentInfo", "getDisplayFilePath", "getComponentId", "resolveComponentPath", "findArrayStatementInitializer", "cmpElm", "parseReactRegisteredComponentSdkGen2", "cmpObjLit", "componentHasAcceptChildrenProp", "p", "getTextOfPropertyName", "identifierName", "initializer", "getFilePathFromIdentifier", "init_react_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_transform", "init_utils", "init_convert_values", "init_component_info", "init_react_api_key", "reactComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "_typescriptEnabled", "reactApiKey", "getReactSourceComponentsFromDir", "parseReactRegistryFromFile", "hasTsconfig", "getReactApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseReactAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseReactComponentSourceInputs", "isMapperFile", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "SDK_VERSIONS", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getReactRegisteredComponentSourceSdkGen2", "createReactRegisteredComponentSdkGen2", "element", "updateComponentObjLiteralInfoProperties", "identifier", "statements", "normalizeRegisteredArrayElements", "ensureReactComponentImportStatements", "ensureImport", "ensureArrayStatement", "createReactRegisteredComponent", "updateReactRegisteredComponent", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "s", "findArrayStatementInitializer", "ex", "i", "parseReactRegisteredComponentSdkGen2", "regCmp", "importPath", "getImportPath", "init_react_registry", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_react_component_info", "init_typescript", "init_ensure_imports", "init_transform", "init_utils", "init_react_components", "init_normalize_statements", "init_react_registry_parse", "init_remove_unused_imports", "init_component_registry", "init_component_info", "init_react_ts_program", "init_app_dependencies", "init_react_api_key", "init_ensure_array_statement", "init_fs", "reactEnsureBuilderSetup", "sys", "modifiedFiles", "counterCmpPath", "reactEnsureCounterComponent", "reactEnsureBuilderRegistry", "code", "getReactAppBuilderComponent", "reactEnsureFigmaImportSetup", "routeFileName", "routePath", "modelName", "ts", "SDK_VERSIONS", "getImportPath", "REACT_VITE_BUILDER_KEY_ENV", "REACT_WEBPACK_BUILDER_KEY_ENV", "getBuilderRegistryReactGen2", "counterCmp", "reactComponentRegistry", "c", "ext", "counterCmpDir", "counterStylesPath", "component", "styles", "getCounterComponent", "init_react_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_react_registry", "init_utils", "init_react_api_key", "createReactDevTools", "sys", "reactSys", "createReactDevToolsSys", "reactEnsureBuilderSetup", "reactEnsureFigmaImportSetup", "opts", "reactComponentRegistry", "pkgName", "r", "c", "getReactApiKey", "setReactApiKey", "SDK_VERSIONS", "getBuilderCache", "cache", "setBuilderCache", "reactConfigPath", "getReactConfigPath", "rootDir", "srcDir", "typescriptEnabled", "hasTsconfig", "externalPackages", "path", "realFiles", "p", "detectReactSdkVersion", "findBuilderRegistry", "configs", "configName", "configPath", "init_react", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_react_api_key", "init_react_registry", "init_react_ensure_builder_setup", "init_types", "init_react_builder_sdk_setup", "init_fs", "getAngularApiKey", "sys", "getEnvValue", "ANGULAR_BUILDER_API_KEY_ENV", "setAngularApiKey", "publicApiKey", "env", "modifiedType", "setEnvValue", "envFileNames", "envKey", "envInfo", "envFileName", "envPath", "value", "parseEnvFile", "envContent", "parseEnvContent", "sourceFile", "codeToSource", "extractedApiKey", "findVariableStatement", "initializer", "prop", "appendApiKey", "key", "s", "declarationList", "declaration", "newProperty", "newProperties", "newInitializer", "newDeclaration", "newDeclarationList", "updatedEnvNode", "updatedEnvContent", "sourceToCode", "code", "init_angular_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "getAngularSourceComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "sourceFile", "fileName", "shouldSkipFolder", "SKIP_APP_FILES", "filePath", "fileCmps", "getAngularComponentsFromSourceFile", "a", "b", "folder", "SKIP_FOLDERS", "getAngularComponentsFromPath", "ext", "code", "getAngularComponentsFromCode", "codeToSource", "componentOptions", "classStatements", "s", "isComponentDecorator", "angularCoreImport", "namedImports", "inputSignal", "e", "reExportedComponents", "getExportedAngularComponentSource", "enumOptions", "extractEnumOptions", "node", "sCmps", "getAngularComponentSource", "parseAngularComponentSourceInputs", "srcCmp", "getTypeChecker", "typedSrcCmp", "t", "parseAngularAllComponentSourceInputs", "sourceComponents", "components", "createTsProgram", "c", "cmp", "parseComponentSourcePropsFromNode", "sourceCmp", "sourceInputs", "mergeComponentInputs", "srcCmps", "relFilePath", "importPath", "getComponentImportPath", "cmpName", "isDefaultExport", "m", "exportName", "exportType", "componentInputs", "member", "usingDecorator", "d", "isInputDecorator", "usingSignal", "isInputSignal", "inputType", "getTypeText", "typeNode", "input", "getComponentId", "getDisplayFilePath", "getComponentDisplayName", "getComponentDecoratorInfo", "exportSpecifier", "symbol", "type", "declarations", "declaration", "getTypeName", "exportDeclaration", "modulePath", "moduleSpecifier", "moduleName", "moduleSymbol", "exportedSymbols", "exportedSymbol", "error", "decorator", "decoratorNameIs", "inputSignalName", "name", "callExpression", "typeName", "typeAnnotation", "getDecorators", "isCallExpression", "isIdentifier", "isObjectLiteralExpression", "isPropertyAssignment", "isStringLiteral", "SyntaxKind", "selector", "standalone", "expression", "arg", "prop", "init_angular_components", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_typescript", "init_component_input_types", "init_component_info", "angularUpdateAppModule", "sys", "cmpName", "cmpPath", "fileExtension", "fileName", "appModulePath", "appModuleCode", "updatedCode", "angularEnsureAppModuleImports", "code", "content", "sourceFile", "codeToSource", "cmpRelPath", "getImportPath", "ensureImport", "updatedStatements", "s", "updatedClassDeclaration", "modifyNgModuleDecorator", "sourceToCode", "node", "decorators", "decorator", "ngModuleArgs", "updatedObjectLiteral", "appendArrayProperty", "updatedObjectLiteralWithContent", "updatedDecorator", "modifiers", "d", "objectExpression", "propertyName", "itemName", "properties", "pIndex", "p", "getTextOfPropertyName", "prop", "updatedList", "updateArrayItems", "arrayExpression", "itemToBeInserted", "e", "init_angular_app_module_imports", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_ensure_imports", "init_utils", "init_convert_values", "angularAddRoute", "sys", "path", "componentName", "componentPath", "fileName", "appRoutesPath", "mod", "exportKey", "routes", "r", "newEntry", "i", "e", "content", "init_angular_app_routes_update", "__esmMin", "init_sentry_release_injection_stub", "require_unicode", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_util", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "unicode", "c", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "source", "parseState", "stack", "pos", "line", "column", "token", "key", "root", "text", "reviver", "lex", "parseStates", "internalize", "holder", "name", "value", "replacement", "lexState", "buffer", "doubleQuote", "sign", "c", "peek", "lexStates", "read", "newToken", "invalidChar", "literal", "u", "unicodeEscape", "invalidIdentifier", "escape", "separatorChar", "type", "s", "hexEscape", "count", "invalidEOF", "push", "pop", "parent", "current", "syntaxError", "formatChar", "replacements", "hexString", "message", "err", "require_stringify", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "value", "replacer", "space", "stack", "indent", "propertyList", "replacerFunc", "gap", "quote", "v", "item", "serializeProperty", "key", "holder", "quoteString", "serializeArray", "serializeObject", "quotes", "replacements", "product", "i", "c", "hexString", "quoteChar", "a", "stepback", "keys", "partial", "propertyString", "member", "serializeKey", "final", "properties", "separator", "firstChar", "require_lib", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "parse", "stringify", "JSON5", "angularFixTsConfig", "sys", "tsConfigPath", "tsConfigContent", "tsConfig", "JSON5", "compilerOptions", "paths", "import_json5", "init_angular_fix_tsconfig", "__esmMin", "init_sentry_release_injection_stub", "angularEnsureBuilderSetup", "sys", "modifiedFiles", "counterCmpPath", "angularEnsureCounterComponent", "angularEnsureBuilderRegistry", "angularEnsureCounterRegistered", "builderCmpName", "code", "getAngularBuilderComponent", "angularUpdateAppModule", "appModulePath", "angularAddRoute", "angularEnsureFigmaImportSetup", "figmaImportsCmpName", "fileName", "routePath", "angularFixTsConfig", "getAngularBuilderRegistry", "counterCmp", "angularComponentRegistry", "c", "cmpName", "cmpPath", "pageName", "modelName", "add404", "isStandAloneComponent", "registryImportPath", "getImportPath", "envPath", "environmentImportPath", "template", "ANGULAR_BUILDER_API_KEY_ENV", "ext", "hasCounterCmp", "component", "getCounterComponent", "init_angular_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "init_angular_registry", "init_utils", "init_angular_api_key", "init_angular_app_module_imports", "init_angular_app_routes_update", "init_angular_fix_tsconfig", "parseAngularRegistryFromFile", "sys", "angularEnsureBuilderRegistry", "code", "parseAngularRegistryFromCode", "codeToSource", "sourceFile", "parseRegistryFromSource", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseAngularRegisteredComponent", "sortComponents", "cmpObjLit", "p", "getTextOfPropertyName", "identifierName", "initializer", "arg", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "getAngularComponentsFromPath", "namedCmp", "c", "parseRegisteredComponentInfo", "getComponentId", "init_angular_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_convert_values", "init_component_info", "init_angular_ensure_builder_setup", "init_angular_components", "angularComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "angularApiKey", "getAngularSourceComponentsFromDir", "parseAngularRegistryFromFile", "getAngularApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseAngularAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseAngularComponentSourceInputs", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getAngularRegisteredComponentSource", "createAngularRegisteredComponent", "element", "updateComponentObjLiteralInfoProperties", "createAngularComponentPropertyAssignment", "statements", "normalizeRegisteredArrayElements", "ensureImport", "getImportPath", "ensureArrayStatement", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "identifier", "s", "findArrayStatementInitializer", "ex", "i", "parseAngularRegisteredComponent", "init_angular_registry", "__esmMin", "init_sentry_release_injection_stub", "init_typescript", "init_ensure_imports", "init_transform", "init_angular_components", "init_utils", "init_normalize_statements", "init_angular_registry_parse", "init_remove_unused_imports", "init_component_registry", "init_component_info", "init_ensure_array_statement", "init_react_ts_program", "init_app_dependencies", "init_angular_api_key", "createAngularDevTools", "sys", "angularSys", "createAngularDevToolsSys", "angularEnsureBuilderSetup", "angularEnsureFigmaImportSetup", "opts", "angularComponentRegistry", "pkgName", "r", "c", "getAngularApiKey", "setAngularApiKey", "_opts", "getBuilderCache", "cache", "setBuilderCache", "angularConfigPath", "getAngularConfigPath", "rootDir", "srcDir", "typescriptEnabled", "hasTsconfig", "appDir", "registryPath", "findBuilderRegistry", "externalPackages", "path", "realFiles", "p", "appModuleFileName", "appModulePath", "configPath", "projectPath", "init_angular", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_angular_api_key", "init_angular_registry", "init_angular_ensure_builder_setup", "init_fs", "getVueApiKey", "sys", "publicApiKey", "VUE_VITE_BUILDER_KEY_ENV", "VUE_WEBPACK_BUILDER_KEY_ENV", "getDotEnvValue", "setVueApiKey", "env", "modifiedType", "setDotEnvVar", "init_vue_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_dotenv", "parseVueComponent", "sys", "filePath", "readAllInputTypes", "content", "relativePath", "fileName", "componentName", "pascalCase", "inputs", "extractVueProps", "apiType", "detectVueApiType", "generateComponentId", "error", "props", "definePropsPatterns", "pattern", "match", "propsContent", "parseObjectProps", "parseArrayProps", "optionsPropsPattern", "optionsMatch", "objectContent", "arrayContent", "setupPropsPattern", "setupMatch", "deduplicateProps", "interfacePattern", "name", "type", "mapVueTypeToGeneric", "objectPattern", "definition", "typeMatch", "requiredMatch", "defaultMatch", "simplePattern", "p", "propNames", "prop", "vueType", "typeMap", "cleanType", "seen", "str", "_", "char", "init_vue_components", "__esmMin", "init_sentry_release_injection_stub", "vueComponentRegistry", "sys", "options", "components", "findVueComponents", "vueApiKey", "getVueApiKey", "getAppDependencies", "readAllInputTypes", "vueFiles", "scanDirectoryForVueFiles", "filePath", "component", "parseVueComponent", "dir", "scanDir", "currentDir", "entries", "entry", "fullPath", "nuxtDirs", "nuxtDir", "nuxtPath", "init_vue_registry", "__esmMin", "init_sentry_release_injection_stub", "init_vue_components", "init_vue_api_key", "init_app_dependencies", "vueEnsureBuilderSetup", "sys", "results", "vueEnsureBuilderRegistry", "error", "vueEnsureFigmaImportSetup", "modifiedFiles", "routePath", "code", "getVueBuilderComponent", "getVueBuilderRegistry", "modelName", "registryImportPath", "getImportPath", "ts", "getApiKeyReference", "init_vue_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "createVueDevTools", "sys", "vueSys", "createVueDevToolsSys", "vueEnsureBuilderSetup", "vueEnsureFigmaImportSetup", "opts", "vueComponentRegistry", "pkgName", "registry", "component", "c", "getVueApiKey", "setVueApiKey", "SDK_VERSIONS", "getBuilderCache", "cache", "setBuilderCache", "vueConfigPath", "getVueConfigPath", "rootDir", "srcDir", "typescriptEnabled", "hasTsconfig", "externalPackages", "isNuxtProject", "path", "realFiles", "usesSrc", "possibleComponentsDirs", "dir", "findBuilderRegistry", "configs", "configName", "configPath", "nuxtConfigs", "pkgJsonPath", "pkgJson", "deps", "init_vue", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_vue_api_key", "init_vue_registry", "init_types", "init_fs", "init_vue_ensure_builder_setup", "require_debug", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "getType", "o", "throwUnknownDataType", "throwUnsupportedData", "name", "require_number", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "i_to_s", "i", "c", "N", "s_to_i", "s", "s_to_int", "acc", "pow", "x", "s_to_big_int", "int_to_s", "int", "big_int_to_s", "zero", "n", "reverse", "num_to_s", "num", "a", "b", "a1", "a2", "int_str_to_s", "str", "int_str", "s_to_int_str", "s_to_num", "neg", "require_encode", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "number_1", "encodeNum", "num", "decodeNum", "s", "decodeKey", "key", "encodeBool", "b", "decodeBool", "encodeStr", "str", "decodeStr", "require_config", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "require_memory", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "config_1", "debug_1", "encode_1", "number_1", "memToValues", "mem", "makeInMemoryStore", "cb", "i", "value", "makeInMemoryCache", "valueMem", "schemaMem", "key", "makeInMemoryMemory", "getValueKey", "id", "getSchema", "keys", "schema", "key_id", "addValue", "o", "parent", "acc", "v", "require_core", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "debug_1", "encode_1", "memory_1", "compress", "o", "mem", "root", "decodeObject", "values", "s", "vs", "key_id", "keys", "decode", "n", "i", "k", "v", "decodeArray", "xs", "key", "id", "decompress", "c", "require_helpers", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "trimUndefined", "object", "key", "trimUndefinedRecursively", "trimUndefinedRecursivelyLoop", "tracks", "value", "require_dist", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "core_1", "core_2", "memory_1", "helpers_1", "config_1", "exportRegistry", "sys", "devTools", "exportedRegistry", "c", "minimal", "normalizePathSlash", "clone", "compressed", "importRegistry", "registryToImport", "registry", "importedRegistry", "updatedRegistry", "cmpToRegister", "filePath", "cmp", "input", "r", "import_compress_json", "init_import_export_registry", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "SUPPORTED_FRAMEWORKS", "SDK_PER_FRAMEWORK", "init_builder_sdks", "__esmMin", "init_sentry_release_injection_stub", "init_types", "SDK_VERSIONS", "findAllDependencies", "sys", "rootDir", "packages", "processedPackages", "processPackage", "packageDir", "packageJsonPath", "packageJsonContent", "packageJson", "currentPackage", "packageContents", "item", "error", "mainPackageJsonPath", "mainPackageJsonContent", "mainPackageJson", "allDependencies", "depName", "depPath", "workspace", "workspacePaths", "workspacePath", "fullWorkspacePath", "init_find_dependencies", "__esmMin", "init_sentry_release_injection_stub", "createDevTools", "opts", "nativeOverride", "detectFrameworks", "framework", "createDevToolsAdapter", "FRAMEWORK_ADAPTERS", "devToolsAdapter", "exportRegistry", "exportedRegistry", "importRegistry", "FRAMEWORK_FRIENDLY_NAMES", "findAllDependencies", "err", "init_create_dev_tools", "__esmMin", "init_sentry_release_injection_stub", "init_detect_frameworks", "init_next", "init_qwik_city", "init_remix", "init_react", "init_angular", "init_vue", "init_import_export_registry", "init_builder_sdks", "init_find_dependencies", "createQwikCityDevTools", "createNextDevTools", "createRemixDevTools", "createReactDevTools", "createAngularDevTools", "createVueDevTools", "SUPPORTED_FRAMEWORKS", "ConnectionTracker", "init_connection_tracker", "__esmMin", "init_sentry_release_injection_stub", "sys", "socket", "req", "message", "staleConnections", "init_path", "__esmMin", "init_sentry_release_injection_stub", "init_mem_sys", "__esmMin", "init_sentry_release_injection_stub", "init_connection_tracker", "init_path", "init_detect_frameworks", "init_next_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_exported_statements", "init_ensure_imports", "init_detect_frameworks", "init_remix_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_exported_statements", "init_ensure_imports", "init_convert_values", "init_vite_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_ensure_imports", "init_exported_statements", "init_webpack_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_angular_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_ensure_imports", "init_transform", "DEFAULT_NEXT_CONFIG", "init_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_detect_frameworks", "init_normalize_statements", "init_next_ensure_config_plugin", "init_remix_ensure_config_plugin", "init_vite_ensure_config_plugin", "init_webpack_ensure_config_plugin", "init_angular_ensure_config_plugin", "init_client_script", "__esmMin", "init_sentry_release_injection_stub", "init_constants", "init_core", "init_core", "__esmMin", "init_sentry_release_injection_stub", "init_version", "init_create_dev_tools", "init_mem_sys", "init_detect_frameworks", "init_ensure_config_plugin", "init_client_script", "init_dotenv", "cPlusPlus", "hljs", "regex", "C_LINE_COMMENT_MODE", "DECLTYPE_AUTO_RE", "NAMESPACE_RE", "FUNCTION_TYPE_RE", "CPP_PRIMITIVE_TYPES", "STRINGS", "NUMBERS", "PREPROCESSOR", "TITLE_MODE", "FUNCTION_TITLE", "RESERVED_KEYWORDS", "RESERVED_TYPES", "TYPE_HINTS", "FUNCTION_HINTS", "CPP_KEYWORDS", "FUNCTION_DISPATCH", "EXPRESSION_CONTAINS", "EXPRESSION_CONTEXT", "FUNCTION_DECLARATION", "arduino", "ARDUINO_KW", "ARDUINO", "kws", "init_arduino", "__esmMin", "init_sentry_release_injection_stub", "bash", "hljs", "regex", "VAR", "BRACED_VAR", "SUBST", "HERE_DOC", "QUOTE_STRING", "ESCAPED_QUOTE", "APOS_STRING", "ESCAPED_APOS", "ARITHMETIC", "SH_LIKE_SHELLS", "KNOWN_SHEBANG", "FUNCTION", "KEYWORDS", "LITERALS", "PATH_MODE", "SHELL_BUILT_INS", "BASH_BUILT_INS", "ZSH_BUILT_INS", "GNU_CORE_UTILS", "init_bash", "__esmMin", "init_sentry_release_injection_stub", "c", "hljs", "regex", "C_LINE_COMMENT_MODE", "DECLTYPE_AUTO_RE", "NAMESPACE_RE", "FUNCTION_TYPE_RE", "TYPES", "STRINGS", "NUMBERS", "PREPROCESSOR", "TITLE_MODE", "FUNCTION_TITLE", "KEYWORDS", "EXPRESSION_CONTAINS", "EXPRESSION_CONTEXT", "FUNCTION_DECLARATION", "init_c", "__esmMin", "init_sentry_release_injection_stub", "cpp", "hljs", "regex", "C_LINE_COMMENT_MODE", "DECLTYPE_AUTO_RE", "NAMESPACE_RE", "FUNCTION_TYPE_RE", "CPP_PRIMITIVE_TYPES", "STRINGS", "NUMBERS", "PREPROCESSOR", "TITLE_MODE", "FUNCTION_TITLE", "RESERVED_KEYWORDS", "RESERVED_TYPES", "TYPE_HINTS", "FUNCTION_HINTS", "CPP_KEYWORDS", "FUNCTION_DISPATCH", "EXPRESSION_CONTAINS", "EXPRESSION_CONTEXT", "FUNCTION_DECLARATION", "init_cpp", "__esmMin", "init_sentry_release_injection_stub", "csharp", "hljs", "BUILT_IN_KEYWORDS", "FUNCTION_MODIFIERS", "LITERAL_KEYWORDS", "NORMAL_KEYWORDS", "CONTEXTUAL_KEYWORDS", "KEYWORDS", "TITLE_MODE", "NUMBERS", "VERBATIM_STRING", "VERBATIM_STRING_NO_LF", "SUBST", "SUBST_NO_LF", "INTERPOLATED_STRING", "INTERPOLATED_VERBATIM_STRING", "INTERPOLATED_VERBATIM_STRING_NO_LF", "STRING", "GENERIC_MODIFIER", "TYPE_IDENT_RE", "AT_IDENTIFIER", "init_csharp", "__esmMin", "init_sentry_release_injection_stub", "css", "hljs", "regex", "modes", "MODES", "VENDOR_PREFIX", "AT_MODIFIERS", "AT_PROPERTY_RE", "IDENT_RE", "STRINGS", "PSEUDO_CLASSES", "PSEUDO_ELEMENTS", "ATTRIBUTES", "MEDIA_FEATURES", "TAGS", "init_css", "__esmMin", "init_sentry_release_injection_stub", "diff", "hljs", "regex", "init_diff", "__esmMin", "init_sentry_release_injection_stub", "go", "hljs", "KEYWORDS", "init_go", "__esmMin", "init_sentry_release_injection_stub", "graphql", "hljs", "regex", "GQL_NAME", "init_graphql", "__esmMin", "init_sentry_release_injection_stub", "ini", "hljs", "regex", "NUMBERS", "COMMENTS", "VARIABLES", "LITERALS", "STRINGS", "ARRAY", "BARE_KEY", "QUOTED_KEY_DOUBLE_QUOTE", "QUOTED_KEY_SINGLE_QUOTE", "ANY_KEY", "DOTTED_KEY", "init_ini", "__esmMin", "init_sentry_release_injection_stub", "recurRegex", "re", "substitution", "depth", "_", "java", "hljs", "regex", "JAVA_IDENT_RE", "GENERIC_IDENT_RE", "KEYWORDS", "ANNOTATION", "PARAMS", "NUMERIC", "decimalDigits", "frac", "hexDigits", "init_java", "__esmMin", "init_sentry_release_injection_stub", "javascript", "hljs", "regex", "hasClosingTag", "match", "after", "tag", "IDENT_RE$1", "IDENT_RE", "FRAGMENT", "XML_SELF_CLOSING", "XML_TAG", "response", "afterMatchIndex", "nextChar", "m", "afterMatch", "KEYWORDS$1", "KEYWORDS", "LITERALS", "BUILT_INS", "BUILT_IN_VARIABLES", "decimalDigits", "frac", "decimalInteger", "NUMBER", "SUBST", "HTML_TEMPLATE", "CSS_TEMPLATE", "GRAPHQL_TEMPLATE", "TEMPLATE_STRING", "COMMENT", "SUBST_INTERNALS", "SUBST_AND_COMMENTS", "PARAMS_CONTAINS", "PARAMS", "CLASS_OR_EXTENDS", "CLASS_REFERENCE", "TYPES", "ERROR_TYPES", "USE_STRICT", "FUNCTION_DEFINITION", "UPPER_CASE_CONSTANT", "noneOf", "list", "FUNCTION_CALL", "BUILT_IN_GLOBALS", "PROPERTY_ACCESS", "GETTER_OR_SETTER", "FUNC_LEAD_IN_RE", "FUNCTION_VARIABLE", "init_javascript", "__esmMin", "init_sentry_release_injection_stub", "json", "hljs", "ATTRIBUTE", "PUNCTUATION", "LITERALS", "LITERALS_MODE", "init_json", "__esmMin", "init_sentry_release_injection_stub", "kotlin", "hljs", "KEYWORDS", "KEYWORDS_WITH_LABEL", "LABEL", "SUBST", "VARIABLE", "STRING", "ANNOTATION_USE_SITE", "ANNOTATION", "KOTLIN_NUMBER_MODE", "NUMERIC", "KOTLIN_NESTED_COMMENT", "KOTLIN_PAREN_TYPE", "KOTLIN_PAREN_TYPE2", "decimalDigits", "frac", "hexDigits", "init_kotlin", "__esmMin", "init_sentry_release_injection_stub", "less", "hljs", "modes", "MODES", "PSEUDO_SELECTORS$1", "PSEUDO_SELECTORS", "AT_MODIFIERS", "IDENT_RE", "INTERP_IDENT_RE", "RULES", "VALUE_MODES", "STRING_MODE", "c", "IDENT_MODE", "name", "begin", "relevance", "AT_KEYWORDS", "MEDIA_FEATURES", "PARENS_MODE", "VALUE_WITH_RULESETS", "MIXIN_GUARD_MODE", "RULE_MODE", "ATTRIBUTES", "AT_RULE_MODE", "VAR_RULE_MODE", "SELECTOR_MODE", "TAGS", "PSEUDO_CLASSES", "PSEUDO_ELEMENTS", "PSEUDO_SELECTOR_MODE", "init_less", "__esmMin", "init_sentry_release_injection_stub", "lua", "hljs", "OPENING_LONG_BRACKET", "CLOSING_LONG_BRACKET", "LONG_BRACKETS", "COMMENTS", "init_lua", "__esmMin", "init_sentry_release_injection_stub", "makefile", "hljs", "VARIABLE", "QUOTE_STRING", "FUNC", "ASSIGNMENT", "META", "TARGET", "init_makefile", "__esmMin", "init_sentry_release_injection_stub", "markdown", "hljs", "regex", "INLINE_HTML", "HORIZONTAL_RULE", "CODE", "LIST", "LINK_REFERENCE", "URL_SCHEME", "LINK", "BOLD", "ITALIC", "BOLD_WITHOUT_ITALIC", "ITALIC_WITHOUT_BOLD", "CONTAINABLE", "m", "init_markdown", "__esmMin", "init_sentry_release_injection_stub", "objectivec", "hljs", "API_CLASS", "IDENTIFIER_RE", "KEYWORDS", "CLASS_KEYWORDS", "init_objectivec", "__esmMin", "init_sentry_release_injection_stub", "perl", "hljs", "regex", "KEYWORDS", "REGEX_MODIFIERS", "PERL_KEYWORDS", "SUBST", "METHOD", "VAR", "STRING_CONTAINS", "REGEX_DELIMS", "PAIRED_DOUBLE_RE", "prefix", "open", "close", "middle", "PAIRED_RE", "PERL_DEFAULT_CONTAINS", "init_perl", "__esmMin", "init_sentry_release_injection_stub", "php", "hljs", "regex", "NOT_PERL_ETC", "IDENT_RE", "PASCAL_CASE_CLASS_NAME_RE", "VARIABLE", "PREPROCESSOR", "SUBST", "SINGLE_QUOTED", "DOUBLE_QUOTED", "HEREDOC", "m", "resp", "NOWDOC", "WHITESPACE", "STRING", "NUMBER", "LITERALS", "KWS", "BUILT_INS", "KEYWORDS", "items", "result", "item", "normalizeKeywords", "CONSTRUCTOR_CALL", "CONSTANT_REFERENCE", "LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON", "NAMED_ARGUMENT", "PARAMS_MODE", "FUNCTION_INVOKE", "ATTRIBUTE_CONTAINS", "ATTRIBUTES", "init_php", "__esmMin", "init_sentry_release_injection_stub", "phpTemplate", "hljs", "init_php_template", "__esmMin", "init_sentry_release_injection_stub", "plaintext", "hljs", "init_plaintext", "__esmMin", "init_sentry_release_injection_stub", "python", "hljs", "regex", "IDENT_RE", "RESERVED_WORDS", "KEYWORDS", "PROMPT", "SUBST", "LITERAL_BRACKET", "STRING", "digitpart", "pointfloat", "lookahead", "NUMBER", "COMMENT_TYPE", "PARAMS", "init_python", "__esmMin", "init_sentry_release_injection_stub", "pythonRepl", "hljs", "init_python_repl", "__esmMin", "init_sentry_release_injection_stub", "r", "hljs", "regex", "IDENT_RE", "NUMBER_TYPES_RE", "OPERATORS_RE", "PUNCTUATION_RE", "init_r", "__esmMin", "init_sentry_release_injection_stub", "ruby", "hljs", "regex", "RUBY_METHOD_RE", "CLASS_NAME_RE", "CLASS_NAME_WITH_NAMESPACE_RE", "RUBY_KEYWORDS", "YARDOCTAG", "IRB_OBJECT", "COMMENT_MODES", "SUBST", "STRING", "decimal", "digits", "NUMBER", "PARAMS", "RUBY_DEFAULT_CONTAINS", "IRB_DEFAULT", "init_ruby", "__esmMin", "init_sentry_release_injection_stub", "rust", "hljs", "regex", "FUNCTION_INVOKE", "NUMBER_SUFFIX", "KEYWORDS", "LITERALS", "BUILTINS", "TYPES", "init_rust", "__esmMin", "init_sentry_release_injection_stub", "scss", "hljs", "modes", "MODES", "PSEUDO_ELEMENTS$1", "PSEUDO_ELEMENTS", "PSEUDO_CLASSES$1", "PSEUDO_CLASSES", "AT_IDENTIFIER", "AT_MODIFIERS", "VARIABLE", "TAGS", "ATTRIBUTES", "MEDIA_FEATURES", "init_scss", "__esmMin", "init_sentry_release_injection_stub", "shell", "hljs", "init_shell", "__esmMin", "init_sentry_release_injection_stub", "sql", "hljs", "regex", "COMMENT_MODE", "STRING", "QUOTED_IDENTIFIER", "LITERALS", "MULTI_WORD_TYPES", "TYPES", "NON_RESERVED_WORDS", "RESERVED_WORDS", "RESERVED_FUNCTIONS", "POSSIBLE_WITHOUT_PARENS", "COMBOS", "FUNCTIONS", "KEYWORDS", "keyword", "VARIABLE", "OPERATOR", "FUNCTION_CALL", "reduceRelevancy", "list", "exceptions", "when", "qualifyFn", "item", "x", "init_sql", "__esmMin", "init_sentry_release_injection_stub", "source", "re", "lookahead", "concat", "args", "x", "stripOptionsFromArgs", "opts", "either", "swift", "hljs", "WHITESPACE", "BLOCK_COMMENT", "COMMENTS", "DOT_KEYWORD", "dotKeywords", "optionalDotKeywords", "KEYWORD_GUARD", "keywords", "PLAIN_KEYWORDS", "kw", "REGEX_KEYWORDS", "keywordTypes", "keywordWrapper", "KEYWORD", "KEYWORDS", "numberSignKeywords", "literals", "KEYWORD_MODES", "BUILT_IN_GUARD", "builtIns", "BUILT_IN", "BUILT_INS", "OPERATOR_GUARD", "OPERATOR", "operator", "operatorCharacter", "OPERATORS", "decimalDigits", "hexDigits", "NUMBER", "ESCAPED_CHARACTER", "rawDelimiter", "ESCAPED_NEWLINE", "INTERPOLATION", "MULTILINE_STRING", "SINGLE_LINE_STRING", "STRING", "REGEXP_CONTENTS", "BARE_REGEXP_LITERAL", "EXTENDED_REGEXP_LITERAL", "begin", "end", "REGEXP", "QUOTED_IDENTIFIER", "identifier", "IMPLICIT_PARAMETER", "PROPERTY_WRAPPER_PROJECTION", "identifierCharacter", "IDENTIFIERS", "AVAILABLE_ATTRIBUTE", "availabilityKeywords", "KEYWORD_ATTRIBUTE", "keywordAttributes", "USER_DEFINED_ATTRIBUTE", "ATTRIBUTES", "TYPE", "typeIdentifier", "GENERIC_ARGUMENTS", "TUPLE_ELEMENT_NAME", "TUPLE", "GENERIC_PARAMETERS", "FUNCTION_PARAMETER_NAME", "FUNCTION_PARAMETERS", "FUNCTION_OR_MACRO", "INIT_SUBSCRIPT", "OPERATOR_DECLARATION", "PRECEDENCEGROUP", "precedencegroupKeywords", "variant", "interpolation", "mode", "submodes", "operatorHead", "identifierHead", "init_swift", "__esmMin", "init_sentry_release_injection_stub", "keyword", "javascript", "hljs", "regex", "hasClosingTag", "match", "after", "tag", "IDENT_RE$1", "IDENT_RE", "FRAGMENT", "XML_SELF_CLOSING", "XML_TAG", "response", "afterMatchIndex", "nextChar", "m", "afterMatch", "KEYWORDS$1", "KEYWORDS", "LITERALS", "BUILT_INS", "BUILT_IN_VARIABLES", "decimalDigits", "frac", "decimalInteger", "NUMBER", "SUBST", "HTML_TEMPLATE", "CSS_TEMPLATE", "GRAPHQL_TEMPLATE", "TEMPLATE_STRING", "COMMENT", "SUBST_INTERNALS", "SUBST_AND_COMMENTS", "PARAMS_CONTAINS", "PARAMS", "CLASS_OR_EXTENDS", "CLASS_REFERENCE", "TYPES", "ERROR_TYPES", "USE_STRICT", "FUNCTION_DEFINITION", "UPPER_CASE_CONSTANT", "noneOf", "list", "FUNCTION_CALL", "BUILT_IN_GLOBALS", "PROPERTY_ACCESS", "GETTER_OR_SETTER", "FUNC_LEAD_IN_RE", "FUNCTION_VARIABLE", "typescript", "tsLanguage", "NAMESPACE", "INTERFACE", "TS_SPECIFIC_KEYWORDS", "DECORATOR", "swapMode", "mode", "label", "replacement", "indx", "functionDeclaration", "init_typescript", "__esmMin", "init_sentry_release_injection_stub", "vbnet", "hljs", "regex", "CHARACTER", "STRING", "MM_DD_YYYY", "YYYY_MM_DD", "TIME_12H", "TIME_24H", "DATE", "NUMBER", "LABEL", "DOC_COMMENT", "COMMENT", "init_vbnet", "__esmMin", "init_sentry_release_injection_stub", "wasm", "hljs", "BLOCK_COMMENT", "LINE_COMMENT", "KWS", "FUNCTION_REFERENCE", "ARGUMENT", "PARENS", "NUMBER", "TYPE", "MATH_OPERATIONS", "init_wasm", "__esmMin", "init_sentry_release_injection_stub", "xml", "hljs", "regex", "TAG_NAME_RE", "XML_IDENT_RE", "XML_ENTITIES", "XML_META_KEYWORDS", "XML_META_PAR_KEYWORDS", "APOS_META_STRING_MODE", "QUOTE_META_STRING_MODE", "TAG_INTERNALS", "init_xml", "__esmMin", "init_sentry_release_injection_stub", "yaml", "hljs", "LITERALS", "URI_CHARACTERS", "KEY", "TEMPLATE_VARIABLES", "STRING", "CONTAINER_STRING", "TIMESTAMP", "VALUE_CONTAINER", "OBJECT", "ARRAY", "MODES", "VALUE_MODES", "init_yaml", "__esmMin", "init_sentry_release_injection_stub", "grammars", "init_common", "__esmMin", "init_sentry_release_injection_stub", "init_arduino", "init_bash", "init_c", "init_cpp", "init_csharp", "init_css", "init_diff", "init_go", "init_graphql", "init_ini", "init_java", "init_javascript", "init_json", "init_kotlin", "init_less", "init_lua", "init_makefile", "init_markdown", "init_objectivec", "init_perl", "init_php", "init_php_template", "init_plaintext", "init_python", "init_python_repl", "init_r", "init_ruby", "init_rust", "init_scss", "init_shell", "init_sql", "init_swift", "init_typescript", "init_vbnet", "init_wasm", "init_xml", "init_yaml", "arduino", "bash", "c", "cpp", "csharp", "css", "diff", "go", "graphql", "ini", "java", "javascript", "json", "kotlin", "less", "lua", "makefile", "markdown", "objectivec", "perl", "php", "phpTemplate", "plaintext", "python", "pythonRepl", "r", "ruby", "rust", "scss", "shell", "sql", "swift", "typescript", "vbnet", "wasm", "xml", "yaml", "require_core", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "deepFreeze", "obj", "name", "prop", "type", "Response", "mode", "escapeHTML", "value", "inherit$1", "original", "objects", "result", "key", "SPAN_CLOSE", "emitsWrappingTags", "node", "scopeToCSSClass", "prefix", "pieces", "x", "HTMLRenderer", "parseTree", "options", "text", "className", "newNode", "opts", "TokenTree", "_TokenTree", "scope", "builder", "child", "el", "TokenTreeEmitter", "emitter", "source", "re", "lookahead", "concat", "anyNumberOfTimes", "optional", "args", "stripOptionsFromArgs", "either", "countMatchGroups", "startsWith", "lexeme", "match", "BACKREF_RE", "_rewriteBackreferences", "regexps", "joinWith", "numCaptures", "regex", "offset", "out", "MATCH_NOTHING_RE", "IDENT_RE", "UNDERSCORE_IDENT_RE", "NUMBER_RE", "C_NUMBER_RE", "BINARY_NUMBER_RE", "RE_STARTERS_RE", "SHEBANG", "beginShebang", "m", "resp", "BACKSLASH_ESCAPE", "APOS_STRING_MODE", "QUOTE_STRING_MODE", "PHRASAL_WORDS_MODE", "COMMENT", "begin", "end", "modeOptions", "ENGLISH_WORD", "C_LINE_COMMENT_MODE", "C_BLOCK_COMMENT_MODE", "HASH_COMMENT_MODE", "NUMBER_MODE", "C_NUMBER_MODE", "BINARY_NUMBER_MODE", "REGEXP_MODE", "TITLE_MODE", "UNDERSCORE_TITLE_MODE", "METHOD_GUARD", "END_SAME_AS_BEGIN", "MODES", "skipIfHasPrecedingDot", "response", "scopeClassName", "_parent", "beginKeywords", "parent", "compileIllegal", "compileMatch", "compileRelevance", "beforeMatchExt", "originalMode", "COMMON_KEYWORDS", "DEFAULT_KEYWORD_SCOPE", "compileKeywords", "rawKeywords", "caseInsensitive", "scopeName", "compiledKeywords", "compileList", "keywordList", "keyword", "pair", "scoreForKeyword", "providedScore", "commonKeyword", "seenDeprecations", "error", "message", "warn", "deprecated", "version", "MultiClassError", "remapScopeNames", "regexes", "scopeNames", "emit", "positions", "i", "beginMultiClass", "endMultiClass", "scopeSugar", "MultiClass", "compileLanguage", "language", "langRe", "global", "MultiRegex", "terminators", "s", "matchData", "ResumableMultiRegex", "index", "matcher", "m2", "buildModeRegex", "mm", "term", "compileMode", "cmode", "ext", "keywordPattern", "c", "expandOrCloneMode", "dependencyOnParent", "variant", "HTMLInjectionError", "reason", "html", "escape", "inherit", "NO_MATCH", "MAX_KEYWORD_HITS", "HLJS", "hljs", "languages", "aliases", "plugins", "SAFE_MODE", "LANGUAGE_NOT_FOUND", "PLAINTEXT_LANGUAGE", "shouldNotHighlight", "languageName", "blockLanguage", "block", "classes", "getLanguage", "_class", "highlight", "codeOrLanguageName", "optionsOrCode", "ignoreIllegals", "code", "context", "fire", "_highlight", "codeToHighlight", "continuation", "keywordHits", "keywordData", "matchText", "processKeywords", "top", "modeBuffer", "lastIndex", "buf", "word", "data", "kind", "keywordRelevance", "relevance", "cssClass", "emitKeyword", "processSubLanguage", "continuations", "highlightAuto", "processBuffer", "emitMultiClass", "max", "klass", "startNewMode", "endOfMode", "matchPlusRemainder", "matched", "doIgnore", "resumeScanAtSamePosition", "doBeginMatch", "newMode", "beforeCallbacks", "cb", "doEndMatch", "endMode", "origin", "processContinuations", "list", "current", "item", "lastMatch", "processLexeme", "textBeforeMatch", "err", "processed", "iterations", "md", "beforeMatch", "processedCount", "justTextHighlightResult", "languageSubset", "plaintext", "results", "autoDetection", "sorted", "a", "b", "best", "secondBest", "updateClassName", "element", "currentLang", "resultLang", "highlightElement", "configure", "userOptions", "initHighlighting", "highlightAll", "initHighlightingOnLoad", "wantsHighlight", "boot", "registerLanguage", "languageDefinition", "lang", "error$1", "registerAliases", "unregisterLanguage", "alias", "listLanguages", "aliasList", "upgradePluginAPI", "plugin", "addPlugin", "removePlugin", "event", "deprecateHighlightBlock", "import_core", "core_default", "init_core", "__esmMin", "init_sentry_release_injection_stub", "HighlightJS", "createLowlight", "grammars", "high", "core_default", "register", "highlight", "highlightAuto", "listLanguages", "registerAlias", "registered", "language", "value", "options", "settings", "emptyOptions", "prefix", "defaultPrefix", "HastEmitter", "result", "root", "data", "subset", "index", "relevance", "name", "current", "grammarsOrName", "grammar", "aliasesOrName", "alias", "key", "aliases", "aliasOrName", "init_lib", "__esmMin", "init_sentry_release_injection_stub", "init_core", "tail", "rawName", "other", "results", "self", "className", "d", "i", "child", "init_lowlight", "__esmMin", "init_sentry_release_injection_stub", "init_common", "init_lib", "assembleStyles", "codes", "groupName", "group", "styles", "styleName", "style", "wrapAnsi16", "wrapAnsi256", "wrapAnsi16m", "red", "green", "blue", "hex", "matches", "colorString", "character", "integer", "code", "remainder", "value", "result", "modifierNames", "foregroundColorNames", "backgroundColorNames", "colorNames", "ansiStyles", "ansi_styles_default", "init_ansi_styles", "__esmMin", "init_sentry_release_injection_stub", "offset", "hasFlag", "flag", "argv", "process", "prefix", "position", "terminatorPosition", "envForceColor", "env", "translateLevel", "level", "_supportsColor", "haveStream", "streamIsTTY", "sniffFlags", "noFlagForceColor", "flagForceColor", "forceColor", "min", "osRelease", "os", "key", "sign", "version", "createSupportsColor", "stream", "options", "import_node_process", "import_node_os", "import_node_tty", "supportsColor", "supports_color_default", "init_supports_color", "__esmMin", "init_sentry_release_injection_stub", "tty", "stringReplaceAll", "string", "substring", "replacer", "index", "substringLength", "endIndex", "returnValue", "stringEncaseCRLFWithFirstIndex", "prefix", "postfix", "gotCR", "init_utilities", "__esmMin", "init_sentry_release_injection_stub", "createChalk", "options", "chalkFactory", "stdoutColor", "stderrColor", "GENERATOR", "STYLER", "IS_EMPTY", "levelMapping", "styles", "applyOptions", "Chalk", "getModelAnsi", "usedModels", "proto", "createStyler", "createBuilder", "applyStyle", "chalk", "chalkStderr", "init_source", "__esmMin", "init_sentry_release_injection_stub", "init_ansi_styles", "init_supports_color", "init_utilities", "supports_color_default", "object", "colorLevel", "strings", "styleName", "style", "ansi_styles_default", "builder", "model", "level", "type", "arguments_", "styler", "bgModel", "open", "close", "parent", "openAll", "closeAll", "self", "_styler", "_isEmpty", "string", "stringReplaceAll", "lfIndex", "stringEncaseCRLFWithFirstIndex", "createEmphasize", "grammars", "lowlight", "createLowlight", "highlight", "highlightAuto", "language", "value", "sheet", "result", "data", "visit", "defaultSheet", "options", "config", "settings", "node", "names", "d", "scoped", "style", "content", "key", "parts", "color", "all", "nodes", "index", "chalk", "init_lib", "__esmMin", "init_sentry_release_injection_stub", "init_source", "init_lowlight", "Chalk", "init_emphasize", "__esmMin", "init_sentry_release_injection_stub", "init_lowlight", "init_lib", "exit", "code", "Sentry", "Amplitude", "init_exit", "__esmMin", "init_sentry_release_injection_stub", "apiAirV2Host", "init_constants", "__esmMin", "init_sentry_release_injection_stub", "version", "init_package", "__esmMin", "require_base64", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "intToCharMap", "number", "charCode", "bigA", "bigZ", "littleA", "littleZ", "zero", "nine", "plus", "slash", "littleOffset", "numberOffset", "require_base64_vlq", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "base64", "VLQ_BASE_SHIFT", "VLQ_BASE", "VLQ_BASE_MASK", "VLQ_CONTINUATION_BIT", "toVLQSigned", "aValue", "fromVLQSigned", "isNegative", "shifted", "encoded", "digit", "vlq", "aStr", "aIndex", "aOutParam", "strLen", "result", "shift", "continuation", "require_util", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "getArg", "aArgs", "aName", "aDefaultValue", "urlRegexp", "dataUrlRegexp", "urlParse", "aUrl", "match", "urlGenerate", "aParsedUrl", "url", "MAX_CACHED_INPUTS", "lruMemoize", "f", "cache", "input", "i", "temp", "result", "normalize", "aPath", "path", "isAbsolute", "parts", "start", "part", "up", "join", "aRoot", "aPathUrl", "aRootUrl", "joined", "relative", "level", "index", "supportsNullProto", "obj", "identity", "s", "toSetString", "aStr", "isProtoString", "fromSetString", "length", "compareByOriginalPositions", "mappingA", "mappingB", "onlyCompareOriginal", "cmp", "strcmp", "compareByOriginalPositionsNoSource", "compareByGeneratedPositionsDeflated", "onlyCompareGenerated", "compareByGeneratedPositionsDeflatedNoLine", "aStr1", "aStr2", "compareByGeneratedPositionsInflated", "parseSourceMapInput", "str", "computeSourceURL", "sourceRoot", "sourceURL", "sourceMapURL", "parsed", "require_array_set", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "util", "has", "hasNativeMap", "ArraySet", "aArray", "aAllowDuplicates", "set", "len", "aStr", "sStr", "isDuplicate", "idx", "aIdx", "require_mapping_list", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "util", "generatedPositionAfter", "mappingA", "mappingB", "lineA", "lineB", "columnA", "columnB", "MappingList", "aCallback", "aThisArg", "aMapping", "require_source_map_generator", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "base64VLQ", "util", "ArraySet", "MappingList", "SourceMapGenerator", "aArgs", "aSourceMapConsumer", "generatorOps", "sourceRoot", "generator", "mapping", "newMapping", "sourceFile", "sourceRelative", "content", "generated", "original", "source", "name", "aSourceFile", "aSourceContent", "aSourceMapPath", "newSources", "newNames", "aGenerated", "aOriginal", "aSource", "aName", "message", "previousGeneratedColumn", "previousGeneratedLine", "previousOriginalColumn", "previousOriginalLine", "previousName", "previousSource", "result", "next", "nameIdx", "sourceIdx", "mappings", "i", "len", "aSources", "aSourceRoot", "key", "map", "require_binary_search", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "recursiveSearch", "aLow", "aHigh", "aNeedle", "aHaystack", "aCompare", "aBias", "mid", "cmp", "index", "require_quick_sort", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "SortTemplate", "comparator", "swap", "ary", "x", "y", "temp", "randomIntInRange", "low", "high", "doQuickSort", "p", "r", "pivotIndex", "i", "pivot", "j", "q", "cloneSort", "template", "sortCache", "start", "require_source_map_consumer", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "util", "binarySearch", "ArraySet", "base64VLQ", "quickSort", "SourceMapConsumer", "aSourceMap", "aSourceMapURL", "sourceMap", "IndexedSourceMapConsumer", "BasicSourceMapConsumer", "aStr", "index", "c", "aSourceRoot", "aCallback", "aContext", "aOrder", "context", "order", "mappings", "sourceRoot", "boundCallback", "names", "sources", "sourceMapURL", "i", "n", "mapping", "source", "aArgs", "line", "needle", "originalLine", "originalColumn", "version", "sourcesContent", "file", "s", "aSource", "relativeSource", "smc", "generatedMappings", "destGeneratedMappings", "destOriginalMappings", "length", "srcMapping", "destMapping", "Mapping", "compareGenerated", "sortGenerated", "array", "start", "l", "a", "b", "j", "generatedLine", "previousGeneratedColumn", "previousOriginalLine", "previousOriginalColumn", "previousSource", "previousName", "cachedSegments", "temp", "originalMappings", "str", "segment", "end", "value", "subarrayStart", "currentSource", "aNeedle", "aMappings", "aLineName", "aColumnName", "aComparator", "aBias", "nextMapping", "name", "sc", "nullOnMissing", "url", "fileUriAbsPath", "sections", "lastOffset", "offset", "offsetLine", "offsetColumn", "sectionIndex", "section", "cmp", "content", "generatedPosition", "ret", "sectionMappings", "adjustedMapping", "require_source_node", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "SourceMapGenerator", "util", "REGEX_NEWLINE", "NEWLINE_CODE", "isSourceNode", "SourceNode", "aLine", "aColumn", "aSource", "aChunks", "aName", "aGeneratedCode", "aSourceMapConsumer", "aRelativePath", "node", "remainingLines", "remainingLinesIndex", "shiftNextLine", "lineContents", "getNextLine", "newLine", "lastGeneratedLine", "lastGeneratedColumn", "lastMapping", "mapping", "addMappingWithCode", "nextLine", "code", "sourceFile", "content", "source", "aChunk", "chunk", "i", "aFn", "len", "aSep", "newChildren", "aPattern", "aReplacement", "lastChild", "aSourceFile", "aSourceContent", "sources", "str", "aArgs", "generated", "map", "sourceMappingActive", "lastOriginalSource", "lastOriginalLine", "lastOriginalColumn", "lastOriginalName", "original", "idx", "length", "sourceContent", "require_source_map", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Position", "constructor", "line", "col", "index", "column", "SourceLocation", "start", "end", "filename", "identifierName", "createPositionWithColumnOffset", "position", "columnOffset", "code", "ModuleErrors", "ImportMetaOutsideModule", "message", "ImportOutsideModule", "NodeDescriptions", "ArrayPattern", "AssignmentExpression", "AssignmentPattern", "ArrowFunctionExpression", "ConditionalExpression", "CatchClause", "ForOfStatement", "ForInStatement", "ForStatement", "FormalParameters", "Identifier", "ImportSpecifier", "ImportDefaultSpecifier", "ImportNamespaceSpecifier", "ObjectPattern", "ParenthesizedExpression", "RestElement", "UpdateExpression", "true", "false", "VariableDeclarator", "YieldExpression", "toNodeDescription", "node", "type", "prefix", "StandardErrors", "AccessorIsGenerator", "kind", "ArgumentsInClass", "AsyncFunctionInSingleStatementContext", "AwaitBindingIdentifier", "AwaitBindingIdentifierInStaticBlock", "AwaitExpressionFormalParameter", "AwaitUsingNotInAsyncContext", "AwaitNotInAsyncContext", "AwaitNotInAsyncFunction", "BadGetterArity", "BadSetterArity", "BadSetterRestParameter", "ConstructorClassField", "ConstructorClassPrivateField", "ConstructorIsAccessor", "ConstructorIsAsync", "ConstructorIsGenerator", "DeclarationMissingInitializer", "DecoratorArgumentsOutsideParentheses", "DecoratorBeforeExport", "DecoratorsBeforeAfterExport", "DecoratorConstructor", "DecoratorExportClass", "DecoratorSemicolon", "DecoratorStaticBlock", "DeferImportRequiresNamespace", "DeletePrivateField", "DestructureNamedImport", "DuplicateConstructor", "DuplicateDefaultExport", "DuplicateExport", "exportName", "DuplicateProto", "DuplicateRegExpFlags", "DynamicImportPhaseRequiresImportExpressions", "phase", "ElementAfterRest", "EscapedCharNotAnIdentifier", "ExportBindingIsString", "localName", "ExportDefaultFromAsIdentifier", "ForInOfLoopInitializer", "ForInUsing", "ForOfAsync", "ForOfLet", "GeneratorInSingleStatementContext", "IllegalBreakContinue", "IllegalLanguageModeDirective", "IllegalReturn", "ImportAttributesUseAssert", "ImportBindingIsString", "importName", "ImportCallArgumentTrailingComma", "ImportCallArity", "maxArgumentCount", "ImportCallNotNewExpression", "ImportCallSpreadArgument", "ImportJSONBindingNotDefault", "ImportReflectionHasAssertion", "ImportReflectionNotBinding", "IncompatibleRegExpUVFlags", "InvalidBigIntLiteral", "InvalidCodePoint", "InvalidCoverInitializedName", "InvalidDecimal", "InvalidDigit", "radix", "InvalidEscapeSequence", "InvalidEscapeSequenceTemplate", "InvalidEscapedReservedWord", "reservedWord", "InvalidIdentifier", "InvalidLhs", "ancestor", "InvalidLhsBinding", "InvalidLhsOptionalChaining", "InvalidNumber", "InvalidOrMissingExponent", "InvalidOrUnexpectedToken", "unexpected", "InvalidParenthesizedAssignment", "InvalidPrivateFieldResolution", "InvalidPropertyBindingPattern", "InvalidRecordProperty", "InvalidRestAssignmentPattern", "LabelRedeclaration", "labelName", "LetInLexicalBinding", "LineTerminatorBeforeArrow", "MalformedRegExpFlags", "MissingClassName", "MissingEqInAssignment", "MissingSemicolon", "MissingPlugin", "missingPlugin", "map", "name", "JSON", "stringify", "join", "MissingOneOfPlugins", "MissingUnicodeEscape", "MixingCoalesceWithLogical", "ModuleAttributeDifferentFromType", "ModuleAttributeInvalidValue", "ModuleAttributesWithDuplicateKeys", "key", "ModuleExportNameHasLoneSurrogate", "surrogateCharCode", "toString", "ModuleExportUndefined", "MultipleDefaultsInSwitch", "NewlineAfterThrow", "NoCatchOrFinally", "NumberIdentifier", "NumericSeparatorInEscapeSequence", "ObsoleteAwaitStar", "OptionalChainingNoNew", "OptionalChainingNoTemplate", "OverrideOnConstructor", "ParamDupe", "PatternHasAccessor", "PatternHasMethod", "PrivateInExpectedIn", "PrivateNameRedeclaration", "RecordExpressionBarIncorrectEndSyntaxType", "RecordExpressionBarIncorrectStartSyntaxType", "RecordExpressionHashIncorrectStartSyntaxType", "RecordNoProto", "RestTrailingComma", "SloppyFunction", "SloppyFunctionAnnexB", "SourcePhaseImportRequiresDefault", "StaticPrototype", "SuperNotAllowed", "SuperPrivateField", "TrailingDecorator", "TupleExpressionBarIncorrectEndSyntaxType", "TupleExpressionBarIncorrectStartSyntaxType", "TupleExpressionHashIncorrectStartSyntaxType", "UnexpectedArgumentPlaceholder", "UnexpectedAwaitAfterPipelineBody", "UnexpectedDigitAfterHash", "UnexpectedImportExport", "UnexpectedKeyword", "keyword", "UnexpectedLeadingDecorator", "UnexpectedLexicalDeclaration", "UnexpectedNewTarget", "UnexpectedNumericSeparator", "UnexpectedPrivateField", "UnexpectedReservedWord", "UnexpectedSuper", "UnexpectedToken", "expected", "UnexpectedTokenUnaryExponentiation", "UnexpectedUsingDeclaration", "UnsupportedBind", "UnsupportedDecoratorExport", "UnsupportedDefaultExport", "UnsupportedImport", "UnsupportedMetaProperty", "target", "onlyValidPropertyName", "UnsupportedParameterDecorator", "UnsupportedPropertyDecorator", "UnsupportedSuper", "UnterminatedComment", "UnterminatedRegExp", "UnterminatedString", "UnterminatedTemplate", "UsingDeclarationExport", "UsingDeclarationHasBindingPattern", "VarRedeclaration", "YieldBindingIdentifier", "YieldInParameter", "ZeroDigitNumericSeparator", "StrictModeErrors", "StrictDelete", "StrictEvalArguments", "referenceName", "StrictEvalArgumentsBinding", "bindingName", "StrictFunction", "StrictNumericEscape", "StrictOctalLiteral", "StrictWith", "UnparenthesizedPipeBodyDescriptions", "Set", "PipelineOperatorErrors", "PipeBodyIsTighter", "PipeTopicRequiresHackPipes", "PipeTopicUnbound", "PipeTopicUnconfiguredToken", "token", "PipeTopicUnused", "PipeUnparenthesizedBody", "PipelineBodyNoArrow", "PipelineBodySequenceExpression", "PipelineHeadSequenceExpression", "PipelineTopicUnused", "PrimaryTopicNotAllowed", "PrimaryTopicRequiresSmartPipeline", "defineHidden", "obj", "value", "Object", "defineProperty", "enumerable", "configurable", "toParseErrorConstructor", "toMessage", "reasonCode", "syntaxPlugin", "hasMissingPlugin", "oldReasonCodes", "AccessorCannotDeclareThisParameter", "AccessorCannotHaveTypeParameters", "ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference", "SetAccessorCannotHaveOptionalParameter", "SetAccessorCannotHaveRestParameter", "SetAccessorCannotHaveReturnType", "loc", "details", "error", "SyntaxError", "pos", "overrides", "_overrides$loc", "assign", "get", "set", "writable", "ParseErrorEnum", "argument", "Array", "isArray", "parseErrorTemplates", "ParseErrorConstructors", "keys", "template", "_ref", "rest", "_objectWithoutPropertiesLoose", "_excluded", "Errors", "toUnenumerable", "object", "toESTreeLocation", "estree", "superClass", "parse", "file", "options", "tokens", "parseRegExpLiteral", "pattern", "flags", "regex", "RegExp", "estreeParseLiteral", "parseBigIntLiteral", "bigInt", "BigInt", "bigint", "String", "parseDecimalLiteral", "decimal", "parseLiteral", "parseStringLiteral", "parseNumericLiteral", "parseNullLiteral", "parseBooleanLiteral", "directiveToStmt", "directive", "expression", "raw", "extra", "expressionValue", "stmt", "rawValue", "initFunction", "isAsync", "checkDeclaration", "isObjectProperty", "getObjectOrClassMethodParams", "method", "params", "isValidDirective", "_stmt$expression$extr", "parenthesized", "parseBlockBody", "allowDirectives", "topLevel", "afterBlockParse", "directiveStatements", "directives", "d", "body", "concat", "pushClassMethod", "classBody", "isGenerator", "isConstructor", "allowsDirectSuper", "parseMethod", "typeParameters", "push", "parsePrivateName", "getPluginOption", "convertPrivateNameToPrivateIdentifier", "getPrivateNameSV", "id", "isPrivateName", "parseFunctionBody", "allowExpression", "isMethod", "allowDirectSuper", "inClassScope", "funcNode", "startNode", "computed", "finishNode", "nameIsConstructor", "parseClassProperty", "args", "propertyNode", "parseClassPrivateProperty", "parseObjectMethod", "prop", "isPattern", "isAccessor", "shorthand", "parseObjectProperty", "startLoc", "refExpressionErrors", "isValidLVal", "isUnparenthesizedInAssign", "binding", "isAssignable", "isBinding", "toAssignable", "isLHS", "classScope", "usePrivateName", "toAssignableObjectExpressionProp", "isLast", "raise", "finishCallExpression", "unfinished", "optional", "callee", "source", "arguments", "hasPlugin", "_ref2", "attributes", "toReferencedArguments", "parseExport", "decorators", "exportStartLoc", "state", "lastTokStartLoc", "exported", "specifiers", "length", "_declaration$decorato", "declaration", "resetStartLocation", "parseSubscript", "base", "noCalls", "optionalChainMember", "substring", "stop", "chain", "startNodeAtNode", "isOptionalMemberExpression", "hasPropertyAsPrivateName", "isObjectMethod", "finishNodeAt", "endLoc", "resetEndLocation", "lastTokEndLoc", "TokContext", "preserveSpace", "types", "brace", "j_oTag", "j_cTag", "j_expr", "beforeExpr", "startsExpr", "isLoop", "isAssign", "postfix", "ExportedTokenType", "label", "conf", "rightAssociative", "binop", "updateContext", "keywords", "Map", "createKeyword", "createToken", "createBinop", "tokenTypeCounter", "tokenTypes", "tokenLabels", "tokenBinops", "tokenBeforeExprs", "tokenStartsExprs", "tokenPrefixes", "_options$binop", "_options$beforeExpr", "_options$startsExpr", "_options$prefix", "createKeywordLike", "_options$binop2", "_options$beforeExpr2", "_options$startsExpr2", "_options$prefix2", "tt", "bracketL", "bracketHashL", "bracketBarL", "bracketR", "bracketBarR", "braceL", "braceBarL", "braceHashL", "braceR", "braceBarR", "parenL", "parenR", "comma", "semi", "colon", "doubleColon", "dot", "question", "questionDot", "arrow", "ellipsis", "backQuote", "dollarBraceL", "templateTail", "templateNonTail", "at", "hash", "interpreterDirective", "eq", "slashAssign", "xorAssign", "moduloAssign", "incDec", "bang", "tilde", "doubleCaret", "doubleAt", "pipeline", "nullishCoalescing", "logicalOR", "logicalAND", "bitwiseOR", "bitwiseXOR", "bitwiseAND", "equality", "lt", "gt", "relational", "bitShift", "bitShiftL", "bitShiftR", "plusMin", "modulo", "star", "slash", "exponent", "_in", "_instanceof", "_break", "_case", "_catch", "_continue", "_debugger", "_default", "_else", "_finally", "_function", "_if", "_return", "_switch", "_throw", "_try", "_var", "_const", "_with", "_new", "_this", "_super", "_class", "_extends", "_export", "_import", "_null", "_true", "_false", "_typeof", "_void", "_delete", "_do", "_for", "_while", "_as", "_assert", "_async", "_await", "_defer", "_from", "_get", "_let", "_meta", "_of", "_sent", "_set", "_source", "_static", "_using", "_yield", "_asserts", "_checks", "_exports", "_global", "_implements", "_intrinsic", "_infer", "_is", "_mixins", "_proto", "_require", "_satisfies", "_keyof", "_readonly", "_unique", "_abstract", "_declare", "_enum", "_module", "_namespace", "_interface", "_type", "_opaque", "string", "num", "regexp", "privateName", "eof", "jsxName", "jsxText", "jsxTagStart", "jsxTagEnd", "placeholder", "tokenIsIdentifier", "tokenKeywordOrIdentifierIsKeyword", "tokenIsKeywordOrIdentifier", "tokenIsLiteralPropertyName", "tokenComesBeforeExpression", "tokenCanStartExpression", "tokenIsAssignment", "tokenIsFlowInterfaceOrTypeOrOpaque", "tokenIsLoop", "tokenIsKeyword", "tokenIsOperator", "tokenIsPostfix", "tokenIsPrefix", "tokenIsTSTypeOperator", "tokenIsTSDeclarationStart", "tokenLabelName", "tokenOperatorPrecedence", "tokenIsRightAssociative", "tokenIsTemplate", "getExportedToken", "context", "pop", "tc", "nonASCIIidentifierStartChars", "nonASCIIidentifierChars", "nonASCIIidentifierStart", "nonASCIIidentifier", "astralIdentifierStartCodes", "astralIdentifierCodes", "isInAstralSet", "i", "isIdentifierStart", "test", "fromCharCode", "isIdentifierChar", "reservedWords", "strict", "strictBind", "reservedWordsStrictSet", "reservedWordsStrictBindSet", "isReservedWord", "word", "inModule", "isStrictReservedWord", "has", "isStrictBindOnlyReservedWord", "isStrictBindReservedWord", "isKeyword", "isIteratorStart", "current", "next", "next2", "reservedWordLikeSet", "canBeReservedWord", "Scope", "names", "firstLexicalName", "ScopeHandler", "parser", "scopeStack", "undefinedExports", "inTopLevel", "currentScope", "inFunction", "currentVarScopeFlags", "allowSuper", "currentThisScopeFlags", "inClass", "inClassAndNotInNonArrowFunction", "inStaticBlock", "ScopeFlag", "inNonArrowFunction", "treatFunctionsAsVar", "treatFunctionsAsVarInScope", "createScope", "enter", "exit", "scope", "declareName", "bindingType", "checkRedeclarationInScope", "maybeExportDefined", "delete", "isRedeclaredInScope", "checkLocalExport", "FlowScope", "declareFunctions", "FlowScopeHandler", "add", "BaseParser", "sawUnambiguousESM", "ambiguousScriptDifferentAst", "pluginConfig", "plugins", "pluginName", "pluginOptions", "actualOptions", "plugin", "_this$plugins$get", "setTrailingComments", "comments", "trailingComments", "undefined", "unshift", "setLeadingComments", "leadingComments", "setInnerComments", "innerComments", "adjustInnerComments", "elements", "commentWS", "lastElement", "CommentsParser", "addComment", "comment", "commentsLen", "processComment", "commentStack", "commentStackLength", "lastCommentWS", "leadingNode", "nodeStart", "commentEnd", "containingNode", "finalizeComment", "splice", "trailingNode", "commentStart", "input", "charCodeAt", "properties", "finalizeRemainingComments", "resetPreviousNodeTrailingComments", "resetPreviousIdentifierLeadingComments", "takeSurroundingComments", "lineBreak", "lineBreakG", "isNewLine", "hasNewLine", "skipWhiteSpace", "skipWhiteSpaceInLine", "isWhitespace", "State", "curLine", "lineStart", "errors", "potentialArrowAt", "noArrowAt", "noArrowParamsConversionAt", "topicContext", "maxNumOfResolvableTopics", "maxTopicIndex", "labels", "ct", "firstInvalidTemplateEscapePos", "strictErrors", "tokensLength", "v", "init", "strictMode", "sourceType", "startLine", "startColumn", "maybeInArrowParameters", "inType", "noAnonFunctionType", "hasFlowComment", "isAmbientContext", "inAbstractClass", "inDisallowConditionalTypesContext", "soloAwait", "inFSharpPipelineDirectBody", "canStartJSXElement", "containsEsc", "hasTopLevelAwait", "curPosition", "clone", "slice", "forbiddenNumericSeparatorSiblings", "decBinOct", "hex", "isAllowedNumericSeparatorSibling", "bin", "ch", "oct", "dec", "readStringContents", "initialPos", "initialLineStart", "initialCurLine", "out", "firstInvalidLoc", "chunkStart", "unterminated", "isStringEnd", "res", "readEscapedChar", "str", "containsInvalid", "inTemplate", "throwOnInvalid", "readHexChar", "readCodePoint", "fromCodePoint", "strictNumericEscape", "startPos", "octalStr", "exec", "octal", "parseInt", "len", "forceLen", "n", "readInt", "invalidEscapeSequence", "allowNumSeparator", "bailOnError", "forbiddenSiblings", "isAllowedSibling", "invalid", "total", "e", "Infinity", "val", "prev", "Number", "isNaN", "unexpectedNumericSeparator", "numericSeparatorInEscapeSequence", "_isDigit", "invalidDigit", "indexOf", "invalidCodePoint", "buildPosition", "VALID_REGEX_FLAGS", "Token", "Tokenizer", "isLookahead", "errorHandlers_readInt", "errorRecovery", "errorBuilder", "errorHandlers_readCodePoint", "errorHandlers_readStringContents_string", "recordStrictModeErrors", "errorHandlers_readStringContents_template", "pushToken", "checkKeywordEscapes", "nextToken", "eat", "match", "createLookaheadState", "curContext", "lookahead", "old", "curr", "nextTokenStart", "nextTokenStartSince", "lastIndex", "lookaheadCharCode", "nextTokenInLineStart", "nextTokenInLineStartSince", "lookaheadInLineCharCode", "codePointAtPos", "cp", "trail", "setStrict", "forEach", "toParseError", "clear", "skipSpace", "finishToken", "getTokenFromCode", "skipBlockComment", "skipLineComment", "startSkip", "spaceStart", "loop", "attachComment", "annexB", "commentWhitespace", "prevType", "replaceToken", "readToken_numberSign", "readToken_interpreter", "nextPos", "expectPlugin", "readWord1", "finishOp", "readToken_dot", "readNumber", "readToken_slash", "readToken_mult_modulo", "width", "readToken_pipe_amp", "readToken_caret", "proposal", "topicToken", "codePointAt", "readToken_atSign", "readToken_plus_min", "readToken_lt", "readToken_gt", "size", "readToken_eq_excl", "readToken_question", "readTemplateToken", "readRadixNumber", "readString", "readWord", "readRegexp", "escaped", "content", "mods", "char", "includes", "isBigInt", "replace", "startsWithDot", "isFloat", "isDecimal", "hasExponent", "isOctal", "hasLeadingZero", "integer", "underscorePos", "parseFloat", "quote", "readTemplateContinuation", "opening", "firstCode", "escStart", "identifierCheck", "esc", "keywordTypes", "raiseOverwrite", "expectOnePlugin", "pluginNames", "some", "ClassScope", "privateNames", "loneAccessors", "undefinedPrivateNames", "ClassScopeHandler", "stack", "oldClassScope", "from", "declarePrivateName", "elementType", "redefined", "accessor", "oldStatic", "newStatic", "oldKind", "newKind", "ExpressionScope", "canBeArrowParameterDeclaration", "isCertainlyParameterDeclaration", "ArrowHeadParsingScope", "declarationErrors", "recordDeclarationError", "ParsingErrorClass", "clearDeclarationError", "iterateErrors", "iterator", "ExpressionScopeHandler", "recordParameterInitializerError", "origin", "recordArrowParameterBindingError", "recordAsyncArrowParametersError", "validateAsPattern", "newParameterDeclarationScope", "newArrowHeadScope", "newAsyncArrowScope", "newExpressionScope", "ProductionParameterHandler", "stacks", "currentFlags", "hasAwait", "hasYield", "hasReturn", "hasIn", "functionFlags", "UtilParser", "addExtra", "isContextual", "isUnparsedContextual", "nameStart", "nameEnd", "nextCh", "isLookaheadContextual", "eatContextual", "expectContextual", "canInsertSemicolon", "hasPrecedingLineBreak", "hasFollowingLineBreak", "isLineTerminator", "semicolon", "allowAsi", "expect", "tryParse", "fn", "oldState", "abortSignal", "failState", "thrown", "aborted", "checkExpressionErrors", "andThrow", "shorthandAssignLoc", "doubleProtoLoc", "privateKeyLoc", "optionalParametersLoc", "hasErrors", "isLiteralPropertyName", "property", "initializeScopes", "oldLabels", "oldExportedIdentifiers", "exportedIdentifiers", "oldInModule", "oldScope", "getScopeHandler", "oldProdParam", "prodParam", "oldExpressionScope", "expressionScope", "enterInitialScopes", "paramFlags", "checkDestructuringPrivate", "ExpressionErrors", "Node", "ranges", "range", "NodePrototype", "prototype", "__clone", "newNode", "clonePlaceholder", "cloneIdentifier", "cloned", "create", "expectedNode", "cloneStringLiteral", "NodeUtils", "startNodeAt", "resetStartLocationFromNode", "locationNode", "reservedTypes", "FlowErrors", "AmbiguousConditionalArrow", "AmbiguousDeclareModuleKind", "AssignReservedType", "reservedType", "DeclareClassElement", "DeclareClassFieldInitializer", "DuplicateDeclareModuleExports", "EnumBooleanMemberNotInitialized", "memberName", "enumName", "EnumDuplicateMemberName", "EnumInconsistentMemberValues", "EnumInvalidExplicitType", "invalidEnumType", "EnumInvalidExplicitTypeUnknownSupplied", "EnumInvalidMemberInitializerPrimaryType", "explicitType", "EnumInvalidMemberInitializerSymbolType", "EnumInvalidMemberInitializerUnknownType", "EnumInvalidMemberName", "suggestion", "EnumNumberMemberNotInitialized", "EnumStringMemberInconsistentlyInitialized", "GetterMayNotHaveThisParam", "ImportReflectionHasImportType", "ImportTypeShorthandOnlyInPureImport", "InexactInsideExact", "InexactInsideNonObject", "InexactVariance", "InvalidNonTypeImportInDeclareModule", "MissingTypeParamDefault", "NestedDeclareModule", "NestedFlowComment", "PatternIsOptional", "SetterMayNotHaveThisParam", "SpreadVariance", "ThisParamAnnotationRequired", "ThisParamBannedInConstructor", "ThisParamMayNotBeOptional", "ThisParamMustBeFirst", "ThisParamNoDefault", "TypeBeforeInitializer", "TypeCastInPattern", "UnexpectedExplicitInexactInObject", "UnexpectedReservedType", "UnexpectedReservedUnderscore", "UnexpectedSpaceBetweenModuloChecks", "UnexpectedSpreadType", "UnexpectedSubtractionOperand", "UnexpectedTokenAfterTypeParameter", "UnexpectedTypeParameterBeforeAsyncArrowFunction", "UnsupportedDeclareExportKind", "unsupportedExportKind", "UnsupportedStatementInDeclareModule", "UnterminatedFlowComment", "isEsModuleType", "bodyElement", "hasTypeImportKind", "importKind", "exportSuggestions", "const", "let", "interface", "partition", "list", "list1", "list2", "FLOW_PRAGMA_REGEX", "flow", "flowPragma", "shouldParseTypes", "shouldParseEnums", "matches", "Error", "flowParseTypeInitialiser", "tok", "oldInType", "flowParseType", "flowParsePredicate", "moduloLoc", "parseExpression", "flowParseTypeAndPredicateInitialiser", "predicate", "flowParseDeclareClass", "flowParseInterfaceish", "flowParseDeclareFunction", "parseIdentifier", "typeNode", "typeContainer", "flowParseTypeParameterDeclaration", "tmp", "flowParseFunctionTypeParams", "this", "returnType", "typeAnnotation", "flowParseDeclare", "insideModule", "flowParseDeclareVariable", "flowParseDeclareModuleExports", "flowParseDeclareModule", "flowParseDeclareTypeAlias", "flowParseDeclareOpaqueType", "flowParseDeclareInterface", "flowParseDeclareExportDeclaration", "flowParseTypeAnnotatableIdentifier", "parseExprAtom", "bodyNode", "parseImport", "hasModuleExport", "default", "isLet", "exportKind", "flowParseTypeAnnotation", "finished", "flowParseTypeAlias", "flowParseOpaqueType", "isClass", "flowParseRestrictedIdentifier", "extends", "flowParseInterfaceExtends", "implements", "mixins", "flowParseObjectType", "allowStatic", "allowExact", "allowSpread", "allowProto", "allowInexact", "flowParseQualifiedTypeIdentifier", "flowParseTypeParameterInstantiation", "flowParseInterface", "checkNotUnderscore", "checkReservedType", "liberal", "right", "declare", "supertype", "impltype", "flowParseTypeParameter", "requireDefault", "nodeStartLoc", "variance", "flowParseVariance", "ident", "bound", "defaultRequired", "typeParameter", "oldNoAnonFunctionType", "flowParseTypeParameterInstantiationCallOrNew", "flowParseTypeOrImplicitInstantiation", "flowParseInterfaceType", "flowParseObjectPropertyKey", "flowParseObjectTypeIndexer", "isStatic", "static", "flowParseObjectTypeInternalSlot", "flowParseObjectTypeMethodish", "flowParseFunctionTypeParam", "flowParseObjectTypeCallProperty", "valueNode", "callProperties", "indexers", "internalSlots", "endDelim", "exact", "inexact", "protoStartLoc", "inexactStartLoc", "propOrInexact", "flowParseObjectTypeProperty", "flowObjectTypeSemicolon", "proto", "flowCheckGetterSetterParams", "paramCount", "_startLoc", "node2", "qualification", "flowParseGenericType", "flowParseTypeofType", "flowParsePrimaryType", "flowParseTupleType", "first", "lh", "isThis", "reinterpretTypeAsFunctionTypeParam", "flowIdentToTypeAnnotation", "isGroupedType", "parseLiteralAtNode", "createIdentifier", "flowParsePostfixType", "seenOptionalIndexedAccess", "objectType", "indexType", "flowParsePrefixType", "flowParseAnonFunctionWithoutParens", "param", "flowParseIntersectionType", "flowParseUnionType", "allowPrimitiveOverride", "typeCastToParameter", "allowExpressionBody", "forwardNoArrowParamsConversionAt", "parseFunctionBodyAndFinish", "parseStatementLike", "flowParseEnumDeclaration", "parseExpressionStatement", "expr", "shouldParseExportDeclaration", "isExportDefaultSpecifier", "parseExportDefaultExpression", "parseConditional", "setOptionalParametersError", "originalNoArrowAt", "consequent", "failed", "tryParseConditionalConsequent", "valid", "getArrowLikeExpressions", "alternate", "parseMaybeAssign", "parseMaybeAssignAllowIn", "disallowInvalid", "arrows", "finishArrowValidation", "every", "_node$extra", "toAssignableList", "trailingCommaLoc", "checkParams", "result", "parseParenItem", "typeCastNode", "assertModuleNodeAllowed", "parseExportDeclaration", "declarationNode", "parseExportSpecifiers", "parseExportFrom", "eatExportStar", "maybeParseExportNamespaceSpecifier", "hasNamespace", "parseClassId", "isStatement", "optionalId", "parseClassMember", "member", "parseClassMemberFromModifier", "isIterator", "readIterator", "fullWord", "left", "exprList", "toReferencedList", "isParenthesizedExpr", "_expr$extra", "parseArrayLike", "close", "canBePattern", "isTuple", "isParenthesized", "isClassMethod", "isClassProperty", "isNonstaticConstructor", "isThisParam", "pushClassPrivateMethod", "parseClassSuper", "superTypeParameters", "implemented", "checkGetterSetterParams", "parsePropertyNamePrefixOperator", "parseObjPropValue", "parseAssignableListItemTypes", "parseMaybeDefault", "checkImportReflection", "module", "parseImportSpecifierLocal", "specifier", "local", "finishImportSpecifier", "isPotentialImportPhase", "isExport", "applyImportPhase", "parseImportSpecifier", "importedIsString", "isInTypeOnlyImport", "isMaybeTypeOnly", "firstIdent", "imported", "specifierTypeKind", "as_ident", "specifierIsTypeImport", "checkReservedWord", "parseBindingAtom", "parseFunctionParams", "parseVarId", "decl", "parseAsyncArrowFromCallExpression", "call", "shouldParseAsyncArrow", "afterLeftParse", "_jsx", "jsx", "currentContext", "_jsx2", "_jsx3", "abort", "_arrowExpression$extr", "arrowExpression", "maybeUnwrapTypeCastExpression", "async", "parseArrow", "shouldParseArrow", "setArrowFunctionParameters", "allowDuplicates", "isArrowFunction", "strictModeChanged", "parseParenAndDistinguishExpression", "canBeArrow", "parseSubscripts", "parseCallExpressionArguments", "parseAsyncArrowWithTypeParameters", "subscriptState", "isLookaheadToken_lt", "typeArguments", "parseNewCallee", "targs", "parseArrowExpression", "parseTopLevel", "program", "fileNode", "skipFlowComment", "hasFlowCommentCompletion", "commentSkip", "shiftToFirstNonWhiteSpace", "ch2", "ch3", "flowEnumErrorBooleanMemberNotInitialized", "flowEnumErrorInvalidMemberInitializer", "enumContext", "flowEnumErrorNumberMemberNotInitialized", "flowEnumErrorStringMemberInconsistentlyInitialized", "flowEnumMemberInit", "endOfInit", "literal", "flowEnumMemberRaw", "flowEnumCheckExplicitTypeMismatch", "expectedType", "flowEnumMembers", "seenNames", "members", "booleanMembers", "numberMembers", "stringMembers", "defaultedMembers", "hasUnknownMembers", "memberNode", "toUpperCase", "flowEnumStringMembers", "initializedMembers", "flowEnumParseExplicitType", "flowEnumBody", "nameLoc", "empty", "boolsLen", "numsLen", "strsLen", "defaultedLen", "afterNext", "entities", "__proto__", "quot", "amp", "apos", "nbsp", "iexcl", "cent", "pound", "curren", "yen", "brvbar", "sect", "uml", "copy", "ordf", "laquo", "not", "shy", "reg", "macr", "deg", "plusmn", "sup2", "sup3", "acute", "micro", "para", "middot", "cedil", "sup1", "ordm", "raquo", "frac14", "frac12", "frac34", "iquest", "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml", "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc", "atilde", "auml", "aring", "aelig", "ccedil", "egrave", "eacute", "ecirc", "euml", "igrave", "iacute", "icirc", "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde", "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc", "uuml", "yacute", "thorn", "yuml", "OElig", "oelig", "Scaron", "scaron", "Yuml", "fnof", "circ", "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega", "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "sigmaf", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega", "thetasym", "upsih", "piv", "ensp", "emsp", "thinsp", "zwnj", "zwj", "lrm", "rlm", "ndash", "mdash", "lsquo", "rsquo", "sbquo", "ldquo", "rdquo", "bdquo", "dagger", "Dagger", "bull", "hellip", "permil", "prime", "Prime", "lsaquo", "rsaquo", "oline", "frasl", "euro", "image", "weierp", "real", "trade", "alefsym", "larr", "uarr", "rarr", "darr", "harr", "crarr", "lArr", "uArr", "rArr", "dArr", "hArr", "forall", "part", "exist", "nabla", "isin", "notin", "ni", "prod", "sum", "minus", "lowast", "radic", "infin", "ang", "and", "or", "cap", "cup", "int", "there4", "sim", "cong", "asymp", "ne", "equiv", "le", "ge", "sub", "sup", "nsub", "sube", "supe", "oplus", "otimes", "perp", "sdot", "lceil", "rceil", "lfloor", "rfloor", "lang", "rang", "loz", "spades", "clubs", "hearts", "diams", "JsxErrors", "AttributeIsEmpty", "MissingClosingTagElement", "openingTagName", "MissingClosingTagFragment", "UnexpectedSequenceExpression", "HTMLEntity", "UnsupportedJsxValue", "UnterminatedJsxContent", "UnwrappedAdjacentJSXElements", "isFragment", "getQualifiedJSXName", "namespace", "jsxReadToken", "jsxReadEntity", "jsxReadNewLine", "normalizeCRLF", "jsxReadString", "codePoint", "count", "desc", "entity", "XHTMLEntities", "jsxReadWord", "jsxParseIdentifier", "jsxParseNamespacedName", "jsxParseElementName", "jsxParseAttributeValue", "setContext", "jsxParseExpressionContainer", "jsxParseEmptyExpression", "jsxParseSpreadChild", "previousContext", "jsxParseAttribute", "jsxParseOpeningElementAt", "jsxParseOpeningElementAfterName", "selfClosing", "jsxParseClosingElementAt", "jsxParseElementAt", "children", "openingElement", "closingElement", "contents", "openingFragment", "closingFragment", "jsxParseElement", "newContext", "TypeScriptScope", "tsNames", "TypeScriptScopeHandler", "importsStack", "hasImport", "allowShadow", "isConst", "wasConst", "unwrapParenthesizedExpression", "LValParser", "_node$extra3", "last", "_node$extra2", "operator", "arg", "checkToRestConversion", "elt", "element", "toReferencedListDeep", "parseSpread", "parseRestBinding", "parseBindingList", "ParseBindingListFlags", "parseObjectLike", "closeCharCode", "allowEmpty", "elts", "checkCommaAfterRest", "parseDecorator", "parseAssignableListItem", "parseBindingRestProperty", "parseBindingProperty", "parsePropertyName", "_left", "checkLVal", "checkClashes", "hasParenthesizedAncestor", "_expression$extra", "checkIdentifier", "validity", "ParseErrorClass", "isParenthesizedExpression", "nextAncestor", "child", "declareNameFromIdentifier", "identifier", "allowPattern", "nonNull", "x", "assert", "TSErrors", "AbstractMethodHasImplementation", "methodName", "AbstractPropertyHasInitializer", "propertyName", "AccessorCannotBeOptional", "ClassMethodHasDeclare", "ClassMethodHasReadonly", "ConstructorHasTypeParameters", "DeclareAccessor", "DeclareClassFieldHasInitializer", "DeclareFunctionHasImplementation", "DuplicateAccessibilityModifier", "modifier", "DuplicateModifier", "EmptyHeritageClauseType", "EmptyTypeArguments", "EmptyTypeParameters", "ExpectedAmbientAfterExportDeclare", "ImportAliasHasImportType", "IncompatibleModifiers", "modifiers", "IndexSignatureHasAbstract", "IndexSignatureHasAccessibility", "IndexSignatureHasDeclare", "IndexSignatureHasOverride", "IndexSignatureHasStatic", "InitializerNotAllowedInAmbientContext", "InvalidModifierOnTypeMember", "InvalidModifierOnTypeParameter", "InvalidModifierOnTypeParameterPositions", "InvalidModifiersOrder", "orderedModifiers", "InvalidPropertyAccessAfterInstantiationExpression", "InvalidTupleMemberLabel", "MissingInterfaceName", "NonAbstractClassHasAbstractMethod", "NonClassMethodPropertyHasAbstractModifer", "OptionalTypeBeforeRequired", "OverrideNotInSubClass", "PrivateElementHasAbstract", "PrivateElementHasAccessibility", "ReadonlyForMethodSignature", "ReservedArrowTypeParam", "ReservedTypeAssertion", "SingleTypeParameterWithoutTrailingComma", "typeParameterName", "StaticBlockCannotHaveModifier", "TupleOptionalAfterType", "TypeAnnotationAfterAssign", "TypeImportCannotSpecifyDefaultAndNamed", "TypeModifierIsUsedInTypeExports", "TypeModifierIsUsedInTypeImports", "UnexpectedParameterModifier", "UnexpectedReadonly", "UnexpectedTypeAnnotation", "UnexpectedTypeCastInParameter", "UnsupportedImportTypeArgument", "UnsupportedParameterPropertyKind", "UnsupportedSignatureParameterKind", "keywordTypeFromName", "tsIsAccessModifier", "tsIsVarianceAnnotations", "typescript", "tsParseInOutModifiers", "tsParseModifiers", "bind", "allowedModifiers", "disallowedModifiers", "errorTemplate", "tsParseConstModifier", "tsParseInOutConstModifiers", "tsIsIdentifier", "tsTokenCanFollowModifier", "tsNextTokenOnSameLineAndCanFollowModifier", "tsNextTokenCanFollowModifier", "tsParseModifier", "stopOnStartOfClassStaticBlock", "tsIsStartOfStaticBlocks", "tsTryParse", "modified", "enforceOrder", "before", "after", "incompatible", "mod1", "mod2", "accessibility", "hasOwnProperty", "tsIsListTerminator", "tsParseList", "parseElement", "tsParseDelimitedList", "refTrailingCommaPos", "tsParseDelimitedListWorker", "expectSuccess", "trailingCommaPos", "tsParseBracketedList", "bracket", "skipFirstToken", "tsParseImportType", "expectImportAttributesPlugin", "qualifier", "tsParseEntityName", "tsParseTypeArguments", "allowReservedWords", "tsParseTypeReference", "typeName", "tsParseThisTypePredicate", "lhs", "parameterName", "tsParseTypeAnnotation", "asserts", "tsParseThisTypeNode", "tsParseTypeQuery", "exprName", "tsParseTypeParameter", "parseModifiers", "tsParseTypeParameterName", "constraint", "tsEatThenParseType", "tsTryParseTypeParameters", "tsParseTypeParameters", "tsFillSignature", "returnToken", "signature", "returnTokenRequired", "paramsKey", "returnTypeKey", "tsParseBindingListForSignature", "tsParseTypeOrTypePredicateAnnotation", "tsParseTypeMemberSemicolon", "tsParseSignatureMember", "tsIsUnambiguouslyIndexSignature", "tsTryParseIndexSignature", "tsLookAhead", "parameters", "tsTryParseTypeAnnotation", "tsParsePropertyOrMethodSignature", "readonly", "nodeAny", "firstParameter", "tsParseTypeMember", "idx", "tsParseTypeLiteral", "tsParseObjectTypeMembers", "tsIsStartOfMappedType", "tsParseMappedType", "tsExpectThenParseType", "nameType", "tsParseType", "tsTryParseType", "tsParseTupleType", "elementTypes", "tsParseTupleElementType", "seenOptionalElement", "elementNode", "labeled", "chAfterWord", "wordName", "typeOrLabel", "tsParseNonArrayType", "labeledNode", "optionalTypeNode", "restNode", "tsParseParenthesizedType", "tsParseFunctionOrConstructorType", "abstract", "tsInAllowConditionalTypesContext", "tsParseLiteralTypeNode", "tsParseTemplateLiteralType", "parseTemplate", "parseTemplateSubstitution", "tsParseThisTypeOrThisTypePredicate", "thisKeyword", "parseMaybeUnary", "nodeType", "tsParseArrayTypeOrHigher", "tsParseTypeOperator", "tsParseTypeOperatorOrHigher", "tsCheckTypeAnnotationForReadOnly", "tsParseInferType", "tsParseConstraintForInferType", "tsInDisallowConditionalTypesContext", "tsParseUnionOrIntersectionType", "parseConstituentType", "hasLeadingOperator", "tsParseIntersectionTypeOrHigher", "tsParseUnionTypeOrHigher", "tsIsStartOfFunctionType", "tsIsUnambiguouslyStartOfFunctionType", "tsSkipParameterStart", "previousErrorCount", "tsInType", "t", "tsParseTypePredicateAsserts", "thisTypePredicate", "typePredicateVariable", "tsParseTypePredicatePrefix", "tsTryParseTypeOrTypePredicateAnnotation", "eatColon", "tsParseNonConditionalType", "checkType", "extendsType", "trueType", "falseType", "isAbstractConstructorSignature", "tsParseTypeAssertion", "tsParseHeritageClause", "originalStartLoc", "delimitedList", "tsParseInterfaceDeclaration", "tsParseTypeAliasDeclaration", "tsInNoContext", "cb", "oldContext", "oldInDisallowConditionalTypesContext", "tsNextThenParseType", "tsParseEnumMember", "initializer", "tsParseEnumDeclaration", "tsParseModuleBlock", "parseBlockOrModuleBlockBody", "tsParseModuleOrNamespaceDeclaration", "nested", "inner", "tsParseAmbientExternalModuleDeclaration", "global", "tsParseImportEqualsDeclaration", "maybeDefaultIdentifier", "moduleReference", "tsParseModuleReference", "tsIsExternalModuleReference", "tsParseExternalModuleReference", "f", "tsTryParseAndCatch", "tsTryParseDeclare", "nany", "startType", "tsInAmbientContext", "parseFunctionStatement", "parseClass", "parseVarStatement", "tsParseDeclaration", "tsTryParseExportDeclaration", "tsParseExpressionStatement", "mod", "tsCheckLineTerminator", "tsParseAbstractDeclaration", "tsTryParseGenericAsyncArrowFunction", "oldMaybeInArrowParameters", "tsParseTypeArgumentsInExpression", "reScan_lt", "reScan_lt_gt", "tsIsDeclarationStart", "override", "pp", "parameter", "isSimpleParameter", "tsDisallowOptionalPattern", "bodilessType", "registerFunctionStatementId", "tsCheckForInvalidTypeCasts", "items", "isInParens", "nonNullExpression", "isOptionalCall", "missingParenErrorLoc", "atPossibleAsyncArrow", "asyncArrowFn", "parseTaggedTemplateExpression", "tokenType", "_callee$extra", "parseExprOp", "leftStartLoc", "minPrec", "isSatisfies", "checkKeywords", "checkDuplicateExports", "importNode", "parseMaybeImportPhase", "parseImportSpecifiersAndAfter", "nodeImportEquals", "isAbstractClass", "cls", "allowMissingInitializer", "declarations", "isValidAmbientConstInitializer", "parseStatementContent", "parseAccessModifier", "tsHasSomeModifiers", "callParseClassMemberWithIsStatic", "parseClassStaticBlock", "parseClassMemberWithIsStatic", "hadSuperClass", "parsePostMemberNameModifiers", "methodOrProp", "isDeclare", "parseClassPropertyAnnotation", "definite", "parseClassAccessorProperty", "declareClassPrivateMethodInScope", "_typeCast", "_typeCast2", "typeCast", "_typeParameters", "reportReservedArrowTypeParam", "trailingComma", "sawUnary", "toAssignableParenthesizedExpression", "parseMaybeDecoratorArguments", "canHaveLeadingDecorator", "getGetterSetterExpectedParamCount", "baseCount", "firstParam", "parseCatchClauseParam", "oldIsAmbientContext", "oldStrict", "oldInAbstractClass", "maybeTakeDecorators", "shouldParseAsAmbientContext", "getExpression", "parseExportSpecifier", "isString", "isInTypeExport", "parseTypeOnlyImportExportSpecifier", "isImport", "isInTypeOnlyImportExport", "leftOfAsKey", "rightOfAsKey", "leftOfAs", "rightOfAs", "hasTypeSpecifier", "canParseAsKeyword", "firstAs", "secondAs", "parseModuleExportName", "kindKey", "isPossiblyLiteralEnum", "expressions", "isUncomputedMemberExpressionChain", "isNumber", "isNegativeNumber", "PlaceholderErrors", "ClassNameIsRequired", "UnexpectedSpace", "placeholders", "parsePlaceholder", "assertNoSpace", "finishPlaceholder", "chStartsBindingIdentifier", "verifyBreakContinue", "isBreak", "parseStatementOrSloppyAnnexBFunctionDeclaration", "stmtPlaceholder", "parseBlock", "createNewLexicalScope", "parseFunctionId", "requireId", "parseClassBody", "startsWith", "maybeParseExportDefaultSpecifier", "_specifiers", "checkExport", "filter", "maybeParseStarImportSpecifier", "parseNamedImportSpecifiers", "parseImportSource", "v8intrinsic", "parseV8Intrinsic", "v8IntrinsicStartLoc", "parseIdentifierName", "PIPELINE_PROPOSALS", "TOPIC_TOKENS", "validatePlugins", "pluginsMap", "decoratorsBeforeExport", "allowCallParenthesized", "_pluginsMap$get", "proposalList", "p", "tupleSyntaxIsHash", "syntaxType", "tokenList", "version", "RECORD_AND_TUPLE_SYNTAX_TYPES", "missingPlugins", "mixinPlugins", "mixinPluginNames", "defaultOptions", "sourceFilename", "allowAwaitOutsideFunction", "allowReturnOutsideFunction", "allowNewTargetOutsideFunction", "allowImportExportEverywhere", "allowSuperOutsideMethod", "allowUndeclaredExports", "createImportExpressions", "createParenthesizedExpressions", "getOptions", "opts", "_opts$key", "ExpressionParser", "checkProto", "isRecord", "protoRef", "used", "shouldExitDescending", "disallowIn", "disallowInAnd", "parseExpressionBase", "allowInAnd", "parseMaybeAssignDisallowIn", "resultError", "_resultError$loc", "parseYield", "ownExpressionErrors", "parseMaybeConditional", "startIndex", "parseExprOps", "parseMaybeUnaryOrPrivate", "op", "prec", "checkPipelineAtInfixOperator", "logical", "coalesce", "parseExprOpRightExpr", "finishedNode", "nextOp", "withTopicBindingContext", "parseHackPipeBody", "parseSmartPipelineBodyInStyle", "parseExprOpBaseRightExpr", "withSoloAwaitPermittingContext", "parseFSharpPipelineBody", "_body$extra", "topicReferenceWasUsedInCurrentContext", "checkExponentialAfterUnary", "isAwait", "recordAwaitIfAllowed", "parseAwait", "update", "isDelete", "parseUpdate", "isAmbiguousAwait", "updateExpressionNode", "parseExprSubscripts", "maybeAsyncArrow", "parseBind", "parseCoverCallAndAsyncArrowHead", "parseMember", "parseNoCallExpr", "tag", "quasi", "dynamicImport", "allowPlaceholder", "nodeForExtra", "oldInFSharpPipelineDirectBody", "addTrailingCommaExtraToNode", "parseExprListItem", "_call$extra", "parseSuper", "parseImportMetaProperty", "parseImportCall", "parseDo", "parseFunctionOrFunctionSent", "parseDecorators", "parseNewOrNewTarget", "parseTopicReferenceThenEqualsSign", "parseTopicReference", "pipeProposal", "lookaheadCh", "parseModuleExpression", "parseAsyncFunctionExpression", "parseAsyncArrowUnaryFunction", "topicTokenType", "topicTokenValue", "finishTopicReference", "testTopicReferenceConfiguration", "topicReferenceIsAllowedInCurrentContext", "registerTopicReference", "meta", "parseMetaProperty", "parseFunction", "isSource", "innerStartLoc", "spreadStartLoc", "optionalCommaStartLoc", "spreadNodeStartLoc", "innerEndLoc", "arrowNode", "wrapParenthesis", "parenExpression", "metaProp", "parseNew", "parseExprList", "parseTemplateElement", "isTagged", "elemStart", "elem", "isTail", "endOffset", "elemEnd", "cooked", "tail", "curElt", "quasis", "substitutions", "propHash", "parsePropertyDefinition", "maybeAsyncOrAccessorProp", "keyName", "_params", "finishedProp", "generator", "isExpression", "hasStrictModeDirective", "nonSimple", "isSimpleParamList", "formalParameters", "isAwaitAllowed", "delegating", "delegate", "childExpr", "isSimpleReference", "checkSmartPipeTopicBodyEarlyErrors", "callback", "outerContextTopicState", "withSmartMixTopicForbiddingContext", "outerContextSoloAwaitState", "ParamKind", "ret", "revertScopes", "parseProgram", "loopLabel", "switchLabel", "loneSurrogate", "keywordRelationalOperator", "babel7CompatTokens", "hashEndPos", "hashEndLoc", "backquoteEnd", "backquoteEndLoc", "startToken", "templateValue", "templateElementEnd", "templateElementEndLoc", "endToken", "StatementParser", "interpreter", "parseInterpreterDirective", "finishedProgram", "stmtToDirective", "directiveLiteral", "hasFollowingBindingAtom", "endCh", "chStartsBindingPattern", "hasInLineFollowingBindingIdentifierOrBrace", "startsUsingForOf", "startsAwaitUsing", "parseModuleItem", "ParseStatementFlag", "parseStatementListItem", "allowLabeledFunction", "parseStatement", "allowDeclaration", "allowFunctionDeclaration", "parseBreakContinueStatement", "parseDebuggerStatement", "parseDoWhileStatement", "parseForStatement", "parseIfStatement", "parseReturnStatement", "parseSwitchStatement", "parseThrowStatement", "parseTryStatement", "parseWhileStatement", "parseWithStatement", "parseEmptyStatement", "nextTokenCharCode", "isAsyncFunction", "maybeName", "parseLabeledStatement", "decoratorsEnabledBeforeExport", "maybeDecorators", "classNode", "exportNode", "allowExport", "paramsStartLoc", "lab", "parseHeaderExpression", "awaitAt", "parseFor", "startsWithLet", "startsWithAwaitUsing", "starsWithUsingDeclaration", "isLetOrUsing", "initNode", "parseVar", "isForIn", "parseForIn", "startsWithAsync", "isForOf", "isHangingDeclaration", "ParseFunctionFlag", "discriminant", "cases", "cur", "sawDefault", "isCase", "block", "handler", "clause", "finalizer", "statementStart", "parsedNonDirective", "await", "isFor", "hangingDeclaration", "isDeclaration", "hadConstructor", "publicMethod", "privateMethod", "publicProp", "privateProp", "accessorProp", "publicMember", "parseClassElementName", "maybeContextualKw", "isPrivate", "maybeQuestionTokenStartLoc", "pushClassPrivateProperty", "pushClassProperty", "pushClassAccessorProperty", "_member$decorators", "parseInitializer", "hasDefault", "parseAfterDefault", "hasStar", "parseAfterNamespace", "isFromRequired", "hasSpecifiers", "maybeParseExportNamedSpecifiers", "hasDeclaration", "maybeParseExportDeclaration", "_node2$declaration", "_ref$specifiers", "isTypeExport", "assertions", "nextType", "hasFrom", "nextAfterFrom", "maybeParseImportAttributes", "checkJSONModuleImport", "checkNames", "isDefault", "isFrom", "_node$specifiers", "_declaration$extra", "nodes", "surrogate", "isJSONModuleImport", "singleBindingType", "_node$assertions", "nonDefaultNamedSpecifier", "find", "phaseIdentifier", "isPrecedingIdImportPhase", "parseImportSourceAndAttributes", "parseNext", "maybeParseDefaultImportSpecifier", "_node$specifiers2", "parseImportAttributes", "attrs", "attrNames", "parseModuleAttributes", "useWith", "importSpecifier", "Parser", "_options", "getParser", "ast", "moduleError", "generateExportedTokenTypes", "internalTokenTypes", "tokTypes", "getParserClass", "parserClassCache", "pluginList", "dist_exports", "__export", "MagicastError", "builders", "detectCodeFormat", "generateCode", "loadFile", "parseExpression", "parseModule", "writeFile", "sharedPlugin", "fork", "types", "typesPlugin", "Type", "builtin", "isNumber", "geq", "than", "value", "defaults", "naiveIsPrimitive", "isPrimitive", "type", "maybeSetModuleExports", "moduleGetter", "nodeModule", "originalExports", "defaultExport", "shallowStringify", "key", "_fork", "OrType", "name", "ArrayType", "IdentityType", "ObjectType", "PredicateType", "Def", "isArray", "isObject", "name2", "Field", "bicfIndex", "builtInCtorFns", "builtInCtorTypes", "typeName", "hasOwn$6", "defCache", "DefImpl", "defBuiltInType", "example", "objStr", "objToStr", "isString", "isFunction", "isRegExp", "isDate", "isBoolean", "isNull", "isUndefined", "isBigInt", "builtInTypes", "defFromValue", "d", "deep", "vDef", "buildParams", "addParam", "built", "param", "arg", "isArgAvailable", "all", "field", "message", "builder", "args", "argc", "nodePrototype", "i", "obj", "getBuilderName", "defaultFn", "hidden", "allFields", "allSupertypes", "def", "extend", "fieldName", "namedTypes", "populateSupertypeList", "wrapExpressionBuilderWithStatement", "getSupertypeNames", "computeSupertypeLookupTable", "candidates", "table", "typeNames", "typeNameCount", "j", "superTypeName", "defineMethod", "func", "old", "upperCasePrefix", "len", "getStatementBuilderName", "getFieldNames", "object", "getFieldValue", "eachField", "callback", "context", "someField", "wrapperName", "wrapped", "list", "lastSeen", "pos", "to", "from", "into", "finalize", "pathPlugin", "Path", "Path2", "parentPath", "Pp", "getChildCache", "path", "getChildPath", "cache", "actualChildValue", "childPath", "hasOwn$5", "names", "count", "childPaths", "result", "emptyMoves", "getMoves", "offset", "start", "end", "length", "moves", "newIndex", "newIndex2", "childPath2", "move", "index", "pp", "insertAtArgs", "repairRelationshipWithParent", "parentValue", "parentCache", "replacement", "results", "originalLength", "spliceArgs", "splicedOut", "scopePlugin", "Node", "Expression", "b", "Scope", "Scope2", "parentScope", "TypeParameterScopeType", "ScopeType", "depth", "FlowOrTSTypeParameterType", "node", "Sp", "hasOwn$4", "prefix", "identifier", "init", "bodyPath", "force", "scanScope", "bindings", "scopeTypes", "params", "addTypeParameter", "addPattern", "recursiveScanScope", "recursiveScanChild", "paramPath", "addTypePattern", "child", "pathHasValue", "catchParamName", "hadBinding", "patternPath", "pattern", "propertyPath", "property", "elementPath", "element", "types2", "parameterPath", "parameter", "scope", "nodePathPlugin", "n", "NodePath", "NodePath2", "NPp", "remainingNodePath", "cleanUpNodesAfterPrune", "assumeExpressionContext", "parent", "n2", "po", "pp2", "PRECEDENCE", "no", "np", "containsCallExpression", "isBinary", "tier", "op", "_name", "firstInStatement", "declarations", "cleanUpIfStatementAfterPrune", "ifStatement", "testExpression", "alternate", "consequent", "testExpressionStatement", "negatedTestExpression", "pathVisitorPlugin", "undefined$1", "PathVisitor", "PathVisitor2", "computeMethodNameTable", "hasOwn$3", "makeContextConstructor", "visitor", "methodName", "supertypeTable", "methodNameTable", "typeNameKeys", "methods", "Visitor", "Visitor2", "Vp", "PVp", "target", "source", "didNotThrow", "root", "request", "_path", "visitChildren", "childNames", "childCount", "childName", "Context", "Cp", "sharedContextProtoMethods", "newVisitor", "equivPlugin", "hasOwn", "astNodesAreEquivalent", "a", "problemPath", "areEquivalent", "subscriptForProperty", "arraysAreEquivalent", "objectsAreEquivalent", "aLength", "problemPathTail", "aNames", "aNameCount", "bNames", "bNameCount", "aChild", "bChild", "seenNames", "plugins", "createFork", "used", "usedResult", "use", "plugin", "idx", "coreOpsDef", "es2016OpsDef", "es2020OpsDef", "es2021OpsDef", "assignOp", "coreDef", "or", "shared", "BinaryOperators", "AssignmentOperators", "LogicalOperators", "UnaryOperator", "BinaryOperator", "AssignmentOperator", "UpdateOperator", "LogicalOperator", "es6Def", "ClassBodyElement", "es2016Def", "es2017Def", "es2018Def", "es2019Def", "es2020Def", "es2021Def", "es2022Def", "esProposalsDef", "decl", "jsxDef", "JSXElementName", "JSXAttributes", "JSXChildren", "typeAnnotationsDef", "TypeAnnotation", "TypeParamDecl", "flowDef", "LegacyVariance", "esprimaDef", "babelCoreDef", "makeLiteralExtra", "rawValueType", "toRaw", "val", "exp", "ObjectExpressionProperty", "ObjectPatternProperty", "babelDef", "typescriptDef", "StringLiteral", "TSEntityName", "keywordType", "ParametersType", "TSTypeMember", "getLineTerminator", "getOption", "options", "defaultValue", "hasOwn$2", "getUnionOfKeys", "keys", "keyCount", "comparePos", "pos1", "pos2", "copyPos", "composeSourceMaps", "formerMap", "latterMap", "smcFormer", "SourceMapConsumer", "smcLatter", "smg", "SourceMapGenerator", "sourcesToContents", "mapping", "origPos", "sourceName", "sourceContent", "getTrueLoc", "lines", "include", "node2", "expandLoc", "isExportDeclaration", "parentLoc", "childLoc", "fixFaultyLocations", "loc", "fixForLoopHead", "fixTemplateLiteral", "decorator", "decorators", "n$2", "loc2", "fix", "afterLeftBackTickPos", "firstQuasi", "rightBackTickPos", "lastQuasi", "expr", "dollarCurlyPos", "quasiBefore", "rightCurlyPos", "quasiAfter", "getParentExportDeclaration", "parentNode", "isTrailingCommaEnabled", "trailingComma", "normalize", "opts", "get", "hasOwn$1", "addPos", "toPos", "line", "column", "subtractPos", "fromPos", "skipChars", "sourceLines", "sourceFromPos", "targetLines", "targetFromPos", "targetToPos", "targetComparison", "sourceCursor", "targetCursor", "lineDiff", "countSpaces", "spaces", "tabWidth", "next", "fromString", "string", "Lines", "tabless", "cacheable", "maxCacheKeyLen", "fromStringCache", "lineTerminatorSeqExp", "leadingSpaceExp", "isOnlyWhitespace", "sliceInfo", "info", "startCol", "endCol", "sliceStart", "sliceEnd", "indent", "lineLength", "concat", "elements", "emptyLines", "getSortedChildNodes", "resultArray", "n$1", "childNodes", "childNodesCache", "isArray$3", "isObject$3", "nameCount", "decorateComment", "comment", "left", "right", "precedingNode", "followingNode", "middle", "attach", "comments", "ast", "tiesToBreak", "pn", "en", "fn", "tieCount", "breakTies", "addTrailingComment", "addLeadingComment", "addDanglingComment", "gapEndPos", "indexOfFirstLeadingComment", "gap", "enclosingNode", "comment2", "addCommentHelper", "printLeadingComment", "commentPath", "print", "parts", "trailingSpace", "printTrailingComment", "leadingSpace", "printComments", "innerLines", "leadingParts", "trailingParts", "leading", "trailing", "parse", "sourceWithoutTabs", "tokens", "token", "file", "program", "b$5", "trueProgramLoc", "TreeCopier", "getNodeHelper", "s", "isArray$1", "getSurroundingComments", "getReprinter", "Printable", "orig", "origLoc", "reprints", "findReprints", "patcher", "Patcher", "reprint", "newNode", "oldNode", "SourceLocation", "needToPrintNewPathWithComments", "newLines", "nls", "needsLeadingSpace", "nts", "needsTrailingSpace", "newParts", "patchedLines", "oldLines", "oldLoc", "posBeforeOldLoc", "charBeforeOldLoc", "newFirstChar", "riskyAdjoiningCharExp", "charAfterOldLoc", "newLastPos", "newLastChar", "newPath", "oldPath", "FastPath", "canReprint", "findChildReprints", "findAnyReprints", "findArrayReprints", "isObject$1", "findObjectReprints", "newParentNode", "oldParentNode", "oldNeedsParens", "newNeedParens", "childReprints", "originalReprintCount", "k", "ReturnStatement", "genericPrint", "config", "printPath", "linesWithoutParens", "genericPrintNoParens", "shouldAddParens", "decoratorsLines", "printDecorators", "printStatementSequence", "optional", "printFunctionParams", "printMethod", "printExportDeclaration", "maybeAddSemicolon", "unbracedSpecifiers", "bracedSpecifiers", "specifierPath", "spec", "maybePrintImportAssertions", "naked", "argLines", "printArgumentsList", "isTypeAnnotation", "separator", "fields", "allowBreak", "oneLine", "leftBrace", "rightBrace", "leftBraceIndex", "multiLine", "printed", "elemPath", "getPossibleRaw", "nodeStr", "maxLen", "con", "adjustClause", "endsWithBrace", "sep", "forParen", "indented", "head", "clause", "doBody", "statements", "handlerPath", "consequentPath", "openingPropName", "closingPropName", "openingLines", "childLines", "closingLines", "attrParts", "attrPath", "attrLines", "part", "access", "printVariance", "printClassMemberModifiers", "printFlowDeclaration", "expressions", "isArrowFunctionTypeAnnotation", "hasTypeParameters", "needsParens", "members", "member", "lastNonSpaceCharacter", "expression", "isInMappedType", "memberLines", "decoratorPath", "filtered", "stmtPath", "stmt", "prevTrailingSpace", "notFirst", "notLast", "trueLoc", "beforeStart", "beforeStartLine", "leadingGap", "afterEnd", "trailingGap", "maxSpace", "s1", "s2", "spaceLines1", "spaceLines2", "kind", "nodeValue", "valuePath", "joined", "fun", "defExprPath", "p", "flat", "shouldPrintSpaces", "lines2", "variancePath", "ch", "swapQuotes", "str", "m", "extra", "raw", "jsSafeStringify", "double", "single", "eoc", "Printer", "getBabelParser", "_babelParser", "babelOptions", "_getBabelOptions", "isValidPropName", "literalToAst", "seen", "b$4", "LITERALS_TYPEOF", "PROXY_KEY", "regex", "value2", "makeProxyUtils", "createProxy", "handler", "utils", "propertyDescriptor", "_target", "receiver", "creatImportProxy", "specifier", "_importProxyCache", "proxy", "declaration", "b$3", "createImportsProxy", "mod", "getAllImports", "imports", "updateImport", "order", "item", "local", "lastImport", "lastImportIndex", "removeImport", "acc", "_", "prop", "proxifyArrayElements", "getItem", "replaceItem", "proxify", "deleteCount", "items", "predicate", "proxifyArray", "proxifyFunctionCall", "stringifyExpression", "argumentsProxy", "proxifyArrowFunctionExpression", "parametersProxy", "proxifyObject", "getProp", "getPropName", "throwError", "replaceOrAddProp", "prop2", "b$2", "proxifyNewExpression", "proxifyIdentifier", "proxifyLogicalExpression", "proxifyMemberExpression", "LITERALS_AST", "_cache", "createExportsProxy", "findExport", "dec", "updateOrAddExport", "b$1", "proxifyModule", "code", "util", "userStyles", "detect", "codeIndent", "tabUsages", "semiUsages", "maxLineLength", "multiLineTrailingCommaUsages", "syntaxDetectRegex", "syntaxUsages", "previousLineTrailing", "trimmitedLine", "lineIndent", "matches", "match", "body", "formatOptions", "map", "filename", "contents", "import_node_fs", "import_source_map_js", "babelParser", "__defProp$2", "__defNormalProp$2", "__publicField$2", "Op$1", "BaseType", "Op", "namedTypes$1", "builders$1", "n$3", "visit", "Mapping", "__defProp$1", "__defNormalProp$1", "__publicField$1", "isObject$2", "isArray$2", "TCp", "FPp", "isString$1", "PrintResult", "PRp", "warnedAboutToString", "emptyPrintResult", "__defProp", "__defNormalProp", "__publicField", "init_dist", "__esmMin", "init_sentry_release_injection_stub", "elemType", "elem", "_Def", "that", "checkFieldByName", "supertypeNames", "bases", "baseName", "sourceMap", "_Mapping", "sourceLoc", "targetLoc", "skip", "by", "skipFirstLine", "noNegativeColumns", "startLine", "endLine", "startColumn", "endColumn", "_Lines", "infos", "sourceFileName", "sourceMapName", "sourceRoot", "updateJSON", "json", "strings", "secret", "c", "width", "newMappings", "counts", "lastIndent", "last", "sliced", "diff", "maxCount", "firstLineInfo", "firstLine", "skipSpaces", "l", "backward", "modifyInPlace", "startPos", "sliced2", "useTabs", "reuseWhitespace", "lineTerminator", "before", "tabs", "mappings", "prevInfo", "appendLines", "linesOrNull", "prevLine", "prevColumn", "appendWithSeparator", "copy2", "copy", "oldIndent", "newIndent", "oldStartTokenIndex", "oldEndTokenIndex", "stack", "valueIndex", "origLen", "prevToken", "nextToken", "rootLoc", "parentName", "self", "replacements", "sliceFrom", "toConcat", "pushSlice", "rep", "ableToReprintComments", "oldComment", "explicitTabWidth", "makePrintFunctionWith", "overrides", "oldTabWidth", "reprinter", "printGenerically", "path2", "path3", "oldReuseWhitespace", "pr", "codeFrame", "lineCode", "callee", "readdirRecursive", "dir", "skipFolders", "entries", "files", "entry", "fullPath", "path", "subFiles", "error", "createDevToolsNodeSys", "opts", "onChangeCallbacks", "debug", "args", "d", "ts", "hash", "str", "rootDir", "repoRootDir", "findPackageJsonDir", "appRootDir", "findAppRootDir", "nodeFs", "p", "dist_exports", "absolutePaths", "items", "i", "e", "contents", "fileInfo", "onChangeCallback", "filePath", "code", "userOpts", "prettier", "eventName", "callback", "file", "resolve", "launchEditor", "pathFile", "err", "githubWorkingDirectory", "hasGit", "getGitRemoteURL", "getGitRepoDefaultBranchName", "getGitCommit", "getCurrentBranchName", "Sentry", "pkgVersion", "ConnectionTracker", "frameworks", "detectFrameworks", "getConfigPath", "homeDirPath", "configHasProperty", "key", "readConfigFile", "configPath", "writeConfigFile", "repoPath", "DEFAULT_BRANCH_NAME", "gitBranchResult", "s", "fsRoot", "pkgJsonPath", "import_promises", "import_node_crypto", "import_node_fs", "import_node_os", "import_node_path", "import_typescript", "import_launch_editor", "import_node_child_process", "import_prettier", "init_node_sys", "__esmMin", "init_sentry_release_injection_stub", "init_connection_tracker", "init_detect_frameworks", "init_dist", "init_version", "unsafeStringify", "arr", "offset", "byteToHex", "init_stringify", "__esmMin", "init_sentry_release_injection_stub", "i", "rng", "poolPtr", "rnds8Pool", "crypto", "import_node_crypto", "init_rng", "__esmMin", "init_sentry_release_injection_stub", "import_node_crypto", "native_default", "init_native", "__esmMin", "init_sentry_release_injection_stub", "crypto", "v4", "options", "buf", "offset", "native_default", "rnds", "rng", "unsafeStringify", "v4_default", "init_v4", "__esmMin", "init_sentry_release_injection_stub", "init_native", "init_rng", "init_stringify", "init_esm_node", "__esmMin", "init_sentry_release_injection_stub", "init_v4", "convertNodeErrorToNetworkError", "error", "hostname", "port", "NetworkError", "displayNetworkError", "M", "suggestion", "index", "PrivateError", "init_errors", "__esmMin", "init_sentry_release_injection_stub", "init_dist", "type", "cause", "message", "suggestions", "statusCode", "errorCode", "initTracking", "verbose", "trackingEnabled", "deviceId", "getDeviceId", "userId", "getUserId", "identifyObj", "os", "version", "event", "hint", "originalError", "PrivateError", "Sentry", "track", "eventName", "options", "defaultProps", "setUserId", "id", "devToolsConfig", "readConfigFile", "writeConfigFile", "uniqueTrackingId", "configHasProperty", "v4_default", "Amplitude", "import_node_os", "import_picocolors", "init_track", "__esmMin", "init_sentry_release_injection_stub", "init_package", "init_node_sys", "init_esm_node", "init_errors", "version", "init_package", "__esmMin", "normalizeRelativePath", "path", "formatFileContent", "content", "offset", "limit", "includeLineNumbers", "lines", "startLine", "endLine", "selectedLines", "line", "index", "lineNumber", "truncatedLine", "getViewFileRange", "filePath", "viewRange", "start", "end", "filterWorkingDirectory", "output", "workingDirectory", "filterSecrets", "input", "secrets", "filtered", "secret", "escapedSecret", "CodeGenError", "init_codegen", "__esmMin", "init_sentry_release_injection_stub", "message", "code", "options", "getUserAgent", "platform", "process", "osDetails", "version", "import_undici", "import_node_process", "Sentry", "safeFetch", "init_fetch", "__esmMin", "init_sentry_release_injection_stub", "init_package", "init_errors", "init_codegen", "input", "init", "fetchFn", "fetchPolyfill", "url", "urlObj", "hostname", "port", "traceData", "response", "body", "code", "message", "CodeGenError", "errorMessage", "errorText", "errorJson", "NetworkError", "error", "causeError", "convertNodeErrorToNetworkError", "method", "getFigmaComponentName", "name", "idIndex", "REMOVE_EMOJI", "numberUnderscoreMatch", "camelize", "printTreeJSX", "node", "nameMap", "resolveComponentName", "level", "spaces", "output", "type", "shouldWalk", "instance", "emit", "props", "cmpName", "index", "child", "getFigmaPropsInterface", "input", "getPropertyAccessor", "getTypeFromFigmatInput", "processRawFigmaJson", "rawJson", "figmaKeyOrId", "mainComponent", "inputs", "getInputsSlotsFromComponentPropertyDefinitions", "id", "cmpSet", "cmp", "getMainComponentPropName", "propId", "computeInputNames", "ids", "nameSetted", "n", "key", "value", "findAllWithCriteria", "rootNode", "predicate", "results", "queue", "cmpPropDefinitions", "e", "components", "groups", "instances", "component", "instancesOriginal", "refs", "cmpPropDefinition", "a", "str", "word", "init_figma_component", "__esmMin", "init_sentry_release_injection_stub", "getImportDataFromToken", "credentials", "token", "verbose", "json", "url", "apiAirV2Host", "headers", "res", "safeFetch", "responseJson", "a", "needsFigmaAuth", "urls", "parseFigmaURL", "getFigmaNodeDataFromURLs", "sys", "args", "figmaAuth", "builderAuth", "fileId", "nodeId", "componentKeyRegex", "figmaRestApiData", "figmaApi", "M", "e", "parsedFile", "xe", "exit", "getFigmaNodeData", "info", "getComponentInfo", "nonNull", "nodeDocument", "message", "componentKey", "processRawFigmaJson", "inPlaceResolveFigmaURLs", "figmaBuilderLinks", "figmaLinksToResolve", "resolvedFigmaKeys", "resolveFigmaUrls", "l", "resolvedKey", "value", "Sentry", "baseFigmaAPI", "init_figma_utils", "__esmMin", "init_sentry_release_injection_stub", "init_dist", "init_fetch", "init_exit", "init_constants", "init_credentials", "init_figma_component", "str", "cleanUrl", "fileID", "path", "auth", "params", "key", "getCredentials", "nodeIds", "depth", "figmaUrls", "files", "mappedLinks", "ids", "nodes", "nodeData", "scope", "mergeStreams", "streams", "stream", "validateStream", "objectMode", "readableObjectMode", "highWaterMark", "getHighWaterMark", "passThroughStream", "MergedStream", "endStream", "import_node_events", "import_node_stream", "import_promises", "onMergedStreamFinished", "onMergedStreamEnd", "onInputStreamsUnpipe", "endWhenStreamsDone", "isAbortError", "afterMergedStreamFinished", "onInputStreamEnd", "onInputStreamUnpipe", "unpipeEvent", "abortStream", "errorStream", "noop", "updateMaxListeners", "PASSTHROUGH_LISTENERS_COUNT", "PASSTHROUGH_LISTENERS_PER_STREAM", "init_merge_streams", "__esmMin", "init_sentry_release_injection_stub", "highWaterMarks", "readableHighWaterMark", "PassThroughStream", "#streams", "#ended", "#aborted", "#onFinished", "controller", "signal", "unpipedStream", "ended", "aborted", "onFinished", "error", "increment", "maxListeners", "require_array", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "flatten", "items", "collection", "item", "splitWhen", "predicate", "result", "groupIndex", "require_errno", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "isEnoentCodeError", "error", "require_fs", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "DirentFromStats", "name", "stats", "createDirentFromStats", "require_path", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "os", "path", "IS_WINDOWS_PLATFORM", "LEADING_DOT_SEGMENT_CHARACTERS_COUNT", "POSIX_UNESCAPED_GLOB_SYMBOLS_RE", "WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE", "DOS_DEVICE_PATH_RE", "WINDOWS_BACKSLASHES_RE", "unixify", "filepath", "makeAbsolute", "cwd", "removeLeadingDotSegment", "entry", "secondCharactery", "escapeWindowsPath", "escapePosixPath", "pattern", "convertWindowsPathToPattern", "convertPosixPathToPattern", "require_is_extglob", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "str", "match", "require_is_glob", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isExtglob", "chars", "strictCheck", "str", "index", "pipeIndex", "closeSquareIndex", "closeCurlyIndex", "closeParenIndex", "backSlashIndex", "open", "close", "n", "relaxedCheck", "options", "check", "require_glob_parent", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isGlob", "pathPosixDirname", "isWin32", "slash", "backslash", "enclosure", "globby", "escaped", "str", "opts", "options", "require_utils", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "num", "node", "type", "min", "max", "step", "limit", "block", "n", "nodes", "acc", "args", "result", "flat", "arr", "ele", "require_stringify", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "utils", "ast", "options", "stringify", "node", "parent", "invalidBlock", "invalidNode", "output", "child", "require_is_number", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "num", "require_to_regex_range", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isNumber", "toRegexRange", "min", "max", "options", "opts", "relax", "shorthand", "capture", "wrap", "cacheKey", "a", "b", "result", "isPadded", "hasPadding", "state", "positives", "negatives", "newMin", "splitToPatterns", "collatePatterns", "neg", "pos", "onlyNegative", "filterPatterns", "onlyPositive", "intersected", "splitToRanges", "nines", "zeros", "stop", "countNines", "stops", "countZeros", "compare", "rangeToPattern", "start", "zipped", "zip", "digits", "pattern", "count", "i", "startDigit", "stopDigit", "toCharacterClass", "tok", "ranges", "tokens", "prev", "obj", "toQuantifier", "padZeros", "arr", "comparison", "prefix", "intersection", "ele", "string", "contains", "key", "val", "len", "integer", "str", "value", "diff", "require_fill_range", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "toRegexRange", "isObject", "val", "transform", "toNumber", "value", "isValidValue", "isNumber", "num", "zeros", "input", "index", "stringify", "start", "end", "options", "pad", "maxLength", "dash", "toMaxLen", "negative", "toSequence", "parts", "maxLen", "b", "prefix", "positives", "negatives", "result", "v", "toRange", "a", "isNumbers", "stop", "toRegex", "wrap", "rangeError", "args", "invalidRange", "invalidStep", "step", "fillNumbers", "descending", "startString", "endString", "stepString", "padded", "format", "push", "range", "fillLetters", "min", "max", "fill", "opts", "require_compile", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fill", "utils", "compile", "ast", "options", "walk", "node", "parent", "invalidBlock", "invalidNode", "invalid", "prefix", "output", "args", "range", "child", "require_expand", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fill", "stringify", "utils", "append", "queue", "stash", "enclose", "result", "ele", "item", "value", "expand", "ast", "options", "rangeLimit", "walk", "node", "parent", "p", "q", "args", "range", "block", "i", "child", "require_constants", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "stringify", "MAX_LENGTH", "CHAR_BACKSLASH", "CHAR_BACKTICK", "CHAR_COMMA", "CHAR_DOT", "CHAR_LEFT_PARENTHESES", "CHAR_RIGHT_PARENTHESES", "CHAR_LEFT_CURLY_BRACE", "CHAR_RIGHT_CURLY_BRACE", "CHAR_LEFT_SQUARE_BRACKET", "CHAR_RIGHT_SQUARE_BRACKET", "CHAR_DOUBLE_QUOTE", "CHAR_SINGLE_QUOTE", "CHAR_NO_BREAK_SPACE", "CHAR_ZERO_WIDTH_NOBREAK_SPACE", "parse", "input", "options", "opts", "max", "ast", "stack", "block", "prev", "brackets", "length", "index", "depth", "value", "advance", "push", "node", "next", "open", "brace", "type", "siblings", "before", "parent", "require_braces", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "stringify", "compile", "expand", "parse", "braces", "input", "options", "output", "pattern", "result", "require_constants", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "WIN_SLASH", "WIN_NO_SLASH", "DOT_LITERAL", "PLUS_LITERAL", "QMARK_LITERAL", "SLASH_LITERAL", "ONE_CHAR", "QMARK", "END_ANCHOR", "START_ANCHOR", "DOTS_SLASH", "NO_DOT", "NO_DOTS", "NO_DOT_SLASH", "NO_DOTS_SLASH", "QMARK_NO_DOT", "STAR", "POSIX_CHARS", "WINDOWS_CHARS", "POSIX_REGEX_SOURCE", "chars", "win32", "require_utils", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "path", "win32", "REGEX_BACKSLASH", "REGEX_REMOVE_BACKSLASH", "REGEX_SPECIAL_CHARS", "REGEX_SPECIAL_CHARS_GLOBAL", "val", "str", "match", "segs", "options", "input", "char", "lastIdx", "idx", "state", "output", "prepend", "append", "require_scan", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "utils", "CHAR_ASTERISK", "CHAR_AT", "CHAR_BACKWARD_SLASH", "CHAR_COMMA", "CHAR_DOT", "CHAR_EXCLAMATION_MARK", "CHAR_FORWARD_SLASH", "CHAR_LEFT_CURLY_BRACE", "CHAR_LEFT_PARENTHESES", "CHAR_LEFT_SQUARE_BRACKET", "CHAR_PLUS", "CHAR_QUESTION_MARK", "CHAR_RIGHT_CURLY_BRACE", "CHAR_RIGHT_PARENTHESES", "CHAR_RIGHT_SQUARE_BRACKET", "isPathSeparator", "code", "depth", "token", "scan", "input", "options", "opts", "length", "scanToEnd", "slashes", "tokens", "parts", "str", "index", "start", "lastIndex", "isBrace", "isBracket", "isGlob", "isExtglob", "isGlobstar", "braceEscaped", "backslashes", "negated", "negatedExtglob", "finished", "braces", "prev", "eos", "peek", "advance", "next", "base", "prefix", "glob", "state", "prevIndex", "idx", "n", "i", "value", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "constants", "utils", "MAX_LENGTH", "POSIX_REGEX_SOURCE", "REGEX_NON_SPECIAL_CHARS", "REGEX_SPECIAL_CHARS_BACKREF", "REPLACEMENTS", "expandRange", "args", "options", "value", "v", "syntaxError", "type", "char", "parse", "input", "opts", "max", "len", "bos", "tokens", "capture", "win32", "PLATFORM_CHARS", "EXTGLOB_CHARS", "DOT_LITERAL", "PLUS_LITERAL", "SLASH_LITERAL", "ONE_CHAR", "DOTS_SLASH", "NO_DOT", "NO_DOT_SLASH", "NO_DOTS_SLASH", "QMARK", "QMARK_NO_DOT", "STAR", "START_ANCHOR", "globstar", "nodot", "qmarkNoDot", "star", "state", "extglobs", "braces", "stack", "prev", "eos", "peek", "n", "advance", "remaining", "consume", "num", "append", "token", "negate", "count", "increment", "decrement", "push", "tok", "isBrace", "isExtglob", "extglobOpen", "output", "extglobClose", "rest", "extglobStar", "expression", "backslashes", "m", "esc", "chars", "first", "index", "next", "match", "slashes", "inner", "idx", "pre", "posix", "extglob", "prevValue", "escaped", "open", "brace", "arr", "range", "i", "out", "toks", "t", "prior", "before", "isStart", "afterStar", "after", "end", "NO_DOTS", "slashDot", "create", "str", "source", "require_picomatch", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "scan", "parse", "utils", "constants", "isObject", "val", "picomatch", "glob", "options", "returnState", "fns", "input", "str", "isMatch", "state", "isState", "opts", "posix", "regex", "isIgnored", "ignoreOpts", "matcher", "returnObject", "match", "output", "result", "format", "patterns", "pattern", "p", "returnOutput", "prepend", "append", "source", "parsed", "err", "require_picomatch", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_micromatch", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "braces", "picomatch", "utils", "isEmptyString", "v", "hasBraces", "index", "micromatch", "list", "patterns", "options", "omit", "keep", "items", "negatives", "onResult", "state", "i", "isMatch", "negated", "item", "matched", "matches", "p", "pattern", "str", "result", "obj", "keys", "res", "key", "glob", "input", "posix", "match", "args", "require_pattern", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "path", "globParent", "micromatch", "GLOBSTAR", "ESCAPE_SYMBOL", "COMMON_GLOB_SYMBOLS_RE", "REGEX_CHARACTER_CLASS_SYMBOLS_RE", "REGEX_GROUP_SYMBOLS_RE", "GLOB_EXTENSION_SYMBOLS_RE", "BRACE_EXPANSION_SEPARATORS_RE", "DOUBLE_SLASH_RE", "isStaticPattern", "pattern", "options", "isDynamicPattern", "hasBraceExpansion", "openingBraceIndex", "closingBraceIndex", "braceContent", "convertToPositivePattern", "isNegativePattern", "convertToNegativePattern", "isPositivePattern", "getNegativePatterns", "patterns", "getPositivePatterns", "getPatternsInsideCurrentDirectory", "isPatternRelatedToParentDirectory", "getPatternsOutsideCurrentDirectory", "getBaseDirectory", "hasGlobStar", "endsWithSlashGlobStar", "isAffectDepthOfReadingPattern", "basename", "expandPatternsWithBraceExpansion", "collection", "expandBraceExpansion", "a", "b", "getPatternParts", "parts", "makeRe", "convertPatternsToRe", "matchAny", "entry", "patternsRe", "patternRe", "removeDuplicateSlashes", "partitionAbsoluteAndRelative", "absolute", "relative", "isAbsolute", "require_merge2", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Stream", "PassThrough", "slice", "merge2", "streamsQueue", "args", "merging", "options", "doEnd", "doPipeError", "mergedStream", "addStream", "i", "len", "pauseStreams", "mergeStream", "streams", "endStream", "pipesCount", "next", "pipe", "stream", "onend", "onerror", "err", "require_stream", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "merge2", "merge", "streams", "mergedStream", "stream", "error", "propagateCloseEventToSources", "require_string", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "isString", "input", "isEmpty", "require_utils", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "array", "errno", "fs", "path", "pattern", "stream", "string", "require_tasks", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "utils", "generate", "input", "settings", "patterns", "processPatterns", "ignore", "positivePatterns", "getPositivePatterns", "negativePatterns", "getNegativePatternsAsPositive", "staticPatterns", "pattern", "dynamicPatterns", "staticTasks", "convertPatternsToTasks", "dynamicTasks", "positive", "negative", "dynamic", "tasks", "patternsOutsideCurrentDirectory", "patternsInsideCurrentDirectory", "outsideCurrentDirectoryGroup", "groupPatternsByBaseDirectory", "insideCurrentDirectoryGroup", "convertPatternGroupsToTasks", "convertPatternGroupToTask", "group", "collection", "base", "require_async", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "read", "path", "settings", "callback", "lstatError", "lstat", "callFailureCallback", "callSuccessCallback", "statError", "stat", "error", "result", "require_sync", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "read", "path", "settings", "lstat", "stat", "error", "require_fs", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fs", "createFileSystemAdapter", "fsMethods", "require_settings", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fs", "Settings", "_options", "option", "value", "require_out", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "async", "sync", "settings_1", "stat", "path", "optionsOrSettingsOrCallback", "callback", "getSettings", "statSync", "optionsOrSettings", "settings", "settingsOrOptions", "require_queue_microtask", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "promise", "cb", "err", "require_run_parallel", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "runParallel", "queueMicrotask", "tasks", "cb", "results", "pending", "keys", "isSync", "done", "err", "end", "each", "i", "result", "key", "task", "require_constants", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "NODE_PROCESS_VERSION_PARTS", "MAJOR_VERSION", "MINOR_VERSION", "SUPPORTED_MAJOR_VERSION", "SUPPORTED_MINOR_VERSION", "IS_MATCHED_BY_MAJOR", "IS_MATCHED_BY_MAJOR_AND_MINOR", "require_fs", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "DirentFromStats", "name", "stats", "createDirentFromStats", "require_utils", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fs", "require_common", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "joinPathSegments", "a", "b", "separator", "require_async", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fsStat", "rpl", "constants_1", "utils", "common", "read", "directory", "settings", "callback", "readdirWithFileTypes", "readdir", "readdirError", "dirents", "callFailureCallback", "entries", "dirent", "callSuccessCallback", "tasks", "entry", "makeRplTaskEntry", "rplError", "rplEntries", "done", "statError", "stats", "names", "name", "path", "error", "result", "require_sync", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fsStat", "constants_1", "utils", "common", "read", "directory", "settings", "readdirWithFileTypes", "readdir", "dirent", "entry", "stats", "error", "name", "entryPath", "require_fs", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fs", "createFileSystemAdapter", "fsMethods", "require_settings", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "path", "fsStat", "fs", "Settings", "_options", "option", "value", "require_out", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "async", "sync", "settings_1", "scandir", "path", "optionsOrSettingsOrCallback", "callback", "getSettings", "scandirSync", "optionsOrSettings", "settings", "settingsOrOptions", "require_reusify", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "reusify", "Constructor", "head", "tail", "get", "current", "release", "obj", "require_queue", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "reusify", "fastqueue", "context", "worker", "_concurrency", "cache", "Task", "queueHead", "queueTail", "_running", "errorHandler", "self", "push", "noop", "pause", "value", "release", "running", "resume", "idle", "length", "getQueue", "unshift", "kill", "killAndDrain", "error", "current", "counter", "tasks", "done", "holder", "next", "handler", "err", "result", "callback", "val", "queueAsPromised", "asyncWrapper", "arg", "cb", "res", "queue", "pushCb", "unshiftCb", "drained", "resolve", "reject", "p", "previousDrain", "require_common", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "isFatalError", "settings", "error", "isAppliedFilter", "filter", "value", "replacePathSegmentSeparator", "filepath", "separator", "joinPathSegments", "a", "b", "require_reader", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "common", "Reader", "_root", "_settings", "require_async", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "events_1", "fsScandir", "fastq", "common", "reader_1", "AsyncReader", "_root", "_settings", "callback", "directory", "base", "queueItem", "error", "item", "done", "entries", "entry", "fullpath", "require_async", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "async_1", "AsyncProvider", "_root", "_settings", "callback", "error", "callFailureCallback", "entry", "callSuccessCallback", "entries", "require_stream", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "stream_1", "async_1", "StreamProvider", "_root", "_settings", "error", "entry", "require_sync", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fsScandir", "common", "reader_1", "SyncReader", "directory", "base", "item", "entries", "entry", "error", "fullpath", "require_sync", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "sync_1", "SyncProvider", "_root", "_settings", "require_settings", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "path", "fsScandir", "Settings", "_options", "option", "value", "require_out", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "async_1", "stream_1", "sync_1", "settings_1", "walk", "directory", "optionsOrSettingsOrCallback", "callback", "getSettings", "walkSync", "optionsOrSettings", "settings", "walkStream", "settingsOrOptions", "require_reader", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "path", "fsStat", "utils", "Reader", "_settings", "filepath", "stats", "pattern", "entry", "error", "require_stream", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "stream_1", "fsStat", "fsWalk", "reader_1", "ReaderStream", "root", "options", "patterns", "filepaths", "stream", "index", "_enc", "done", "entry", "i", "filepath", "pattern", "stats", "error", "resolve", "reject", "require_async", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fsWalk", "reader_1", "stream_1", "ReaderAsync", "root", "options", "resolve", "reject", "error", "entries", "patterns", "stream", "entry", "require_matcher", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "utils", "Matcher", "_patterns", "_settings", "_micromatchOptions", "pattern", "segments", "sections", "part", "segment", "require_partial", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "matcher_1", "PartialMatcher", "filepath", "parts", "levels", "patterns", "info", "pattern", "section", "part", "index", "segment", "require_deep", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "utils", "partial_1", "DeepFilter", "_settings", "_micromatchOptions", "basePath", "positive", "negative", "matcher", "negativeRe", "entry", "patterns", "affectDepthOfReadingPatterns", "filepath", "entryPath", "entryPathDepth", "basePathDepth", "patternsRe", "require_entry", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "utils", "EntryFilter", "_settings", "_micromatchOptions", "positive", "negative", "absoluteNegative", "relativeNegative", "patterns", "entry", "filepath", "isMatched", "isDirectory", "patternsRe", "fullpath", "require_error", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "utils", "ErrorFilter", "_settings", "error", "require_entry", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "utils", "EntryTransformer", "_settings", "entry", "filepath", "require_provider", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "path", "deep_1", "entry_1", "error_1", "entry_2", "Provider", "_settings", "task", "basePath", "require_async", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "async_1", "provider_1", "ProviderAsync", "task", "root", "options", "entry", "require_stream", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "stream_1", "stream_2", "provider_1", "ProviderStream", "task", "root", "options", "source", "destination", "error", "entry", "require_sync", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fsStat", "fsWalk", "reader_1", "ReaderSync", "root", "options", "patterns", "entries", "pattern", "filepath", "entry", "stats", "error", "require_sync", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "sync_1", "provider_1", "ProviderSync", "task", "root", "options", "require_settings", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "fs", "os", "CPU_COUNT", "Settings", "_options", "option", "value", "methods", "require_out", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "taskManager", "async_1", "stream_1", "sync_1", "settings_1", "utils", "FastGlob", "source", "options", "assertPatternsInput", "works", "getWorks", "result", "sync", "stream", "generateTasks", "patterns", "settings", "isDynamicPattern", "escapePath", "convertPathToPattern", "posix", "win32", "_Provider", "tasks", "provider", "input", "item", "isType", "fsStatType", "statsMethodName", "filePath", "fsPromises", "error", "isTypeSync", "fs", "import_node_fs", "import_promises", "isFile", "isDirectory", "isSymlink", "isFileSync", "isDirectorySync", "isSymlinkSync", "init_path_type", "__esmMin", "init_sentry_release_injection_stub", "init_default", "__esmMin", "init_sentry_release_injection_stub", "toPath", "urlOrPath", "import_node_util", "import_node_child_process", "import_node_url", "execFileOriginal", "TEN_MEGABYTES_IN_BYTES", "init_node", "__esmMin", "init_sentry_release_injection_stub", "init_default", "execFileCallback", "slash", "path", "init_slash", "__esmMin", "init_sentry_release_injection_stub", "isNegativePattern", "init_utilities", "__esmMin", "init_sentry_release_injection_stub", "pattern", "import_node_process", "import_node_fs", "import_promises", "import_node_path", "import_fast_glob", "import_ignore", "defaultIgnoredDirectories", "ignoreFilesGlobOptions", "GITIGNORE_FILES_PATTERN", "applyBaseToPattern", "parseIgnoreFile", "toRelativePath", "getIsIgnoredPredicate", "normalizeOptions", "isIgnoredByIgnoreFiles", "isIgnoredByIgnoreFilesSync", "init_ignore", "__esmMin", "init_sentry_release_injection_stub", "init_slash", "init_node", "init_utilities", "pattern", "base", "isNegativePattern", "path", "file", "cwd", "slash", "line", "fileOrDirectory", "files", "patterns", "ignores", "gitIgnore", "toPath", "options", "process", "suppressErrors", "deep", "ignore", "paths", "fastGlob", "filePath", "fsPromises", "fs", "import_node_process", "import_node_fs", "import_node_path", "import_fast_glob", "assertPatternsInput", "normalizePathForDirectoryGlob", "getDirectoryGlob", "directoryToGlob", "directoryToGlobSync", "toPatternsArray", "checkCwdOption", "normalizeOptions", "normalizeArguments", "normalizeArgumentsSync", "getIgnoreFilesPatterns", "getFilter", "getFilterSync", "createFilterFunction", "unionFastGlobResults", "convertNegativePatterns", "normalizeExpandDirectoriesOption", "generateTasks", "generateTasksSync", "globby", "globbySync", "globbyStream", "isDynamicPattern", "generateGlobTasks", "generateGlobTasksSync", "convertPathToPattern", "init_globby", "__esmMin", "init_sentry_release_injection_stub", "init_merge_streams", "init_path_type", "init_node", "init_ignore", "init_utilities", "patterns", "pattern", "filePath", "cwd", "path", "isNegativePattern", "nodePath", "directoryPath", "files", "extensions", "extensionGlob", "file", "directoryPaths", "process", "isDirectory", "isDirectorySync", "stat", "fs", "options", "toPath", "function_", "ignoreFiles", "gitignore", "GITIGNORE_FILES_PATTERN", "ignoreFilesPatterns", "isIgnoredByIgnoreFiles", "isIgnoredByIgnoreFilesSync", "isIgnored", "seen", "fastGlobResult", "pathKey", "results", "filter", "tasks", "index", "ignorePattern", "task", "globTasks", "expandDirectories", "directoryToGlobOptions", "directoryToGlobSyncOptions", "fastGlob", "streams", "mergeStreams", "requestJSON", "opts", "startTime", "resolve", "reject", "req", "getRequestModule", "res", "data", "chunk", "err", "e", "url", "httpsRequest", "httpRequest", "import_node_console", "import_node_http", "import_node_https", "init_node_request", "__esmMin", "init_sentry_release_injection_stub", "hasBuilderContentViaQueryAPI", "opts", "url", "requestJSON", "hasBuilderContentUrl", "sys", "SPACE_KIND", "adminUrl", "body", "model", "m", "dUrl", "data", "getBuilderContent", "writeBuilderContent", "init_builder_api", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_node_request", "DEFAULT_MODEL_NAME", "TEMPLATE_MODEL_NAME", "TEMPLATE_PUBLIC_API_KEY", "init_content_ids", "__esmMin", "init_sentry_release_injection_stub", "createBuilderPage", "sys", "opts", "data", "getBuilderContent", "TEMPLATE_MODEL_NAME", "TEMPLATE_PUBLIC_API_KEY", "blocksString", "writeContentData", "createContentData", "writeBuilderContent", "DEFAULT_MODEL_NAME", "apiKey", "pathname", "title", "init_content_generation", "__esmMin", "init_sentry_release_injection_stub", "init_builder_api", "init_content_ids", "connectBuilder", "ctx", "publicApiKey", "privateAuthKey", "kind", "closeServerPromise", "apiKey", "frameworkPageOpts", "DEFAULT_MODEL_NAME", "hasContent", "hasBuilderContentUrl", "createBuilderPage", "MAX_RETRIES", "retries", "resolve", "content", "hasBuilderContentViaQueryAPI", "modifiedFiles", "SPACE_KIND", "m", "a", "b", "connectedBuilder", "validateBuilder", "result", "envInfo", "init_builder_connect", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_content_generation", "init_builder_api", "init_content_ids", "handleDevApiRequest", "ctx", "apiReq", "result", "connectBuilder", "enableDevTools", "validateBuilder", "isValidFileRequest", "transpileFile", "transpileModule", "readConfigFile", "_exhaustiveCheck", "sys", "path", "parts", "last", "ext", "EXT_WHITELIST", "validatePath", "userPath", "rootDir", "isDevToolsEnabled", "init_dev_tools_api", "__esmMin", "init_sentry_release_injection_stub", "init_typescript", "init_node_sys", "init_builder_connect", "getClientScript", "ctx", "updateClientRuntimeVariables", "getConnectedStepHtml", "code", "localAppId", "getLocalAppId", "frameworks", "init_client_script", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "getBuilderAuthConnectUrl", "ctx", "previewUrl", "authUrl", "returnUrl", "BUILDER_AUTH_RETURN_PATH", "PLATFORM_QS", "NODE_VERSION_QS", "frameworks", "FRAMEWORK_QS", "import_node_os", "init_auth", "__esmMin", "init_sentry_release_injection_stub", "init_constants", "handleDevRequest", "ctx", "server", "req", "res", "text", "url", "getNodeHttpUrl", "DEV_TOOLS_API_PATH", "body", "getRequestBody", "apiResult", "handleDevApiRequest", "json", "e", "errorResponse", "headers", "reqOrigin", "isValidRequestOrigin", "DEV_TOOLS_CLIENT_SCRIPT_PATH", "javascript", "getClientScript", "BUILDER_AUTH_CONNECT_PATH", "previewUrl", "PREVIEW_URL_QS", "redirect", "getBuilderAuthConnectUrl", "BUILDER_AUTH_RETURN_PATH", "html", "getConnectedStepHtml", "DEV_TOOLS_MAPPINGS_PATH", "getCredentials", "mappingFiles", "findAllMappingFiles", "figmaBuilderLinks", "diagnostics", "findMappingsFromFiles", "response", "DEV_TOOLS_SERVER_CLOSE_PATH", "err", "status", "apiRsp", "contentType", "pkgVersion", "o", "redirectTo", "request", "chunk", "path", "init_request_handler", "__esmMin", "init_sentry_release_injection_stub", "init_constants", "init_dev_tools_api", "init_client_script", "init_auth", "init_credentials", "init_figma_publish", "init_version", "createDevToolsHttpServer", "ctx", "port", "setupDevToolsPort", "server", "createHttpServer", "request", "response", "handleDevRequest", "shutdownServer", "resolve", "reject", "err", "newCtx", "DEV_TOOLS_SERVER_CLOSE_PATH", "res", "error", "e", "import_node_http", "init_dev_tools_http_server", "__esmMin", "init_sentry_release_injection_stub", "init_request_handler", "init_constants", "createDevToolsServer", "opts", "ctx", "frameworks", "f", "version", "httpServer", "createDevToolsHttpServer", "init_create_dev_tools_server", "__esmMin", "init_sentry_release_injection_stub", "init_dev_tools_http_server", "init_server", "version", "init_server", "__esmMin", "init_sentry_release_injection_stub", "init_version", "init_create_dev_tools_server", "pkgVersion", "addCommand", "opts", "Ie", "pkgVersion", "xe", "exit", "id", "s", "Y", "snippet", "fetchSnippet", "cwd", "appRootDir", "findAppRootDir", "rootPath", "suggestRootPath", "pathInput", "he", "value", "pD", "writtenFiles", "writeFiles", "M", "code", "suggestedName", "framework", "suggestComponentPath", "formatted", "addBuilderSignature", "removeCodeDelimiters", "prettierFormat", "frameworks", "createDevToolsNodeSys", "projectFramework", "f", "shouldContinue", "ye", "componentFilePath", "safeFetch", "res", "str", "addSessionLink", "baseComment", "link", "isHtmlLike", "commentLines", "line", "content", "path", "componentName", "detectComponentName", "isTypescript", "detectTypescript", "packageJsonDir", "findPackageJsonDir", "frameworkNaming", "match", "files", "results", "item", "itemPath", "combinePaths", "fullPath", "formatCode", "getParserForFile", "normalizedRoot", "normalizedItem", "rootSegments", "itemSegments", "lastCommonIndex", "i", "index", "filePath", "workingDirectory", "parser", "codeToFormat", "srcPrefix", "import_node_path", "import_node_fs", "import_picocolors", "init_interface", "__esmMin", "init_sentry_release_injection_stub", "init_dist", "init_node_sys", "init_prettier", "init_exit", "init_fetch", "init_version", "extractSignatureInfo", "content", "matches", "getAllProjectFiles", "basePath", "globPattern", "extraIgnorePatterns", "dot", "deep", "gitignore", "sys", "patterns", "ignore", "IGNORE_PATTERNS", "nodeModulesPattern", "p", "globby", "IGNORE_FILES", "error", "findBuilderFiles", "targetContentId", "targetSessionKey", "files", "builderFiles", "file", "fullPath", "sigInfo", "removeBuilderSignature", "isMatchingBuilderFile", "snippet", "filterNonImportantFiles", "getIgnorePatterns", "ig", "tryAddIgnoreFile", "path", "ignorePath", "gitignoreContent", "ignoreFile", "normalizedPath", "watchDirectory", "syncInfo", "onChange", "watcher", "chokidar", "handleFileUpdate", "relativePath", "existingFile", "f", "M", "event", "details", "oldPath", "newPath", "fileInfo", "cleanup", "setupSyncServer", "initialSyncInfo", "Ie", "pkgVersion", "devTools", "createDevTools", "cleanupWatcher", "updated", "createDevToolsServer", "sessionKey", "since", "data", "newSyncInfo", "syncCommand", "enable", "opts", "id", "fetchSnippet", "xe", "exit", "cwd", "appRootDir", "findAppRootDir", "existingFiles", "matchingFiles", "latestTimestamp", "findCommonPath", "rootPath", "suggestRootPath", "pathInput", "he", "value", "pD", "parentDir", "writtenFiles", "writeFiles", "str", "htmlSignatureRegex", "codeSignatureRegex", "cleaned", "paths", "segments", "minLength", "seg", "commonSegments", "segment", "import_node_path", "import_node_fs", "import_picocolors", "import_chokidar", "import_ignore", "init_sync_utils", "__esmMin", "init_sentry_release_injection_stub", "init_globby", "init_core", "init_server", "init_interface", "init_dist", "init_exit", "init_node_sys", "init_version", "printHelp", "subcommand", "track", "Ie", "pkgVersion", "builderNpxPackage", "M", "command", "description", "Se", "import_picocolors", "init_help", "__esmMin", "init_sentry_release_injection_stub", "init_dist", "init_utils", "init_track", "init_version", "init_completion", "__esmMin", "init_sentry_release_injection_stub", "init_events", "__esmMin", "init_sentry_release_injection_stub", "getContentText", "message", "item", "init_messages", "__esmMin", "init_sentry_release_injection_stub", "init_settings", "__esmMin", "init_sentry_release_injection_stub", "init_mapping", "__esmMin", "init_sentry_release_injection_stub", "init_codegen", "__esmMin", "init_sentry_release_injection_stub", "EXAMPLE_REPOS", "STARTER_REPO", "EXAMPLE_OR_STARTER_REPOS", "EXAMPLE_OR_STARTER_REPOS_URLS", "init_projects", "__esmMin", "init_sentry_release_injection_stub", "repo", "init_repo_indexing", "__esmMin", "init_sentry_release_injection_stub", "init_organization", "__esmMin", "init_sentry_release_injection_stub", "init_features", "__esmMin", "init_sentry_release_injection_stub", "init_src", "__esmMin", "init_sentry_release_injection_stub", "init_completion", "init_events", "init_messages", "init_settings", "init_mapping", "init_codegen", "init_projects", "init_repo_indexing", "init_organization", "init_features", "Diff", "buildValues", "diff", "lastComponent", "newString", "oldString", "useLongestToken", "components", "nextComponent", "componentPos", "componentLen", "newPos", "oldPos", "component", "tmp", "value", "i", "oldValue", "finalComponent", "diffLines", "oldStr", "newStr", "callback", "lineDiff", "_typeof", "obj", "canonicalize", "stack", "replacementStack", "replacer", "key", "canonicalizedObj", "objectPrototypeToString", "sortedKeys", "_key", "characterDiff", "extendedWordChars", "reWhitespace", "wordDiff", "sentenceDiff", "cssDiff", "jsonDiff", "arrayDiff", "init_lib", "__esmMin", "init_sentry_release_injection_stub", "_options$timeout", "options", "self", "done", "newLen", "oldLen", "editLength", "maxEditLength", "maxExecutionTime", "abortAfterTimestamp", "bestPath", "minDiagonalToConsider", "maxDiagonalToConsider", "execEditLength", "diagonalPath", "basePath", "removePath", "addPath", "canAdd", "addPathNewPos", "canRemove", "exec", "ret", "path", "added", "removed", "oldPosInc", "last", "commonCount", "left", "right", "array", "chars", "tokens", "retLines", "linesAndNewlines", "line", "_this$options", "undefinedReplacement", "_this$options$stringi", "stringifyReplacer", "k", "v", "parseMdcFile", "fileContent", "parts", "filteredParts", "s", "frontmatterContent", "body", "frontmatterLines", "line", "description", "glob", "type", "colonIndex", "key", "value", "createCustomInstructionFromMdc", "filePath", "hashFunction", "parsed", "createInstruction", "id", "fileName", "path", "ruleName", "result", "import_path", "init_mdc_parser", "__esmMin", "init_sentry_release_injection_stub", "wait", "ms", "resolve", "exponentialBackoff", "i", "calculatedDelay", "jitter", "init_backoff", "__esmMin", "init_sentry_release_injection_stub", "transformStream", "body", "accumulatedValue", "reader", "done", "value", "str", "parts", "i", "err", "init_stream", "__esmMin", "init_sentry_release_injection_stub", "require_tree_kill", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "childProcess", "spawn", "exec", "pid", "signal", "callback", "tree", "pidsToProcess", "buildProcessTree", "parentPid", "killAll", "killed", "pidpid", "killPid", "err", "spawnChildProcessesList", "cb", "ps", "allData", "data", "onClose", "code", "trackedSpawn", "command", "args", "options", "proc", "nodeSpawn", "processTracker", "safeSpawn", "shell", "getCommandWithShellArgs", "killProcess", "sys", "procOrPid", "abortSignal", "timeout", "checkIsDevCommandProcess", "abortedPromise", "_", "reject", "pid", "resolve", "treeKill", "err", "import_child_process", "import_tree_kill", "import_fs", "import_os", "Sentry", "import_path", "ProcessTracker", "tempFolder", "getTempFolder", "cleanupTempFolder", "isMultiLineCommand", "createTempScript", "getTempScriptPath", "init_process_tracker", "__esmMin", "init_sentry_release_injection_stub", "childProcess", "killPromises", "cleanup", "signal", "path", "os", "fs", "error", "isWindows", "scriptExtension", "scriptContent", "isZsh", "isBash", "isSh", "isFish", "shebang", "scriptPath", "extension", "tempDir", "timestamp", "random", "sanitizeGitCommand", "command", "match", "protocol", "auth", "domain", "runCommand", "cmd", "args", "opts", "runs", "lastError", "i", "_runCommand", "e", "resolve", "reject", "stdout", "stderr", "proc", "timeout", "killProcess", "BashError", "err", "data", "str", "code", "isGitRepoCorrupted", "fetchGitConfigs", "credentials", "projectId", "url", "apiAirV2Host", "response", "safeFetch", "import_node_child_process", "init_git", "__esmMin", "init_sentry_release_injection_stub", "init_codegen", "init_process_tracker", "init_constants", "init_fetch", "corruptionIndicators", "output", "pattern", "backupGitRepo", "sys", "credentials", "projectId", "branchName", "repoPath", "aiBranch", "featureBranch", "workspace", "isConnectedToProvider", "debug", "forcedFullBackup", "canAbortMerge", "git", "args", "runCommand", "getCurrentBranch", "checkIfCommitInBranch", "commitHash", "branch", "hasCleanWorkTree", "hasMergeConflict", "getCommitMeta", "getCurrentCommitHash", "getRecentCommitSHAs", "maxCount", "trimmed", "silenceErrors", "originalRepoUrl", "folder", "lastCommitHash", "currentBranch", "setRuntimeStatus", "initCommitHashResult", "getInitialCommitHash", "forced", "recentRemoteSHAs", "recentLocalSHAs", "recordBackup", "computeBackupRef", "err", "timestamp", "randomId", "bundleFileName", "bundleFolder", "bundlePath", "fs", "contentMd5", "size", "computeMD5Hash", "uploadUrlResult", "requestSignedUploadUrl", "signedUrl", "uploadFileStream", "cleanupError", "hasRemote", "remote", "getDefaultRemoteBranch", "defaultBranchMatch", "defaultBranch", "e", "wrapperError", "setRemoteOriginUrl", "url", "currentOriginUrl", "getPartialValue", "gitWorkspace", "a", "EXAMPLE_OR_STARTER_REPOS", "refreshRemoteOriginUrl", "mainRepo", "f", "result", "fetchGitConfigs", "cfg", "initialCommitHash", "partial", "defaultRemoteBranch", "initialBranch", "body", "apiAirV2Host", "uploadUrlResponse", "safeFetch", "recordResponse", "downloadGitBackup", "response", "downloadResponse", "errorText", "buffer", "bundleStats", "error", "errorToCapture", "filePath", "fileStream", "responseBody", "hash", "stream", "resolve", "reject", "chunk", "data", "json", "headers", "res", "input", "import_node_fs", "import_node_crypto", "init_backup", "__esmMin", "init_sentry_release_injection_stub", "init_constants", "init_fetch", "init_src", "init_git", "patternToRegExp", "pattern", "regexStr", "splitCommands", "command", "segments", "current", "inQuotes", "quoteChar", "i", "char", "next", "backslashCount", "j", "validateCommandSecurity", "config", "DEFAULT_SECURITY_POLICIES", "sortedPolicies", "a", "b", "checkAgainstPolicies", "cmdToCheck", "isFullCommand", "policy", "patterns", "p", "override", "fullCommandViolation", "segment", "segmentViolation", "isCommandAllowed", "allowList", "denyList", "securityConfig", "allowRegs", "denyRegs", "reg", "createSecurityConfig", "overrides", "compilePatterns", "init_command_security", "__esmMin", "init_sentry_release_injection_stub", "truncateString", "str", "n", "firstPart", "lastPart", "truncateEnd", "maxLength", "truncateLines", "maxLineLength", "lines", "l", "firstLines", "lastLines", "init_normalize_text", "__esmMin", "init_sentry_release_injection_stub", "checkPrincipalMatch", "userPrincipals", "entryPrincipals", "entryPrincipal", "evaluateAccess", "resource", "permission", "policy", "normalizedResource", "entry", "resourcePattern", "micromatch", "extractListPatterns", "denyPatterns", "allowPatterns", "normalizedPattern", "createFilterMatcher", "filterPattern", "getDotFiles", "basenameMatcher", "fullPathMatcher", "file", "filterFilesByListPatterns", "files", "filterMatcher", "normalizedFile", "allow", "deny", "denyMatchers", "pattern", "allowMatchers", "matcher", "import_micromatch", "init_acl", "__esmMin", "init_sentry_release_injection_stub", "parseAndFilterRipgrepResults", "jsonLines", "policy", "userPrincipals", "includeGlob", "lines", "line", "fileResults", "entry", "filePath", "fileResult", "allowedResults", "evaluateAccess", "finalResults", "normalizedPath", "micromatch", "formattedResults", "prefix", "import_micromatch", "init_ripgrep_filter", "__esmMin", "init_sentry_release_injection_stub", "init_acl", "renderFileTree", "options", "paths", "maxFilesPerDir", "excludeBasenames", "maxDepth", "simple", "getFileLimit", "folderPath", "root", "path", "current", "parts", "part", "isDirectory", "i", "isFile", "getCollapsedPath", "node", "depth", "childName", "childNode", "renderNode", "prefix", "isLast", "isRoot", "currentPath", "currentDepth", "result", "collapsedDepth", "nodePath", "fileCount", "newPrefix", "collapsedInfo", "_", "entries", "sortedEntries", "a", "b", "dirs", "n", "files", "currentDirPath", "fileLimit", "visibleFiles", "visibleEntries", "index", "isLastItem", "childPath", "effectiveCurrentDepth", "nodeChildPath", "filePrefix", "remaining", "import_path", "init_file_tree", "__esmMin", "init_sentry_release_injection_stub", "TerminalBuffer", "init_terminal_buffer", "__esmMin", "init_sentry_release_injection_stub", "maxLines", "maxColumns", "data", "i", "char", "removeCount", "j", "code", "params", "n", "line", "safeColumn", "lineIndex", "safeIndex", "lastNonEmptyLine", "wrapCommandWithEnvCapture", "options", "command", "envFilePath", "getTempScriptPath", "wrappedCommand", "parseEnvFile", "cleanupEnvFile", "filePath", "content", "fs", "parseEnvContent", "env", "lines", "line", "idx", "key", "value", "import_fs", "init_env_capture", "__esmMin", "init_sentry_release_injection_stub", "init_process_tracker", "require_common", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "setupOutgoing", "setupSocket", "getPort", "hasEncryptedConnection", "urlJoin", "rewriteCookieProperty", "toURL", "node_tls_1", "upgradeHeader", "HEADER_BLACKLIST", "HTTP2_HEADER_BLACKLIST", "outgoing", "options", "req", "forward", "target", "e", "header", "targetPath", "getPath", "outgoingPath", "required", "hasPort", "socket", "res", "conn", "args", "queryParams", "queryParamRaw", "url", "index", "qpStart", "retSegs", "seg", "config", "property", "headerElement", "match", "prefix", "previousValue", "newValue", "host", "u", "port", "protocol", "require_web_outgoing", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "__createBinding", "o", "m", "k", "k2", "desc", "__setModuleDefault", "v", "__importStar", "ownKeys", "ar", "mod", "result", "removeChunked", "setConnection", "setRedirectHostRewrite", "writeHeaders", "writeStatusCode", "common", "redirectRegex", "_req", "_res", "proxyRes", "req", "options", "target", "location", "u", "res", "rewriteCookieDomainConfig", "rewriteCookiePathConfig", "preserveHeaderKeyCase", "setHeader", "key", "header", "rawHeaderKeyMap", "i", "key0", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_common", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "setup", "env", "createDebug", "coerce", "disable", "enable", "enabled", "destroy", "key", "selectColor", "namespace", "hash", "i", "prevTime", "enableOverride", "namespacesCache", "enabledCache", "debug", "args", "self", "curr", "ms", "index", "match", "format", "formatter", "val", "extend", "v", "delimiter", "newDebug", "namespaces", "split", "ns", "matchesTemplate", "search", "template", "searchIndex", "templateIndex", "starIndex", "matchIndex", "name", "skip", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "formatArgs", "save", "load", "useColors", "localstorage", "warned", "m", "args", "c", "index", "lastC", "match", "namespaces", "r", "formatters", "v", "error", "require_has_flag", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "flag", "argv", "prefix", "position", "terminatorPosition", "require_supports_color", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "os", "tty", "hasFlag", "env", "forceColor", "translateLevel", "level", "supportsColor", "haveStream", "streamIsTTY", "min", "osRelease", "sign", "version", "getSupportLevel", "stream", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "supportsColor", "key", "obj", "prop", "_", "k", "val", "args", "name", "c", "colorCode", "prefix", "getDate", "namespaces", "debug", "keys", "i", "formatters", "v", "str", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "debug", "require_follow_redirects", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "url", "URL", "http", "https", "Writable", "assert", "debug", "looksLikeNode", "looksLikeBrowser", "looksLikeV8", "isFunction", "useNativeURL", "error", "preservedUrlFields", "events", "eventHandlers", "event", "arg1", "arg2", "arg3", "InvalidUrlError", "createErrorType", "RedirectionError", "TooManyRedirectsError", "MaxBodyLengthExceededError", "WriteAfterEndError", "destroy", "noop", "RedirectableRequest", "options", "responseCallback", "self", "response", "cause", "destroyRequest", "data", "encoding", "callback", "isString", "isBuffer", "currentRequest", "name", "value", "msecs", "destroyOnTimeout", "socket", "startTimer", "clearTimer", "method", "a", "b", "property", "searchPos", "protocol", "nativeProtocol", "scheme", "request", "i", "buffers", "writeNext", "buffer", "statusCode", "location", "requestHeaders", "beforeRedirect", "removeMatchingHeaders", "currentHostHeader", "currentUrlParts", "parseUrl", "currentHost", "currentUrl", "redirectUrl", "resolveUrl", "spreadUrlObject", "isSubdomain", "responseDetails", "requestDetails", "wrap", "protocols", "nativeProtocols", "wrappedProtocol", "input", "isURL", "validateUrl", "get", "wrappedRequest", "parsed", "relative", "base", "urlObject", "target", "spread", "key", "regex", "headers", "lastValue", "header", "code", "message", "baseClass", "CustomError", "properties", "subdomain", "domain", "dot", "require_web_incoming", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "__createBinding", "o", "m", "k", "k2", "desc", "__setModuleDefault", "v", "__importStar", "ownKeys", "ar", "mod", "result", "deleteLength", "timeout", "XHeaders", "stream", "http", "https", "web_outgoing_1", "common", "followRedirects", "web_o", "nativeAgents", "req", "_res", "options", "encrypted", "values", "header", "res", "_", "server", "cb", "agents", "proto", "outgoingOptions", "forwardReq", "forwardError", "createErrorHandler", "proxyReq", "socket", "proxyError", "url", "err", "proxyRes", "pass", "require_ws_incoming", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "__createBinding", "o", "m", "k", "k2", "desc", "__setModuleDefault", "v", "__importStar", "ownKeys", "ar", "mod", "result", "__importDefault", "numOpenSockets", "checkMethodAndHeader", "XHeaders", "stream", "http", "https", "common", "web_outgoing_1", "debug_1", "log", "web_o", "createSocketCounter", "name", "sockets", "add", "rm", "socketCounter", "proxySocketCounter", "MockResponse", "key", "value", "req", "socket", "_socket", "options", "values", "header", "head", "server", "cb", "proxySockets", "cleanUpProxySockets", "p", "createHttpHeader", "line", "headers", "i", "proto", "outgoingOptions", "proxyReq", "onOutgoingError", "proxyRes", "proxySocket", "proxyHead", "err", "res", "pass", "writeChunk", "chunk", "require_http_proxy", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "__createBinding", "o", "m", "k", "k2", "desc", "__setModuleDefault", "v", "__importStar", "ownKeys", "ar", "mod", "result", "__importDefault", "http", "http2", "web_incoming_1", "ws_incoming_1", "node_events_1", "debug_1", "common_1", "log", "ProxyServer", "_ProxyServer", "options", "type", "args", "req", "res", "passes", "err", "counter", "head", "cb", "requestOptions", "e", "pass", "port", "hostname", "requestListener", "socket", "passName", "i", "idx", "require_lib", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "createProxyServer", "index_1", "ws_incoming_1", "options", "require_cookie", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "parse", "serialize", "__toString", "__hasOwnProperty", "cookieNameRegExp", "cookieValueRegExp", "domainValueRegExp", "pathValueRegExp", "str", "opt", "obj", "len", "dec", "decode", "index", "eqIdx", "endIdx", "keyStartIdx", "startIndex", "keyEndIdx", "endIndex", "key", "valStartIdx", "valEndIdx", "val", "tryDecode", "max", "code", "min", "name", "enc", "value", "maxAge", "expires", "isDate", "priority", "sameSite", "require_cookie_signature", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "crypto", "val", "secret", "str", "mac", "sha1", "require_cookie_parser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "cookie", "signature", "cookieParser", "JSONCookie", "JSONCookies", "signedCookie", "signedCookies", "secret", "options", "secrets", "req", "res", "next", "cookies", "str", "obj", "key", "val", "i", "dec", "ret", "import_cookie_parser", "BUILDER_ENDPOINT_PREFIX", "BUILDER_API_ENDPOINT_PREFIX", "NON_AUTHENTICATED_ENDPOINTS", "configureServer", "serverAuthMiddleware", "init_server", "__esmMin", "init_sentry_release_injection_stub", "app", "validBuilderPrivateKey", "authenticateProxy", "isLocal", "sharedState", "cookieParser", "req", "res", "next", "allowOrigin", "_req", "status", "isBuilderApiEndpoint", "endpoint", "requestKey", "import_http_proxy_3", "createProxy", "isProbablyHtmlContent", "detectSSR", "processHtmlContent", "shouldSkipHeader", "createProxyOptions", "init_proxy", "__esmMin", "init_sentry_release_injection_stub", "init_server", "serverUrl", "sys", "connectionTracker", "proxy", "proxyReq", "req", "_res", "hostname", "proxyRes", "_req", "res", "statusCode", "contentType", "contentLength", "maxBufferSize", "setHeadersAndStatusCode", "key", "newValue", "oldValue", "body", "chunk", "err", "next", "BUILDER_ENDPOINT_PREFIX", "secFetchDest", "httpXBuilderSource", "screenshotBypassParam", "socket", "head", "trimmedBody", "ssrMarkers", "hasSSR", "marker", "bodyTagIndex", "beforeBody", "hasHeaderSSR", "script", "headMatch", "modifiedBody", "headerKey", "isHttps", "abortSignalAny", "input", "signals", "signal", "controller", "onAbort", "init_abort_signal_any", "__esmMin", "init_sentry_release_injection_stub", "ansiRegex", "onlyFirst", "pattern", "init_ansi_regex", "__esmMin", "init_sentry_release_injection_stub", "stripAnsi", "string", "regex", "init_strip_ansi", "__esmMin", "init_sentry_release_injection_stub", "init_ansi_regex", "ansiRegex", "parseUrlString", "urlString", "url", "port", "portMatch", "normalizedUrl", "cleanTmuxOutput", "output", "cleaned", "stripAnsi", "parseDevServerOutput", "customPatterns", "patterns", "pattern", "cleanedPattern", "error", "patternsToCheck", "DEV_SERVER_URL_PATTERNS", "line", "match", "result", "outputLines", "i", "currentLine", "nextLine", "combinedLine", "init_dev_server_url_parser", "__esmMin", "init_sentry_release_injection_stub", "init_strip_ansi", "isLocalhost", "hostname", "readHostsFile", "HOSTS_FILE_PATH", "writeHostsFile", "content", "removeManagedEntries", "hostsContent", "lines", "result", "inManagedBlock", "line", "MANAGED_BLOCK_START", "MANAGED_BLOCK_END", "createManagedBlock", "entries", "entry", "ip", "updateHostsFile", "sentry", "currentContent", "error", "newContent", "managedBlock", "import_node_fs", "init_hosts_file_manager", "__esmMin", "init_sentry_release_injection_stub", "expandTildePath", "filePath", "resolveFilePath", "workingDirectory", "resolvedPath", "isValidFilePath", "ensureDirectoryExists", "dir", "applyFileOverride", "override", "sentry", "error", "errorMessage", "applyFileOverrides", "overrides", "result", "applyResult", "import_node_fs", "import_node_path", "import_node_os", "init_file_overrides_manager", "__esmMin", "init_sentry_release_injection_stub", "isCommandAvailable", "command", "checkCommand", "detectPackageManagerInstallCommand", "sys", "workingDir", "dir", "safeReplaceNiCommand", "workingDirectory", "originalCommand", "detectedCommand", "checkMiseInstalled", "miseLocationPath", "safeParseUrl", "serverUrl", "devServerOrchestrator", "fusionConfig", "initialSetupState", "setupOutputBuffer", "TerminalBuffer", "stdoutBuffer", "stderrBuffer", "allOutputBuffer", "_autoDetectedUrl", "_autoDetectDevServer", "_autoDetectDevServerPatterns", "devCommandProc", "extraEnvVariables", "_setupEnvVars", "_devState", "_httpServerState", "_setupState", "_lastServerBody", "_lastServerStatus", "checkpoints", "emitter", "EventEmitter", "setupAbortController", "setupPromise", "devCommand", "setupCommand", "setupDependencies", "currentHealthCheckAbort", "addCheckpoint", "updateHostsFileIfNeeded", "hostname", "isLocalhost", "updateHostsFile", "M", "applyFileOverridesIfNeeded", "result", "applyFileOverrides", "f", "failed", "waitUntilIdle", "initialWaitMs", "idleTimeMs", "defaultInitialWait", "defaultIdleTime", "resolve", "timer", "resetTimer", "ms", "cleanup", "onOutput", "proxyMiddleware", "getOpenPorts", "pid", "checkPortsListenedByPid", "updateProxyMiddleware", "updatedHosts", "createProxy", "setDevState", "newState", "setHttpServerState", "setSetupState", "ensureDevCommand", "healthCheckLoop", "badStateCounter", "timerTimeout", "abortSignal", "healthCheck", "state", "waitTime", "requestModule", "https", "http", "urlToCheck", "reject", "onAbort", "req", "res", "body", "chunk", "err", "computedState", "getEnvObject", "includeSetupVars", "envVars", "acc", "key", "value", "getSharedProcEnv", "updateMiseToml", "shell", "includeEcho", "environment", "useCustomConfig", "miseConfigLocation", "mise", "d", "content", "runSetupCommand", "signal", "miseCommand", "actualCommand", "envCollector", "wrapCommandWithEnvCapture", "setupProc", "safeSpawn", "anySignal", "abortSignalAny", "killProcess", "_err", "data", "str", "code", "capturedEnv", "restart", "oldProc", "proc", "createDevProcess", "running", "writeStdErr", "getCheckpoints", "attemptAutoDetectDevServer", "parsedOutput", "parseDevServerOutput", "writeStdOut", "lastCheckpoint", "createSpawnProcess", "cwd", "env", "childProc", "listener", "event", "callback", "createPtyProcess", "pty", "TERM", "ptyProcess", "getCommandWithShellArgs", "_exitCode", "cols", "rows", "exitCode", "_event", "_callback", "runInPty", "options", "importPty", "n", "mode", "c", "envIndex", "opts", "newCommand", "newSetupDependencies", "needToReInstall", "forceRestart", "newProxyServer", "newServerUrl", "newPort", "enabled", "patterns", "cleanupTempFolder", "import_events", "import_node_child_process", "import_node_https", "import_node_http", "import_node_fs", "init_dev_server_orchestrator", "__esmMin", "init_sentry_release_injection_stub", "init_process_tracker", "init_env_capture", "init_terminal_buffer", "init_proxy", "init_abort_signal_any", "init_dev_server_url_parser", "init_dist", "init_hosts_file_manager", "init_file_overrides_manager", "ptyError", "error", "output", "ports", "lines", "line", "parts", "match", "port", "resolveToolCalls", "toolContext", "toolCalls", "existingToolResults", "onStep", "results", "addResult", "result", "promise", "err", "toolCall", "signal", "abortSignalAny", "existingToolResult", "callTool", "convertToToolResult", "error", "handleLocalMCPTool", "viewPath", "handleBadWrite", "readFile", "listDir", "globSearch", "grepSearch", "devServerControl", "bash", "powershell", "dispatchAgent", "revertToCheckpoint", "exitPlanMode", "localMCPManager", "textContent", "c", "fileExists", "evaluateAccess", "input", "file_path", "fileStat", "accessResult", "checkpoint_id", "restored", "turn", "devServerOrchestrator", "patchFusionConfig", "emitter", "user", "restart", "get_logs", "set_proxy_port", "set_dev_command", "set_and_run_setup_command", "set_env_variable", "NOT_ALLOWED", "didRestart", "initial", "key", "value", "output", "isError", "toolResult", "previousPort", "statusMessage", "ports", "isRunning", "logsMessage", "stat", "files", "view_range", "title", "fileStats", "fileContent", "answer", "getViewFileRange", "dirFiles", "renderFileTree", "offset", "limit", "includeLineNumbers", "file", "formatFileContent", "path", "getAllFiles", "pattern", "totalMatches", "firstFiles", "lastFiles", "plan", "getRipgrepExecutable", "sys", "rgPath", "bashWorkingDirectory", "filterText", "fusionConfig", "args", "workingDirectory", "globContext", "EXCLUDE", "glob", "isLikelyFixedString", "executeRipgrepAndGetResult", "filteredResults", "parseAndFilterRipgrepResults", "truncateLines", "alternative", "cwd", "query", "resolve", "outputBuffer", "TerminalBuffer", "child", "trackedSpawn", "data", "code", "PrivateError", "isInstallCommand", "command", "executeShellCommand", "timeout", "toolId", "shellType", "allowedCommands", "shellName", "timeoutSignal", "composedSignal", "securityConfig", "createSecurityConfig", "securityViolation", "validateCommandSecurity", "isCommandAllowed", "shell", "proc", "safeSpawn", "content", "stopProcess", "killProcess", "abortReason", "description", "prompt", "position", "agentSession", "CodeGenSession", "importantFiles", "disconnect", "step", "cleanup", "abort", "lastTurn", "action", "a", "newAbortError", "Sentry", "init_code_tools", "__esmMin", "init_sentry_release_injection_stub", "init_command_security", "init_normalize_text", "init_ripgrep_filter", "init_process_tracker", "init_file_tree", "init_codegen", "init_terminal_buffer", "init_dev_server_orchestrator", "init_abort_signal_any", "init_errors", "specialOpeningChars", "specialClosingChars", "openingChars", "closingChars", "closingCharsMap", "i", "char", "openingChar", "location", "index", "parseAIBranchName", "branchName", "parts", "sessionId", "featureBranch", "computeAIBranchName", "import_path", "isInRemoteContainer", "getVolumePath", "getAndParseGitRepoInfo", "init_helpers", "__esmMin", "init_sentry_release_injection_stub", "fusionConfig", "path", "sys", "gitWorkingDirectory", "strict", "repoInfo", "currentBranch", "parsed", "resolveWorkspacePath", "options", "originalFilePath", "forceWorkspace", "workspace", "workingDirectory", "sys", "canCollapseWorkspace", "filePath", "workspaceFolder", "folderPath", "firstSlashIndex", "firstWorkspace", "prefix", "actualPath", "folder", "absolutePathToWorkspaceUrl", "absolutePath", "normalizedAbsolutePath", "relativePath", "init_workspace_path_resolver", "__esmMin", "init_sentry_release_injection_stub", "util", "objectUtil", "ZodParsedType", "getParsedType", "init_util", "__esmMin", "init_sentry_release_injection_stub", "_", "assertIs", "_arg", "assertNever", "_x", "items", "obj", "item", "validKeys", "k", "filtered", "e", "object", "keys", "key", "arr", "checker", "val", "joinValues", "array", "separator", "value", "first", "second", "data", "ZodIssueCode", "quotelessJson", "ZodError", "init_ZodError", "__esmMin", "init_sentry_release_injection_stub", "init_util", "util", "obj", "_ZodError", "issues", "sub", "subs", "actualProto", "_mapper", "mapper", "issue", "fieldErrors", "processError", "error", "curr", "i", "el", "value", "formErrors", "firstEl", "errorMap", "en_default", "init_en", "__esmMin", "init_sentry_release_injection_stub", "init_ZodError", "init_util", "issue", "_ctx", "message", "ZodIssueCode", "ZodParsedType", "util", "setErrorMap", "map", "overrideErrorMap", "getErrorMap", "init_errors", "__esmMin", "init_sentry_release_injection_stub", "init_en", "en_default", "addIssueToContext", "ctx", "issueData", "overrideMap", "getErrorMap", "issue", "makeIssue", "en_default", "x", "EMPTY_PATH", "ParseStatus", "INVALID", "DIRTY", "OK", "isAborted", "isDirty", "isValid", "isAsync", "init_parseUtil", "__esmMin", "init_sentry_release_injection_stub", "init_errors", "init_en", "params", "data", "path", "errorMaps", "fullPath", "fullIssue", "errorMessage", "maps", "m", "map", "_ParseStatus", "status", "results", "arrayValue", "s", "pairs", "syncPairs", "pair", "key", "value", "finalObject", "init_typeAliases", "__esmMin", "init_sentry_release_injection_stub", "errorUtil", "init_errorUtil", "__esmMin", "init_sentry_release_injection_stub", "message", "processCreateParams", "params", "errorMap", "invalid_type_error", "required_error", "description", "iss", "ctx", "message", "timeRegexSource", "args", "secondsRegexSource", "secondsQuantifier", "timeRegex", "datetimeRegex", "regex", "dateRegexSource", "opts", "isValidIP", "ip", "version", "ipv4Regex", "ipv6Regex", "isValidJWT", "jwt", "alg", "jwtRegex", "header", "base64", "decoded", "isValidCidr", "ipv4CidrRegex", "ipv6CidrRegex", "floatSafeRemainder", "val", "step", "valDecCount", "stepDecCount", "decCount", "valInt", "stepInt", "deepPartialify", "schema", "ZodObject", "newShape", "key", "fieldSchema", "ZodOptional", "ZodArray", "ZodNullable", "ZodTuple", "item", "mergeValues", "a", "b", "aType", "getParsedType", "bType", "ZodParsedType", "bKeys", "util", "sharedKeys", "newObj", "sharedValue", "newArray", "index", "itemA", "itemB", "createZodEnum", "values", "ZodEnum", "ZodFirstPartyTypeKind", "cleanParams", "data", "p", "custom", "check", "_params", "fatal", "ZodAny", "r", "_fatal", "ParseInputLazyPath", "handleResult", "ZodType", "cuidRegex", "cuid2Regex", "ulidRegex", "uuidRegex", "nanoidRegex", "durationRegex", "emailRegex", "_emojiRegex", "emojiRegex", "base64Regex", "base64urlRegex", "dateRegex", "ZodString", "ZodNumber", "ZodBigInt", "ZodBoolean", "ZodDate", "ZodSymbol", "ZodUndefined", "ZodNull", "ZodUnknown", "ZodNever", "ZodVoid", "ZodUnion", "getDiscriminator", "ZodDiscriminatedUnion", "ZodIntersection", "ZodRecord", "ZodMap", "ZodSet", "ZodFunction", "ZodLazy", "ZodLiteral", "ZodNativeEnum", "ZodPromise", "ZodEffects", "ZodDefault", "ZodCatch", "ZodNaN", "BRAND", "ZodBranded", "ZodPipeline", "ZodReadonly", "late", "instanceOfType", "stringType", "numberType", "nanType", "bigIntType", "booleanType", "dateType", "symbolType", "undefinedType", "nullType", "anyType", "unknownType", "neverType", "voidType", "arrayType", "objectType", "strictObjectType", "unionType", "discriminatedUnionType", "intersectionType", "tupleType", "recordType", "mapType", "setType", "functionType", "lazyType", "literalType", "enumType", "nativeEnumType", "promiseType", "effectsType", "optionalType", "nullableType", "preprocessType", "pipelineType", "ostring", "onumber", "oboolean", "coerce", "NEVER", "init_types", "__esmMin", "init_sentry_release_injection_stub", "init_ZodError", "init_errors", "init_errorUtil", "init_parseUtil", "init_util", "parent", "value", "path", "result", "isValid", "error", "ZodError", "input", "ParseStatus", "isAsync", "err", "maybeAsyncResult", "getIssueProperties", "setError", "ZodIssueCode", "refinementData", "refinement", "def", "option", "incoming", "transform", "defaultValueFunc", "catchValueFunc", "This", "target", "_ZodString", "addIssueToContext", "INVALID", "status", "tooBig", "tooSmall", "validation", "errorUtil", "options", "minLength", "maxLength", "len", "ch", "min", "max", "_ZodNumber", "kind", "inclusive", "_ZodBigInt", "OK", "_ZodDate", "minDate", "maxDate", "_ZodArray", "i", "_ZodObject", "shape", "keys", "shapeKeys", "extraKeys", "pairs", "keyValidator", "unknownKeys", "catchall", "syncPairs", "pair", "issue", "defaultError", "augmentation", "merging", "mask", "newField", "handleResults", "results", "unionErrors", "childCtx", "dirty", "issues", "types", "type", "_ZodDiscriminatedUnion", "discriminator", "discriminatorValue", "optionsMap", "discriminatorValues", "handleParsed", "parsedLeft", "parsedRight", "isAborted", "merged", "isDirty", "left", "right", "_ZodTuple", "items", "itemIndex", "x", "rest", "schemas", "_ZodRecord", "keyType", "valueType", "first", "second", "third", "finalMap", "_ZodSet", "finalizeSet", "elements", "parsedSet", "element", "minSize", "maxSize", "size", "_ZodFunction", "makeArgsIssue", "makeIssue", "getErrorMap", "en_default", "makeReturnsIssue", "returns", "fn", "me", "parsedArgs", "e", "parsedReturns", "returnType", "func", "getter", "_ZodEnum", "expectedValues", "enumValues", "newDef", "opt", "nativeEnumValues", "promisified", "effect", "checkCtx", "arg", "processed", "DIRTY", "executeRefinement", "acc", "inner", "base", "preprocess", "newCtx", "_ZodPipeline", "inResult", "freeze", "cls", "external_exports", "__export", "BRAND", "DIRTY", "EMPTY_PATH", "INVALID", "NEVER", "OK", "ParseStatus", "ZodType", "ZodAny", "ZodArray", "ZodBigInt", "ZodBoolean", "ZodBranded", "ZodCatch", "ZodDate", "ZodDefault", "ZodDiscriminatedUnion", "ZodEffects", "ZodEnum", "ZodError", "ZodFirstPartyTypeKind", "ZodFunction", "ZodIntersection", "ZodIssueCode", "ZodLazy", "ZodLiteral", "ZodMap", "ZodNaN", "ZodNativeEnum", "ZodNever", "ZodNull", "ZodNullable", "ZodNumber", "ZodObject", "ZodOptional", "ZodParsedType", "ZodPipeline", "ZodPromise", "ZodReadonly", "ZodRecord", "ZodSet", "ZodString", "ZodSymbol", "ZodTuple", "ZodUndefined", "ZodUnion", "ZodUnknown", "ZodVoid", "addIssueToContext", "anyType", "arrayType", "bigIntType", "booleanType", "coerce", "custom", "dateType", "datetimeRegex", "en_default", "discriminatedUnionType", "effectsType", "enumType", "functionType", "getErrorMap", "getParsedType", "instanceOfType", "intersectionType", "isAborted", "isAsync", "isDirty", "isValid", "late", "lazyType", "literalType", "makeIssue", "mapType", "nanType", "nativeEnumType", "neverType", "nullType", "nullableType", "numberType", "objectType", "objectUtil", "oboolean", "onumber", "optionalType", "ostring", "pipelineType", "preprocessType", "promiseType", "quotelessJson", "recordType", "setType", "setErrorMap", "strictObjectType", "stringType", "symbolType", "tupleType", "undefinedType", "unionType", "unknownType", "util", "voidType", "init_external", "__esmMin", "init_sentry_release_injection_stub", "init_errors", "init_parseUtil", "init_typeAliases", "init_util", "init_types", "init_ZodError", "init_zod", "__esmMin", "init_sentry_release_injection_stub", "init_external", "LATEST_PROTOCOL_VERSION", "SUPPORTED_PROTOCOL_VERSIONS", "JSONRPC_VERSION", "ProgressTokenSchema", "CursorSchema", "RequestMetaSchema", "BaseRequestParamsSchema", "RequestSchema", "BaseNotificationParamsSchema", "NotificationSchema", "ResultSchema", "RequestIdSchema", "JSONRPCRequestSchema", "isJSONRPCRequest", "JSONRPCNotificationSchema", "isJSONRPCNotification", "JSONRPCResponseSchema", "isJSONRPCResponse", "ErrorCode", "JSONRPCErrorSchema", "isJSONRPCError", "JSONRPCMessageSchema", "EmptyResultSchema", "CancelledNotificationSchema", "IconSchema", "IconsSchema", "BaseMetadataSchema", "ImplementationSchema", "ClientCapabilitiesSchema", "InitializeRequestSchema", "ServerCapabilitiesSchema", "InitializeResultSchema", "InitializedNotificationSchema", "PingRequestSchema", "ProgressSchema", "ProgressNotificationSchema", "PaginatedRequestSchema", "PaginatedResultSchema", "ResourceContentsSchema", "TextResourceContentsSchema", "Base64Schema", "BlobResourceContentsSchema", "ResourceSchema", "ResourceTemplateSchema", "ListResourcesRequestSchema", "ListResourcesResultSchema", "ListResourceTemplatesRequestSchema", "ListResourceTemplatesResultSchema", "ReadResourceRequestSchema", "ReadResourceResultSchema", "ResourceListChangedNotificationSchema", "SubscribeRequestSchema", "UnsubscribeRequestSchema", "ResourceUpdatedNotificationSchema", "PromptArgumentSchema", "PromptSchema", "ListPromptsRequestSchema", "ListPromptsResultSchema", "GetPromptRequestSchema", "TextContentSchema", "ImageContentSchema", "AudioContentSchema", "EmbeddedResourceSchema", "ResourceLinkSchema", "ContentBlockSchema", "PromptMessageSchema", "GetPromptResultSchema", "PromptListChangedNotificationSchema", "ToolAnnotationsSchema", "ToolSchema", "ListToolsRequestSchema", "ListToolsResultSchema", "CallToolResultSchema", "CompatibilityCallToolResultSchema", "CallToolRequestSchema", "ToolListChangedNotificationSchema", "LoggingLevelSchema", "SetLevelRequestSchema", "LoggingMessageNotificationSchema", "ModelHintSchema", "ModelPreferencesSchema", "SamplingMessageSchema", "CreateMessageRequestSchema", "CreateMessageResultSchema", "BooleanSchemaSchema", "StringSchemaSchema", "NumberSchemaSchema", "EnumSchemaSchema", "PrimitiveSchemaDefinitionSchema", "ElicitRequestSchema", "ElicitResultSchema", "ResourceTemplateReferenceSchema", "PromptReferenceSchema", "CompleteRequestSchema", "CompleteResultSchema", "RootSchema", "ListRootsRequestSchema", "ListRootsResultSchema", "RootsListChangedNotificationSchema", "ClientRequestSchema", "ClientNotificationSchema", "ClientResultSchema", "ServerRequestSchema", "ServerNotificationSchema", "ServerResultSchema", "McpError", "init_types", "__esmMin", "init_sentry_release_injection_stub", "init_zod", "external_exports", "value", "val", "code", "message", "data", "mergeCapabilities", "base", "additional", "acc", "key", "value", "DEFAULT_REQUEST_TIMEOUT_MSEC", "Protocol", "init_protocol", "__esmMin", "init_sentry_release_injection_stub", "init_types", "_options", "CancelledNotificationSchema", "notification", "controller", "ProgressNotificationSchema", "PingRequestSchema", "_request", "messageId", "timeout", "maxTotalTimeout", "onTimeout", "resetTimeoutOnProgress", "info", "totalElapsed", "McpError", "ErrorCode", "transport", "_onclose", "_a", "_onerror", "_b", "error", "_onmessage", "_c", "message", "extra", "isJSONRPCResponse", "isJSONRPCError", "isJSONRPCRequest", "isJSONRPCNotification", "responseHandlers", "handler", "request", "capturedTransport", "abortController", "fullExtra", "r", "resultSchema", "options", "result", "progressToken", "params", "responseHandler", "timeoutInfo", "response", "relatedRequestId", "resumptionToken", "onresumptiontoken", "resolve", "reject", "jsonrpcRequest", "cancel", "reason", "_d", "_e", "timeoutHandler", "_f", "jsonrpcNotification", "requestSchema", "method", "notificationSchema", "merge", "sets", "_len", "_key", "length", "slice", "xl", "x", "join", "subexp", "str", "typeOf", "o", "undefined", "Object", "prototype", "toString", "call", "split", "pop", "shift", "toLowerCase", "toUpperCase", "toArray", "obj", "Array", "setInterval", "assign", "target", "source", "key", "buildExps", "isIRI", "ALPHA$$", "CR$", "DIGIT$$", "DQUOTE$$", "HEXDIG$$", "SP$$", "PCT_ENCODED$", "SUB_DELIMS$$", "RESERVED$$", "GEN_DELIMS$$", "UCSCHAR$$", "SCHEME$", "USERINFO$", "UNRESERVED$$", "DEC_OCTET$", "DEC_OCTET_RELAXED$", "H16$", "LS32$", "IPV4ADDRESS$", "IPV6ADDRESS1$", "IPV6ADDRESS2$", "IPV6ADDRESS3$", "IPV6ADDRESS4$", "IPV6ADDRESS5$", "IPV6ADDRESS6$", "IPV6ADDRESS7$", "IPV6ADDRESS8$", "IPV6ADDRESS9$", "ZONEID$", "IPV6ADDRESS$", "IP_LITERAL$", "IPV6ADDRZ_RELAXED$", "IPVFUTURE$", "HOST$", "REG_NAME$", "PORT$", "AUTHORITY$", "PCHAR$", "SEGMENT$", "SEGMENT_NZ$", "SEGMENT_NZ_NC$", "PATH_ABEMPTY$", "PATH_ABSOLUTE$", "PATH$", "PATH_NOSCHEME$", "PATH_ROOTLESS$", "PATH_EMPTY$", "QUERY$", "IPRIVATE$$", "FRAGMENT$", "HIER_PART$", "URI$", "RELATIVE_PART$", "RELATIVE$", "URI_REFERENCE$", "ABSOLUTE_URI$", "GENERIC_REF$", "RELATIVE_REF$", "ABSOLUTE_REF$", "SAMEDOC_REF$", "AUTHORITY_REF$", "RegExp", "URI_PROTOCOL", "IRI_PROTOCOL", "maxInt", "base", "tMin", "tMax", "skew", "damp", "initialBias", "initialN", "delimiter", "regexPunycode", "regexNonASCII", "regexSeparators", "errors", "baseMinusTMin", "floor", "Math", "stringFromCharCode", "String", "fromCharCode", "error", "type", "RangeError", "map", "array", "fn", "result", "mapDomain", "string", "parts", "replace", "labels", "encoded", "ucs2decode", "output", "counter", "value", "charCodeAt", "extra", "push", "ucs2encode", "fromCodePoint", "toConsumableArray", "basicToDigit", "codePoint", "digitToBasic", "digit", "flag", "adapt", "delta", "numPoints", "firstTime", "k", "decode", "input", "inputLength", "i", "n", "bias", "basic", "lastIndexOf", "j", "index", "oldi", "w", "t", "baseMinusT", "out", "splice", "encode", "_step", "_iteratorNormalCompletion", "_iterator", "currentValue", "basicLength", "handledCPCount", "m", "_step2", "_iteratorNormalCompletion2", "_iterator2", "handledCPCountPlusOne", "_step3", "_iteratorNormalCompletion3", "_iterator3", "q", "qMinusT", "toUnicode", "test", "toASCII", "punycode", "SCHEMES", "pctEncChar", "chr", "c", "e", "pctDecChars", "newStr", "il", "parseInt", "substr", "c2", "c3", "_normalizeComponentEncoding", "components", "protocol", "decodeUnreserved", "decStr", "match", "UNRESERVED", "scheme", "PCT_ENCODED", "NOT_SCHEME", "userinfo", "NOT_USERINFO", "host", "NOT_HOST", "path", "NOT_PATH", "NOT_PATH_NOSCHEME", "query", "NOT_QUERY", "fragment", "NOT_FRAGMENT", "_stripLeadingZeros", "_normalizeIPv4", "matches", "IPV4ADDRESS", "address", "_matches", "_normalizeIPv6", "IPV6ADDRESS", "_matches2", "zone", "reverse", "last", "_address$toLowerCase$2", "first", "firstFields", "lastFields", "isLastFieldIPv4Address", "fieldCount", "lastFieldsStart", "fields", "allZeroFields", "reduce", "acc", "field", "lastLongest", "longestZeroFields", "sort", "a", "b", "newHost", "newFirst", "newLast", "URI_PARSE", "NO_MATCH_IS_UNDEFINED", "parse", "uriString", "options", "iri", "reference", "port", "isNaN", "indexOf", "schemeHandler", "unicodeSupport", "domainHost", "_recomposeAuthority", "uriTokens", "_", "$1", "$2", "RDS1", "RDS2", "RDS3", "RDS5", "removeDotSegments", "im", "s", "Error", "serialize", "authority", "charAt", "absolutePath", "resolveComponents", "relative", "skipNormalization", "tolerant", "resolve", "baseURI", "relativeURI", "schemelessOptions", "normalize", "uri", "equal", "uriA", "uriB", "escapeComponent", "ESCAPE", "unescapeComponent", "handler", "secure", "http", "isSecure", "wsComponents", "resourceName", "_wsComponents$resourc2", "ws", "O", "ATEXT$$", "QTEXT$$", "VCHAR$$", "SOME_DELIMS$$", "NOT_LOCAL_PART", "NOT_HFNAME", "NOT_HFVALUE", "mailtoComponents", "to", "unknownHeaders", "headers", "hfields", "hfield", "toAddrs", "subject", "body", "addr", "toAddr", "atIdx", "localPart", "domain", "name", "URN_PARSE", "urnComponents", "nid", "nss", "urnScheme", "uriComponents", "UUID", "uuidComponents", "uuid", "https", "wss", "mailto", "urn", "require_fast_deep_equal", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "equal", "a", "b", "length", "keys", "key", "require_ucs2length", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "str", "length", "len", "pos", "value", "require_util", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "copy", "checkDataType", "checkDataTypes", "coerceToTypes", "toHash", "getProperty", "escapeQuotes", "varOccurences", "varReplace", "schemaHasRules", "schemaHasRulesExcept", "schemaUnknownRules", "toQuotedString", "getPathExpr", "getPath", "getData", "unescapeFragment", "unescapeJsonPointer", "escapeFragment", "escapeJsonPointer", "o", "to", "key", "dataType", "data", "strictNumbers", "negate", "EQUAL", "AND", "OK", "NOT", "dataTypes", "code", "types", "t", "COERCE_TO_TYPES", "optionCoerceTypes", "i", "arr", "hash", "IDENTIFIER", "SINGLE_QUOTE", "str", "dataVar", "matches", "expr", "schema", "rules", "exceptKeyword", "currentPath", "jsonPointers", "isNumber", "path", "joinPaths", "prop", "JSON_POINTER", "RELATIVE_JSON_POINTER", "$data", "lvl", "paths", "up", "jsonPointer", "segments", "segment", "a", "b", "require_schema_obj", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "SchemaObject", "obj", "require_json_schema_traverse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "traverse", "schema", "opts", "cb", "pre", "post", "_traverse", "jsonPtr", "rootSchema", "parentJsonPtr", "parentKeyword", "parentSchema", "keyIndex", "key", "sch", "i", "prop", "escapeJsonPtr", "str", "require_resolve", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "URI", "equal", "util", "SchemaObject", "traverse", "resolve", "normalizeId", "getFullPath", "resolveUrl", "resolveIds", "inlineRef", "resolveSchema", "compile", "root", "ref", "refVal", "res", "schema", "v", "baseId", "p", "refPath", "_getFullPath", "id", "resolveRecursive", "getJsonPointer", "parsedRef", "PREVENT_SCOPE_CHANGE", "parts", "i", "part", "$ref", "SIMPLE_INLINED", "limit", "checkNoRef", "countKeys", "item", "key", "count", "normalize", "TRAILING_SLASH_HASH", "schemaId", "baseIds", "fullPaths", "localRefs", "self", "sch", "jsonPtr", "rootSchema", "parentJsonPtr", "parentKeyword", "parentSchema", "keyIndex", "fullPath", "require_error_classes", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "resolve", "errorSubclass", "ValidationError", "MissingRefError", "errors", "baseId", "ref", "message", "Subclass", "require_fast_json_stable_stringify", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "data", "opts", "cycles", "cmp", "f", "node", "b", "aobj", "bobj", "seen", "stringify", "i", "out", "seenIndex", "keys", "key", "value", "require_validate", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$async", "$refKeywords", "$id", "$unknownKwd", "$keywordsMsg", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$errorKeyword", "$data", "$valid", "$$outStack", "__err", "$top", "$defaultMsg", "$closingBraces1", "$closingBraces2", "$typeSchema", "$typeIsArray", "$coerceToTypes", "$rulesGroup", "$shouldUseGroup", "$method", "$dataType", "$coerced", "arr1", "$type", "$i", "l1", "$parentData", "$parentDataProperty", "arr2", "i2", "l2", "$schemaKeys", "arr3", "$propertyKey", "i3", "l3", "$sch", "$passData", "arr4", "l4", "arr5", "$rule", "i5", "l5", "$shouldUseRule", "$code", "rules", "i", "$ruleImplementsSomeKeyword", "impl", "require_compile", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "resolve", "util", "errorClasses", "stableStringify", "validateGenerator", "ucs2length", "equal", "ValidationError", "compile", "schema", "root", "localRefs", "baseId", "self", "opts", "refVal", "refs", "patterns", "patternsHash", "defaults", "defaultsHash", "customRules", "c", "checkCompiling", "compilation", "callValidate", "formats", "RULES", "localCompile", "cv", "endCompiling", "validate", "result", "_schema", "_root", "isRoot", "$async", "sourceCode", "resolveRef", "usePattern", "useDefault", "useCustomRule", "vars", "refValCode", "patternCode", "defaultCode", "customRuleCode", "makeValidate", "e", "ref", "refIndex", "_refVal", "refCode", "resolvedRef", "rootRefId", "addLocalRef", "v", "localSchema", "removeLocalRef", "replaceLocalRef", "refId", "code", "regexStr", "index", "value", "valueStr", "rule", "parentSchema", "it", "deps", "keyword", "validateSchema", "valid", "message", "inline", "macro", "compIndex", "i", "arr", "statement", "require_cache", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Cache", "key", "value", "require_formats", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "DATE", "DAYS", "TIME", "HOSTNAME", "URI", "URIREF", "URITEMPLATE", "URL", "UUID", "JSON_POINTER", "JSON_POINTER_URI_FRAGMENT", "RELATIVE_JSON_POINTER", "formats", "mode", "regex", "date", "time", "date_time", "uri", "isLeapYear", "year", "str", "matches", "month", "day", "full", "hour", "minute", "second", "timeZone", "DATE_TIME_SEPARATOR", "dateTime", "NOT_URI_FRAGMENT", "Z_ANCHOR", "require_ref", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$async", "$refCode", "$refVal", "$message", "$$outStack", "__err", "$it", "$nextValid", "$code", "$parentData", "$parentDataProperty", "__callValidate", "require_allOf", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$it", "$closingBraces", "$nextValid", "$currentBaseId", "$allSchemasEmpty", "arr1", "$sch", "$i", "l1", "require_anyOf", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$errs", "$it", "$closingBraces", "$nextValid", "$noEmptySchema", "$sch", "$currentBaseId", "$wasComposite", "arr1", "$i", "l1", "require_comment", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$schema", "$errSchemaPath", "$breakOnError", "$comment", "require_const", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$isData", "$schemaValue", "$$outStack", "__err", "require_contains", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$errs", "$it", "$closingBraces", "$nextValid", "$idx", "$dataNxt", "$nextData", "$currentBaseId", "$nonEmptySchema", "$wasComposite", "$passData", "$code", "$$outStack", "__err", "require_dependencies", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$errs", "$it", "$closingBraces", "$nextValid", "$schemaDeps", "$propertyDeps", "$ownProperties", "$property", "$sch", "$deps", "$currentErrorPath", "arr1", "$propertyKey", "$i", "l1", "$prop", "$useData", "$propertyPath", "$missingProperty", "$$outStack", "__err", "arr2", "i2", "l2", "$currentBaseId", "require_enum", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$isData", "$schemaValue", "$i", "$vSchema", "$$outStack", "__err", "require_format", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$isData", "$schemaValue", "$unknownFormats", "$allowUnknown", "$format", "$isObject", "$formatType", "$async", "$formatRef", "$$outStack", "__err", "require_if", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$errs", "$it", "$nextValid", "$thenSch", "$elseSch", "$thenPresent", "$elsePresent", "$currentBaseId", "$ifClause", "$wasComposite", "require_items", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$errs", "$it", "$closingBraces", "$nextValid", "$idx", "$dataNxt", "$nextData", "$currentBaseId", "$additionalItems", "$currErrSchemaPath", "$$outStack", "__err", "arr1", "$sch", "$i", "l1", "$passData", "$code", "require_limit", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$errorKeyword", "$data", "$isData", "$schemaValue", "$isMax", "$exclusiveKeyword", "$schemaExcl", "$isDataExcl", "$op", "$notOp", "$schemaValueExcl", "$exclusive", "$exclType", "$exclIsNumber", "$opExpr", "$opStr", "$$outStack", "__err", "require_limitItems", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$errorKeyword", "$data", "$isData", "$schemaValue", "$op", "$$outStack", "__err", "require_limitLength", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$errorKeyword", "$data", "$isData", "$schemaValue", "$op", "$$outStack", "__err", "require_limitProperties", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$errorKeyword", "$data", "$isData", "$schemaValue", "$op", "$$outStack", "__err", "require_multipleOf", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$isData", "$schemaValue", "$$outStack", "__err", "require_not", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$errs", "$it", "$nextValid", "$wasComposite", "$allErrorsOption", "$$outStack", "__err", "require_oneOf", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$errs", "$it", "$closingBraces", "$nextValid", "$currentBaseId", "$prevValid", "$passingSchemas", "$wasComposite", "arr1", "$sch", "$i", "l1", "require_pattern", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$isData", "$schemaValue", "$regexp", "$$outStack", "__err", "require_properties", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$errs", "$it", "$closingBraces", "$nextValid", "$key", "$idx", "$dataNxt", "$nextData", "$dataProperties", "$schemaKeys", "notProto", "$pProperties", "$pPropertyKeys", "$aProperties", "$someProperties", "$noAdditional", "$additionalIsSchema", "$removeAdditional", "$checkAdditional", "$ownProperties", "$currentBaseId", "$required", "$requiredHash", "p", "arr1", "$propertyKey", "i1", "l1", "arr2", "$pProperty", "$i", "l2", "$currentErrorPath", "$additionalProperty", "$currErrSchemaPath", "$$outStack", "__err", "$wasComposite", "$passData", "$code", "$useDefaults", "arr3", "i3", "l3", "$sch", "$prop", "$hasDefault", "$useData", "$missingProperty", "arr4", "i4", "l4", "require_propertyNames", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$errs", "$it", "$closingBraces", "$nextValid", "$key", "$idx", "$i", "$invalidName", "$dataNxt", "$nextData", "$dataProperties", "$ownProperties", "$currentBaseId", "$passData", "$wasComposite", "$code", "require_required", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$isData", "$schemaValue", "$vSchema", "$required", "arr1", "$property", "i1", "l1", "$propertySch", "$currentErrorPath", "$loopRequired", "$ownProperties", "$i", "$propertyPath", "$missingProperty", "$$outStack", "__err", "arr2", "$propertyKey", "l2", "$prop", "$useData", "arr3", "i3", "l3", "require_uniqueItems", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$data", "$valid", "$isData", "$schemaValue", "$itemType", "$typeIsArray", "$method", "$$outStack", "__err", "require_dotjs", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_rules", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "ruleModules", "toHash", "RULES", "ALL", "KEYWORDS", "TYPES", "group", "keyword", "implKeywords", "key", "k", "rule", "require_data", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "KEYWORDS", "metaSchema", "keywordsJsonPointers", "i", "segments", "keywords", "j", "key", "schema", "require_async", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "MissingRefError", "compileAsync", "schema", "meta", "callback", "self", "p", "loadMetaSchemaOf", "schemaObj", "_compileAsync", "v", "sch", "$schema", "e", "loadMissingSchema", "ref", "added", "schemaPromise", "removePromise", "require_custom", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "it", "$keyword", "$ruleType", "out", "$lvl", "$dataLvl", "$schema", "$schemaPath", "$errSchemaPath", "$breakOnError", "$errorKeyword", "$data", "$valid", "$errs", "$isData", "$schemaValue", "$rule", "$definition", "$rDef", "$closingBraces", "$compile", "$inline", "$macro", "$ruleValidate", "$validateCode", "$validateSchema", "$ruleErrs", "$i", "$ruleErr", "$asyncKeyword", "$it", "$nextValid", "$wasComposite", "$code", "$$outStack", "$parentData", "$parentDataProperty", "def_callRuleValidate", "__err", "def_customError", "require_json_schema_draft_07", "__commonJSMin", "exports", "module", "require_definition_schema", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "metaSchema", "require_keyword", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "IDENTIFIER", "customRuleCode", "definitionSchema", "addKeyword", "getKeyword", "removeKeyword", "validateKeyword", "keyword", "definition", "RULES", "dataType", "_addRule", "metaSchema", "ruleGroup", "i", "rg", "rule", "rules", "j", "throwError", "v", "require_data", "__commonJSMin", "exports", "module", "require_ajv", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "compileSchema", "resolve", "Cache", "SchemaObject", "stableStringify", "formats", "rules", "$dataMetaSchema", "util", "Ajv", "validate", "compile", "addSchema", "addMetaSchema", "validateSchema", "getSchema", "removeSchema", "addFormat", "errorsText", "_addSchema", "_compile", "customKeyword", "errorClasses", "META_SCHEMA_ID", "META_IGNORE_OPTIONS", "META_SUPPORT_DATA", "opts", "setLogger", "chooseGetId", "getMetaSchemaOptions", "addInitialFormats", "addInitialKeywords", "addDefaultMetaSchema", "addInitialSchemas", "schemaKeyRef", "data", "v", "schemaObj", "valid", "schema", "_meta", "key", "_skipValidation", "id", "checkUnique", "skipValidation", "throwOrLogError", "$schema", "defaultMeta", "message", "self", "meta", "keyRef", "_getSchemaObj", "_getSchemaFragment", "ref", "res", "root", "baseId", "_removeAllSchemas", "serialize", "cacheKey", "schemas", "regex", "shouldAddSchema", "cached", "willValidate", "recursiveMeta", "localRefs", "callValidate", "currentOpts", "e", "_validate", "result", "_get$IdOrId", "_getId", "_get$Id", "errors", "options", "separator", "dataVar", "text", "i", "name", "format", "$dataSchema", "metaSchema", "optsSchemas", "keyword", "metaOpts", "logger", "noop", "import_ajv", "Client", "init_client", "__esmMin", "init_sentry_release_injection_stub", "init_protocol", "init_types", "Protocol", "_clientInfo", "options", "_a", "Ajv", "capabilities", "mergeCapabilities", "capability", "method", "transport", "result", "LATEST_PROTOCOL_VERSION", "InitializeResultSchema", "SUPPORTED_PROTOCOL_VERSIONS", "error", "_b", "_c", "_d", "_e", "EmptyResultSchema", "params", "CompleteResultSchema", "level", "GetPromptResultSchema", "ListPromptsResultSchema", "ListResourcesResultSchema", "ListResourceTemplatesResultSchema", "ReadResourceResultSchema", "resultSchema", "CallToolResultSchema", "validator", "McpError", "ErrorCode", "tools", "tool", "toolName", "ListToolsResultSchema", "require_windows", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isexe", "sync", "fs", "checkPathExt", "path", "options", "pathext", "i", "p", "checkStat", "stat", "cb", "er", "require_mode", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isexe", "sync", "fs", "path", "options", "cb", "er", "stat", "checkStat", "checkMode", "mod", "uid", "gid", "myUid", "myGid", "u", "g", "o", "ug", "ret", "require_isexe", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fs", "core", "isexe", "sync", "path", "options", "cb", "resolve", "reject", "er", "is", "require_which", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isWindows", "path", "COLON", "isexe", "getNotFoundError", "cmd", "getPathInfo", "opt", "colon", "pathEnv", "pathExtExe", "pathExt", "which", "cb", "found", "step", "i", "resolve", "reject", "ppRaw", "pathPart", "pCmd", "p", "subStep", "ii", "ext", "er", "is", "res", "whichSync", "j", "cur", "require_path_key", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "pathKey", "options", "environment", "key", "require_resolveCommand", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "which", "getPathKey", "resolveCommandAttempt", "parsed", "withoutPathExt", "env", "cwd", "hasCustomCwd", "shouldSwitchCwd", "resolved", "resolveCommand", "require_escape", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "metaCharsRegExp", "escapeCommand", "arg", "escapeArgument", "doubleEscapeMetaChars", "require_shebang_regex", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_shebang_command", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "shebangRegex", "string", "match", "path", "argument", "binary", "require_readShebang", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fs", "shebangCommand", "readShebang", "command", "buffer", "fd", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "resolveCommand", "escape", "readShebang", "isWin", "isExecutableRegExp", "isCmdShimRegExp", "detectShebang", "parsed", "shebang", "parseNonShell", "commandFile", "needsShell", "needsDoubleEscapeMetaChars", "arg", "shellCommand", "parse", "command", "args", "options", "require_enoent", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isWin", "notFoundError", "original", "syscall", "hookChildProcess", "cp", "parsed", "originalEmit", "name", "arg1", "err", "verifyENOENT", "status", "verifyENOENTSync", "require_cross_spawn", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "cp", "parse", "enoent", "spawn", "command", "args", "options", "parsed", "spawned", "spawnSync", "result", "deserializeMessage", "line", "JSONRPCMessageSchema", "serializeMessage", "message", "ReadBuffer", "init_stdio", "__esmMin", "init_sentry_release_injection_stub", "init_types", "chunk", "index", "getDefaultEnvironment", "env", "key", "DEFAULT_INHERITED_ENV_VARS", "value", "process", "isElectron", "import_cross_spawn", "import_node_process", "import_node_stream", "StdioClientTransport", "init_stdio", "__esmMin", "init_sentry_release_injection_stub", "server", "ReadBuffer", "resolve", "reject", "spawn", "_a", "_b", "error", "_code", "_c", "_d", "chunk", "_e", "message", "json", "serializeMessage", "require_package", "__commonJSMin", "exports", "module", "require_main", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fs", "path", "os", "crypto", "packageJson", "version", "LINE", "parse", "src", "obj", "lines", "match", "key", "value", "maybeQuote", "_parseVault", "options", "vaultPath", "_vaultPath", "result", "DotenvModule", "keys", "_dotenvKey", "length", "decrypted", "i", "attrs", "_instructions", "error", "_log", "message", "_warn", "_debug", "dotenvKey", "uri", "environment", "environmentKey", "ciphertext", "dotenvPath", "_resolveHome", "envPath", "_configVault", "parsed", "processEnv", "configDotenv", "encoding", "debug", "e", "config", "decrypt", "encrypted", "keyStr", "nonce", "authTag", "aesgcm", "isRange", "invalidKeyLength", "decryptionFailed", "msg", "populate", "override", "substituteEnvVars", "str", "env", "match", "varName", "loadEnvFile", "sys", "envFilePath", "workingDirectory", "path", "absolutePath", "result", "dotenvConfig", "error", "getBuiltInToolNames", "createPrefixedToolName", "serverName", "toolName", "getFigmaComponentName", "cleanupClient", "client", "process", "killProcess", "createLocalMCPClientManager", "servers", "signal", "builtInToolNames", "clients", "toolsCache", "allTools", "allResources", "usedToolNames", "server", "start", "childProcess", "Client", "transport", "StdioClientTransport", "timeoutSignal", "composedSignal", "mcpClient", "mcpClientClient", "serverCapabilities", "toolsResult", "tool", "originalName", "counter", "prefixedName", "resourcesResult", "filteredClientResources", "resource", "text", "a", "b", "aName", "bName", "name", "args", "toolInfo", "status", "applyEnvSubstitution", "serverConfig", "baseEnv", "envFileVars", "envForSubstitution", "substitutedCommand", "substitutedArgs", "arg", "substitutedExplicitEnv", "key", "value", "finalEnv", "substitutedEnvFile", "loadMCPConfig", "fusionConfig", "configPath", "serverConfigMap", "configContent", "config", "substitutedEnvFilePath", "import_child_process", "Sentry", "import_dotenv", "init_mcp_local", "__esmMin", "init_sentry_release_injection_stub", "init_client", "init_stdio", "init_figma_component", "init_process_tracker", "cleanFilePath", "filePath", "parseGitDiffFilesOnly", "diff", "results", "lines", "line", "trimmed", "parts", "statusCode", "action", "parseGitDiffToApplyActions", "includeFilesOnly", "currentFile", "originalFile", "currentAction", "addedLines", "removedLines", "content", "oldContent", "isNewFile", "isDeletedFile", "i", "finalAction", "cleanPath", "init_parseGitDiff", "__esmMin", "init_sentry_release_injection_stub", "generateKey", "init_crypto", "__esmMin", "init_sentry_release_injection_stub", "aesKey", "jwk", "setFeatureFlags", "featureFlags", "flags", "getFeatureFlag", "featureFlag", "init_feature_flags", "__esmMin", "init_sentry_release_injection_stub", "safeReadJSON", "filePath", "content", "safeReadFile", "detectRootPackageManager", "files", "rootFiles", "f", "hasRootFile", "fileName", "hasRootFileMatching", "predicate", "hasRootDirectory", "directoryName", "import_node_fs", "init_repo_metrics_utils", "__esmMin", "init_sentry_release_injection_stub", "detectNextJsSettings", "basePath", "files", "packageManagerInfo", "detectRootPackageManager", "hasRootFileMatching", "f", "hasRootDirectory", "packageJsonPath", "packageJson", "safeReadJSON", "devScript", "import_node_path", "init_nextjs", "__esmMin", "init_sentry_release_injection_stub", "init_repo_metrics_utils", "detectVueSettings", "basePath", "files", "packageManagerInfo", "detectRootPackageManager", "hasVueCliConfig", "hasRootFileMatching", "f", "hasViteConfig", "viteConfigFiles", "viteConfigPath", "viteConfigContent", "safeReadFile", "hasRootDirectory", "packageJsonPath", "packageJson", "safeReadJSON", "devScript", "isViteProject", "isVueCliProject", "import_node_path", "init_vue", "__esmMin", "init_sentry_release_injection_stub", "init_repo_metrics_utils", "detectSvelteSettings", "basePath", "files", "packageManagerInfo", "detectRootPackageManager", "hasRootFile", "hasRootDirectory", "packageJsonPath", "packageJson", "safeReadJSON", "isSvelteKit", "hasSvelteVitePlugin", "devScript", "usesVite", "usesSvelteKit", "viteConfigFiles", "viteConfigPath", "viteConfigContent", "safeReadFile", "import_node_path", "init_svelte", "__esmMin", "init_sentry_release_injection_stub", "init_repo_metrics_utils", "repo_metrics_exports", "__export", "collectRepoMetrics", "isExactVersion", "isEmptyRepo", "files", "sourceCodeExtensions", "configFiles", "projectDirectories", "file", "ext", "normalizedPath", "fileName", "dir", "version", "trimmedVersion", "rangeOperators", "operator", "detectMonorepo", "basePath", "packageJsonFiles", "f", "safeReadJSON", "pnpmWorkspace", "yarnLock", "possibleRoots", "detectPossibleMonorepoRoots", "safeReadFile", "detectFrameworks", "frameworks", "allDeps", "pkgFile", "fullPath", "packageJson", "jsFrameworks", "name", "config", "indicators", "confidence", "hasDep", "dep", "d", "cf", "pythonFrameworks", "requirementsFiles", "pyprojectFiles", "reqFile", "content", "imp", "pyFile", "cargoFiles", "rustFrameworks", "cargoFile", "cargoContent", "goModFiles", "goFrameworks", "goModFile", "goModContent", "detectSetupRequirements", "requirements", "npmrcPath", "nvmrcPath", "nodeVersionPath", "packageJsonPath", "rustToolchainPath", "rustToolchainTomlPath", "pythonVersionPath", "pyprojectPath", "match", "goVersionPath", "goModPath", "rubyVersionPath", "databaseIndicators", "type", "ind", "detectPackageManagers", "managers", "detectBuildTools", "tools", "buildToolIndicators", "parseEnvFile", "filePath", "envVars", "lines", "line", "trimmed", "key", "value", "parseNpmrcFile", "envVarPattern", "seenKeys", "detectEnvironmentVariables", "envFilePatterns", "envFiles", "envFilesSet", "npmrcFiles", "npmrcFile", "parsedVars", "envVar", "pattern", "envFile", "detectGuessedSettings", "nextJsSettings", "detectNextJsSettings", "vueSettings", "detectVueSettings", "svelteSettings", "detectSvelteSettings", "excludedDirectoryPatterns", "rootIndicatorFiles", "shouldExclude", "path", "part", "dirPath", "rootsArray", "filteredRoots", "root", "sys", "errors", "getAllProjectFiles", "isEmpty", "monorepoInfo", "setupRequirements", "packageManagers", "buildTools", "environmentVariables", "guessedSettings", "result", "err", "import_node_fs", "import_node_path", "init_repo_metrics", "__esmMin", "init_sentry_release_injection_stub", "init_sync_utils", "init_repo_metrics_utils", "init_nextjs", "init_vue", "init_svelte", "getLastGoodTurn", "sessionContext", "i", "turnState", "getLastUserTurn", "getLastApplyResultsTurn", "getLastOne", "array", "inPlaceRemovePendingTurns", "turns", "restoreConsumedCredit", "sys", "credentials", "sessionId", "restoreCredits", "url", "apiAirV2Host", "headers", "safeFetch", "error", "isTimeout", "analyzePayloadBreakdown", "body", "jsonString", "breakdown", "attachmentSizes", "att", "attachmentsByType", "idx", "type", "size", "a", "b", "data", "filesByExtension", "totalFilesWithContent", "totalFilesWithoutContent", "totalContentSize", "file", "ext", "topExtensions", "promptSizes", "match", "toolResultSize", "completionStream", "signal", "abortController", "json", "startTime", "lastMessageTime", "lastPingTime", "didStream", "responseSize", "lastEvents", "timer", "res", "abortSignalAny", "httpText", "errorMessage", "topContributors", "stream", "transformStream", "IDLE_TIMEOUT", "value", "e", "now", "CodeGenError", "requestSize", "timeSinceLastPing", "MAX_SIZE", "isAttachmentTooLarge", "NetworkError", "errName", "newError", "PrivateError", "payloadBreakdown", "codegenEndpoint", "endpoint", "feedback", "lastError", "displayNetworkError", "exponentialBackoff", "setLastCompletionOfSession", "_verbose", "getTurnsBySessionId", "linear", "completionIdCursor", "getCustomInstructions", "projectDir", "currentDir", "rootDir", "customInstructions", "findRulesFilesRecursively", "dir", "rulesFolderRoot", "ruleRelativePath", "entries", "entry", "entryPath", "stat", "newRulePath", "parseCursorRules", "absolutePath", "exists", "relativePath", "fileContent", "customInstruction", "createCustomInstructionFromMdc", "tryAddCustomInstructions", "customInstructionsContent", "id", "rulesFolders", "rulesFiles", "prevDir", "rulesFolder", "projectRulesDir", "rulesFile", "getUserContext", "gitWorkingDirectory", "repoInfo", "userContext", "f", "os", "userInfo", "makeAsyncIterator", "done", "events", "resolve", "promise", "defer", "r", "read", "item", "write", "event", "end", "countOccurrences", "str", "char", "isAGENTSFile", "filePath", "isBaseImportantFile", "numSlashes", "hasBuildError", "text", "re", "loadWorkspace", "workspaceFile", "resolvedPath", "content", "workspaceConfig", "workingDirectory", "mergeUserMessages", "currentMessage", "newMessage", "DEFAULT_MAX_COMPLETIONS", "keepAlive", "parseAheadBehind", "line", "parts", "ahead", "behind", "mergeEnvironmentVariables", "envVariables", "extraEnvVariables", "merged", "addEnv", "env", "index", "processPushChangesArgs", "opts", "getErrorMessage", "err", "message", "import_node_os", "import_node_fs", "import_prettier", "import_node_events", "import_node_crypto", "import_promises", "NOT_BAD_ERRORS", "NORMAL_STATES", "CodeGenSession", "parseCLIURL", "BashError", "init_codegen", "__esmMin", "init_sentry_release_injection_stub", "init_sync_utils", "init_lib", "init_credentials", "init_track", "init_constants", "init_fetch", "init_mdc_parser", "init_backoff", "init_errors", "init_stream", "init_backup", "init_code_tools", "init_dist", "init_prettier", "init_abort_signal_any", "init_helpers", "init_workspace_path_resolver", "init_acl", "init_command_security", "init_mcp_local", "init_git", "init_parseGitDiff", "init_crypto", "init_feature_flags", "init_normalize_text", "init_dev_server_orchestrator", "#sessionContext", "#abortController", "#setNextMessage", "#scheduledMessage", "#currentMessage", "#sys", "#credentials", "#initialUrl", "#position", "#eventLoopAbortController", "#debug", "#emitter", "EventEmitter", "#mode", "#featureBranch", "#aiBranch", "#lastGitStatus", "#lastMCPStatus", "#gitCommandPromise", "#runningToolCalls", "#privacyMode", "#encryptKey", "#waitingToolFulfilment", "#disposeFunctions", "#startLoopPromise", "#eventLoops", "#lastSuggestedAction", "#sessionOrCompletionId", "#fusionContext", "#initializePromise", "#loadMoreTurnsPromise", "#onGoingArtifacts", "#builtInCustomInstructions", "#workingDirectory", "#gitWorkingDirectory", "#bashWorkingDirectory", "#maxTokens", "#workspace", "#mcpServers", "#localMCPManager", "#isCheckingGitStatus", "#currentGitCommand", "#enabledTools", "#fusionConfig", "#projectId", "#branchName", "#modelOverride", "#dirtyEnvironmentVariables", "#closed", "#lastGitUpdateTime", "#userTurnCreditsUsed", "#hasPlanToApply", "#pendingPromises", "#lastSuccessfulBackupRef", "#pendingFormating", "#terminals", "options", "completionId", "filterDisabledTools", "tools", "tool", "isPrivacyModeEnabled", "getFeatureFlag", "foundGitEnabled", "gitEnabledFolder", "backup", "computeBackupRef", "#canCollapseWorkspace", "newMode", "#emitWaitForInput", "privacyMode", "generateKey", "#initializeSession", "sessionMetadata", "commits", "turn", "lines", "sha", "filteredTurns", "getAll", "addedTurns", "added", "#loadMoreTurns", "firstCompletionId", "#getPrettierConfig", "mockFile", "prettier", "instructions", "#getCustomInstructions", "gitLocation", "#initializeGit", "prettierConfig", "lastTurn", "step", "#checkoutGit", "mcpServers", "loadMCPConfig", "createLocalMCPClientManager", "status", "successfulClients", "s", "commandCtx", "setupStateListener", "state", "devStateListener", "httpServerStateListener", "stdoutListener", "stderrListener", "installStdoutListener", "installStderrListener", "#computeHealthSuggestion", "devServerOrchestrator", "setupState", "hasMergeConflict", "#hasMergeConflict", "devServerCommand", "devServerState", "setupCommand", "devServerOpenPorts", "devServerProxyTarget", "httpServerState", "httpServerStatus", "isHttpFetchError", "badBranch", "isRuntimeHTTPError", "logs", "hasErrorInLogs", "prompt", "level", "actionButtonText", "category", "diff", "gitWorkspace", "truncateLines", "healthStatus", "canAutoApply", "M", "getAndParseGitRepoInfo", "#checkoutIntoBranch", "branchName", "targetBranch", "computeAIBranchName", "currentBranch", "aiBranch", "#getRemoteBranch", "targetCommit", "currentCommitHash", "#setRemoteUrl", "cwd", "currentOriginUrl", "#updateGitUrls", "gitConfigs", "mainRepo", "gitConfigsResult", "fetchGitConfigs", "config", "folderName", "timestamp", "randomId", "zipFileName", "zipFolder", "zipPath", "fs", "runCommand", "isRunningStates", "lastCommitHash", "originalRepoUrl", "currentBackupRef", "forcedFullBackup", "projectId", "featureBranch", "result", "#queueCommand", "backupGitRepo", "#getPushChangesCommand", "forcePush", "commitMode", "remoteBranch", "#formatPendingFiles", "pendingFiles", "formattedContent", "prettierFormat", "pullFirst", "updateRepo", "actor", "refreshRemote", "folder", "command", "#completionFinalize", "remoteBranchPair", "#syncChangesFromBranches", "emitStatus", "branches", "remoteBranches", "allowUnrelatedHistory", "canPush", "fastForward", "uncommittedChanges", "requestRefresh", "allRemoteRefs", "branchesPresentInRemote", "branch", "gitStatus", "args", "subCommand", "gitCommandRequiresValidToken", "timeSinceLastGitUpdate", "MINUTES", "#executeGitCommand", "debug", "devServer", "existingTerminal", "#getTerminals", "t", "ptyLib", "importPty", "shell", "cols", "rows", "pty", "onDataListeners", "onExitListeners", "disposeFns", "onData", "chunk", "cb", "dataSub", "onExit", "exitCode", "fn", "exitSub", "meta", "terminals", "terminalId", "title", "emitTerminals", "savedListeners", "savedOptions", "newTerminal", "listener", "currentContent", "getDotFiles", "globbyPattern", "includePattern", "gitignore", "policy", "allowPatterns", "getAllProjectFiles", "extractListPatterns", "allFiles", "files", "folderPath", "folderFiles", "folderPrefix", "filterFilesByListPatterns", "collectRepoMetrics", "rootPath", "commitHash", "location", "predicate", "revert", "dryRun", "forceReplay", "currentTurnsCount", "targetIndex", "replacements", "gitModeEnabled", "turnStates", "realTargetIndex", "restoreContext", "path", "removedTurns", "targetCompletionId", "currentState", "#replayTurns", "#ensureDevServerRunning", "abortSignal", "scheduledMessage", "track", "lastCompletionId", "#completionFeedback", "revertFiles", "#setState", "newState", "prevState", "timeout", "timeoutId", "onEvent", "toolCall", "resolver", "controller", "#hasChanges", "numAddedLines", "cleanCurrentMessage", "updates", "promises", "key", "#disposeAllTerminals", "uploadGitBackup", "dispose", "needsBackup", "#getGitStatus", "currentCommit", "suggestion", "isSessionDirty", "remoteBranchExists", "fetchOutput", "fetchHeadFilePath", "dotGitDirPath", "git", "initialCommit", "fetchHead", "#hasGeneratingPlaceholder", "steps", "action", "shouldReplay", "onStep", "lastArtifact", "#startEventLoop", "endLoop", "eventLoopSignal", "getCompletionId", "nextMessage", "answer", "newAbortError", "#agentCompletion", "userMessage", "maxCompletions", "loops", "errors", "totalCompletions", "includeUserMessage", "hasChanges", "userInput", "#getUserInput", "shouldContinue", "completions", "filesChanged", "#generateCompletion", "shouldRefresh", "artifacts", "beforeCommit", "uiContextPrompt", "workspace", "endSignalReceived", "streamItem", "openedAction", "newTurn", "#finalizeTurn", "changedFiles", "#applyResults", "commitFailed", "closedAction", "deltaAction", "delta", "commitLines", "#resolveToolCalls", "toolCalls", "input", "call", "toolContext", "filterWorkingDirectory", "filterSecrets", "compilePatterns", "patch", "prevEnvVariables", "resource", "permission", "evaluateAccess", "#getUserPrincipals", "abortResponse", "cleanup", "onAbort", "forceWorkspace", "toolResults", "resolveToolCalls", "isActualUserMessage", "lastUndoState", "user", "hasUrl", "isFirstTurn", "searchResponse", "isImportant", "includeBaseFiles", "leastImportantSet", "importantFiles", "filterNonImportantFiles", "importantSet", "normalizeRelativePath", "projectFiles", "importance", "isSmallEnough", "changedDiffPrompt", "changesReport", "doneEvent", "actions", "isUpdate", "oldContentString", "canReadFile", "diffLines", "d", "acc", "afterCommit", "findString", "#shouldIgnoreFileForChangesReport", "lowerPath", "ignoredPaths", "ignoredExtensions", "ignoredPath", "filteredFilePaths", "out", "intro", "truncateString", "#gitStatusCommand", "results", "#isSingleCurrentDirWorkspace", "resolveWorkspacePath", "absolutePathToWorkspaceUrl", "column", "skipAclCheck", "aclResult", "workspaceFolder", "dirPath", "prefix", "stats", "turnStats", "turnAcc", "numberOfContextLines", "includeFilesOnly", "filePaths", "hasOriginRemote", "hasRemoteBranch", "diffTarget", "remoteBranchName", "diffArgs", "parseGitDiffToApplyActions", "mode", "defaultBranchMatch", "parentBranchName", "parsed", "code", "stdout", "stderr", "isUnicodeSupported", "env", "process", "TERM", "TERM_PROGRAM", "import_node_process", "init_is_unicode_supported", "__esmMin", "init_sentry_release_injection_stub", "import_picocolors", "import_sisteransi", "spinner", "unicode", "s", "S_BAR", "S_STEP_CANCEL", "S_STEP_ERROR", "S_STEP_SUBMIT", "init_spinner", "__esmMin", "init_sentry_release_injection_stub", "init_is_unicode_supported", "frames", "delay", "loop", "isSpinnerActive", "_message", "_extra", "_lastMessage", "handleExit", "code", "msg", "stop", "errorEventHandler", "err", "origin", "signalEventHandler", "registerHooks", "clearHooks", "start", "color", "frameIndex", "dotsTimer", "frame", "loadingDots", "toWrite", "step", "isUnicodeSupported", "c", "fallback", "openBrowser", "href", "open", "init_open", "__esmMin", "init_sentry_release_injection_stub", "readFile", "sys", "filePath", "optionName", "resolvedPath", "content", "M", "getHttpsServerOptions", "args", "fusionConfig", "keyPath", "certPath", "caPath", "options", "filtered", "_", "value", "getFusionConfig", "workingDirectory", "isLocal", "loadedConfig", "err", "fusionConfigPath", "getFusionConfigPath", "command", "port", "installCommand", "serverUrl", "isInteractive", "urlOrigin", "url", "disabledToolsArray", "tool", "textResult", "he", "pD", "xe", "numberResult", "num", "saveFusionConfig", "omit", "trackConfigData", "repoUrlWithWriteAccess", "folder", "repoUrl", "EXAMPLE_OR_STARTER_REPOS", "repo", "import_process", "init_config", "__esmMin", "init_sentry_release_injection_stub", "init_src", "init_dist", "tryPaths", "path", "configPath", "obj", "removePropNames", "result", "propName", "getAllDesignSystems", "credentials", "opts", "url", "apiAirV2Host", "response", "safeFetch", "designSystems", "ds", "Sentry", "import_path", "AGENT_FILE", "ICONS_FILE", "TOKENS_FILE", "REPO_INDEXING_FOLDER", "SPACE_SCOPE", "ORGANIZATION_SCOPE", "GLOBAL_SCOPE", "promptForDesignSystemScope", "parseDesignSystem", "storeComponentDocs", "runCodeGen", "getDesignSystemByName", "getDesignSystemByNameAndScope", "addDesignSystem", "updateDesignSystem", "checkRepoIndexingFolder", "init_repo_indexing_utils", "__esmMin", "init_sentry_release_injection_stub", "init_fs", "init_codegen", "init_credentials", "init_constants", "init_fetch", "init_errors", "init_dist", "userSettings", "isAdminInOrganization", "isBuilderAdmin", "scopeOptions", "scope", "ve", "pD", "sys", "designSystemPackage", "appRootDir", "packageJson", "findPackageJson", "name", "version", "designSystemPackageVersion", "error", "body", "debug", "errorText", "sessionId", "message", "workspaceConfig", "metadata", "maxTokens", "retriesAllowed", "writtenContent", "customSys", "filePath", "content", "fusionConfig", "codegen", "CodeGenSession", "event", "id", "PrivateError", "designSystemName", "errorMessage", "repoIndexingPath", "file", "askInteractiveQuestions", "codegen", "defaultMessage", "state", "lastUndoState", "placeholder", "integration", "he", "value", "pD", "whatToDoNext", "ve", "userPrompt", "files", "M", "file", "visibleLength", "text", "ansiRegex", "boxAscii", "color", "ident", "maxLines", "terminalWidth", "maxWidth", "contentWidth", "lines", "isTruncated", "isTruncatedFromTop", "numLines", "line", "slicePos", "visibleChars", "horizontalBorder", "top", "bottom", "formattedLines", "rightPadding", "truncationMessage", "getFeedbackFormUrl", "sessionId", "spaceId", "FORM_SHORT_URL", "SESSION_ID_PARAM", "SPACE_ID_PARAM", "url", "printSessionId", "printFeedbackText", "nextUrl", "Se", "feedbackUrl", "formatUsage", "total", "limit", "percentage", "barLength", "filledLength", "emptyLength", "filled", "empty", "formattedTotal", "formattedLimit", "formatChangesSummary", "results", "r", "addedBox", "removedBox", "checkProjectRoot", "sys", "interactive", "cwdDir", "allFiles", "getAllProjectFiles", "nonRootPackageJsons", "packageJson", "findPackageJson", "isIosProject", "isAndroidProject", "track", "ye", "exit", "nonRootTsConfigs", "foundMultiplePackageJsons", "getUserContext", "repoInfo", "userContext", "f", "os", "userInfo", "isTTY", "formatFileSize", "size", "import_picocolors", "import_node_os", "import_node_readline", "runCodeCommand", "runCodeGen", "cancelMessage", "init_code", "__esmMin", "init_sentry_release_injection_stub", "init_sync_utils", "init_dist", "init_credentials", "init_track", "init_help", "init_fs", "init_version", "init_src", "init_codegen", "init_spinner", "init_exit", "init_open", "init_config", "init_repo_indexing_utils", "subCommand", "args", "printHelp", "Ie", "pkgVersion", "credentials", "getCredentials", "workspaceConfig", "workingDirectory", "result", "loadWorkspace", "fusionConfig", "getFusionConfig", "designSystems", "getAllDesignSystems", "allDesignSystems", "ds", "invalidDesignSystems", "dsName", "spaceOrOrgDesignSystems", "designSystemsSelected", "fe", "xe", "shouldSave", "saveFusionConfig", "CodeGenSession", "cliArgPrompt", "handleKeypress", "_", "key", "rl", "startCapture", "stopCapture", "readline", "s", "textEmitter", "deltaAccumulator", "lastTitle", "event", "makeAsyncIterator", "x", "spinner", "resolve", "answer", "getContentText", "stopReasonMessage", "openBrowser", "filterDiagnostic", "c", "ts", "init_incremental_tsc", "__esmMin", "init_sentry_release_injection_stub", "parseFile", "sys", "sourceFile", "typeChecker", "figmaBuilderLinks", "nodes", "fileLoc", "node", "isFigmaMapperCall", "link", "parseCallExpression", "line", "character", "arg", "ts", "properties", "figmaKey", "figmaComponentName", "inputMapper", "originalInputMapper", "builderName", "figmaName", "exportType", "importName", "importPath", "figmaUrl", "meta", "name", "extractFigmaComponentName", "prop", "initializer", "property", "element", "importObj", "propName", "getExportStatement", "identifier", "declaration", "importDeclaration", "findParentImportDeclaration", "binding", "visitor", "found", "a", "isCapitalized", "match", "type", "transpileInputMapper", "extractedImports", "extractImports", "metaImports", "structuredImports", "stringImports", "importItem", "current", "FIGMA_CONNECT_CALL", "findAllMappingFiles", "skipFolders", "file", "isMapperFile", "componentNameMatch", "setPublicKey", "publicKey", "devTools", "ensureFigmaImportPage", "createDevTools", "e", "error", "prettyPrintDiagnosticsWithContext", "diagnostics", "diagnosticHost", "findMappingsFromFiles", "mappingFiles", "typeCheck", "mapperFiles", "totalDiagnostics", "tsProgram", "createTsProgram", "fatalDiagnostics", "filterDiagnostic", "d", "M", "exit", "allDiagnostics", "fileName", "links", "figmaLinksToResolve", "l", "filterMappings", "seenFigmaKeys", "filteredLinks", "skippedLinks", "isDuplicate", "filteredLinksMessage", "text", "getFigmaComponentName", "skippedLinksMessage", "imports", "statement", "namedBindings", "import_typescript", "import_picocolors", "runFigmaPublish", "publishFigmaMappings", "init_figma_publish", "__esmMin", "init_sentry_release_injection_stub", "init_credentials", "init_dist", "init_typescript", "init_core", "init_emphasize", "init_exit", "init_constants", "init_utils", "init_track", "init_fetch", "init_version", "init_figma_component", "init_figma_utils", "init_code", "init_incremental_tsc", "args", "userContext", "getUserContext", "track", "interactive", "xe", "ciMode", "isCI", "Ie", "pkgVersion", "checkProjectRoot", "finalLinks", "finalSkippedLinks", "mappingResults", "privateKey", "spaceId", "userId", "spaceName", "figmaAuth", "getCredentials", "inPlaceResolveFigmaURLs", "extraContext", "warningMessage", "confirmPublish", "ye", "pD", "hasRelativeImports", "relativeImports", "i", "ve", "s", "Y", "repoInfo", "id", "highlight", "createEmphasize", "grammars", "success", "command", "Se", "_sys", "data", "url", "apiAirV2Host", "json", "safeFetch", "getFigmaAuth", "sys", "randomState", "createAuthServer", "DEFAULT_FIGMA_PORT", "port", "req", "res", "resolve", "reject", "url", "code", "state", "clientId", "clientSecret", "SECRET", "authHeader", "data", "safeFetch", "getBuilderCodegenUsage", "builderPublicKey", "builderPrivateKey", "getBuilderAuth", "preferSpaceId", "host", "DEFAULT_BUILDER_PORT", "BUILDER_AUTH_RETURN_PATH", "authUrl", "returnUrl", "PLATFORM_QS", "NODE_VERSION_QS", "frameworks", "FRAMEWORK_QS", "storeCredentials", "credentials", "configDir", "filePath", "existingCredentials", "loadCredentials", "gitignorePath", "gitignoreEntry", "gitignoreContent", "newPath", "locations", "filepath", "e", "clearCredentials", "removedAny", "opts", "s", "promise", "re", "rej", "currentPort", "attempt", "server", "closeServer", "clearHooks", "err", "tryListen", "resolvePort", "rejectListen", "errorHandler", "MAX_PORT_ATTEMPTS", "M", "addressInfo", "href", "spinner", "openBrowser", "result", "printHelp", "import_http", "import_node_os", "import_node_path", "import_node_fs", "import_picocolors", "import_crypto", "isCI", "readCredentials", "getCredentials", "init_credentials", "__esmMin", "init_sentry_release_injection_stub", "init_constants", "init_dist", "init_figma_publish", "init_track", "init_fetch", "init_spinner", "init_help", "init_fs", "init_open", "init_exit", "args", "storedCredentials", "spaceName", "userId", "figmaPersonalToken", "figmaAuth", "timestamp", "ve", "exit", "privateKey", "spaceId", "name", "uId", "setUserId", "findPackageJson", "setPublicKey", "require_mod", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "peq", "myers_32", "a", "b", "n", "m", "lst", "pv", "mv", "sc", "i", "eq", "xv", "myers_x", "mhc", "phc", "hsize", "vsize", "j", "mv_1", "pv_1", "start_1", "vlen_1", "k", "pb", "mb", "xh", "ph", "mh", "start", "vlen", "score", "distance", "tmp", "closest", "str", "arr", "min_distance", "min_index", "dist", "require_depd", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "relative", "depd", "basePath", "containsNamespace", "str", "namespace", "vals", "ns", "val", "convertDataDescriptorToAccessor", "obj", "prop", "message", "descriptor", "value", "createArgumentsString", "arity", "i", "createStackString", "stack", "getStack", "site", "callSiteLocation", "file", "deprecate", "log", "isignored", "istraced", "wrapfunction", "wrapproperty", "eehaslisteners", "emitter", "type", "count", "haslisteners", "caller", "callFile", "callSite", "depSite", "seen", "key", "msg", "defaultMessage", "err", "DeprecationError", "format", "formatColor", "formatPlain", "output", "line", "colm", "funcName", "formatLocation", "context", "typeName", "timestamp", "formatted", "limit", "prep", "prepareObjectStackTrace", "fn", "args", "deprecatedfn", "get", "set", "error", "stackString", "require_bytes", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "format", "parse", "formatThousandsRegExp", "formatDecimalsRegExp", "map", "parseRegExp", "value", "options", "mag", "thousandsSeparator", "unitSeparator", "decimalPlaces", "fixedDecimals", "unit", "val", "str", "s", "i", "results", "floatValue", "require_content_type", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "PARAM_REGEXP", "TEXT_REGEXP", "TOKEN_REGEXP", "QESC_REGEXP", "QUOTE_REGEXP", "TYPE_REGEXP", "format", "parse", "obj", "parameters", "type", "string", "param", "params", "i", "qstring", "header", "getcontenttype", "index", "ContentType", "key", "match", "value", "val", "str", "require_setprototypeof", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "setProtoOf", "mixinProperties", "obj", "proto", "prop", "require_codes", "__commonJSMin", "exports", "module", "require_statuses", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "codes", "status", "createMessageToStatusCodeMap", "createStatusCodeList", "map", "code", "message", "getStatusCode", "msg", "getStatusMessage", "n", "require_inherits_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "ctor", "superCtor", "TempCtor", "require_inherits", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "require_toidentifier", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "toIdentifier", "str", "token", "require_http_errors", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "deprecate", "setPrototypeOf", "statuses", "inherits", "toIdentifier", "createError", "createHttpErrorConstructor", "createIsHttpErrorFunction", "populateConstructorExports", "codeClass", "status", "err", "msg", "props", "arg", "type", "HttpError", "key", "createClientErrorConstructor", "name", "code", "className", "toClassName", "ClientError", "message", "nameFunc", "val", "createServerErrorConstructor", "ServerError", "func", "desc", "codes", "CodeError", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "plural", "name", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createDebug", "coerce", "disable", "enable", "enabled", "prevTime", "selectColor", "namespace", "hash", "i", "debug", "self", "curr", "ms", "args", "index", "match", "format", "formatter", "val", "logFn", "namespaces", "split", "len", "name", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "log", "formatArgs", "save", "load", "useColors", "localstorage", "v", "err", "args", "c", "index", "lastC", "match", "namespaces", "r", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "key", "obj", "prop", "_", "k", "val", "fd", "stream", "createWritableStdioStream", "v", "str", "args", "name", "c", "prefix", "namespaces", "tty_wrap", "fs", "net", "debug", "keys", "i", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_destroy", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "EventEmitter", "ReadStream", "Stream", "Zlib", "destroy", "stream", "suppress", "isFsReadStream", "destroyReadStream", "isZlibStream", "destroyZlibStream", "hasDestroy", "isEventEmitter", "noop", "onOpenClose", "closeZlibStream", "prop", "onDrainClearBinding", "val", "require_safer", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "buffer", "Buffer", "safer", "key", "Safer", "value", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_bom_handling", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "BOMChar", "PrependBOMWrapper", "encoder", "options", "str", "StripBOMWrapper", "decoder", "buf", "res", "require_internal", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "InternalCodec", "codecOptions", "iconv", "InternalEncoderBase64", "InternalEncoderCesu8", "InternalDecoderCesu8", "InternalEncoder", "InternalDecoder", "StringDecoder", "options", "codec", "str", "completeQuads", "buf", "bufIdx", "i", "charCode", "acc", "contBytes", "accBytes", "res", "curByte", "require_utf16", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "Utf16BECodec", "Utf16BEEncoder", "Utf16BEDecoder", "str", "buf", "i", "tmp", "buf2", "j", "Utf16Codec", "codecOptions", "iconv", "Utf16Encoder", "Utf16Decoder", "options", "codec", "encoding", "detectEncoding", "res", "trail", "defaultEncoding", "enc", "asciiCharsLE", "asciiCharsBE", "_len", "require_utf7", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "Utf7Codec", "codecOptions", "iconv", "Utf7Encoder", "Utf7Decoder", "nonDirectChars", "options", "codec", "str", "chunk", "base64Regex", "base64Chars", "i", "plusChar", "minusChar", "andChar", "buf", "res", "lastI", "inBase64", "base64Accum", "b64str", "canBeDecoded", "Utf7IMAPCodec", "Utf7IMAPEncoder", "Utf7IMAPDecoder", "base64AccumIdx", "bufIdx", "uChar", "base64IMAPChars", "require_sbcs_codec", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "SBCSCodec", "codecOptions", "iconv", "asciiString", "i", "encodeBuf", "SBCSEncoder", "SBCSDecoder", "options", "codec", "str", "buf", "decodeBuf", "newBuf", "idx1", "idx2", "require_sbcs_data", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_sbcs_data_generated", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_dbcs_codec", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "DBCSCodec", "UNASSIGNED", "GB18030_CODE", "SEQ_START", "NODE_START", "UNASSIGNED_NODE", "DEF_CHAR", "i", "codecOptions", "iconv", "mappingTable", "skipEncodeChars", "val", "j", "uChar", "thirdByteNodeIdx", "thirdByteNode", "fourthByteNodeIdx", "fourthByteNode", "secondByteNodeIdx", "secondByteNode", "DBCSEncoder", "DBCSDecoder", "addr", "bytes", "node", "chunk", "curAddr", "writeTable", "k", "part", "l", "code", "codeTrail", "len", "seq", "m", "charCode", "uCode", "high", "dbcsCode", "bucket", "low", "oldVal", "nodeIdx", "prefix", "mbCode", "options", "codec", "str", "newBuf", "leadSurrogate", "seqObj", "nextChar", "resCode", "subtable", "idx", "findIdx", "buf", "prevBuf", "prevBufOffset", "seqStart", "curByte", "curSeq", "ptr", "uCodeLead", "ret", "table", "r", "mid", "require_shiftjis", "__commonJSMin", "exports", "module", "require_eucjp", "__commonJSMin", "exports", "module", "require_cp936", "__commonJSMin", "exports", "module", "require_gbk_added", "__commonJSMin", "exports", "module", "require_gb18030_ranges", "__commonJSMin", "exports", "module", "require_cp949", "__commonJSMin", "exports", "module", "require_cp950", "__commonJSMin", "exports", "module", "require_big5_added", "__commonJSMin", "exports", "module", "require_dbcs_data", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_encodings", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "modules", "i", "enc", "require_streams", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "Transform", "iconv", "encoding", "options", "IconvLiteEncoderStream", "IconvLiteDecoderStream", "conv", "chunk", "done", "res", "e", "cb", "chunks", "require_extend_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "iconv", "original", "nodeNativeEncodings", "enc", "SlowBuffer", "encoding", "start", "end", "string", "offset", "length", "swap", "remaining", "buf", "str", "_offset", "_length", "_encoding", "Readable", "options", "require_lib", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "bomHandling", "iconv", "str", "encoding", "options", "encoder", "res", "trail", "buf", "decoder", "enc", "codecOptions", "codec", "codecDef", "key", "nodeVer", "nodeVerArr", "require_unpipe", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "unpipe", "hasPipeDataListeners", "stream", "listeners", "i", "listener", "require_raw_body", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "asyncHooks", "tryRequireAsyncHooks", "bytes", "createError", "iconv", "unpipe", "getRawBody", "ICONV_ENCODING_MESSAGE_REGEXP", "getDecoder", "encoding", "stream", "options", "callback", "done", "opts", "limit", "length", "readStream", "wrap", "resolve", "reject", "err", "buf", "halt", "complete", "sync", "state", "received", "decoder", "buffer", "onAborted", "cleanup", "onData", "onEnd", "args", "i", "invokeCallback", "chunk", "string", "fn", "res", "require_ee_first", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "first", "stuff", "done", "cleanups", "i", "arr", "ee", "j", "event", "fn", "listener", "callback", "cleanup", "x", "thunk", "arg1", "args", "err", "require_on_finished", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "onFinished", "isFinished", "asyncHooks", "tryRequireAsyncHooks", "first", "defer", "fn", "msg", "listener", "attachListener", "wrap", "socket", "attachFinishedListener", "callback", "eeMsg", "eeSocket", "finished", "onFinish", "error", "onSocket", "patchAssignSocket", "attached", "createListener", "err", "queue", "res", "assignSocket", "require_read", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createError", "destroy", "getBody", "iconv", "onFinished", "unpipe", "zlib", "read", "req", "res", "next", "parse", "debug", "options", "length", "opts", "stream", "encoding", "verify", "contentstream", "err", "error", "body", "_error", "dump", "str", "inflate", "callback", "require_media_typer", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "paramRegExp", "textRegExp", "tokenRegExp", "qescRegExp", "quoteRegExp", "subtypeNameRegExp", "typeNameRegExp", "typeRegExp", "format", "parse", "obj", "parameters", "subtype", "suffix", "type", "string", "param", "params", "i", "qstring", "getcontenttype", "index", "key", "match", "splitType", "value", "val", "str", "require_db", "__commonJSMin", "exports", "module", "require_mime_db", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_mime_types", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "db", "extname", "EXTRACT_TYPE_REGEXP", "TEXT_TYPE_REGEXP", "charset", "contentType", "extension", "lookup", "populateMaps", "type", "match", "mime", "str", "exts", "path", "extensions", "types", "preference", "i", "from", "to", "require_type_is", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "typer", "mime", "typeofrequest", "typeis", "hasbody", "normalize", "mimeMatch", "value", "types_", "i", "types", "val", "tryNormalizeType", "type", "req", "expected", "actual", "actualParts", "expectedParts", "normalizeType", "require_json", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "contentType", "createError", "debug", "read", "typeis", "json", "FIRST_CHAR_REGEXP", "JSON_SYNTAX_CHAR", "JSON_SYNTAX_REGEXP", "options", "opts", "limit", "inflate", "reviver", "strict", "type", "verify", "shouldParse", "typeChecker", "parse", "body", "first", "firstchar", "createStrictSyntaxError", "e", "normalizeJsonSyntaxError", "req", "res", "next", "charset", "getCharset", "str", "char", "index", "partial", "placeholder", "match", "error", "obj", "keys", "i", "key", "require_raw", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "debug", "read", "typeis", "raw", "options", "opts", "inflate", "limit", "type", "verify", "shouldParse", "typeChecker", "parse", "buf", "req", "res", "next", "require_text", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "contentType", "debug", "read", "typeis", "text", "options", "opts", "defaultCharset", "inflate", "limit", "type", "verify", "shouldParse", "typeChecker", "parse", "buf", "req", "res", "next", "charset", "getCharset", "require_type", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_util_inspect", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_object_inspect", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "hasMap", "mapSizeDescriptor", "mapSize", "mapForEach", "hasSet", "setSizeDescriptor", "setSize", "setForEach", "hasWeakMap", "weakMapHas", "hasWeakSet", "weakSetHas", "hasWeakRef", "weakRefDeref", "booleanValueOf", "objectToString", "functionToString", "$match", "$slice", "$replace", "$toUpperCase", "$toLowerCase", "$test", "$concat", "$join", "$arrSlice", "$floor", "bigIntValueOf", "gOPS", "symToString", "hasShammedSymbols", "toStringTag", "isEnumerable", "gPO", "O", "addNumericSeparator", "num", "str", "sepRegex", "int", "intStr", "dec", "utilInspect", "inspectCustom", "inspectSymbol", "isSymbol", "quotes", "quoteREs", "inspect_", "obj", "options", "depth", "seen", "opts", "has", "customInspect", "numericSeparator", "inspectString", "bigIntStr", "maxDepth", "isArray", "indent", "getIndent", "indexOf", "inspect", "value", "from", "noIndent", "newOpts", "isRegExp", "name", "nameOf", "keys", "arrObjKeys", "symString", "markBoxed", "isElement", "s", "attrs", "i", "wrapQuotes", "quote", "xs", "singleLineValues", "indentedJoin", "isError", "parts", "isMap", "mapParts", "key", "collectionOf", "isSet", "setParts", "isWeakMap", "weakCollectionOf", "isWeakSet", "isWeakRef", "isNumber", "isBigInt", "isBoolean", "isString", "isDate", "ys", "isPlainObject", "protoTag", "stringTag", "toStr", "constructorTag", "tag", "defaultStyle", "style", "quoteChar", "canTrustToString", "hasOwn", "f", "m", "x", "l", "remaining", "trailer", "quoteRE", "lowbyte", "c", "n", "type", "size", "entries", "joinedEntries", "baseIndent", "lineJoiner", "isArr", "syms", "symMap", "k", "j", "require_side_channel_list", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "inspect", "$TypeError", "listGetNode", "list", "key", "isDelete", "prev", "curr", "listGet", "objects", "node", "listSet", "value", "listHas", "listDelete", "$o", "channel", "root", "deletedNode", "require_es_object_atoms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_es_errors", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_eval", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_range", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_ref", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_syntax", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_uri", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_abs", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_floor", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_max", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_min", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_pow", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_round", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_isNaN", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "a", "require_sign", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$isNaN", "number", "require_gOPD", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_gopd", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$gOPD", "require_es_define_property", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$defineProperty", "require_shams", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "obj", "sym", "symObj", "symVal", "_", "syms", "descriptor", "require_has_symbols", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "origSymbol", "hasSymbolSham", "require_Reflect_getPrototypeOf", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_Object_getPrototypeOf", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$Object", "require_implementation", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "ERROR_MESSAGE", "toStr", "max", "funcType", "concatty", "a", "b", "arr", "j", "slicy", "arrLike", "offset", "joiny", "joiner", "str", "i", "that", "target", "args", "bound", "binder", "result", "boundLength", "boundArgs", "Empty", "require_function_bind", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "implementation", "require_functionCall", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_functionApply", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_reflectApply", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_actualApply", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bind", "$apply", "$call", "$reflectApply", "require_call_bind_apply_helpers", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bind", "$TypeError", "$call", "$actualApply", "args", "require_get", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "callBind", "gOPD", "hasProtoAccessor", "e", "desc", "$Object", "$getPrototypeOf", "value", "require_get_proto", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "reflectGetProto", "originalGetProto", "getDunderProto", "O", "require_hasown", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "call", "$hasOwn", "bind", "require_get_intrinsic", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "undefined", "$Object", "$Error", "$EvalError", "$RangeError", "$ReferenceError", "$SyntaxError", "$TypeError", "$URIError", "abs", "floor", "max", "min", "pow", "round", "sign", "$Function", "getEvalledConstructor", "expressionSyntax", "$gOPD", "$defineProperty", "throwTypeError", "ThrowTypeError", "hasSymbols", "getProto", "$ObjectGPO", "$ReflectGPO", "$apply", "$call", "needsEval", "TypedArray", "INTRINSICS", "e", "errorProto", "doEval", "name", "value", "fn", "gen", "LEGACY_ALIASES", "bind", "hasOwn", "$concat", "$spliceApply", "$replace", "$strSlice", "$exec", "rePropName", "reEscapeChar", "stringToPath", "string", "first", "last", "result", "match", "number", "quote", "subString", "getBaseIntrinsic", "allowMissing", "intrinsicName", "alias", "parts", "intrinsicBaseName", "intrinsic", "intrinsicRealName", "skipFurtherCaching", "i", "isOwn", "part", "desc", "require_call_bound", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "GetIntrinsic", "callBindBasic", "$indexOf", "name", "allowMissing", "intrinsic", "require_side_channel_map", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "GetIntrinsic", "callBound", "inspect", "$TypeError", "$Map", "$mapGet", "$mapSet", "$mapHas", "$mapDelete", "$mapSize", "$m", "channel", "key", "result", "value", "require_side_channel_weakmap", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "GetIntrinsic", "callBound", "inspect", "getSideChannelMap", "$TypeError", "$WeakMap", "$weakMapGet", "$weakMapSet", "$weakMapHas", "$weakMapDelete", "$wm", "$m", "channel", "key", "value", "require_side_channel", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$TypeError", "inspect", "getSideChannelList", "getSideChannelMap", "getSideChannelWeakMap", "makeChannel", "$channelData", "channel", "key", "value", "require_formats", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "replace", "percentTwenties", "Format", "value", "require_utils", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "formats", "has", "isArray", "hexTable", "array", "i", "compactQueue", "queue", "item", "obj", "compacted", "j", "arrayToObject", "source", "options", "merge", "target", "mergeTarget", "targetItem", "acc", "key", "value", "assign", "decode", "str", "decoder", "charset", "strWithoutPlus", "limit", "encode", "defaultEncoder", "kind", "format", "string", "$0", "out", "segment", "arr", "c", "compact", "refs", "keys", "val", "isRegExp", "isBuffer", "combine", "a", "b", "maybeMap", "fn", "mapped", "require_stringify", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "getSideChannel", "utils", "formats", "has", "arrayPrefixGenerators", "prefix", "key", "isArray", "push", "pushToArray", "arr", "valueOrArray", "toISO", "defaultFormat", "defaults", "date", "isNonNullishPrimitive", "v", "sentinel", "stringify", "object", "generateArrayPrefix", "commaRoundTrip", "allowEmptyArrays", "strictNullHandling", "skipNulls", "encodeDotInKeys", "encoder", "filter", "sort", "allowDots", "serializeDate", "format", "formatter", "encodeValuesOnly", "charset", "sideChannel", "obj", "tmpSc", "step", "findFlag", "pos", "value", "keyValue", "values", "objKeys", "keys", "encodedPrefix", "adjustedPrefix", "j", "encodedKey", "keyPrefix", "valueSideChannel", "normalizeStringifyOptions", "opts", "arrayFormat", "options", "i", "joined", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "utils", "has", "isArray", "defaults", "interpretNumericEntities", "str", "$0", "numberStr", "parseArrayValue", "val", "options", "isoSentinel", "charsetSentinel", "parseValues", "obj", "cleanStr", "limit", "parts", "skipIndex", "i", "charset", "part", "bracketEqualsPos", "pos", "key", "encodedVal", "existing", "parseObject", "chain", "valuesParsed", "leaf", "root", "cleanRoot", "decodedRoot", "index", "parseKeys", "givenKey", "brackets", "child", "segment", "parent", "keys", "normalizeParseOptions", "opts", "duplicates", "allowDots", "tempObj", "newObj", "require_lib", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "stringify", "parse", "formats", "require_urlencoded", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "contentType", "createError", "debug", "deprecate", "read", "typeis", "urlencoded", "parsers", "options", "opts", "extended", "inflate", "limit", "type", "verify", "depth", "queryparse", "extendedparser", "simpleparser", "shouldParse", "typeChecker", "parse", "body", "req", "res", "next", "charset", "getCharset", "parameterLimit", "parser", "paramCount", "parameterCount", "arrayLimit", "err", "count", "index", "name", "mod", "require_body_parser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "deprecate", "parsers", "bodyParser", "createParserGetter", "options", "opts", "_urlencoded", "_json", "req", "res", "next", "err", "name", "loadParser", "parserName", "parser", "require_merge_descriptors", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "merge", "hasOwnProperty", "dest", "src", "redefine", "name", "descriptor", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "plural", "name", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createDebug", "coerce", "disable", "enable", "enabled", "prevTime", "selectColor", "namespace", "hash", "i", "debug", "self", "curr", "ms", "args", "index", "match", "format", "formatter", "val", "logFn", "namespaces", "split", "len", "name", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "log", "formatArgs", "save", "load", "useColors", "localstorage", "v", "err", "args", "c", "index", "lastC", "match", "namespaces", "r", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "key", "obj", "prop", "_", "k", "val", "fd", "stream", "createWritableStdioStream", "v", "str", "args", "name", "c", "prefix", "namespaces", "tty_wrap", "fs", "net", "debug", "keys", "i", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_encodeurl", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "encodeUrl", "ENCODE_CHARS_REGEXP", "UNMATCHED_SURROGATE_PAIR_REGEXP", "UNMATCHED_SURROGATE_PAIR_REPLACE", "url", "require_escape_html", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "matchHtmlRegExp", "escapeHtml", "string", "str", "match", "escape", "html", "index", "lastIndex", "require_parseurl", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "url", "parse", "Url", "parseurl", "originalurl", "req", "parsed", "fresh", "fastparse", "str", "pathname", "query", "search", "parsedUrl", "require_finalhandler", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "debug", "encodeUrl", "escapeHtml", "onFinished", "parseUrl", "statuses", "unpipe", "DOUBLE_SPACE_REGEXP", "NEWLINE_REGEXP", "defer", "fn", "isFinished", "createHtmlDocument", "message", "body", "finalhandler", "req", "res", "options", "opts", "env", "onerror", "err", "headers", "msg", "status", "headersSent", "getErrorStatusCode", "getResponseStatusCode", "getErrorHeaders", "getErrorMessage", "getResourceName", "send", "keys", "i", "key", "write", "setHeaders", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "plural", "name", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createDebug", "coerce", "disable", "enable", "enabled", "prevTime", "selectColor", "namespace", "hash", "i", "debug", "self", "curr", "ms", "args", "index", "match", "format", "formatter", "val", "logFn", "namespaces", "split", "len", "name", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "log", "formatArgs", "save", "load", "useColors", "localstorage", "v", "err", "args", "c", "index", "lastC", "match", "namespaces", "r", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "key", "obj", "prop", "_", "k", "val", "fd", "stream", "createWritableStdioStream", "v", "str", "args", "name", "c", "prefix", "namespaces", "tty_wrap", "fs", "net", "debug", "keys", "i", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_array_flatten", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "arrayFlatten", "flattenWithDepth", "array", "result", "depth", "i", "value", "flattenForever", "require_path_to_regexp", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "pathToRegexp", "MATCHING_GROUP_REGEXP", "path", "keys", "options", "strict", "end", "flags", "lookahead", "extraOffset", "keysOffset", "i", "name", "pos", "backtrack", "value", "match", "slash", "format", "key", "capture", "star", "optional", "offset", "m", "result", "require_layer", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "pathRegexp", "debug", "hasOwnProperty", "Layer", "path", "options", "fn", "opts", "error", "req", "res", "next", "err", "match", "decode_param", "keys", "params", "i", "key", "prop", "val", "require_methods", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "http", "getCurrentNodeMethods", "getBasicNodeMethods", "method", "require_route", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "debug", "flatten", "Layer", "methods", "slice", "toString", "Route", "path", "method", "name", "i", "req", "res", "done", "idx", "stack", "sync", "next", "err", "layer", "handles", "handle", "type", "msg", "require_utils_merge", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "a", "b", "key", "require_router", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Route", "Layer", "methods", "mixin", "debug", "deprecate", "flatten", "parseUrl", "setPrototypeOf", "objectRegExp", "slice", "toString", "proto", "options", "opts", "router", "req", "res", "next", "name", "fn", "params", "len", "ret", "i", "out", "self", "idx", "protohost", "getProtohost", "removed", "slashAdded", "sync", "paramcalled", "stack", "parentParams", "parentUrl", "done", "restore", "wrap", "old", "err", "sendOptionsResponse", "layerError", "path", "getPathname", "layer", "match", "route", "matchLayer", "method", "has_method", "appendMethods", "mergeParams", "layerPath", "trim_prefix", "c", "called", "keys", "paramIndex", "key", "paramVal", "paramCallbacks", "paramCalled", "param", "paramCallback", "e", "offset", "arg", "callbacks", "gettype", "list", "addition", "url", "searchIndex", "pathLength", "fqdnIndex", "obj", "type", "parent", "o", "props", "vals", "body", "args", "require_init", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "setPrototypeOf", "app", "req", "res", "next", "require_query", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "merge", "parseUrl", "qs", "options", "opts", "queryparse", "req", "res", "next", "val", "require_view", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "debug", "path", "fs", "dirname", "basename", "extname", "join", "resolve", "View", "name", "options", "opts", "fileName", "mod", "fn", "roots", "root", "loc", "dir", "file", "callback", "ext", "stat", "tryStat", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_content_disposition", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "contentDisposition", "parse", "basename", "Buffer", "ENCODE_URL_ATTR_CHAR_REGEXP", "HEX_ESCAPE_REGEXP", "HEX_ESCAPE_REPLACE_REGEXP", "NON_LATIN1_REGEXP", "QESC_REGEXP", "QUOTE_REGEXP", "PARAM_REGEXP", "TEXT_REGEXP", "TOKEN_REGEXP", "EXT_VALUE_REGEXP", "DISPOSITION_TYPE_REGEXP", "filename", "options", "opts", "type", "params", "createparams", "format", "ContentDisposition", "fallback", "name", "isQuotedString", "fallbackName", "getlatin1", "hasFallback", "obj", "parameters", "string", "param", "i", "val", "ustring", "qstring", "decodefield", "str", "match", "charset", "encoded", "value", "binary", "pdecode", "index", "key", "names", "hex", "pencode", "char", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "plural", "name", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createDebug", "coerce", "disable", "enable", "enabled", "prevTime", "selectColor", "namespace", "hash", "i", "debug", "self", "curr", "ms", "args", "index", "match", "format", "formatter", "val", "logFn", "namespaces", "split", "len", "name", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "log", "formatArgs", "save", "load", "useColors", "localstorage", "v", "err", "args", "c", "index", "lastC", "match", "namespaces", "r", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "key", "obj", "prop", "_", "k", "val", "fd", "stream", "createWritableStdioStream", "v", "str", "args", "name", "c", "prefix", "namespaces", "tty_wrap", "fs", "net", "debug", "keys", "i", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_encodeurl", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "encodeUrl", "ENCODE_CHARS_REGEXP", "UNMATCHED_SURROGATE_PAIR_REGEXP", "UNMATCHED_SURROGATE_PAIR_REPLACE", "url", "require_etag", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "etag", "crypto", "Stats", "toString", "entitytag", "entity", "hash", "len", "options", "isStats", "isstats", "weak", "tag", "stattag", "obj", "stat", "mtime", "size", "require_fresh", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "CACHE_CONTROL_NO_CACHE_REGEXP", "fresh", "reqHeaders", "resHeaders", "modifiedSince", "noneMatch", "cacheControl", "etag", "etagStale", "matches", "parseTokenList", "i", "match", "lastModified", "modifiedStale", "parseHttpDate", "date", "timestamp", "str", "end", "list", "start", "len", "require_types", "__commonJSMin", "exports", "module", "require_mime", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "fs", "Mime", "map", "type", "exts", "i", "file", "content", "lines", "line", "fields", "fallback", "ext", "mimeType", "mime", "require_range_parser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "rangeParser", "size", "str", "options", "index", "arr", "ranges", "i", "range", "start", "end", "combineRanges", "ordered", "mapWithIndex", "sortByRangeStart", "j", "current", "combined", "sortByRangeIndex", "mapWithoutIndex", "a", "b", "require_send", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createError", "debug", "deprecate", "destroy", "encodeUrl", "escapeHtml", "etag", "fresh", "fs", "mime", "ms", "onFinished", "parseRange", "path", "statuses", "Stream", "util", "extname", "join", "normalize", "resolve", "sep", "BYTES_RANGE_REGEXP", "MAX_MAXAGE", "UP_PATH_REGEXP", "send", "req", "options", "SendStream", "opts", "normalizeList", "val", "paths", "index", "maxAge", "status", "err", "hasListeners", "createHttpError", "res", "msg", "doc", "createHtmlDocument", "clearHeaders", "setHeaders", "match", "parseTokenList", "unmodifiedSince", "parseHttpDate", "lastModified", "statusCode", "error", "ifRange", "loc", "collapseLeadingSlashes", "root", "decode", "parts", "containsDotFile", "access", "stat", "len", "ranges", "offset", "headersSent", "bytes", "contentRange", "prop", "i", "self", "next", "p", "stream", "cleanup", "type", "charset", "cacheControl", "modified", "headers", "getHeaderNames", "str", "part", "size", "range", "title", "body", "emitter", "count", "name", "list", "date", "timestamp", "end", "start", "keys", "key", "require_forwarded", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "forwarded", "req", "proxyAddrs", "parse", "socketAddr", "getSocketAddr", "addrs", "header", "end", "list", "start", "require_ipaddr", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "expandIPv6", "ipaddr", "ipv4Part", "ipv4Regexes", "ipv6Part", "ipv6Regexes", "matchCIDR", "root", "zoneIndex", "first", "second", "partSize", "cidrBits", "part", "shift", "address", "rangeList", "defaultName", "k", "len", "rangeName", "rangeSubnets", "subnet", "IPv4", "octets", "octet", "other", "cidrRange", "ref", "cidr", "i", "stop", "zeros", "zerotable", "string", "match", "parseIntAuto", "value", "results", "IPv6", "parts", "zoneId", "l", "bestMatchIndex", "bestMatchLength", "regex", "bytes", "addr", "suffix", "high", "low", "colonCount", "lastColon", "replacement", "replacementCount", "e", "error1", "maskLength", "parsed", "prefix", "filledOctetCount", "j", "error", "ipInterfaceOctets", "subnetMaskOctets", "length", "require_proxy_addr", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "proxyaddr", "alladdrs", "compile", "forwarded", "ipaddr", "DIGIT_REGEXP", "isip", "parseip", "IP_RANGES", "req", "trust", "addrs", "i", "val", "compileTrust", "compileRangeSubnets", "arr", "rangeSubnets", "parseipNotation", "len", "trustNone", "trustSingle", "trustMulti", "note", "pos", "str", "ip", "max", "range", "parseNetmask", "netmask", "kind", "addr", "subnets", "ipconv", "subnet", "subnetip", "subnetkind", "subnetrange", "trusted", "subnetisipv4", "require_utils", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "contentDisposition", "contentType", "deprecate", "flatten", "mime", "etag", "proxyaddr", "qs", "querystring", "createETagGenerator", "path", "type", "acceptParams", "types", "ret", "i", "str", "parts", "pms", "val", "fn", "newObject", "parseExtendedQueryString", "a", "v", "charset", "parsed", "options", "body", "encoding", "buf", "require_application", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "finalhandler", "Router", "methods", "middleware", "query", "debug", "View", "http", "compileETag", "compileQueryParser", "compileTrust", "deprecate", "flatten", "merge", "resolve", "setPrototypeOf", "hasOwnProperty", "slice", "app", "trustProxyDefaultSymbol", "env", "parent", "req", "res", "callback", "router", "done", "logerror", "fn", "offset", "path", "arg", "fns", "next", "orig", "err", "ext", "extension", "name", "i", "setting", "val", "settings", "method", "route", "args", "options", "cache", "engines", "opts", "renderOptions", "view", "dirs", "tryRender", "server", "require_charset", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredCharsets", "simpleCharsetRegExp", "parseAcceptCharset", "accept", "accepts", "i", "j", "charset", "parseCharset", "str", "match", "q", "params", "p", "getCharsetPriority", "accepted", "index", "priority", "spec", "specify", "s", "provided", "isQuality", "compareSpecs", "getFullCharset", "priorities", "type", "a", "b", "require_encoding", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredEncodings", "simpleEncodingRegExp", "parseAcceptEncoding", "accept", "accepts", "hasIdentity", "minQuality", "j", "encoding", "parseEncoding", "specify", "str", "i", "match", "q", "params", "p", "getEncodingPriority", "accepted", "index", "priority", "spec", "s", "provided", "isQuality", "compareSpecs", "getFullEncoding", "priorities", "type", "a", "b", "require_language", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredLanguages", "simpleLanguageRegExp", "parseAcceptLanguage", "accept", "accepts", "i", "j", "language", "parseLanguage", "str", "match", "prefix", "suffix", "full", "q", "params", "p", "getLanguagePriority", "accepted", "index", "priority", "spec", "specify", "s", "provided", "isQuality", "compareSpecs", "getFullLanguage", "priorities", "type", "a", "b", "require_mediaType", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredMediaTypes", "simpleMediaTypeRegExp", "parseAccept", "accept", "accepts", "splitMediaTypes", "i", "j", "mediaType", "parseMediaType", "str", "match", "params", "q", "subtype", "type", "kvps", "splitParameters", "splitKeyValuePair", "pair", "key", "val", "value", "getMediaTypePriority", "accepted", "index", "priority", "spec", "specify", "p", "s", "keys", "k", "provided", "isQuality", "compareSpecs", "getFullType", "priorities", "a", "b", "quoteCount", "string", "count", "parameters", "require_negotiator", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredCharsets", "preferredEncodings", "preferredLanguages", "preferredMediaTypes", "Negotiator", "request", "available", "set", "require_accepts", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Negotiator", "mime", "Accepts", "req", "types_", "types", "i", "mimes", "extToMime", "accepts", "validMime", "first", "encodings_", "encodings", "charsets_", "charsets", "languages_", "languages", "type", "require_request", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "accepts", "deprecate", "isIP", "typeis", "http", "fresh", "parseRange", "parse", "proxyaddr", "req", "name", "lc", "accept", "size", "options", "range", "defaultValue", "params", "body", "query", "args", "types", "arr", "i", "defineGetter", "proto", "trust", "header", "index", "addrs", "hostname", "offset", "subdomains", "host", "method", "res", "status", "val", "obj", "getter", "require_cookie", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "parse", "serialize", "__toString", "cookieNameRegExp", "cookieValueRegExp", "domainValueRegExp", "pathValueRegExp", "str", "opt", "obj", "len", "dec", "decode", "index", "eqIdx", "endIdx", "keyStartIdx", "startIndex", "keyEndIdx", "endIndex", "key", "valStartIdx", "valEndIdx", "val", "tryDecode", "max", "code", "min", "name", "enc", "value", "maxAge", "expires", "isDate", "priority", "sameSite", "require_vary", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "vary", "append", "FIELD_NAME_REGEXP", "header", "field", "fields", "parse", "j", "val", "vals", "i", "fld", "end", "list", "start", "len", "res", "require_response", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "contentDisposition", "createError", "deprecate", "encodeUrl", "escapeHtml", "http", "isAbsolute", "onFinished", "path", "statuses", "merge", "sign", "normalizeType", "normalizeTypes", "setCharset", "cookie", "send", "extname", "mime", "resolve", "vary", "res", "charsetRegExp", "code", "links", "link", "rel", "body", "chunk", "encoding", "req", "type", "app", "etagFn", "generateETag", "len", "etag", "obj", "val", "escape", "replacer", "spaces", "stringify", "callback", "statusCode", "options", "done", "next", "opts", "pathname", "file", "sendfile", "err", "filename", "name", "headers", "keys", "i", "key", "fullPath", "ct", "v", "o", "field", "prev", "value", "charset", "secret", "signed", "maxAge", "url", "loc", "address", "status", "u", "view", "self", "str", "streaming", "onaborted", "ondirectory", "onerror", "onend", "onfile", "onfinish", "onstream", "k", "json", "c", "require_serve_static", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "encodeUrl", "escapeHtml", "parseUrl", "resolve", "send", "url", "serveStatic", "root", "options", "opts", "fallthrough", "redirect", "setHeaders", "onDirectory", "createRedirectDirectoryListener", "createNotFoundDirectoryListener", "req", "res", "next", "forwardError", "originalUrl", "path", "stream", "err", "collapseLeadingSlashes", "str", "i", "createHtmlDocument", "title", "body", "loc", "doc", "require_express", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bodyParser", "EventEmitter", "mixin", "proto", "Route", "Router", "req", "res", "createApplication", "app", "next", "removedMiddlewares", "name", "require_express", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_constants", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "BINARY_TYPES", "hasBlob", "require_node_gyp_build", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fs", "path", "os", "runtimeRequire", "vars", "prebuildsOnly", "abi", "runtime", "isElectron", "isNwjs", "arch", "platform", "libc", "isAlpine", "armv", "uv", "load", "dir", "name", "release", "getFirst", "matchBuild", "debug", "prebuild", "resolve", "nearby", "target", "tuples", "readdirSync", "parseTuple", "tuple", "matchTuple", "compareTuples", "prebuilds", "parsed", "parseTags", "candidates", "matchTags", "winner", "compareTags", "filter", "files", "arr", "architectures", "a", "b", "file", "extension", "tags", "tag", "runtimeAgnostic", "require_node_gyp_build", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "runtimeRequire", "require_fallback", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "mask", "source", "output", "offset", "length", "i", "unmask", "buffer", "require_bufferutil", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_buffer_util", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "EMPTY_BUFFER", "FastBuffer", "concat", "list", "totalLength", "target", "offset", "buf", "_mask", "source", "mask", "output", "length", "i", "_unmask", "buffer", "toArrayBuffer", "toBuffer", "data", "bufferUtil", "require_limiter", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "kDone", "kRun", "Limiter", "concurrency", "job", "require_permessage_deflate", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "zlib", "bufferUtil", "Limiter", "kStatusCode", "FastBuffer", "TRAILER", "kPerMessageDeflate", "kTotalLength", "kCallback", "kBuffers", "kError", "zlibLimiter", "PerMessageDeflate", "options", "isServer", "maxPayload", "concurrency", "params", "configurations", "callback", "offers", "opts", "accepted", "response", "key", "value", "num", "data", "fin", "done", "err", "result", "endpoint", "windowBits", "inflateOnError", "inflateOnData", "deflateOnData", "chunk", "require_fallback", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isValidUTF8", "buf", "len", "i", "require_utf_8_validate", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_validation", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isUtf8", "hasBlob", "tokenChars", "isValidStatusCode", "code", "_isValidUTF8", "buf", "len", "i", "isBlob", "value", "isValidUTF8", "require_receiver", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Writable", "PerMessageDeflate", "BINARY_TYPES", "EMPTY_BUFFER", "kStatusCode", "kWebSocket", "concat", "toArrayBuffer", "unmask", "isValidStatusCode", "isValidUTF8", "FastBuffer", "GET_INFO", "GET_PAYLOAD_LENGTH_16", "GET_PAYLOAD_LENGTH_64", "GET_MASK", "GET_DATA", "INFLATING", "DEFER_EVENT", "Receiver", "options", "chunk", "encoding", "cb", "n", "buf", "dst", "offset", "error", "compressed", "num", "data", "err", "messageLength", "fragments", "code", "ErrorCtor", "message", "prefix", "statusCode", "errorCode", "require_sender", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Duplex", "randomFillSync", "PerMessageDeflate", "EMPTY_BUFFER", "kWebSocket", "NOOP", "isBlob", "isValidStatusCode", "applyMask", "toBuffer", "kByteLength", "maskBuffer", "RANDOM_POOL_SIZE", "randomPool", "randomPoolPointer", "DEFAULT", "DEFLATING", "GET_BLOB_DATA", "Sender", "_Sender", "socket", "extensions", "generateMask", "data", "options", "mask", "merge", "offset", "skipMasking", "dataLength", "payloadLength", "target", "code", "cb", "buf", "length", "byteLength", "readOnly", "perMessageDeflate", "opcode", "rsv1", "opts", "blob", "compress", "arrayBuffer", "err", "callCallbacks", "onError", "_", "params", "list", "sender", "i", "callback", "require_event_target", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "kForOnEventAttribute", "kListener", "kCode", "kData", "kError", "kMessage", "kReason", "kTarget", "kType", "kWasClean", "Event", "type", "CloseEvent", "options", "ErrorEvent", "MessageEvent", "EventTarget", "handler", "listener", "wrapper", "data", "isBinary", "event", "callListener", "code", "message", "error", "thisArg", "require_extension", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tokenChars", "push", "dest", "name", "elem", "parse", "header", "offers", "params", "mustUnescape", "isEscaping", "inQuotes", "extensionName", "paramName", "start", "code", "end", "i", "value", "token", "format", "extensions", "extension", "configurations", "k", "values", "v", "require_websocket", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "EventEmitter", "https", "http", "net", "tls", "randomBytes", "createHash", "Duplex", "Readable", "URL", "PerMessageDeflate", "Receiver", "Sender", "isBlob", "BINARY_TYPES", "EMPTY_BUFFER", "GUID", "kForOnEventAttribute", "kListener", "kStatusCode", "kWebSocket", "NOOP", "addEventListener", "removeEventListener", "format", "parse", "toBuffer", "closeTimeout", "kAborted", "protocolVersions", "readyStates", "subprotocolRegex", "WebSocket", "_WebSocket", "address", "protocols", "options", "initAsClient", "type", "socket", "head", "receiver", "sender", "receiverOnConclude", "receiverOnDrain", "receiverOnError", "receiverOnMessage", "receiverOnPing", "receiverOnPong", "senderOnError", "socketOnClose", "socketOnData", "socketOnEnd", "socketOnError", "code", "data", "abortHandshake", "err", "setCloseTimer", "mask", "cb", "sendAfterClose", "opts", "property", "method", "listener", "handler", "websocket", "parsedUrl", "isSecure", "isIpcUrl", "invalidUrlMessage", "emitErrorAndClose", "defaultPort", "key", "request", "protocolSet", "perMessageDeflate", "tlsConnect", "netConnect", "protocol", "parts", "req", "headers", "value", "isSameHost", "res", "location", "statusCode", "addr", "upgrade", "digest", "serverProt", "protError", "secWebSocketExtensions", "extensions", "extensionNames", "stream", "message", "length", "reason", "resume", "receiverOnFinish", "isBinary", "chunk", "require_stream", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "WebSocket", "Duplex", "emitClose", "stream", "duplexOnEnd", "duplexOnError", "err", "createWebSocketStream", "ws", "options", "terminateOnDestroy", "duplex", "msg", "isBinary", "data", "callback", "called", "chunk", "encoding", "require_subprotocol", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tokenChars", "parse", "header", "protocols", "start", "end", "code", "protocol", "require_websocket_server", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "EventEmitter", "http", "Duplex", "createHash", "extension", "PerMessageDeflate", "subprotocol", "WebSocket", "GUID", "kWebSocket", "keyRegex", "RUNNING", "CLOSING", "CLOSED", "WebSocketServer", "options", "callback", "req", "res", "body", "emitConnection", "addListeners", "socket", "head", "cb", "emitClose", "server", "index", "socketOnError", "key", "upgrade", "version", "abortHandshakeOrEmitwsClientError", "abortHandshake", "secWebSocketProtocol", "protocols", "secWebSocketExtensions", "extensions", "perMessageDeflate", "offers", "info", "verified", "code", "message", "headers", "ws", "protocol", "params", "value", "map", "event", "h", "err", "require_eta", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "ETA", "length", "initTime", "initValue", "time", "value", "total", "remaining", "currentBufferSize", "buffer", "v_diff", "t_diff", "vt_rate", "eta", "require_terminal", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "_readline", "Terminal", "outputStream", "enabled", "x", "y", "dx", "dy", "s", "rawWrite", "require_ansi_regex", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "onlyFirst", "pattern", "require_strip_ansi", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "ansiRegex", "string", "require_is_fullwidth_code_point", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isFullwidthCodePoint", "codePoint", "require_emoji_regex", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_string_width", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "stripAnsi", "isFullwidthCodePoint", "emojiRegex", "stringWidth", "string", "width", "i", "code", "require_format_value", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "v", "options", "type", "autopadding", "value", "length", "require_format_bar", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "progress", "options", "completeSize", "incompleteSize", "require_format_time", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "t", "options", "roundToMultipleOf", "round", "input", "autopadding", "v", "require_formatter", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "_stringWidth", "_defaultFormatValue", "_defaultFormatBar", "_defaultFormatTime", "options", "params", "payload", "s", "formatTime", "formatValue", "formatBar", "percentage", "stopTime", "elapsedTime", "context", "match", "key", "fullMargin", "halfMargin", "require_options", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "mergeOption", "v", "defaultValue", "rawOptions", "preset", "options", "opt", "require_generic_bar", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "_ETA", "_Terminal", "_formatter", "_options", "_EventEmitter", "options", "forceRendering", "params", "s", "total", "startValue", "payload", "arg0", "arg1", "payloadData", "key", "progress", "require_single_bar", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "_GenericBar", "_options", "options", "preset", "current", "payload", "total", "startValue", "require_multi_bar", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "_Terminal", "_BarElement", "_options", "_EventEmitter", "options", "preset", "total", "startValue", "payload", "barOptions", "bar", "index", "i", "s", "require_legacy", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_shades_classic", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_shades_grey", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_rect", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_presets", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "_legacy", "_shades_classic", "_shades_grey", "_rect", "require_cli_progress", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "_SingleBar", "_MultiBar", "_Presets", "_Formatter", "_defaultFormatValue", "_defaultFormatBar", "_defaultFormatTime", "require_emoji_regex", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "index_exports", "__export", "index_default", "__toCommonJS", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "e", "n", "init_sentry_release_injection_stub", "import_core", "import_node", "import_server", "import_mri", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "import_promises", "init_prettier", "init_credentials", "init_figma_publish", "init_dist", "import_picocolors", "import_node_path", "init_exit", "init_track", "init_fetch", "init_version", "init_figma_component", "apiHost", "runFigmaMigrate", "sys", "args", "Ie", "pkgVersion", "privateKey", "spaceId", "getCredentials", "track", "mappingFiles", "findAllMappingFiles", "M", "a", "shouldContinue", "ye", "pD", "xe", "exit", "Y", "links", "getBuilderSpaceFigmaLinks", "l", "getFigmaComponentName", "mappingsDir", "he", "value", "link", "tsSource", "convertFigmaBuilderLinkToMapping", "fileName", "filePath", "Se", "kvReq", "rsp", "safeFetch", "result", "fn", "arg", "body", "src", "serializedImports", "componentImportLine", "prettierFormat", "importName", "importPath", "importType", "path", "init_sentry_release_injection_stub", "init_core", "import_prompts", "import_node_fs", "init_emphasize", "init_dist", "init_prettier", "init_credentials", "import_picocolors", "import_node_path", "init_help", "import_fastest_levenshtein", "init_exit", "init_constants", "init_figma_publish", "init_track", "init_fetch", "init_errors", "init_version", "init_codegen", "init_code", "init_stream", "init_figma_utils", "init_figma_component", "init_utils", "init_spinner", "init_src", "checkIsValidUrl", "url", "runFigmaGenerate", "sys", "args", "userContext", "getUserContext", "interactive", "track", "xe", "exit", "Ie", "pkgVersion", "M", "isMapperFile", "checkProjectRoot", "s", "spinner", "devTools", "createDevTools", "e", "f", "importData", "credentials", "getCredentials", "getImportDataFromToken", "figmaUrls", "printHelp", "needsFigmaAuth", "codegenUsage", "getBuilderCodegenUsage", "links", "getBuilderSpaceFigmaLinks", "getFigmaNodeDataFromURLs", "highlight", "createEmphasize", "grammars", "mappingPath", "filePath", "registry", "mappingFiles", "findAllMappingFiles", "figmaBuilderLinks", "figmaLinksToResolve", "findMappingsFromFiles", "inPlaceResolveFigmaURLs", "selectedComponents", "selectFigmaComponents", "c", "savedFiled", "i", "figmaUrl", "figmaComponentInfo", "index", "registeredCmp", "lastCode", "lastCompletion", "lastFileName", "componentPackages", "pkg", "isNonComponentPackages", "resultComponent", "cmp", "askComponent", "isAngularFramework", "importPath", "askPackageImportPath", "newRegistry", "manualImportPath", "askManualImportPath", "manualComponents", "validateAndLoadManualImport", "selectedComponent", "isAngular", "getFigmaComponentName", "docsUrl", "askDocsUrl", "prompt", "body", "stream", "completionStream", "chunk", "next", "askHowGenerationLooks", "NetworkError", "displayNetworkError", "baseName", "fs", "getMappingPath", "prettierFormat", "setPublicKey", "Se", "builderNpxPackage", "defaultValue", "he", "value", "pD", "askSelectedComponents", "isQuoted", "cleanPath", "packageName", "packagePath", "matchingComponents", "error", "fe", "link", "key", "choices", "packageResult", "prompts", "input", "entryText", "a", "b", "selectedPackageInfo", "startsWithCapital", "str", "componentSubPackages", "sub", "NON_COMPONENT_PACKAGES", "subPackageResult", "d", "components", "componentNameRef", "addExternalPackage", "addManualImport", "bestMatch", "isGoodMatch", "cmpName", "aDistance", "bDistance", "title", "distanceInput", "verbose", "json", "apiAirV2Host", "headers", "res", "safeFetch", "transformStream", "init_figma_publish", "init_credentials", "init_help", "import_picocolors", "init_dist", "init_exit", "init_fs", "init_track", "init_version", "init_sentry_release_injection_stub", "init_figma_component", "init_credentials", "init_figma_utils", "fs", "path", "create_vue_default", "create_angular_default", "create_react_default", "guide_default", "init_dist", "init_version", "import_picocolors", "init_spinner", "init_utils", "extractFigmaIds", "url", "teamMatch", "parsedUrl", "parseFigmaURL", "fileMatch", "fetchTeamComponents", "context", "teamId", "onProgress", "sys", "args", "figmaAuth", "debug", "components", "hasMore", "after", "M", "params", "response", "figmaApi", "cursor", "fetchTeamComponentSets", "componentSets", "component_sets", "processFileOrSelection", "fileKey", "nodeId", "fileResponse", "nodesResponse", "idsMap", "id", "component", "componentSet", "remoteComponents", "remoteComponentSets", "componentSetIds", "standaloneComponents", "componentToSetMap", "_id", "instanceCount", "componentCount", "componentSetCount", "instancedStandaloneComponents", "instancedComponentSets", "setInstancedComponentOrSet", "componentSetId", "traverse", "node", "child", "remoteKeys", "fetchRemoteComponent", "key", "error", "executeWithPool", "tasks", "concurrencyLimit", "results", "pool", "completed", "i", "task", "workerPromise", "fetchRemoteComponentData", "CONCURRENCY_LIMIT", "keys", "total", "resolveComponentData", "fileGroups", "fileComponents", "nodeIds", "c", "nodeData", "componentKeysMap", "compId", "comp", "setId", "set", "rawJson", "processedData", "processRawFigmaJson", "componentKey", "downloadFile", "outputPath", "arrayBuffer", "generateComponentReport", "baseDir", "componentDirName", "sanitizeComponentName", "componentDir", "markdown", "generateThumbnailSection", "generateComponentDataSection", "cleanUrl", "thumbnailFilename", "thumbnailPath", "propsInterface", "getFigmaComponentName", "getFigmaPropsInterface", "jsxSection", "generateComponentSetVariants", "variants", "variant", "index", "variantData", "runFigmaReport", "Ie", "pkgVersion", "getCredentials", "msg", "reportsDir", "shouldMerge", "ye", "pD", "guide_default", "create_vue_default", "create_angular_default", "create_react_default", "s", "spinner", "pages", "resolvedComponents", "emptyComponents", "hiddenComponents", "isEmptyMetadata", "isHiddenComponent", "indexData", "skipped", "componentData", "runFigmaCommand", "sys", "subCommand", "args", "runFigmaMigrate", "runFigmaPublish", "runFigmaGenerate", "runFigmaReport", "Ie", "pkgVersion", "spaceId", "getCredentials", "track", "Se", "printHelp", "init_dist", "init_errors", "init_interface", "init_sentry_release_injection_stub", "getOptions", "cwd", "args", "init_sync_utils", "init_exit", "init_track", "init_help", "init_code", "init_sentry_release_injection_stub", "import_express", "http", "https", "net", "Amplitude", "import_picocolors", "init_credentials", "init_exit", "init_track", "init_sentry_release_injection_stub", "import_node_stream", "import_node_crypto", "init_sentry_release_injection_stub", "import_stream", "import_receiver", "import_sender", "import_websocket", "import_websocket_server", "RPCWebSocketServer", "opts", "listening", "version", "ws", "WebSocketServer", "emitter", "stream", "namespace", "internalMethods", "subscribe", "unsubscribe", "createJSONResponse", "data", "setup", "socket", "req", "ns", "socketId", "handleRPC", "error", "validateRequest", "payload", "socketOpts", "targetNs", "internalMethod", "response", "notify", "name", "socketIds", "params", "sockets", "_", "eventName", "register", "method", "fn", "on", "event", "cb", "emit", "eventSubscriptions", "handleUpgrade", "upgradeHead", "callback", "close", "resolve", "reject", "err", "e", "init_codegen", "init_dist", "init_server", "debugging_rule_default", "init_open", "init_config", "init_sentry_release_injection_stub", "fs", "fsPromises", "path", "init_process_tracker", "init_src", "import_promises", "import_net", "import_undici", "init_backup", "init_git", "init_helpers", "isValidWorkspaceFolder", "folder", "isValidWorkspaceFolderWithRepoInfo", "InitStateMachine", "config", "branchName", "ref", "repoPath", "exec", "args", "cwd", "retry", "runCommand", "timeout", "sys", "credentials", "fusionConfig", "volumePath", "repositories", "isConnectedToProvider", "forcedFullBackup", "mainRepo", "repo", "featureBranch", "currentBranch", "getAndParseGitRepoInfo", "backupResult", "backupGitRepo", "errorMsg", "error", "wrapperError", "getVolumePath", "errorMessage", "hasSpecificStepError", "log", "type", "message", "options", "newLog", "hasFiles", "hasGit", "restoreUserBackup", "tempCloningDir", "removeTempCloningDirIfExists", "currentRemoteUrl", "cleanCurrentUrl", "cleanExpectedUrl", "downloadGitBackup", "tempRepoPath", "success", "result", "lastCommitHash", "branch", "data", "remoteUrl", "repoUrl", "standardHosts", "url", "host", "isSshUrl", "hostname", "port", "sshMatch", "httpsMatch", "addresses", "dns", "dnsError", "directResult", "httpProxy", "connectError", "socket", "net", "resolve", "err", "proxyUrl", "proxyUrlObj", "cleanProxyUrl", "proxyAgent", "targetUrl", "gitPath", "lockFiles", "file", "removedFiles", "lockFile", "lockFilePath", "fileError", "cleanupRestore", "aiBranch", "gitError", "backupError", "isTest", "fetchGitConfigs", "cfg", "f", "e", "initCommand", "shell", "initProc", "safeSpawn", "stdoutChunks", "stderrChunks", "chunk", "reject", "code", "stdout", "stderr", "errorDetails", "possibleBranches", "isTestAndNeedsGitInit", "connectivityResult", "templatePath", "STARTER_REPO", "gitCloneCommand", "EXAMPLE_REPOS", "user", "exclude", "userPath", "userBackupPath", "files", "destination", "init_dev_server_orchestrator", "init_proxy", "init_sentry_release_injection_stub", "hasUpgrade", "middleware", "init_constants", "init_fetch", "init_sentry_release_injection_stub", "Sentry", "Amplitude", "handleSigTerm", "registerSigTerm", "unregisterSigTerm", "init_version", "init_sentry_release_injection_stub", "init_constants", "init_fetch", "init_helpers", "os", "createFusionStatusMonitor", "sys", "credentials", "fusionConfig", "sharedState", "interval", "pingFusionStatus", "url", "apiAirV2Host", "isRemote", "isInRemoteContainer", "machineInfo", "fusionStatus", "headers", "safeFetch", "pingInterval", "init_sentry_release_injection_stub", "import_fs", "import_promises", "init_sentry_release_injection_stub", "init_constants", "init_fetch", "pushMetrics", "sys", "credentials", "body", "url", "apiAirV2Host", "headers", "safeFetch", "error", "init_dist", "init_version", "TEST_WORKING_DIR", "TEST_MARK", "TAGS", "attemptDryRunBackupGit", "initConfig", "realInitState", "result", "_attemptDryRunBackupGit", "M", "pushMetrics", "pkgVersion", "sys", "fusionConfig", "credentials", "getDiagnostics", "initStateMachine", "backupCheck", "a", "mainRepo", "backupMainRepo", "machineId", "InitStateMachine", "success", "diagnostics", "backupMetadata", "error", "init_backup", "init_feature_flags", "init_sentry_release_injection_stub", "fs", "path", "init_process_tracker", "registerLock", "sys", "fusionConfig", "lockFilePath", "conflictBehavior", "projectId", "branchId", "port", "existingLock", "content", "error", "killProcess", "lockData", "lockDir", "cleanupCalled", "cleanup", "DEFAULT_PROXY_PORT", "isPortAvailable", "port", "resolve", "server", "findAvailablePort", "startPort", "maxAttempts", "i", "getPorts", "fusionConfig", "isLocal", "parsedProxyPort", "PROXY_PORT", "httpPort", "fusionServerPort", "M", "checkAvailablePort", "httpsPort", "outputError", "args", "error", "details", "output", "codeGenServerPromise", "runFusionCommand", "sys", "flyIoData", "Ie", "pkgVersion", "getFusionConfig", "trackConfigData", "registerLock", "credentials", "setupCredentials", "startTime", "_state", "sharedState", "s", "setRuntimeStatus", "devServer", "app", "proxyUrl", "httpsServer", "httpsProxyUrl", "customHttpsProxyUrl", "setupServer", "fusionStatusMonitor", "createFusionStatusMonitor", "stopRogueDetection", "detectRogueInstances", "isClosing", "isClosed", "closeRequested", "closeServer", "signal", "closePromises", "r", "codeGenServer", "getCodeGenServer", "message", "unregisterSigTerm", "sentryTags", "initStateMachine", "InitStateMachine", "initSuccess", "attemptDryRunBackupGit", "res", "setupDevServerOrchestrator", "setupTimeout", "setupLaunchServer", "track", "getCredentials", "errorMsg", "xe", "exit", "host", "url", "apiAirV2Host", "safeFetch", "resText", "originalPrivateKey", "storeCredentials", "express", "req", "_res", "next", "validBuilderPrivateKey", "authenticateProxy", "configureServer", "httpServer", "_", "httpsOptions", "customDomain", "serverPromises", "reject", "devServerOrchestrator", "state", "attemptBackup", "force", "forcedFullBackup", "getOrCreateCodeGenServer", "backupResult", "attemptGracefulShutdown", "reason", "stopProcess", "builderApiRouter", "prompt", "userMessage", "pushChanges", "codegen", "interval", "ping", "disconnect", "step", "errorMessage", "_req", "zipPath", "err", "unlinkErr", "folderName", "result", "thresholdInSeconds", "thresholdInMilliseconds", "shutdownInProgress", "inactivityTimer", "wrapperError", "defaultProxyMiddleware", "createProxy", "proxy", "proxyMiddleware", "BUILDER_ENDPOINT_PREFIX", "BUILDER_API_ENDPOINT_PREFIX", "ws", "RPCWebSocketServer", "handleUpgrade", "request", "socket", "head", "pathname", "privateKey", "hasUpgrade", "setupWebSocketServer", "urlHost", "fusionEditorUrl", "openBrowser", "sessionId", "customInstructions", "privacyMode", "_pd", "socketId", "client", "discard", "event", "setFeatureFlags", "exposeToWebSocketRPC", "functionName", "_sessionId", "method", "builderRulesPath", "content", "terminalId", "chunk", "code", "createCodeGenServer", "CodeGenSession", "debugging_rule_default", "DAY", "currentTime", "timeSinceStart", "daysSinceStart", "import_picocolors", "init_version", "init_credentials", "init_sentry_release_injection_stub", "Sentry", "import_picocolors", "init_dist", "init_credentials", "init_constants", "import_crypto", "init_fetch", "init_version", "import_cli_progress", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "init_strip_ansi", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "isAmbiguous", "x", "isFullWidth", "isWide", "validate", "codePoint", "eastAsianWidth", "codePoint", "ambiguousAsWide", "validate", "isFullWidth", "isWide", "isAmbiguous", "import_emoji_regex", "segmenter", "defaultIgnorableCodePointRegex", "stringWidth", "string", "options", "ambiguousIsNarrow", "countAnsiEscapeCodes", "stripAnsi", "width", "eastAsianWidthOptions", "character", "codePoint", "emojiRegex", "eastAsianWidth", "init_strip_ansi", "init_sentry_release_injection_stub", "wrapAnsi16", "offset", "code", "wrapAnsi256", "wrapAnsi16m", "red", "green", "blue", "styles", "modifierNames", "foregroundColorNames", "backgroundColorNames", "colorNames", "assembleStyles", "codes", "groupName", "group", "styleName", "style", "hex", "matches", "colorString", "character", "integer", "remainder", "value", "result", "ansiStyles", "ansi_styles_default", "ESCAPES", "END_CODE", "ANSI_ESCAPE_BELL", "ANSI_CSI", "ANSI_OSC", "ANSI_SGR_TERMINATOR", "ANSI_ESCAPE_LINK", "wrapAnsiCode", "code", "wrapAnsiHyperlink", "url", "wordLengths", "string", "character", "stringWidth", "wrapWord", "rows", "word", "columns", "characters", "isInsideEscape", "isInsideLinkEscape", "visible", "stripAnsi", "index", "characterLength", "stringVisibleTrimSpacesRight", "words", "last", "exec", "options", "returnValue", "escapeCode", "escapeUrl", "lengths", "rowLength", "remainingColumns", "breaksStartingThisLine", "row", "preString", "pre", "preStringIndex", "groups", "ansi_styles_default", "wrapAnsi", "line", "init_repo_indexing_utils", "init_sentry_release_injection_stub", "init_constants", "init_fetch", "getUserSettingsByUserId", "credentials", "url", "apiAirV2Host", "response", "safeFetch", "err", "init_sentry_release_injection_stub", "isAgentDocument", "doc", "isIconDocument", "isTokenDocument", "isComponentDocument", "init_sentry_release_injection_stub", "init_repo_indexing_utils", "init_sentry_release_injection_stub", "REPO_INDEXING_GROUP_PROMPT", "import_crypto", "Sentry", "discoverComponents", "sys", "credentials", "sessionId", "remoteComponents", "opts", "metadata", "designSystemPackage", "designSystemVersion", "workspaceConfig", "debug", "force", "specificComponents", "message", "adjustRepoIndexingPrompt", "REPO_INDEXING_GROUP_PROMPT", "data", "runCodeGen", "discoveredComponents", "components", "discoverComponent", "computeHash", "filteredComponents", "component", "componentsToReindex", "remoteComponent", "rc", "name", "componentsToIndex", "files", "sortedFiles", "fileContents", "file", "content", "normalizedContent", "error", "combinedContent", "crypto", "prompt", "relevantFiles", "relatedComponents", "init_sentry_release_injection_stub", "init_repo_indexing_utils", "init_errors", "import_crypto", "ICON_DISCOVERY_PROMPT", "discoverIcons", "sys", "credentials", "sessionId", "opts", "data", "runCodeGen", "res", "normalizedIcons", "b", "crypto", "processIcons", "iconDiscovery", "icons", "usage", "hash", "body", "ICONS_FILE", "storeComponentDocs", "error", "PrivateError", "init_sentry_release_injection_stub", "init_repo_indexing_utils", "init_errors", "Sentry", "extractTokenGroupName", "fullName", "TOKENS_FILE", "TOKEN_DISCOVERY_PROMPT", "discoverTokens", "sys", "credentials", "sessionId", "remoteTokens", "opts", "debug", "force", "designSystemPackage", "data", "runCodeGen", "t", "res", "groups", "group", "a", "b", "computeHash", "groupsToReindex", "remoteGroup", "rc", "tokenGroupsToIndex", "processTokens", "metadata", "designSystemVersion", "workspaceConfig", "groupNameOnly", "content", "body", "storeComponentDocs", "error", "privateError", "PrivateError", "init_sentry_release_injection_stub", "init_repo_indexing_utils", "init_errors", "init_sentry_release_injection_stub", "COMPONENT_GROUP_MDX_PROMPT", "init_sentry_release_injection_stub", "REPO_INDEXING_AGENT_PROMPT", "init_repo_indexing_utils", "Sentry", "init_constants", "init_fetch", "processComponent", "sys", "credentials", "sessionId", "component", "opts", "metadata", "designSystemPackage", "designSystemVersion", "workspaceConfig", "debug", "kebabName", "message", "COMPONENT_GROUP_MDX_PROMPT", "content", "runCodeGen", "body", "storeComponentDocs", "error", "privateError", "PrivateError", "processAgent", "discoveredComponents", "componentsString", "a", "b", "aRelated", "bRelated", "aHasRelatedToB", "bHasRelatedToA", "c", "ICON_PROMPT", "ICONS_FILE", "TOKENS_PROMPT", "TOKENS_FILE", "agentMessage", "REPO_INDEXING_AGENT_PROMPT", "AGENT_FILE", "deprecateObsoleteComponents", "localComponents", "remoteComponents", "localComponentNames", "obsoleteComponents", "cmp", "deprecateComponents", "componentIds", "url", "apiAirV2Host", "response", "safeFetch", "errorText", "import_path", "init_errors", "init_track", "CONCURRENCY_LIMIT", "WORKER_COMPLETED_MESSAGE", "parseComponentNames", "componentsArg", "name", "displayComponentLibrarySummary", "components", "indexedComponents", "startTime", "failedComponents", "isForce", "designSystemName", "designSystemId", "numIconsIndexed", "tokenGroupsFound", "tokenGroupsToIndex", "tokenGroupsFailed", "durationMs", "durationMinutes", "durationSeconds", "durationFormatted", "numTokenGroupsIndex", "currentDate", "isUpdate", "actionText", "dateLabel", "M", "message", "runRepoIndexing", "sys", "args", "designSystemPackage", "skipDetailedGrouping", "force", "skipHeader", "listIndexedRepos", "Ie", "pkgVersion", "credentials", "getCredentials", "userSettings", "getUserSettingsByUserId", "designSystems", "getAllDesignSystems", "ds", "index", "sessionId", "crypto", "featureCheck", "isFeatureAllowed", "error", "NetworkError", "displayNetworkError", "designSystem", "parseDesignSystem", "designSystemVersion", "designSystemPackageName", "allDesignSystems", "designSystemData", "scope", "options", "selection", "ve", "pD", "selectedScope", "promptForDesignSystemScope", "he", "value", "getDesignSystemByNameAndScope", "proceed", "ye", "getDesignSystemByName", "err", "e", "PrivateError", "s", "Y", "workspaceConfig", "nodeDependencyPath", "path", "cleanedPath", "addDesignSystem", "checkRepoIndexingFolder", "wrapAnsi", "REPO_INDEXING_FOLDER", "shouldContinue", "metadata", "track", "storedComponentDocs", "getStoredComponentDocs", "iconDoc", "doc", "isIconDocument", "tokenDocs", "isTokenDocument", "remoteComponents", "isComponentDocument", "specificComponentNames", "shouldSkipIconsAndTokens", "componentDiscoveryResults", "iconDiscoveryResults", "tokenDiscoveryResults", "discoverComponents", "discoverIcons", "discoverTokens", "numComponentsFound", "componentsToIndex", "discoveredComponents", "discoveredTokenGroups", "hasNewIcons", "hasNewDesignTokens", "agentDoc", "isAgentDocument", "docCount", "shouldOverwrite", "indexedTasksCount", "multibar", "cliProgress", "totalBar", "workerStatus", "i", "updateWorkerStatus", "taskName", "workerPool", "tasks", "concurrency", "failedToIndex", "failedTokens", "taskQueue", "worker", "task", "processTokens", "processComponent", "workers", "_", "frame", "frames", "workerSpinners", "hasNewComponents", "component", "rc", "_agentResult", "iconsUpdated", "componentResult", "processAgent", "updateDesignSystem", "processIcons", "componentsToCheck", "ICONS_FILE", "deprecateObsoleteComponents", "debug", "url", "apiAirV2Host", "response", "safeFetch", "errorText", "result", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "init_credentials", "import_picocolors", "init_dist", "init_errors", "runAuthStatus", "sys", "args", "builderPublicKey", "userId", "spaceName", "readCredentials", "M", "e", "id", "PrivateError", "init_credentials", "init_dist", "import_picocolors", "init_version", "init_track", "runAuthCommand", "sys", "subCommand", "args", "runAuthStatus", "Ie", "pkgVersion", "clearCredentials", "M", "track", "Se", "figmaAuth", "ve", "pD", "spaceId", "getCredentials", "init_sentry_release_injection_stub", "init_dist", "import_picocolors", "init_version", "init_spinner", "init_credentials", "init_fetch", "init_constants", "init_open", "init_sentry_release_injection_stub", "import_child_process", "import_util", "import_path", "execAsync", "detectGitInfo", "sys", "cwd", "gitRoot", "stdout", "relPath", "recommendedRoot", "originUrl", "parsedInfo", "parseGitUrl", "url", "repoProtocol", "repoProvider", "repoFullName", "repoOwner", "repoName", "isPrivate", "cleanUrl", "match", "parts", "projectName", "formatGitInfo", "info", "lines", "import_child_process", "import_util", "init_sentry_release_injection_stub", "import_child_process", "import_util", "execAsync", "detectPackageVersions", "versions", "stdout", "match", "packagesToSetupDependencies", "dependencies", "formatPackageVersions", "parts", "init_sentry_release_injection_stub", "init_dist", "import_dotenv", "import_path", "import_fs", "SYSTEM_ENV_VARS", "EXCLUDE_PATTERNS", "shouldExcludeVar", "key", "pattern", "ENV_CATEGORIES", "SECRET_PATTERNS", "DEFAULT_SELECTED", "loadDotEnvFiles", "sys", "gitRoot", "dotEnvFiles", "envVars", "fileName", "filePath", "result", "dotenvConfig", "filterAndCategorizeEnvVars", "dotEnvVars", "vars", "value", "category", "catName", "patterns", "isSecret", "dotEnvKeys", "shouldPreselect", "a", "b", "selectEnvironmentVariables", "categorized", "grouped", "envVar", "options", "displayValue", "initialValues", "v", "preselectedCount", "totalCount", "dotEnvCount", "message", "selected", "fe", "opt", "pD", "selectedKeys", "formatEnvSummary", "secrets", "public_", "init_sentry_release_injection_stub", "import_path", "import_os", "init_dist", "collectConfigFiles", "sys", "gitRoot", "collected", "projectNpmrcPath", "content", "userNpmrcPath", "etcHostsPath", "selectFileOverrides", "collected", "availableFiles", "options", "file", "initialValues", "f", "selected", "fe", "pD", "selectedKeys", "result", "init_sentry_release_injection_stub", "import_child_process", "init_dist", "import_picocolors", "runInstallCommand", "cwd", "initialCommand", "attempt", "command", "M", "commandInput", "he", "value", "pD", "result", "executeCommand", "retry", "ve", "continueAnyway", "resolve", "parts", "cmd", "args", "child", "error", "code", "exitCode", "execAsync", "normalizeRepoUrl", "url", "normalized", "runRepoConnectCommand", "sys", "args", "Ie", "pkgVersion", "M", "gitInfo", "detectGitInfo", "gitLines", "formatGitInfo", "Me", "projectNameInput", "he", "value", "pD", "xe", "projectName", "installResult", "runInstallCommand", "envVars", "selectEnvironmentVariables", "envSummary", "formatEnvSummary", "configFiles", "collectConfigFiles", "fileOverrides", "selectFileOverrides", "s2", "spinner", "packageVersions", "detectPackageVersions", "setupDependencies", "packagesToSetupDependencies", "formatPackageVersions", "createFusionProject", "error", "installCommand", "environmentVariables", "summaryLines", "s", "credentials", "getCredentials", "confirmAction", "ve", "mainBranchName", "stdout", "normalizedUrl", "projectData", "branchName", "branchData", "requestPayload", "apiAirV2Host", "Se", "response", "safeFetch", "errorText", "errorMessage", "errorJson", "result", "projectUrl", "shouldOpen", "ye", "openBrowser", "setupDevTools", "sys", "args", "Ie", "pkgVersion", "devTools", "enable", "registerSigTerm", "main", "mri", "Sentry", "initTracking", "scope", "builderPublicKey", "getCredentials", "printHelp", "exit", "rootCommand", "subCommand", "runFigmaCommand", "error", "NetworkError", "displayNetworkError", "xe", "runRepoIndexing", "runCodeCommand", "runFusionCommand", "opts", "getOptions", "addCommand", "initialSyncInfo", "syncCommand", "setupSyncServer", "M", "runAuthCommand", "runRepoConnectCommand", "index_default"]
}
